UNPKG

@beqa/unplugin-transform-react-slots

Version:

JSX to slot function transpilation plugin for some of the common build systems

118 lines (112 loc) 4.27 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/webpack.ts var webpack_exports = {}; __export(webpack_exports, { default: () => webpack_default }); module.exports = __toCommonJS(webpack_exports); // src/index.ts var import_unplugin = require("unplugin"); var import_pluginutils = require("@rollup/pluginutils"); // src/core/options.ts var defaultInclude = /\.(js)|(jsx)|(cjs)|(cjsx)|(mjs)|(mjsx)|(tsx)|(ctsx)|(mtsx)/; function resolveOption(options = {}) { const include = options.include ?? defaultInclude; let exclude = [/node_modules/]; if (options.exclude) { exclude = exclude.concat(options.exclude); } return { include, exclude }; } // src/index.ts var import_core = require("@babel/core"); var import_babel_plugin_transform_react_slots = __toESM(require("@beqa/babel-plugin-transform-react-slots")); var import_plugin_syntax_typescript = __toESM(require("@babel/plugin-syntax-typescript")); var isDisabledRegex = /^(?:\s*(?:\/\/[^\n\r]*|\/\*(?:.|[\n\r])*?\*\/))*\s*\/\/\s*@disable-transform-react-slots\W/; function appendTestComment(code, isDisabled) { if (isDisabled) { code += "/* slot transformation skipped by unplugin-transform-react-slots */"; } else { code += "/* slot transformation done by unplugin-transform-react-slots */"; } return code; } var src_default = (0, import_unplugin.createUnplugin)((rawOptions) => { const options = resolveOption(rawOptions); const filter = (0, import_pluginutils.createFilter)(options.include, options.exclude); return { name: "unplugin-transform-react-slots", enforce: "pre", transformInclude(id) { return filter(id); }, async transform(code, id) { if (id.endsWith(".ts")) { return appendTestComment(code, true); } if (isDisabledRegex.test(code)) { return appendTestComment(code, true); } if (!(code.includes("@beqa/react-slots") && code.includes("useSlot"))) { return appendTestComment(code, true); } const transformed = await (0, import_core.transformAsync)(code, { plugins: [ id.endsWith(".tsx") ? [import_plugin_syntax_typescript.default, { isTSX: true }] : "", import_babel_plugin_transform_react_slots.default ].filter(Boolean), filename: id }); if (!transformed) { throw new Error( "unplugin-transform-react-slots failed to transform file: " + id ); } return transformed.code && appendTestComment(transformed.code, false); }, esbuild: { onLoadFilter: !!options.include && !Array.isArray(options.include) ? options.include : defaultInclude, loader(code, id) { if (id.endsWith("tsx")) { return "tsx"; } if (id.endsWith("ts")) { return "ts"; } return "jsx"; } } }; }); // src/webpack.ts var webpack_default = src_default.webpack;