UNPKG

siphon-cli

Version:

Simple bundler for web applications. 📦🔧🧡

182 lines (181 loc) • 8.18 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); var fs_1 = require("fs"); var path_1 = require("path"); var __1 = require(".."); var types_1 = require("../../../../types"); var utils_1 = require("../../../../utils"); var creator_1 = require("../traverser/helpers/creator"); var utils_2 = require("./utils"); var ezra = utils_2.bundler_utils.prototype; ezra.createJSAsset = function (filename) { var _a; var _this = this; var content = (0, fs_1.readFileSync)(filename, "utf-8"); var ast = __1.default.parse(content, { sourceFile: filename, parseJSX: this.options.allowJSX, }); var dependencies = []; __1.default.traverse(ast, { Identifier: function (node) { if (!_this.globalIdentifierMap.has(node.name)) _this.globalIdentifierMap.set(node.name, true); }, JSXElement: function () { if (!_this.hasJSX) _this.hasJSX = true; }, }); var ezraModule = this.ModuleIdentifierNode(filename.toString()); var fullSourceExports = []; var redefinitions = []; var moduleImports = new Map(); var moduleExports = new Map(); __1.default.traverse(ast, { ImportDeclaration: function (node) { var dependencyPath = _this.getDependencyPath(node, filename); var imported = _this.ModuleIdentifierNode(dependencyPath); var dependency = { id: imported.name, path: dependencyPath, extension: (0, path_1.extname)(dependencyPath), }; var assignDec = new types_1.VariableDeclaration(node.loc.start); assignDec.kind = "const"; var assignDeclarator = new types_1.VariableDeclarator(0); var placeholder = _this.uniqueIdentifier("module"); var importedInit = (0, creator_1.callExpression)(imported, []); assignDeclarator.id = placeholder; assignDeclarator.init = importedInit; assignDec.declarations.push(assignDeclarator); var declaration2 = new types_1.VariableDeclaration(0); declaration2.kind = "const"; if (node.specifiers.length === 0) { if (utils_1.JSFiles[(0, path_1.extname)(dependencyPath).slice(1)] === true) __1.default.parse((0, fs_1.readFileSync)(dependencyPath, "utf-8"), { sourceFile: dependencyPath, parseJSX: _this.options.allowJSX, }).body.forEach(function (child) { child.loc.start = node.loc.start; fullSourceExports.push(child); }); else dependencies.push(dependency); return new types_1.EmptyNode(0); } else for (var _i = 0, _a = node.specifiers; _i < _a.length; _i++) { var specifier = _a[_i]; var declarator = new types_1.VariableDeclarator(0); declarator.id = (0, creator_1.newIdentifier)(specifier.local.name); if (specifier instanceof types_1.ImportDefaultSpecifier) { declarator.init = (0, creator_1.memberExpression)(placeholder, (0, creator_1.newIdentifier)("default")); } else if (specifier instanceof types_1.ImportSpecifier) { declarator.init = (0, creator_1.memberExpression)(placeholder, (0, creator_1.newIdentifier)(specifier.imported.name)); } else if (specifier instanceof types_1.ImportNamespaceSpecifier) { declarator.init = placeholder; } declaration2.declarations.push(declarator); } redefinitions.push(assignDec); dependencies.push(dependency); return declaration2; }, ExportNamedDeclaration: function (node, path) { if (node.declaration) { if (node.declaration instanceof types_1.FunctionDeclaration || node.declaration instanceof types_1.ClassDeclaration) { moduleExports.set(node.declaration.id, node.declaration.id); } else if (node.declaration instanceof types_1.VariableDeclaration) { node.declaration.declarations.forEach(function (declaration) { moduleExports.set(declaration.id, declaration.id); }); } return node.declaration; } else if (node.specifiers) { for (var _i = 0, _a = node.specifiers; _i < _a.length; _i++) { var specifier = _a[_i]; moduleExports.set(specifier.local, specifier.exported); } return new types_1.EmptyNode(0); } }, ExportDefaultDeclaration: function (node, path) { moduleExports.set(node.declaration, (0, creator_1.newIdentifier)("default")); return new types_1.EmptyNode(0); }, ThisExpression: function (node, path) { if (path.scope.level === 0) return (0, creator_1.newIdentifier)("globalThis"); }, }); (_a = ast.body).splice.apply(_a, __spreadArray([0, 0], redefinitions .concat(fullSourceExports) .sort(function (a, b) { return a.loc.start - b.loc.start; }), false)); moduleExports.forEach(function (value, key) { ast.push((0, creator_1.expressionStatement)((0, creator_1.assignmentExpression)((0, creator_1.memberExpression)(ezraModule, (0, creator_1.newIdentifier)(value.name)), "=", key))); }); return { id: ezraModule.name, dependencies: dependencies, filename: filename, module: this.prepareModule(ast, (0, creator_1.newIdentifier)(ezraModule.name)), }; }; ezra.createCSSAsset = function (filename) { var ezraModule = this.ModuleIdentifierNode(filename.toString()); this.stylesheets.push(filename); return { dependencies: [], filename: filename, id: ezraModule.name, module: this.prepareModule(new types_1.Program(0), ezraModule), }; }; ezra.createImageAsset = function (filename) { var ezraModule = this.ModuleIdentifierNode(filename.toString()); var address = this.generateNewImage(filename); if (this.options.storeImagesSeparately) address = "./img/".concat(address); else address = "./".concat(address); var defaultExport = "".concat(ezraModule.name, ".default = \"").concat(address, "\""); return { id: ezraModule.name, filename: filename, module: this.prepareModule(__1.default.parse(defaultExport), ezraModule), dependencies: [], }; }; ezra.createUnknownAsset = function (filename) { filename = filename.toString(); var ezraModule = this.ModuleIdentifierNode(filename); var defaultExport; if ((0, path_1.extname)(filename) === ".json") { defaultExport = "".concat(ezraModule.name, ".default = ").concat((0, fs_1.readFileSync)(filename, "utf-8")); } else { defaultExport = "".concat(ezraModule.name, ".default = \"").concat((0, utils_1.stringifytoBase64)(filename), "\""); } return { id: ezraModule.name, filename: filename, dependencies: [], module: this.prepareModule(__1.default.parse(defaultExport), ezraModule), }; };