UNPKG

fixclosure

Version:

JavaScript dependency checker/fixer for Closure Library based on ECMAScript AST

81 lines (80 loc) 2.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFixedSource = exports.fixInPlace = void 0; const fs_1 = __importDefault(require("fs")); const util_1 = require("util"); function fixInPlace(file, src, info) { const fixedSrc = getFixedSource(src, info); return (0, util_1.promisify)(fs_1.default.writeFile)(file, fixedSrc, "utf8"); } exports.fixInPlace = fixInPlace; function getFixedSource(src, info) { const buf = []; let bodyStarted = false; if (info.provideEnd === 0) { writeDeclarationHeader(buf, info); buf.push(src); } else { src.split("\n").forEach((line, index) => { const lineNum = index + 1; if (lineNum < info.provideStart) { buf.push(line); } else if (lineNum === info.provideStart) { writeDeclarationHeader(buf, info); } else if (lineNum <= info.provideEnd) { // skip } else if (bodyStarted || line) { bodyStarted = true; buf.push(line); } }); } return buf.join("\n"); } exports.getFixedSource = getFixedSource; function writeDeclarationHeader(buf, info) { const provides = getProvideSrc(info); const requires = getRequireSrc(info); const requireTypes = getRequireTypeSrc(info); const forwardDeclares = getForwardDeclareSrc(info); if (provides.length > 0) { buf.push(...provides); buf.push(""); } if (requires.length > 0) { buf.push(...requires); buf.push(""); } if (requireTypes.length > 0) { buf.push(...requireTypes); buf.push(""); } if (forwardDeclares.length > 0) { buf.push(...forwardDeclares); buf.push(""); } } function getProvideSrc(info) { return getDeclarationSrc(info.toProvide, info.ignoredProvide, "goog.provide"); } function getRequireSrc(info) { return getDeclarationSrc(info.toRequire, info.ignoredRequire, "goog.require"); } function getRequireTypeSrc(info) { return getDeclarationSrc(info.toRequireType, info.ignoredRequireType, "goog.requireType"); } function getForwardDeclareSrc(info) { return getDeclarationSrc(info.toForwardDeclare, info.ignoredForwardDeclare, "goog.forwardDeclare"); } function getDeclarationSrc(to, ignored, method) { const declarations = to.map((namespace) => `${method}('${namespace}');`); const ignores = ignored.map((namespace) => `${method}('${namespace}'); // fixclosure: ignore`); return declarations.concat(ignores).sort(); }