rollup-plugin-monkey
Version:
rollup plugin for GM_Script
224 lines (204 loc) • 6.9 kB
JavaScript
/* eslint-disable */
;
Object.defineProperty(exports, '__esModule', { value: true });
var fastify = require('fastify');
var fastifyCors = require('@fastify/cors');
var fp = require('fastify-plugin');
var staticPlugin = require('@fastify/static');
var path = require('path');
var wsPlugin = require('@fastify/websocket');
var url = require('url');
var node_module = require('node:module');
var fs = require('fs');
var chokidar = require('chokidar');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var fastify__default = /*#__PURE__*/_interopDefaultLegacy(fastify);
var fastifyCors__default = /*#__PURE__*/_interopDefaultLegacy(fastifyCors);
var fp__default = /*#__PURE__*/_interopDefaultLegacy(fp);
var staticPlugin__default = /*#__PURE__*/_interopDefaultLegacy(staticPlugin);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var wsPlugin__default = /*#__PURE__*/_interopDefaultLegacy(wsPlugin);
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
var chokidar__default = /*#__PURE__*/_interopDefaultLegacy(chokidar);
const serverDefaults = Object.freeze({
ignoreTrailingSlash: true,
disableRequestLogging: true
});
const pluginServer = Object.freeze({
logger: {
transport: {
target: '#pinoPretty',
// target: "pino-pretty",
options: {
colorize: true,
},
}
}
});
const defConfig = {
cors: {
origin: '*',
methods: ['GET']
},
static: {
basePath: undefined,
dirs: [''],
},
listen: {
host: 'localhost',
port: 3000,
},
server: {
...pluginServer,
...serverDefaults
},
watch: {
},
livereload: true,
force: false,
extend: undefined,
onListen: undefined
};
var fastifyStatic = fp__default["default"](async (server, { basePath, dirs }) => {
const prefix = basePath;
const root = dirs.map(dir => path.resolve(dir));
server.register(staticPlugin__default["default"], { prefix, root });
});
const onRefresh = (server, filepath) => {
const { websocketServer } = server;
const data = JSON.stringify({
command: 'reload',
path: filepath,
});
websocketServer.clients.forEach(socket => {
socket.send(data);
});
};
var fastifyWS = fp__default["default"](async (server) => {
await server.register(wsPlugin__default["default"]);
server.get('/livereload', { websocket: true }, (connection, req) => {
server.log.info('「livereload」 connection');
connection.socket.on('message', message => {
const request = JSON.parse(message.toString());
server.log.info(`「livereload」 ${request.command}`);
if (request.command === 'hello') {
const data = JSON.stringify({
command: 'hello',
protocols: ['http://livereload.com/protocols/official-7', 'http://livereload.com/protocols/official-8', 'http://livereload.com/protocols/official-9', 'http://livereload.com/protocols/2.x-origin-version-negotiation', 'http://livereload.com/protocols/2.x-remote-control'],
serverName: 'node-livereload'
});
connection.socket.send(data);
}
});
});
});
const __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index.cjs', document.baseURI).href)));
const __dirname$1 = path__default["default"].dirname(__filename$1);
const require$1 = node_module.createRequire((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index.cjs', document.baseURI).href)));
const monkeyPath = {
base: path__default["default"].resolve(__dirname$1, '../'),
liveJS: require$1.resolve('livereload-js'),
devJS: require$1.resolve('#dev'),
};
class Server {
async init(config = defConfig) {
this.config = config;
this.server = fastify__default["default"](config.server);
if (config.livereload) {
this.server.register(fastifyWS);
this.livereload();
}
this.server.register(fastifyStatic, config.static);
this.server.register(fastifyCors__default["default"], config.cors);
await this.server.ready();
return this
}
start() {
this.server.listen({
host: this.config.listen.host,
port: this.config.listen.port,
}, (err, address) => {
if (err) {
this.server.log.error(err);
// process.exit(1)
}
});
if (this.config.onListen) {
this.config.onListen(this);
}
}
livereload() {
this.server.get('/livereload.js', function (req, reply) {
// console.log(monkeyPath.liveJS)
// reply.type('text/javascript').sendFile('livereload.js', monkeyPath.livePath)
fs__default["default"].readFile(monkeyPath.liveJS, (err, fileBuffer) => {
reply.type('text/javascript').send(err || fileBuffer);
});
});
}
}
const defaultExclusions = [/\.git\//, /\.svn\//, /\.hg\//, /node_modules\//];
function watcher (config, act = () => { }) {
config.exclusions = config.exclusions || [];
config.exclusions = config.exclusions.concat(defaultExclusions);
config.dirs = config.dirs || '';
let paths;
if (Array.isArray(config.dirs)) {
paths = config.dirs.map(item => path.resolve(process.cwd(), item));
} else {
paths = path.resolve(process.cwd(), config.dirs);
}
return chokidar__default["default"].watch(paths, {
ignoreInitial: true,
usePolling: false,
ignored: config.exclusions,
}).on('all', (event, path) => {
if (event === 'add' || event === 'change' || event === 'unlink') {
act(event, path);
}
})
}
var main = (opts = {}) => {
let booted = false;
return {
name: 'dev-monkey',
async writeBundle() {
if (booted) return
booted = true;
try {
const config = Object.assign({}, defConfig, opts);
if (!this.meta.watchMode) {
if (!config.force) return
else this.warn('Starting dev-monkey even though we\'re not in watch mode');
}
const web = new Server();
await web.init(config);
web.start();
if (config.livereload) {
watcher(config.watch, (event, path) => {
web.server.log.info(`${event} ${path}`);
onRefresh(web.server, path);
});
}
} catch (err) {
this.error(err);
}
}
}
};
const monkeyRequire = (arrOpts) => {
const entryList = [];
const apiList = [];
arrOpts.forEach((s) => {
entryList.push(s.url);
apiList.push(s.func);
});
return {
gm_entry: JSON.stringify(entryList),
gm_api: JSON.stringify(apiList),
gm_require: arrOpts.map((s) => `// @require ${s.url}`).join('\n'),
}
};
exports["default"] = main;
exports.monkeyPath = monkeyPath;
exports.monkeyRequire = monkeyRequire;