UNPKG

@carlosv2/glue

Version:

Dependency injection library that stays out of the way

42 lines (41 loc) 1.8 kB
"use strict"; 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;