@carlosv2/glue
Version:
Dependency injection library that stays out of the way
42 lines (41 loc) • 1.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Compilable = void 0;
const typescript_1 = __importDefault(require("typescript"));
const utils_1 = require("./utils");
const error_1 = require("./error");
const { factory, SyntaxKind } = typescript_1.default;
class Compilable {
compileArg(importer, value) {
if ((0, utils_1.isString)(value)) {
return factory.createStringLiteral(value);
}
if ((0, utils_1.isNumber)(value)) {
let compiled = factory.createNumericLiteral(Math.abs(value));
if (value < 0) {
compiled = factory.createPrefixUnaryExpression(SyntaxKind.MinusToken, compiled);
}
return compiled;
}
if ((0, utils_1.isBoolean)(value)) {
return value ? factory.createTrue() : factory.createFalse();
}
if ((0, utils_1.isUndefined)(value)) {
return factory.createIdentifier('undefined');
}
if ((0, utils_1.isArray)(value)) {
return factory.createArrayLiteralExpression(value.map(item => this.compileArg(importer, item)));
}
if (value instanceof Compilable) {
return value.compile(importer);
}
if ((0, utils_1.isDictionary)(value)) {
return factory.createObjectLiteralExpression(Object.entries(value).map(([key, item]) => factory.createPropertyAssignment(factory.createIdentifier(key), this.compileArg(importer, item))));
}
throw new error_1.DiError(`Requested to compile unknown data type \`${JSON.stringify(value)}\``);
}
}
exports.Compilable = Compilable;