UNPKG

sucrase

Version:

Super-fast alternative to Babel for when you can target modern JS runtimes

79 lines (74 loc) 2.54 kB
"use strict"; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }Object.defineProperty(exports, "__esModule", {value: true}); const HELPERS = { interopRequireWildcard: ` function interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } `, interopRequireDefault: ` function interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } `, createNamedExportFrom: ` function createNamedExportFrom(obj, localName, importedName) { Object.defineProperty(exports, localName, {enumerable: true, get: () => obj[importedName]}); } `, // Note that TypeScript and Babel do this differently; TypeScript does a simple existence // check in the exports object and does a plain assignment, whereas Babel uses // defineProperty and builds an object of explicitly-exported names so that star exports can // always take lower precedence. For now, we do the easier TypeScript thing. createStarExport: ` function createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, get: () => obj[key]}); }); } `, }; class HelperManager { __init() {this.helperNames = {}} constructor( nameManager) {;this.nameManager = nameManager;HelperManager.prototype.__init.call(this);} getHelperName(baseName) { let helperName = this.helperNames[baseName]; if (helperName) { return helperName; } helperName = this.nameManager.claimFreeName(`_${baseName}`); this.helperNames[baseName] = helperName; return helperName; } emitHelpers() { let resultCode = ""; for (const [baseName, helperCode] of Object.entries(HELPERS)) { const helperName = this.helperNames[baseName]; if (helperName) { resultCode += " "; resultCode += helperCode .replace(baseName, helperName) .replace(/\s+/g, " ") .trim(); } } return resultCode; } } exports.HelperManager = HelperManager;