kt-extendscript-builder
Version:
Vite based builder for transpile TypeScript to ExtendScript
110 lines (109 loc) • 4.09 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createRollupConfig = createRollupConfig;
const PonifillCollector_1 = require("../utils/PonifillCollector");
const rollup_1 = require("rollup");
const plugin_node_resolve_1 = __importDefault(require("@rollup/plugin-node-resolve"));
const plugin_babel_1 = __importDefault(require("@rollup/plugin-babel"));
const vite_cep_plugin_1 = require("vite-cep-plugin");
const plugin_json_1 = __importDefault(require("@rollup/plugin-json"));
const plugin_terser_1 = __importDefault(require("@rollup/plugin-terser"));
const rollupRemoveExports_1 = require("../plugins/rollupRemoveExports");
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
function createRollupConfig(options = {}) {
const input = options.input;
const output = options.output;
const extensions = ['.js', '.ts', '.tsx'];
const ponyfillCollector = new PonifillCollector_1.PonyfillCollector();
const ponyfills = ponyfillCollector.collect(options.ponyfills);
const GLOBAL_THIS = 'thisObj';
console.log(`Configuring Rollup for ExtendScript: ${input} -> ${output}`);
const conditionalPlugins = [];
if (options.uglify) {
conditionalPlugins.push((0, plugin_terser_1.default)({
compress: {
conditionals: false,
drop_console: options.mode === 'production'
},
output: { comments: false }
}));
}
const config = {
input: input,
treeshake: true,
output: {
file: output,
// format: 'cjs'
},
plugins: [
(0, plugin_json_1.default)(),
(0, plugin_node_resolve_1.default)({
extensions,
preferBuiltins: false
}),
(0, plugin_babel_1.default)({
extensions,
minified: options.minify,
babelrc: false,
babelHelpers: 'bundled',
presets: [
[
'@babel/preset-env',
{
targets: {
esmodules: 'commonjs',
ie: '9'
}
}
],
'@babel/preset-typescript'
],
plugins: [
'@babel/plugin-proposal-class-properties',
'@babel/plugin-syntax-dynamic-import',
['@babel/plugin-transform-classes', { loose: true }]
]
}),
(0, vite_cep_plugin_1.jsxPonyfill)(ponyfills),
(0, vite_cep_plugin_1.jsxInclude)({
iife: true,
globalThis: GLOBAL_THIS
}),
(0, rollupRemoveExports_1.rollupRemoveExports)(),
...conditionalPlugins
]
};
async function build() {
try {
// Ensure output directory exists
const outputDir = path_1.default.dirname(output);
if (!fs_1.default.existsSync(outputDir)) {
fs_1.default.mkdirSync(outputDir, { recursive: true });
}
const bundle = await (0, rollup_1.rollup)(config);
await bundle.write(config.output);
await bundle.close();
console.log(`ExtendScript build completed: ${output}`);
}
catch (error) {
console.error('Error in ExtendScript build:', error);
// Instead of throwing the error, we just log it in tests
if (process.env.NODE_ENV !== 'test') {
throw error;
}
}
}
function watchRollup() {
const watcher = (0, rollup_1.watch)(config);
return watcher;
}
return {
build,
watch: watchRollup,
config
};
}