4chan-x/tools/rollup-plugin-inline-file.js
Tuxedo Takodachi 567a1fe45e Squash and cleanup of the following:
- cca085e60090ca21edf0dee6aa012fc4c949809a
  start of import/export

- f816da146c32f010476872d15b58ec8301b9fdf2
  start of changing stuff until I can get a bundle

- c92adde147792356ff206107b2311590e8b2c054
  first bundle without errors

- e652dd2b785e355e0ac33566da7eaaaa19c7c539
  Bundling works with ts files

- 60fdb2539a757ca2f66258b21adf81246873893f
  meta info in compilation

- 8ccae783cbf65ac186d5669dedd9f945f7608694
  new build doesn't cause errors on page load as userscript

- 6fa11c42a05572779870f94b7ef4ea8dac373450
  work in progress: load userscript in browser and fix bugs

- b15c557d483de544a38a28cb78f25139d1d8421f
  migrated yotsuba templates to plain js

  the old templates caused some variable be in a wrong scope after
decaffeinate, causing them to be unreadable from the old template

  the old templates caused some variable be in a wrong scope after
decaffeinate, causing them to be unreadable from the old template

- 9d763e852fde74808ca14d5a8d6be45f51ae2765
  update readme

- 924eda8268bcfc4f1c0a83062ecd1d0d65bd92aa
  added more imports, and now the circular dependencies are haunting me

- ddd2d23315d801c7deaa28313833e667698aadd3
  jsx templates for escaped strings,
  more bug fixed from circular dependencies

- fee484dd447820d908c77b1e9d31235ab95a481c
  some fixes, clarify jsx

- e1d01d02eba5db2f604a5df786c525e95f32a2f9
  Unpacked extension
  more fixes

- 97d9090b712d20f7d851c82af84c65060f1a9c6e
  fixed class on post that caused catalog to appear empty

- 96a2c7b4a1e69f5812d1e53b2e4c90f6d8447b02
  A child class that's not supposed to run the parents constructor? That needs a workaround in es6 classes.

- fc06b4e1b2769550d4c69377b84d3ccacdb2e013
  changed jsx to make the tests pass

- 7b317b2a0feabe8caa547c76baf0c908b21592f1
  revert archive and banners to json
2023-03-15 21:01:03 +01:00

53 lines
1.5 KiB
JavaScript

import { createFilter } from "@rollup/pluginutils";
import { dirname } from "path";
import { fileURLToPath } from "url";
const __dirname = dirname(fileURLToPath(import.meta.url));
export default async function setupFileInliner(packageJson) {
/** @param {string} string */
const escape = (string) => string.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\\${');
/**
* @param {{
* include: import("@rollup/pluginutils").FilterPattern,
* exclude?: import("@rollup/pluginutils").FilterPattern,
* transformer?: (input: string) => string
* wrap?: boolean
* }} opts
* @returns {import("rollup").Plugin}
*/
return function inlineFile(opts) {
if (!opts.include) {
throw Error("include option should be specified");
}
if (opts.transformer && typeof opts.transformer !== 'function') {
throw new Error('If transformer is given, it must be a function');
}
const wrap = 'wrap' in opts ? opts.wrap : true;
const filter = createFilter(opts.include, opts.exclude);
return {
name: "inlineFile",
async transform(code, id) {
if (filter(id)) {
if (opts.transformer) {
code = opts.transformer(code);
}
if (!wrap) return code;
code = escape(code);
code = code.replace(/<%= meta\.(\w+) %>/g, (match, $1) => {
return escape(packageJson.meta[$1]);
});
return `export default \`${code}\`;`;
}
}
};
};
}