Implement JQHTML function cache ID system and fix bundle compilation Implement underscore prefix for system tables Fix JS syntax linter to support decorators and grant exception to Task system SPA: Update planning docs and wishlists with remaining features SPA: Document Navigation API abandonment and future enhancements Implement SPA browser integration with History API (Phase 1) Convert contacts view page to SPA action Convert clients pages to SPA actions and document conversion procedure SPA: Merge GET parameters and update documentation Implement SPA route URL generation in JavaScript and PHP Implement SPA bootstrap controller architecture Add SPA routing manual page (rsx:man spa) Add SPA routing documentation to CLAUDE.md Phase 4 Complete: Client-side SPA routing implementation Update get_routes() consumers for unified route structure Complete SPA Phase 3: PHP-side route type detection and is_spa flag Restore unified routes structure and Manifest_Query class Refactor route indexing and add SPA infrastructure Phase 3 Complete: SPA route registration in manifest Implement SPA Phase 2: Extract router code and test decorators Rename Jqhtml_Component to Component and complete SPA foundation setup 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
128 lines
4.6 KiB
JavaScript
128 lines
4.6 KiB
JavaScript
/*
|
|
@license
|
|
Rollup.js v4.53.3
|
|
Wed, 19 Nov 2025 06:31:27 GMT - commit 998b5950a6ea7cea1a7b994e8dab45472c3cbe7e
|
|
|
|
https://github.com/rollup/rollup
|
|
|
|
Released under the MIT License.
|
|
*/
|
|
'use strict';
|
|
|
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
|
const rollup = require('./shared/rollup.js');
|
|
const parseAst_js = require('./shared/parseAst.js');
|
|
const fseventsImporter = require('./shared/fsevents-importer.js');
|
|
require('node:process');
|
|
require('node:path');
|
|
require('path');
|
|
require('./native.js');
|
|
require('node:perf_hooks');
|
|
require('node:fs/promises');
|
|
|
|
class WatchEmitter {
|
|
constructor() {
|
|
this.currentHandlers = Object.create(null);
|
|
this.persistentHandlers = Object.create(null);
|
|
}
|
|
// Will be overwritten by Rollup
|
|
async close() { }
|
|
emit(event, ...parameters) {
|
|
return Promise.all([...this.getCurrentHandlers(event), ...this.getPersistentHandlers(event)].map(handler => handler(...parameters)));
|
|
}
|
|
off(event, listener) {
|
|
const listeners = this.persistentHandlers[event];
|
|
if (listeners) {
|
|
// A hack stolen from "mitt": ">>> 0" does not change numbers >= 0, but -1
|
|
// (which would remove the last array element if used unchanged) is turned
|
|
// into max_int, which is outside the array and does not change anything.
|
|
listeners.splice(listeners.indexOf(listener) >>> 0, 1);
|
|
}
|
|
return this;
|
|
}
|
|
on(event, listener) {
|
|
this.getPersistentHandlers(event).push(listener);
|
|
return this;
|
|
}
|
|
onCurrentRun(event, listener) {
|
|
this.getCurrentHandlers(event).push(listener);
|
|
return this;
|
|
}
|
|
once(event, listener) {
|
|
const selfRemovingListener = (...parameters) => {
|
|
this.off(event, selfRemovingListener);
|
|
return listener(...parameters);
|
|
};
|
|
this.on(event, selfRemovingListener);
|
|
return this;
|
|
}
|
|
removeAllListeners() {
|
|
this.removeListenersForCurrentRun();
|
|
this.persistentHandlers = Object.create(null);
|
|
return this;
|
|
}
|
|
removeListenersForCurrentRun() {
|
|
this.currentHandlers = Object.create(null);
|
|
return this;
|
|
}
|
|
getCurrentHandlers(event) {
|
|
return this.currentHandlers[event] || (this.currentHandlers[event] = []);
|
|
}
|
|
getPersistentHandlers(event) {
|
|
return this.persistentHandlers[event] || (this.persistentHandlers[event] = []);
|
|
}
|
|
}
|
|
|
|
function watch(configs) {
|
|
const emitter = new WatchEmitter();
|
|
watchInternal(configs, emitter).catch(error => {
|
|
rollup.handleError(error);
|
|
});
|
|
return emitter;
|
|
}
|
|
function ensureTrailingSlash(path) {
|
|
if (path[path.length - 1] !== '/') {
|
|
return `${path}/`;
|
|
}
|
|
return path;
|
|
}
|
|
function checkWatchConfig(config) {
|
|
for (const item of config) {
|
|
if (typeof item.watch !== 'boolean' && item.watch?.allowInputInsideOutputPath) {
|
|
break;
|
|
}
|
|
if (item.input && item.output) {
|
|
const input = typeof item.input === 'string' ? rollup.ensureArray(item.input) : item.input;
|
|
const outputs = rollup.ensureArray(item.output);
|
|
for (const index in input) {
|
|
const inputPath = input[index];
|
|
if (typeof inputPath !== 'string') {
|
|
continue;
|
|
}
|
|
const outputWithInputAsSubPath = outputs.find(({ dir }) => dir && ensureTrailingSlash(inputPath).startsWith(ensureTrailingSlash(dir)));
|
|
if (outputWithInputAsSubPath) {
|
|
parseAst_js.error(parseAst_js.logInvalidOption('watch', parseAst_js.URL_WATCH, `the input "${inputPath}" is a subpath of the output "${outputWithInputAsSubPath.dir}"`));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
async function watchInternal(configs, emitter) {
|
|
const optionsList = await Promise.all(rollup.ensureArray(configs).map(config => rollup.mergeOptions(config, true)));
|
|
const watchOptionsList = optionsList.filter(config => config.watch !== false);
|
|
if (watchOptionsList.length === 0) {
|
|
return parseAst_js.error(parseAst_js.logInvalidOption('watch', parseAst_js.URL_WATCH, 'there must be at least one config where "watch" is not set to "false"'));
|
|
}
|
|
checkWatchConfig(watchOptionsList);
|
|
await fseventsImporter.loadFsEvents();
|
|
const { Watcher } = await Promise.resolve().then(() => require('./shared/watch.js'));
|
|
new Watcher(watchOptionsList, emitter);
|
|
}
|
|
|
|
exports.VERSION = rollup.version;
|
|
exports.defineConfig = rollup.defineConfig;
|
|
exports.rollup = rollup.rollup;
|
|
exports.watch = watch;
|
|
//# sourceMappingURL=rollup.js.map
|