covenant-bridge 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend.js +42 -38
- package/dist/backend.js.map +1 -1
- package/package.json +6 -6
package/dist/backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/.pnpm/@linuxcnc-node+core@2.1.3/node_modules/@linuxcnc-node/core/dist/constants.js","../../node_modules/.pnpm/dlv@1.1.3/node_modules/dlv/index.js","../../node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js","../../node_modules/.pnpm/@linuxcnc-node+core@2.1.3/node_modules/@linuxcnc-node/core/dist/statChannel.js","../../node_modules/.pnpm/@linuxcnc-node+types@2.1.1/node_modules/@linuxcnc-node/types/src/constants.ts","../../node_modules/.pnpm/@linuxcnc-node+types@2.1.1/node_modules/@linuxcnc-node/types/src/core.ts","../../node_modules/.pnpm/@linuxcnc-node+types@2.1.1/node_modules/@linuxcnc-node/types/src/gcode.ts","../../node_modules/.pnpm/@linuxcnc-node+types@2.1.1/node_modules/@linuxcnc-node/types/src/index.ts","../../node_modules/.pnpm/@linuxcnc-node+core@2.1.3/node_modules/@linuxcnc-node/core/dist/commandChannel.js","../../node_modules/.pnpm/@linuxcnc-node+core@2.1.3/node_modules/@linuxcnc-node/core/dist/errorChannel.js","../../node_modules/.pnpm/@linuxcnc-node+core@2.1.3/node_modules/@linuxcnc-node/core/dist/positionLogger.js","../../node_modules/.pnpm/@linuxcnc-node+core@2.1.3/node_modules/@linuxcnc-node/core/dist/index.js","../../node_modules/.pnpm/@linuxcnc-node+gcode@2.1.3/node_modules/@linuxcnc-node/gcode/src/ts/parser.ts","../../node_modules/.pnpm/@linuxcnc-node+gcode@2.1.3/node_modules/@linuxcnc-node/gcode/src/ts/index.ts","../../node_modules/.pnpm/@linuxcnc-node+hal@2.1.3/node_modules/@linuxcnc-node/hal/dist/constants.js","../../node_modules/.pnpm/@linuxcnc-node+hal@2.1.3/node_modules/@linuxcnc-node/hal/dist/item.js","../../node_modules/.pnpm/@linuxcnc-node+hal@2.1.3/node_modules/@linuxcnc-node/hal/dist/component.js","../../node_modules/.pnpm/@linuxcnc-node+hal@2.1.3/node_modules/@linuxcnc-node/hal/dist/functions.js","../../node_modules/.pnpm/@linuxcnc-node+hal@2.1.3/node_modules/@linuxcnc-node/hal/dist/index.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/constants.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/utils.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/scan.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/parse.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/picomatch.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/index.js","../src/services/linuxcnc.ts","../src/services/gcode.ts","../src/services/hal.ts","../src/services/position-logger.ts","../src/backend.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addon = void 0;\n// Native addon - loaded immediately on module import\nfunction loadAddon() {\n const paths = [\n \"../build/Release/nml_addon.node\",\n \"../../build/Release/nml_addon.node\", // Fallback for debug builds\n ];\n for (const path of paths) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require(path);\n }\n catch {\n // Try next path\n }\n }\n throw new Error(\"Failed to load linuxcnc-node nml native addon. Please ensure it's built correctly and that LinuxCNC is in your PATH.\");\n}\nexports.addon = loadAddon();\n","export default function dlv(obj, key, def, p, undef) {\n\tkey = key.split ? key.split('.') : key;\n\tfor (p = 0; p < key.length; p++) {\n\t\tobj = obj ? obj[key[p]] : undef;\n\t}\n\treturn obj === undef ? def : obj;\n}\n","function dset(obj, keys, val) {\n\tkeys.split && (keys=keys.split('.'));\n\tvar i=0, l=keys.length, t=obj, x, k;\n\twhile (i < l) {\n\t\tk = ''+keys[i++];\n\t\tif (k === '__proto__' || k === 'constructor' || k === 'prototype') break;\n\t\tt = t[k] = (i === l) ? val : (typeof(x=t[k])===typeof(keys)) ? x : (keys[i]*0 !== 0 || !!~(''+keys[i]).indexOf('.')) ? {} : [];\n\t}\n}\n\nexports.dset = dset;","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StatChannel = exports.DEFAULT_STAT_POLL_INTERVAL = void 0;\nconst node_events_1 = require(\"node:events\");\nconst constants_1 = require(\"./constants\");\nconst dlv_1 = __importDefault(require(\"dlv\"));\nconst dset_1 = require(\"dset\");\nexports.DEFAULT_STAT_POLL_INTERVAL = 50; // ms\nclass StatChannel extends node_events_1.EventEmitter {\n constructor(options) {\n super();\n this.poller = null;\n this.isPolling = false;\n this.cursor = 0;\n this.currentStat = null;\n this.watchedProperties = new Map();\n this.nativeInstance = new constants_1.addon.NativeStatChannel();\n this.pollInterval = options?.pollInterval ?? exports.DEFAULT_STAT_POLL_INTERVAL;\n // Initial full sync to populate currentStat\n this.currentStat = {};\n const initialResult = this.nativeInstance.poll(true); // force=true gets all fields\n for (const change of initialResult.changes) {\n (0, dset_1.dset)(this.currentStat, change.path, change.value);\n }\n this.cursor = initialResult.cursor;\n this.startPolling();\n }\n startPolling() {\n if (this.poller || !this.nativeInstance)\n return;\n this.poller = setInterval(() => this.performPoll(), this.pollInterval);\n }\n stopPolling() {\n if (this.poller) {\n clearInterval(this.poller);\n this.poller = null;\n }\n }\n performPoll() {\n if (this.isPolling)\n return; // Prevent re-entrancy\n this.isPolling = true;\n try {\n const result = this.nativeInstance.poll();\n this.cursor = result.cursor;\n if (result.changes.length > 0 && this.currentStat) {\n // Apply deltas incrementally to local state (no full stat fetch)\n for (const change of result.changes) {\n (0, dset_1.dset)(this.currentStat, change.path, change.value);\n }\n // Emit raw deltas for listeners who want the batch\n this.emit(\"delta\", result.changes);\n // Notify individual property watchers via EventEmitter\n // Only check properties that actually changed (from C++)\n for (const change of result.changes) {\n const path = change.path;\n const watched = this.watchedProperties.get(path);\n if (watched) {\n const oldValue = watched.lastValue;\n const newValue = change.value;\n // Update lastValue\n watched.lastValue =\n typeof newValue === \"object\" && newValue !== null\n ? JSON.parse(JSON.stringify(newValue))\n : newValue;\n // Emit to listeners\n const listeners = this.rawListeners(path);\n for (const listener of listeners) {\n try {\n listener(newValue, oldValue, path);\n }\n catch (e) {\n console.error(`Error in StatChannel watch callback for ${path}:`, e);\n }\n }\n }\n }\n }\n }\n catch (e) {\n console.error(\"Error during StatChannel poll:\", e);\n }\n finally {\n this.isPolling = false;\n }\n }\n /**\n * Ensures that a property path is being tracked for changes.\n * This initializes the lastValue for comparing changes.\n */\n ensureWatched(propertyPath) {\n if (!this.watchedProperties.has(propertyPath)) {\n const initialValue = this.currentStat\n ? (0, dlv_1.default)(this.currentStat, propertyPath)\n : null;\n this.watchedProperties.set(propertyPath, {\n lastValue: typeof initialValue === \"object\" && initialValue !== null\n ? JSON.parse(JSON.stringify(initialValue))\n : initialValue,\n });\n }\n }\n on(event, listener) {\n if (event === \"delta\") {\n return super.on(event, listener);\n }\n this.ensureWatched(event);\n return super.on(event, listener);\n }\n /**\n * Registers a one-time listener for changes to a specific property path.\n * The listener will be removed after it fires once.\n * @param propertyPath A dot-separated path to the property.\n * @param listener The function to call when the property's value changes.\n * @returns this (for chaining)\n */\n once(propertyPath, listener) {\n this.ensureWatched(propertyPath);\n return super.once(propertyPath, listener);\n }\n off(event, listener) {\n if (event === \"delta\") {\n return super.off(event, listener);\n }\n const result = super.off(event, listener);\n // Clean up the watched property if no more listeners\n if (this.listenerCount(event) === 0) {\n this.watchedProperties.delete(event);\n }\n return result;\n }\n /**\n * Removes a listener for a specific property path.\n * Alias for off().\n * @param propertyPath The property path.\n * @param listener The listener function to remove.\n * @returns this (for chaining)\n */\n removeListener(propertyPath, listener) {\n return this.off(propertyPath, listener);\n }\n /**\n * Sets the polling interval for status updates.\n * @param interval The new interval in milliseconds.\n */\n setPollInterval(interval) {\n this.pollInterval = Math.max(10, interval); // Ensure a minimum interval\n this.stopPolling();\n this.startPolling();\n }\n /**\n * Gets the current polling interval.\n * @returns The interval in milliseconds.\n */\n getPollInterval() {\n return this.pollInterval;\n }\n /**\n * Retrieves the most recent full status object.\n * @returns The current LinuxCNCStat object, or null if not yet available.\n */\n get() {\n return this.currentStat;\n }\n /**\n * Forces a full resync of the stat object from native.\n * Use this if cursor gaps are detected or for initial sync scenarios.\n */\n sync() {\n this.currentStat = {};\n const result = this.nativeInstance.poll(true); // force=true gets all fields\n for (const change of result.changes) {\n (0, dset_1.dset)(this.currentStat, change.path, change.value);\n }\n this.cursor = result.cursor;\n // Update all watched property lastValues\n this.watchedProperties.forEach((watched, path) => {\n watched.lastValue = this.currentStat\n ? (0, dlv_1.default)(this.currentStat, path)\n : null;\n });\n }\n /**\n * Gets the current cursor value for sync verification.\n * The cursor increments each time the native layer detects changes.\n * @returns The current cursor value.\n */\n getCursor() {\n return this.cursor;\n }\n /**\n * Cleans up resources, stopping the polling timer.\n */\n destroy() {\n this.stopPolling();\n this.watchedProperties.clear();\n this.removeAllListeners();\n // Properly disconnect from the native NML channel\n if (this.nativeInstance) {\n this.nativeInstance.disconnect();\n }\n }\n // --- Convenience Getters for common properties ---\n // These access the locally cached `this.currentStat`\n get task() {\n return this.currentStat?.task;\n }\n get motion() {\n return this.currentStat?.motion;\n }\n get io() {\n return this.currentStat?.io;\n }\n get toolTable() {\n return this.currentStat?.toolTable;\n }\n}\nexports.StatChannel = StatChannel;\n",null,null,null,null,"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CommandChannel = void 0;\nconst constants_1 = require(\"./constants\");\nconst types_1 = require(\"@linuxcnc-node/types\");\nclass CommandChannel {\n constructor() {\n this.nativeInstance = new constants_1.addon.NativeCommandChannel();\n }\n async exec(cmdFunc, ...args) {\n try {\n const status = await cmdFunc.apply(this.nativeInstance, args);\n if (status !== types_1.RcsStatus.DONE && status !== types_1.RcsStatus.EXEC) {\n // EXEC can be ok for some commands that take time\n // Consider if specific commands expect EXEC or only DONE\n // For now, any non-DONE/non-EXEC is potentially an issue to warn about or handle\n throw new Error(`Command failed with RCS status: ${types_1.RcsStatus[status] || status}`);\n }\n return status;\n }\n catch (e) {\n // Native NAPI methods reject promises for async errors\n throw new Error(`Command native execution failed: ${e.message || e}`);\n }\n }\n // --- Task Commands ---\n /**\n * Sets the task execution mode for LinuxCNC\n *\n * @param mode - The task mode to set (MDI, MANUAL, or AUTO)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Switch to MDI mode for manual data input\n * await commandChannel.setTaskMode(TaskMode.MDI);\n *\n * // Switch to manual mode for jogging\n * await commandChannel.setTaskMode(TaskMode.MANUAL);\n *\n * // Switch to auto mode for program execution\n * await commandChannel.setTaskMode(TaskMode.AUTO);\n * ```\n */\n async setTaskMode(mode) {\n return this.exec(this.nativeInstance.setTaskMode, mode);\n }\n /**\n * Sets the task state for LinuxCNC\n *\n * @param state - The task state to set (ESTOP, ESTOP_RESET, OFF, or ON)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable E-stop\n * await commandChannel.setState(TaskState.ESTOP);\n *\n * // Reset E-stop\n * await commandChannel.setState(TaskState.ESTOP_RESET);\n *\n * // Turn machine on\n * await commandChannel.setState(TaskState.ON);\n * ```\n */\n async setState(state) {\n return this.exec(this.nativeInstance.setState, state);\n }\n /**\n * On completion of this call, the VAR file on disk is updated with live values from the interpreter.\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n */\n async taskPlanSynch() {\n return this.exec(this.nativeInstance.taskPlanSynch);\n }\n /**\n * Resets the G-code interpreter\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n */\n async resetInterpreter() {\n return this.exec(this.nativeInstance.resetInterpreter);\n }\n /**\n * Opens a G-code program file for execution\n *\n * @param filePath - Absolute path to the G-code file to open\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Open a G-code program\n * await commandChannel.programOpen('/home/user/programs/part.ngc');\n * ```\n */\n async programOpen(filePath) {\n return this.exec(this.nativeInstance.programOpen, filePath);\n }\n /**\n * Runs the currently loaded G-code program\n *\n * @param startLine - Line number to start execution from (default: 0 for beginning)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Run program from the beginning\n * await commandChannel.runProgram();\n *\n * // Run program starting from line 100\n * await commandChannel.runProgram(100);\n * ```\n */\n async runProgram(startLine = 0) {\n return this.exec(this.nativeInstance.runProgram, startLine);\n }\n /**\n * Pauses the currently running G-code program\n * Program can be resumed with resumeProgram()\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Pause the running program\n * await commandChannel.pauseProgram();\n * ```\n */\n async pauseProgram() {\n return this.exec(this.nativeInstance.pauseProgram);\n }\n /**\n * Resumes a paused G-code program\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Resume the paused program\n * await commandChannel.resumeProgram();\n * ```\n */\n async resumeProgram() {\n return this.exec(this.nativeInstance.resumeProgram);\n }\n /**\n * Executes a single step of the G-code program\n * Advances program execution by one line/block\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Step through program one line at a time\n * await commandChannel.stepProgram();\n * ```\n */\n async stepProgram() {\n return this.exec(this.nativeInstance.stepProgram);\n }\n /**\n * Reverses program execution direction\n * Used for backing up through a program\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n */\n async reverseProgram() {\n return this.exec(this.nativeInstance.reverseProgram);\n }\n /**\n * Sets program execution direction to forward\n * Used after reversing to resume normal forward execution\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n */\n async forwardProgram() {\n return this.exec(this.nativeInstance.forwardProgram);\n }\n /**\n * Aborts the currently running task/program\n * Immediately stops all motion and task execution\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Emergency stop of current program\n * await commandChannel.abortTask();\n * ```\n */\n async abortTask() {\n return this.exec(this.nativeInstance.abortTask);\n }\n /**\n * Enables or disables optional stop (M1) functionality\n * When enabled, M1 codes in programs will pause execution\n *\n * @param enable - true to enable optional stops, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable optional stops\n * await commandChannel.setOptionalStop(true);\n *\n * // Disable optional stops\n * await commandChannel.setOptionalStop(false);\n * ```\n */\n async setOptionalStop(enable) {\n return this.exec(this.nativeInstance.setOptionalStop, enable);\n }\n /**\n * Enables or disables block delete functionality\n * When enabled, lines beginning with \"/\" are skipped during execution\n *\n * @param enable - true to enable block delete, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable block delete - skip lines starting with \"/\"\n * await commandChannel.setBlockDelete(true);\n *\n * // Disable block delete - execute all lines\n * await commandChannel.setBlockDelete(false);\n * ```\n */\n async setBlockDelete(enable) {\n return this.exec(this.nativeInstance.setBlockDelete, enable);\n }\n /**\n * Executes a Manual Data Input (MDI) command\n * Allows direct execution of G-code commands without a program file\n *\n * @param command - G-code command string to execute\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Move to position\n * await commandChannel.mdi('G0 X10 Y20 Z5');\n *\n * // Set spindle speed\n * await commandChannel.mdi('S1000 M3');\n * ```\n */\n async mdi(command) {\n return this.exec(this.nativeInstance.mdi, command);\n }\n // --- Trajectory Commands ---\n /**\n * Sets the trajectory mode for coordinated motion\n *\n * @param mode - The trajectory mode (FREE, COORD, or TELEOP)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set to coordinated mode for normal G-code execution\n * await commandChannel.setTrajMode(TrajMode.COORD);\n *\n * // Set to free mode for individual joint control\n * await commandChannel.setTrajMode(TrajMode.FREE);\n * ```\n */\n async setTrajMode(mode) {\n return this.exec(this.nativeInstance.setTrajMode, mode);\n }\n /**\n * Sets the maximum velocity for trajectory planning\n *\n * @param velocity - Maximum velocity in machine units per second\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set maximum velocity to 200 units/second\n * await commandChannel.setMaxVelocity(200);\n * ```\n */\n async setMaxVelocity(velocity) {\n return this.exec(this.nativeInstance.setMaxVelocity, velocity);\n }\n /**\n * Sets the feedrate override scale factor\n *\n * @param scale - Feedrate scale factor (1.0 = 100%, 0.5 = 50%, 2.0 = 200%)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set feedrate to 50% of programmed values\n * await commandChannel.setFeedRate(0.5);\n *\n * // Set feedrate to 120% of programmed values\n * await commandChannel.setFeedRate(1.2);\n * ```\n */\n async setFeedRate(scale) {\n return this.exec(this.nativeInstance.setFeedRate, scale);\n }\n /**\n * Sets the rapid traverse override scale factor\n *\n * @param scale - Rapid rate scale factor (1.0 = 100%, 0.25 = 25%)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set rapid rate to 50%\n * await commandChannel.setRapidRate(0.5);\n * ```\n */\n async setRapidRate(scale) {\n return this.exec(this.nativeInstance.setRapidRate, scale);\n }\n /**\n * Sets the spindle speed override scale factor\n *\n * @param scale - Spindle override scale factor (1.0 = 100%)\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set spindle speed to 80% of programmed values\n * await commandChannel.setSpindleOverride(0.8);\n *\n * // Set spindle 1 speed to 110%\n * await commandChannel.setSpindleOverride(1.1, 1);\n * ```\n */\n async setSpindleOverride(scale, spindleIndex = 0) {\n return this.exec(this.nativeInstance.setSpindleOverride, scale, spindleIndex);\n }\n /**\n * Overrides axis limits to allow motion beyond normal soft limits\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Override limits for recovery from limit switch activation\n * await commandChannel.overrideLimits();\n * ```\n */\n async overrideLimits() {\n return this.exec(this.nativeInstance.overrideLimits);\n }\n /**\n * Enables or disables teleop mode\n *\n * @param enable - true to enable teleop mode, false for joint mode\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable teleop mode for Cartesian jogging\n * await commandChannel.teleopEnable(true);\n *\n * // Disable teleop mode for joint jogging\n * await commandChannel.teleopEnable(false);\n * ```\n */\n async teleopEnable(enable) {\n return this.exec(this.nativeInstance.teleopEnable, enable);\n }\n /**\n * Enables or disables feedrate override functionality\n *\n * @param enable - true to enable feedrate override, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable feedrate override control\n * await commandChannel.setFeedOverrideEnable(true);\n * ```\n */\n async setFeedOverrideEnable(enable) {\n return this.exec(this.nativeInstance.setFeedOverrideEnable, enable);\n }\n /**\n * Enables or disables spindle speed override functionality\n *\n * @param enable - true to enable spindle override, false to disable\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable spindle override control\n * await commandChannel.setSpindleOverrideEnable(true);\n * ```\n */\n async setSpindleOverrideEnable(enable, spindleIndex = 0) {\n return this.exec(this.nativeInstance.setSpindleOverrideEnable, enable, spindleIndex);\n }\n /**\n * Enables or disables feed hold functionality\n * When enabled, allows pausing motion without stopping the program\n *\n * @param enable - true to enable feed hold, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable feed hold capability\n * await commandChannel.setFeedHoldEnable(true);\n * ```\n */\n async setFeedHoldEnable(enable) {\n return this.exec(this.nativeInstance.setFeedHoldEnable, enable);\n }\n /**\n * Enables or disables adaptive feed functionality\n * Allows external signals to modulate feedrate in real-time\n *\n * @param enable - true to enable adaptive feed, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable adaptive feed for force-sensitive machining\n * await commandChannel.setAdaptiveFeedEnable(true);\n * ```\n */\n async setAdaptiveFeedEnable(enable) {\n return this.exec(this.nativeInstance.setAdaptiveFeedEnable, enable);\n }\n // --- Joint Commands ---\n /**\n * Homes a specific joint by moving it to its home position\n *\n * @param jointIndex - Zero-based index of the joint to home, -1 to home all joints\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Home joint 0 (typically X-axis)\n * await commandChannel.homeJoint(0);\n *\n * // Home joint 2 (typically Z-axis)\n * await commandChannel.homeJoint(2);\n *\n * // Home all joints\n * await commandChannel.homeJoint(-1);\n * ```\n */\n async homeJoint(jointIndex) {\n return this.exec(this.nativeInstance.homeJoint, jointIndex);\n }\n /**\n * Unhomes a specific joint, clearing its homed status\n *\n * @param jointIndex - Zero-based index of the joint to unhome, -1 to unhome all joints\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Unhome joint 1 (typically Y-axis)\n * await commandChannel.unhomeJoint(1);\n *\n * // Unhome all joints\n * await commandChannel.unhomeJoint(-1);\n * ```\n */\n async unhomeJoint(jointIndex) {\n return this.exec(this.nativeInstance.unhomeJoint, jointIndex);\n }\n /**\n * Stops jogging motion for a specific axis or joint\n *\n * @param axisOrJointIndex - Index of the axis (0=X,1=Y,2=Z...) or joint to stop\n * @param isJointJog - true for joint jogging, false for axis jogging\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Stop axis X jogging\n * await commandChannel.jogStop(0, false);\n *\n * // Stop joint 1 jogging\n * await commandChannel.jogStop(1, true);\n * ```\n */\n async jogStop(axisOrJointIndex, isJointJog) {\n return this.exec(this.nativeInstance.jogStop, axisOrJointIndex, isJointJog);\n }\n /**\n * Starts continuous jogging motion for a specific axis or joint\n *\n * @param axisOrJointIndex - Index of the axis (0=X,1=Y,2=Z...) or joint to jog\n * @param isJointJog - true for joint jogging, false for axis jogging\n * @param speed - Jogging speed in machine units per second\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Jog X axis continuously at 10 units/sec\n * await commandChannel.jogContinuous(0, false, 10);\n *\n * // Jog joint 2 continuously at -5 units/sec (negative direction)\n * await commandChannel.jogContinuous(2, true, -5);\n * ```\n */\n async jogContinuous(axisOrJointIndex, isJointJog, speed) {\n return this.exec(this.nativeInstance.jogContinuous, axisOrJointIndex, isJointJog, speed);\n }\n /**\n * Jogs a specific distance at a given speed for an axis or joint\n *\n * @param axisOrJointIndex - Index of the axis (0=X,1=Y,2=Z...) or joint to jog\n * @param isJointJog - true for joint jogging, false for axis jogging\n * @param speed - Jogging speed in machine units per second\n * @param increment - Distance to jog in machine units\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Jog Y axis 1.0 unit at 5 units/sec\n * await commandChannel.jogIncrement(1, false, 5, 1.0);\n *\n * // Jog joint 0 back 0.1 units at 2 units/sec\n * await commandChannel.jogIncrement(0, true, 2, -0.1);\n * ```\n */\n async jogIncrement(axisOrJointIndex, isJointJog, speed, increment) {\n return this.exec(this.nativeInstance.jogIncrement, axisOrJointIndex, isJointJog, speed, increment);\n }\n /**\n * Sets the minimum position limit for a joint\n *\n * @param jointIndex - Zero-based index of the joint\n * @param limit - Minimum position limit in machine units\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set minimum limit for joint 0 to -100 units\n * await commandChannel.setMinPositionLimit(0, -100);\n * ```\n */\n async setMinPositionLimit(jointIndex, limit) {\n return this.exec(this.nativeInstance.setMinPositionLimit, jointIndex, limit);\n }\n /**\n * Sets the maximum position limit for a joint\n *\n * @param jointIndex - Zero-based index of the joint\n * @param limit - Maximum position limit in machine units\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set maximum limit for joint 0 to 200 units\n * await commandChannel.setMaxPositionLimit(0, 200);\n * ```\n */\n async setMaxPositionLimit(jointIndex, limit) {\n return this.exec(this.nativeInstance.setMaxPositionLimit, jointIndex, limit);\n }\n // --- Spindle Commands ---\n /**\n * Turns on the spindle at a specified speed\n *\n * @param speed - Spindle speed in RPM (positive = clockwise, negative = counterclockwise)\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @param waitForSpeed - Whether to wait for spindle to reach speed before continuing (default: true)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Turn on spindle at 1000 RPM clockwise\n * await commandChannel.spindleOn(1000);\n *\n * // Turn on spindle 1 at 500 RPM counterclockwise\n * await commandChannel.spindleOn(-500, 1);\n *\n * // Start spindle without waiting for speed\n * await commandChannel.spindleOn(800, 0, false);\n * ```\n */\n async spindleOn(speed, spindleIndex = 0, waitForSpeed = true) {\n return this.exec(this.nativeInstance.spindleOn, speed, spindleIndex, waitForSpeed);\n }\n /**\n * Increases spindle speed by a predefined increment\n * Spindle must already be running\n *\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Increase speed of main spindle\n * await commandChannel.spindleIncrease();\n *\n * // Increase speed of spindle 1\n * await commandChannel.spindleIncrease(1);\n * ```\n */\n async spindleIncrease(spindleIndex = 0) {\n return this.exec(this.nativeInstance.spindleIncrease, spindleIndex);\n }\n /**\n * Decreases spindle speed by a predefined increment\n * Spindle must already be running\n *\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Decrease speed of main spindle\n * await commandChannel.spindleDecrease();\n *\n * // Decrease speed of spindle 1\n * await commandChannel.spindleDecrease(1);\n * ```\n */\n async spindleDecrease(spindleIndex = 0) {\n return this.exec(this.nativeInstance.spindleDecrease, spindleIndex);\n }\n /**\n * Turns off the spindle\n *\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Turn off main spindle\n * await commandChannel.spindleOff();\n *\n * // Turn off spindle 1\n * await commandChannel.spindleOff(1);\n * ```\n */\n async spindleOff(spindleIndex = 0) {\n return this.exec(this.nativeInstance.spindleOff, spindleIndex);\n }\n /**\n * Engages or releases the spindle brake\n *\n * @param engage - true to engage brake, false to release brake\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Engage spindle brake\n * await commandChannel.spindleBrake(true);\n *\n * // Release brake on spindle 1\n * await commandChannel.spindleBrake(false, 1);\n * ```\n */\n async spindleBrake(engage, spindleIndex = 0) {\n return this.exec(this.nativeInstance.spindleBrake, engage, spindleIndex);\n }\n // --- Coolant Commands ---\n /**\n * Turns mist coolant on or off\n *\n * @param on - true to turn mist on, false to turn off\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Turn on mist coolant\n * await commandChannel.setMist(true);\n *\n * // Turn off mist coolant\n * await commandChannel.setMist(false);\n * ```\n */\n async setMist(on) {\n return this.exec(this.nativeInstance.setMist, on);\n }\n /**\n * Turns flood coolant on or off\n *\n * @param on - true to turn flood on, false to turn off\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Turn on flood coolant\n * await commandChannel.setFlood(true);\n *\n * // Turn off flood coolant\n * await commandChannel.setFlood(false);\n * ```\n */\n async setFlood(on) {\n return this.exec(this.nativeInstance.setFlood, on);\n }\n // --- Tool Commands ---\n /**\n * Reloads the tool table from disk\n * Updates the in-memory tool table with changes made to the tool table file\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Reload tool table after editing the .tbl file\n * await commandChannel.loadToolTable();\n * ```\n */\n async loadToolTable() {\n return this.exec(this.nativeInstance.loadToolTable);\n }\n /**\n * Sets tool data for a specific tool number\n * Updates tool geometry and parameters in the tool table\n *\n * @param toolEntry - Tool entry containing tool number and optional geometry data\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set basic tool data\n * await commandChannel.setTool({\n * toolNo: 3,\n * pocketNo: 3\n * });\n *\n * // Set tool with geometry data\n * await commandChannel.setTool({\n * toolNo: 1,\n * pocketNo: 1,\n * diameter: 6.35,\n * offset: {\n * x: 0,\n * y: 0,\n * z: 25.4\n * }\n * });\n * ```\n */\n async setTool(toolEntry) {\n return this.exec(this.nativeInstance.setTool, toolEntry);\n }\n // --- IO Commands ---\n /**\n * Sets the state of a digital output pin\n *\n * @param index - Index of the digital output pin\n * @param value - true to set high, false to set low\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set digital output 0 high\n * await commandChannel.setDigitalOutput(0, true);\n *\n * // Set digital output 3 low\n * await commandChannel.setDigitalOutput(3, false);\n * ```\n */\n async setDigitalOutput(index, value) {\n return this.exec(this.nativeInstance.setDigitalOutput, index, value);\n }\n /**\n * Sets the value of an analog output pin\n *\n * @param index - Index of the analog output pin\n * @param value - Analog value to set\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set analog output 0 to 13.3\n * await commandChannel.setAnalogOutput(0, 13.3);\n * ```\n */\n async setAnalogOutput(index, value) {\n return this.exec(this.nativeInstance.setAnalogOutput, index, value);\n }\n // --- Debug & Message Commands ---\n /**\n * Sets debug flags for LinuxCNC components using OR-ed EmcDebug flags\n * Multiple debug categories can be enabled simultaneously by combining flags\n *\n * @param level - Debug flags from EmcDebug enum, can be OR-ed together\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Disable all debugging\n * await commandChannel.setDebugLevel(0);\n *\n * // Enable interpreter debugging only\n * await commandChannel.setDebugLevel(EmcDebug.INTERP);\n *\n * // Enable multiple debug categories\n * await commandChannel.setDebugLevel(EmcDebug.INTERP | EmcDebug.MOTION_TIME);\n *\n * // Enable task and NML debugging\n * await commandChannel.setDebugLevel(EmcDebug.TASK_ISSUE | EmcDebug.NML);\n *\n * // Enable Python and remap debugging for custom components\n * await commandChannel.setDebugLevel(EmcDebug.PYTHON | EmcDebug.REMAP);\n * ```\n */\n async setDebugLevel(level) {\n return this.exec(this.nativeInstance.setDebugLevel, level);\n }\n /**\n * Sends an error message to the operator display\n *\n * @param message - Error message to display (max 254 characters)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Send error message\n * await commandChannel.sendOperatorError('Tool change required');\n * ```\n */\n async sendOperatorError(message) {\n return this.exec(this.nativeInstance.sendOperatorError, message);\n }\n /**\n * Sends a text message to the operator display\n *\n * @param message - Text message to display (max 254 characters)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Send informational message\n * await commandChannel.sendOperatorText('Setup complete');\n * ```\n */\n async sendOperatorText(message) {\n return this.exec(this.nativeInstance.sendOperatorText, message);\n }\n /**\n * Sends a display message to the operator\n *\n * @param message - Display message (max 254 characters)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Send display message\n * await commandChannel.sendOperatorDisplay('Insert tool T1 M6');\n * ```\n */\n async sendOperatorDisplay(message) {\n return this.exec(this.nativeInstance.sendOperatorDisplay, message);\n }\n // --- Misc ---\n /**\n * Synchronously waits for the last command to complete\n * This does the same as await but provides a synchronous way to wait for command completion\n *\n * @param timeout - Maximum time to wait in seconds (default: 5 seconds)\n * @returns RcsStatus indicating completion status (RCS_DONE, RCS_ERROR, or -1 for timeout)\n *\n * @example\n * ```typescript\n * // These two approaches are equivalent:\n *\n * // Approach 1: Using await (asynchronous)\n * await commandChannel.runProgram();\n * console.log('Program completed');\n *\n * // Approach 2: Using waitComplete (synchronous)\n * commandChannel.runProgram(); // Fire and forget - don't await\n * const status = commandChannel.waitComplete(); // Synchronously wait for completion\n * if (status === RcsStatus.DONE) {\n * console.log('Program completed');\n * }\n * ```\n */\n waitComplete(timeout) {\n if (!this.nativeInstance)\n throw new Error(\"CommandChannel native instance not available.\");\n return this.nativeInstance.waitComplete(timeout);\n }\n /**\n * Gets the serial number of the current command\n * Each command sent has a unique serial number for tracking\n *\n * @returns The current command serial number\n *\n * @example\n * ```typescript\n * // Get current command serial number\n * const serial = commandChannel.getSerial();\n * console.log(`Current command serial: ${serial}`);\n * ```\n */\n getSerial() {\n if (!this.nativeInstance)\n throw new Error(\"CommandChannel native instance not available.\");\n return this.nativeInstance.serial;\n }\n /**\n * Destroys the command channel and cleans up resources\n * Call this when done using the command channel\n */\n destroy() {\n if (this.nativeInstance) {\n this.nativeInstance.disconnect();\n }\n }\n}\nexports.CommandChannel = CommandChannel;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ErrorChannel = exports.DEFAULT_ERROR_POLL_INTERVAL = void 0;\nconst events_1 = require(\"events\");\nconst constants_1 = require(\"./constants\");\nconst types_1 = require(\"@linuxcnc-node/types\");\nexports.DEFAULT_ERROR_POLL_INTERVAL = 100; // ms\nclass ErrorChannel extends events_1.EventEmitter {\n constructor(options) {\n super();\n this.poller = null;\n this.isPolling = false;\n this.nativeInstance = new constants_1.addon.NativeErrorChannel();\n const pollInterval = options?.pollInterval ?? exports.DEFAULT_ERROR_POLL_INTERVAL;\n this.poller = setInterval(() => this.poll(), pollInterval);\n }\n poll() {\n if (this.isPolling)\n return;\n this.isPolling = true;\n try {\n const error = this.nativeInstance.poll();\n if (error) {\n this.emit(\"message\", error);\n // Emit specific event based on message type\n switch (error.type) {\n case types_1.NmlMessageType.EMC_OPERATOR_ERROR:\n this.emit(\"operatorError\", error);\n break;\n case types_1.NmlMessageType.EMC_OPERATOR_TEXT:\n this.emit(\"operatorText\", error);\n break;\n case types_1.NmlMessageType.EMC_OPERATOR_DISPLAY:\n this.emit(\"operatorDisplay\", error);\n break;\n case types_1.NmlMessageType.NML_ERROR:\n this.emit(\"nmlError\", error);\n break;\n case types_1.NmlMessageType.NML_TEXT:\n this.emit(\"nmlText\", error);\n break;\n case types_1.NmlMessageType.NML_DISPLAY:\n this.emit(\"nmlDisplay\", error);\n break;\n }\n }\n }\n catch (e) {\n console.error(\"Error during ErrorChannel poll:\", e);\n }\n finally {\n this.isPolling = false;\n }\n }\n destroy() {\n if (this.poller) {\n clearInterval(this.poller);\n this.poller = null;\n }\n this.removeAllListeners();\n this.nativeInstance.disconnect();\n }\n}\nexports.ErrorChannel = ErrorChannel;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PositionLogger = void 0;\nconst constants_1 = require(\"./constants\");\n/**\n * Position Logger for tracking machine tool path\n *\n * This class provides functionality to log the position of a LinuxCNC machine tool\n * over time. All positions are returned as Float64Array with 10 elements per point:\n * [x, y, z, a, b, c, u, v, w, motionType]\n *\n * Use PositionLoggerIndex enum (or destructure it for shorter access like data[X]) and POSITION_STRIDE constant for array access.\n */\nclass PositionLogger {\n constructor() {\n this.nativeLogger = new constants_1.addon.NativePositionLogger();\n }\n /**\n * Start position logging\n * @param options Logging options\n */\n start(options = {}) {\n const interval = options.interval || 0.01;\n const maxHistorySize = options.maxHistorySize || 10000;\n this.nativeLogger.start(interval, maxHistorySize);\n }\n /**\n * Stop position logging\n */\n stop() {\n this.nativeLogger.stop();\n }\n /**\n * Clear the position history (invalidates all previous cursors)\n */\n clear() {\n this.nativeLogger.clear();\n }\n /**\n * Get the current position as a Float64Array\n * Layout: [x, y, z, a, b, c, u, v, w, motionType]\n * @returns Float64Array with 10 values, or null if no position available\n */\n getCurrentPosition() {\n return this.nativeLogger.getCurrentPosition();\n }\n /**\n * Get the motion history as a Float64Array\n * Layout: [x, y, z, a, b, c, u, v, w, motionType] repeated for each point\n * Use POSITION_STRIDE (10) to iterate through points\n * @param startIndex Starting index (default: 0)\n * @param count Number of points to retrieve (default: all)\n * @returns Float64Array with 10 values per point\n */\n getMotionHistory(startIndex, count) {\n if (startIndex !== undefined && count !== undefined) {\n return this.nativeLogger.getMotionHistory(startIndex, count);\n }\n else if (startIndex !== undefined) {\n return this.nativeLogger.getMotionHistory(startIndex);\n }\n else {\n return this.nativeLogger.getMotionHistory();\n }\n }\n /**\n * Get the number of points in the motion history\n * @returns Number of logged points\n */\n getHistoryCount() {\n return this.nativeLogger.getHistoryCount();\n }\n /**\n * Get the most recent points from the history\n * @param count Number of recent points to get (default: 10)\n * @returns Float64Array with 10 values per point\n */\n getRecentHistory(count = 10) {\n const totalCount = this.getHistoryCount();\n if (totalCount === 0)\n return new Float64Array(0);\n const startIndex = Math.max(0, totalCount - count);\n const actualCount = Math.min(count, totalCount);\n return this.getMotionHistory(startIndex, actualCount);\n }\n /**\n * Get the current cursor position (monotonic counter of points ever added)\n * @returns Current cursor value\n */\n getCurrentCursor() {\n return this.nativeLogger.getCurrentCursor();\n }\n /**\n * Get delta points since a given cursor position\n * Use this for efficient incremental updates instead of fetching full history.\n * @param cursor Last known cursor (0 for full history)\n * @returns Delta result with points, count, new cursor, and wasReset flag\n */\n getDeltaSince(cursor) {\n return this.nativeLogger.getDeltaSince(cursor);\n }\n}\nexports.PositionLogger = PositionLogger;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PositionLogger = exports.ErrorChannel = exports.CommandChannel = exports.StatChannel = void 0;\nexports.setNmlFilePath = setNmlFilePath;\nexports.getNmlFilePath = getNmlFilePath;\nconst statChannel_1 = require(\"./statChannel\");\nObject.defineProperty(exports, \"StatChannel\", { enumerable: true, get: function () { return statChannel_1.StatChannel; } });\nconst commandChannel_1 = require(\"./commandChannel\");\nObject.defineProperty(exports, \"CommandChannel\", { enumerable: true, get: function () { return commandChannel_1.CommandChannel; } });\nconst errorChannel_1 = require(\"./errorChannel\");\nObject.defineProperty(exports, \"ErrorChannel\", { enumerable: true, get: function () { return errorChannel_1.ErrorChannel; } });\nconst positionLogger_1 = require(\"./positionLogger\");\nObject.defineProperty(exports, \"PositionLogger\", { enumerable: true, get: function () { return positionLogger_1.PositionLogger; } });\nconst constants_1 = require(\"./constants\");\nlet nmlFilePath = constants_1.addon.NMLFILE_DEFAULT;\n/**\n * Sets the NML file path for communication with LinuxCNC.\n * This must be called before creating any channel instances if using a non-default path.\n * @param filePath Absolute path to the .nml file.\n */\nfunction setNmlFilePath(filePath) {\n constants_1.addon.setNmlFilePath(filePath);\n nmlFilePath = filePath;\n}\n/**\n * Gets the current NML file path.\n * @returns The NML file path being used.\n */\nfunction getNmlFilePath() {\n return constants_1.addon.getNmlFilePath();\n}\n",null,null,"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RtapiMsgLevelFromValue = exports.HalParamDirFromValue = exports.HalPinDirFromValue = exports.HalTypeFromValue = exports.RtapiMsgLevelValue = exports.HalParamDirValue = exports.HalPinDirValue = exports.HalTypeValue = exports.halNative = void 0;\n// Native addon - loaded once on module import\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction loadAddon() {\n const paths = [\n \"../build/Release/hal_addon.node\",\n \"../../build/Release/hal_addon.node\",\n ];\n for (const path of paths) {\n try {\n return require(path);\n }\n catch {\n // Try next path\n }\n }\n throw new Error(\"Failed to load linuxcnc-node hal native addon. Please ensure it's built correctly and that LinuxCNC is in your PATH.\");\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexports.halNative = loadAddon();\n// Numeric value mappings for native interop\nexports.HalTypeValue = {\n bit: 1,\n float: 2,\n s32: 3,\n u32: 4,\n s64: 6,\n u64: 7,\n};\nexports.HalPinDirValue = {\n in: 16,\n out: 32,\n io: 48,\n};\nexports.HalParamDirValue = {\n ro: 64,\n rw: 192,\n};\nexports.RtapiMsgLevelValue = {\n none: 0,\n err: 1,\n warn: 2,\n info: 3,\n dbg: 4,\n all: 5,\n};\n// Helper to generate reverse mapping\nfunction createReverseMap(map) {\n const reverse = {};\n for (const [key, value] of Object.entries(map)) {\n reverse[value] = key;\n }\n return reverse;\n}\n// Reverse mappings for native -> TS conversion\nexports.HalTypeFromValue = createReverseMap(exports.HalTypeValue);\nexports.HalPinDirFromValue = createReverseMap(exports.HalPinDirValue);\nexports.HalParamDirFromValue = createReverseMap(exports.HalParamDirValue);\nexports.RtapiMsgLevelFromValue = createReverseMap(exports.RtapiMsgLevelValue);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Param = exports.Pin = exports.HalItem = void 0;\nconst events_1 = require(\"events\");\nclass HalItem extends events_1.EventEmitter {\n constructor(component, nameSuffix, type, direction) {\n super();\n this.component = component;\n this.name = nameSuffix;\n this.type = type;\n this.direction = direction;\n }\n /**\n * Retrieves the current value of this item.\n *\n * @returns The item's value (number or boolean depending on type).\n */\n getValue() {\n return this.component.getValue(this.name);\n }\n /**\n * Sets the value of this item.\n *\n * For pins, only applicable to `HAL_OUT` or `HAL_IO` pins.\n * For parameters, only applicable to `HAL_RW` parameters.\n *\n * @param value - The new value for the item.\n * @returns The value that was set.\n * @throws Error if trying to set an `HAL_IN` pin or `HAL_RO` parameter.\n */\n setValue(value) {\n return this.component.setValue(this.name, value);\n }\n}\nexports.HalItem = HalItem;\n/**\n * Represents a HAL pin. Instances are returned by `component.newPin()`.\n *\n * @example\n * ```typescript\n * const pin = comp.newPin(\"output\", \"float\", \"out\");\n * pin.setValue(123.45);\n * pin.on('change', (newVal, oldVal) => console.log(newVal));\n * ```\n */\nclass Pin extends HalItem {\n}\nexports.Pin = Pin;\n/**\n * Represents a HAL parameter. Instances are returned by `component.newParam()`.\n *\n * @example\n * ```typescript\n * const param = comp.newParam(\"speed\", \"float\", \"rw\");\n * param.setValue(100.0);\n * param.on('change', (newVal, oldVal) => console.log(newVal));\n * ```\n */\nclass Param extends HalItem {\n}\nexports.Param = Param;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HalComponent = exports.DEFAULT_POLL_INTERVAL = void 0;\nconst events_1 = require(\"events\");\nconst constants_1 = require(\"./constants\");\nconst item_1 = require(\"./item\");\n/** Default polling interval in milliseconds for monitoring value changes */\nexports.DEFAULT_POLL_INTERVAL = 10;\n/**\n * Represents a HAL component.\n *\n * This class provides functionality to create HAL components, pins, parameters,\n * and interact with the HAL environment.\n *\n * @example\n * ```typescript\n * const comp = new HalComponent(\"my-component\");\n * const pin = comp.newPin(\"output\", \"float\", \"out\");\n * comp.ready();\n * pin.setValue(123.45);\n *\n * // Listen for value changes\n * pin.on('change', (newVal, oldVal) => {\n * console.log(`Changed: ${oldVal} -> ${newVal}`);\n * });\n *\n * // Listen for batch delta updates\n * comp.on('delta', (delta) => {\n * console.log(`${delta.changes.length} items changed at cursor ${delta.cursor}`);\n * });\n * ```\n */\nclass HalComponent extends events_1.EventEmitter {\n /**\n * Creates a new HAL component.\n *\n * @param name - The name of the component (e.g., \"my-component\").\n * This will be registered with LinuxCNC HAL.\n * @param prefix - Optional prefix for pins and parameters created by this component.\n * If not provided, defaults to `name`.\n */\n constructor(name, prefix) {\n super();\n this.pins = {};\n this.params = {};\n // Monitoring system\n this.watchedItems = new Map();\n this.monitoringTimer = null;\n this.monitoringOptions = {\n pollInterval: exports.DEFAULT_POLL_INTERVAL,\n };\n /** Monotonic cursor incremented on each batch update */\n this.cursor = 0;\n this.nativeInstance = new constants_1.halNative.HalComponent(name, prefix);\n this.name = name;\n this.prefix = prefix || name;\n }\n /**\n * Checks if a HAL component with the given name exists in the system.\n *\n * @param name - The component name (e.g., \"halui\", \"my-custom-comp\").\n * @returns `true` if the component exists, `false` otherwise.\n */\n static exists(name) {\n return constants_1.halNative.component_exists(name);\n }\n /**\n * Checks if the HAL component with the given name has been marked as ready.\n *\n * @param name - The component name.\n * @returns `true` if the component exists and is ready, `false` otherwise.\n */\n static isReady(name) {\n return constants_1.halNative.component_is_ready(name);\n }\n /**\n * Gets the value of a pin or parameter by name.\n *\n * @param name - The nameSuffix of the pin or parameter.\n * @returns The current value.\n */\n getValue(name) {\n return this.nativeInstance.getProperty(name);\n }\n /**\n * Sets the value of a pin or parameter by name.\n *\n * @param name - The nameSuffix of the pin or parameter.\n * @param value - The value to set.\n * @returns The value that was set.\n */\n setValue(name, value) {\n if (typeof value !== \"number\" && typeof value !== \"boolean\") {\n throw new TypeError(\"Value must be a number or boolean\");\n }\n return this.nativeInstance.setProperty(name, value);\n }\n /**\n * Creates a new HAL pin associated with this component.\n *\n * This method can only be called before `ready()` or after `unready()`.\n *\n * @param nameSuffix - The suffix for the pin name (e.g., \"in1\", \"motor.0.pos\").\n * The full HAL name will be `this.prefix + \".\" + nameSuffix`.\n * @param type - The data type of the pin (e.g., `\"float\"`, `\"bit\"`).\n * See {@link HalType} for available types.\n * @param direction - The direction of the pin (e.g., `\"in\"`, `\"out\"`, `\"io\"`).\n * See {@link HalPinDir} for available directions.\n * @returns A new `Pin` object instance.\n * @throws Error if component is ready or if pin creation fails.\n */\n newPin(nameSuffix, type, direction) {\n const success = this.nativeInstance.newPin(nameSuffix, constants_1.HalTypeValue[type], constants_1.HalPinDirValue[direction]);\n if (!success) {\n console.error(`Failed to create pin '${nameSuffix}'`);\n }\n const pin = new item_1.Pin(this, nameSuffix, type, direction);\n this.pins[nameSuffix] = pin;\n this.setupItemListeners(pin, nameSuffix);\n return pin;\n }\n /**\n * Creates a new HAL parameter associated with this component.\n *\n * This method can only be called before `ready()` or after `unready()`.\n *\n * @param nameSuffix - The suffix for the parameter name.\n * The full HAL name will be `this.prefix + \".\" + nameSuffix`.\n * @param type - The data type of the parameter. See {@link HalType} for available types.\n * @param direction - The writability of the parameter (`\"ro\"` for read-only,\n * `\"rw\"` for read-write). See {@link HalParamDir}.\n * @returns A new `Param` object instance.\n * @throws Error if component is ready or if parameter creation fails.\n */\n newParam(nameSuffix, type, direction) {\n const success = this.nativeInstance.newParam(nameSuffix, constants_1.HalTypeValue[type], constants_1.HalParamDirValue[direction]);\n if (!success) {\n console.error(`Failed to create param '${nameSuffix}'`);\n }\n const param = new item_1.Param(this, nameSuffix, type, direction);\n this.params[nameSuffix] = param;\n this.setupItemListeners(param, nameSuffix);\n return param;\n }\n /**\n * Sets up auto-watch listeners for a pin or param.\n * @private\n */\n setupItemListeners(item, name) {\n item.on(\"newListener\", (event) => {\n if (event === \"change\" && !this.watchedItems.has(name)) {\n this.watchedItems.set(name, {\n item,\n lastValue: this.getValue(name),\n });\n this.ensureMonitoring();\n }\n });\n item.on(\"removeListener\", (event) => {\n if (event === \"change\" && item.listenerCount(\"change\") === 0) {\n this.watchedItems.delete(name);\n this.checkStopMonitoring();\n }\n });\n }\n /**\n * Marks this component as ready and available to the HAL system.\n *\n * Once ready, pins can be linked, and parameters can be accessed by other\n * HAL components or tools. Pins and parameters cannot be added after `ready()`\n * is called, unless `unready()` is called first.\n */\n ready() {\n this.nativeInstance.ready();\n }\n /**\n * Marks this component as not ready, allowing addition of more pins or parameters.\n *\n * `ready()` must be called again to make the component (and any new items)\n * available to HAL.\n */\n unready() {\n this.nativeInstance.unready();\n }\n /**\n * Retrieves a map of all `Pin` objects created for this component.\n *\n * @returns An object where keys are the `nameSuffix` of the pins and values\n * are the corresponding `Pin` instances.\n */\n getPins() {\n return this.pins;\n }\n /**\n * Retrieves a map of all `Param` objects created for this component.\n *\n * @returns An object where keys are the `nameSuffix` of the parameters and\n * values are the corresponding `Param` instances.\n */\n getParams() {\n return this.params;\n }\n /**\n * Gets a pin by name.\n *\n * @param name - The nameSuffix of the pin.\n * @returns The Pin instance, or undefined if not found.\n */\n getPin(name) {\n return this.pins[name];\n }\n /**\n * Gets a param by name.\n *\n * @param name - The nameSuffix of the param.\n * @returns The Param instance, or undefined if not found.\n */\n getParam(name) {\n return this.params[name];\n }\n /**\n * Gets the current cursor value for sync operations.\n *\n * The cursor is monotonically increasing and increments with each delta emit.\n *\n * @returns The current cursor value.\n */\n getCursor() {\n return this.cursor;\n }\n /**\n * Gets a snapshot of all current item values.\n *\n * Useful for initial sync or resync after cursor mismatch.\n *\n * @returns Object with items map, current cursor, and timestamp.\n */\n getSnapshot() {\n const items = {};\n for (const [name] of this.watchedItems.entries()) {\n items[name] = this.getValue(name);\n }\n return {\n items,\n cursor: this.cursor,\n timestamp: Date.now(),\n };\n }\n /**\n * Configures the monitoring system settings.\n *\n * The monitoring system will check for value changes at the specified interval.\n *\n * @param options - Configuration object with `pollInterval` property (in milliseconds).\n * Default polling interval is 10ms.\n */\n setMonitoringOptions(options) {\n this.monitoringOptions = { ...this.monitoringOptions, ...options };\n // Restart monitoring with new options if it's currently running\n if (this.monitoringTimer && this.watchedItems.size > 0) {\n this.stopMonitoring();\n this.startMonitoring();\n }\n }\n /**\n * Retrieves the current monitoring configuration.\n *\n * @returns A copy of the current monitoring options.\n */\n getMonitoringOptions() {\n return { ...this.monitoringOptions };\n }\n /**\n * Starts the monitoring timer if not already running.\n * @private\n */\n ensureMonitoring() {\n if (!this.monitoringTimer && this.watchedItems.size > 0) {\n this.startMonitoring();\n }\n }\n /**\n * Stops monitoring if no items are being watched.\n * @private\n */\n checkStopMonitoring() {\n if (this.watchedItems.size === 0) {\n this.stopMonitoring();\n }\n }\n /**\n * Starts the monitoring timer.\n * @private\n */\n startMonitoring() {\n if (this.monitoringTimer) {\n return;\n }\n this.monitoringTimer = setInterval(() => {\n this.checkForChanges();\n }, this.monitoringOptions.pollInterval || exports.DEFAULT_POLL_INTERVAL);\n }\n /**\n * Stops the monitoring timer.\n * @private\n */\n stopMonitoring() {\n if (this.monitoringTimer) {\n clearInterval(this.monitoringTimer);\n this.monitoringTimer = null;\n }\n }\n /**\n * Checks all watched items for value changes and emits events.\n *\n * Emits individual 'change' events on each HalItem, plus a batch 'delta'\n * event on the component with all changes aggregated.\n * @private\n */\n checkForChanges() {\n const changes = [];\n for (const [name, watched] of this.watchedItems.entries()) {\n try {\n const currentValue = this.getValue(name);\n if (currentValue !== watched.lastValue) {\n const oldValue = watched.lastValue;\n watched.lastValue = currentValue;\n watched.item.emit(\"change\", currentValue, oldValue);\n changes.push({ name, value: currentValue });\n }\n }\n catch (error) {\n console.error(`Error checking value for ${name}:`, error);\n }\n }\n // Emit batch delta if any changes occurred\n if (changes.length > 0) {\n this.cursor++;\n const delta = {\n changes,\n cursor: this.cursor,\n timestamp: Date.now(),\n };\n this.emit(\"delta\", delta);\n }\n }\n /**\n * Cleans up the component, stops monitoring and removes all listeners.\n *\n * Should be called when the component is no longer needed to prevent memory leaks.\n */\n dispose() {\n this.stopMonitoring();\n this.watchedItems.clear();\n // Remove all listeners from pins and params\n for (const pin of Object.values(this.pins)) {\n pin.removeAllListeners();\n }\n for (const param of Object.values(this.params)) {\n param.removeAllListeners();\n }\n }\n}\nexports.HalComponent = HalComponent;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setSignalValue = exports.setPinParamValue = exports.pinHasWriter = exports.newSignal = exports.getInfoParams = exports.getInfoSignals = exports.getInfoPins = exports.getValue = exports.disconnect = exports.connect = exports.setMsgLevel = exports.getMsgLevel = void 0;\nconst constants_1 = require(\"./constants\");\n/**\n * Gets the current RTAPI message verbosity level used by HAL.\n *\n * @returns The current message level (e.g., `hal.MSG_INFO`).\n * See {@link RtapiMsgLevel} for available levels.\n */\nconst getMsgLevel = () => {\n const nativeValue = constants_1.halNative.get_msg_level();\n return constants_1.RtapiMsgLevelFromValue[nativeValue] ?? \"none\";\n};\nexports.getMsgLevel = getMsgLevel;\n/**\n * Sets the RTAPI message verbosity level.\n *\n * @param level - The new message level to set. See {@link RtapiMsgLevel} for available levels.\n */\nconst setMsgLevel = (level) => {\n constants_1.halNative.set_msg_level(constants_1.RtapiMsgLevelValue[level]);\n};\nexports.setMsgLevel = setMsgLevel;\n/**\n * Links a HAL pin to a HAL signal.\n *\n * @param pinName - The full name of the pin (e.g., \"my-comp.out1\").\n * @param signalName - The name of the signal to connect to.\n * @returns `true` on success, `false` on failure (error is thrown by native layer).\n * @throws Error if pin or signal doesn't exist, or if connection fails.\n */\nconst connect = (pinName, signalName) => {\n return constants_1.halNative.connect(pinName, signalName);\n};\nexports.connect = connect;\n/**\n * Unlinks a HAL pin from any signal it's currently connected to.\n *\n * @param pinName - The full name of the pin.\n * @returns `true` on success, `false` on failure (error is thrown).\n * @throws Error if pin doesn't exist or disconnect fails.\n */\nconst disconnect = (pinName) => {\n return constants_1.halNative.disconnect(pinName);\n};\nexports.disconnect = disconnect;\n/**\n * Gets the current value of any HAL item (pin, parameter, or signal) identified by its full name.\n *\n * @param name - The full name of the pin, parameter, or signal.\n * @returns The value of the item (number or boolean).\n * @throws Error if the item is not found.\n */\nconst getValue = (name) => {\n return constants_1.halNative.get_value(name);\n};\nexports.getValue = getValue;\n/**\n * Retrieves a list of all HAL pins currently in the system.\n *\n * @returns An array of `HalPinInfo` objects. See {@link HalPinInfo} for structure.\n */\nconst getInfoPins = () => {\n const nativePins = constants_1.halNative.get_info_pins();\n return nativePins.map((pin) => ({\n ...pin,\n type: constants_1.HalTypeFromValue[pin.type] ?? \"bit\",\n direction: constants_1.HalPinDirFromValue[pin.direction] ?? \"in\",\n }));\n};\nexports.getInfoPins = getInfoPins;\n/**\n * Retrieves a list of all HAL signals currently in the system.\n *\n * @returns An array of `HalSignalInfo` objects. See {@link HalSignalInfo} for structure.\n */\nconst getInfoSignals = () => {\n const nativeSignals = constants_1.halNative.get_info_signals();\n return nativeSignals.map((signal) => ({\n ...signal,\n type: constants_1.HalTypeFromValue[signal.type] ?? \"bit\",\n }));\n};\nexports.getInfoSignals = getInfoSignals;\n/**\n * Retrieves a list of all HAL parameters currently in the system.\n *\n * @returns An array of `HalParamInfo` objects. See {@link HalParamInfo} for structure.\n */\nconst getInfoParams = () => {\n const nativeParams = constants_1.halNative.get_info_params();\n return nativeParams.map((param) => ({\n ...param,\n type: constants_1.HalTypeFromValue[param.type] ?? \"bit\",\n direction: constants_1.HalParamDirFromValue[param.direction] ?? \"ro\",\n }));\n};\nexports.getInfoParams = getInfoParams;\n/**\n * Creates a new HAL signal.\n *\n * @param signalName - The desired name for the new signal.\n * @param type - The data type for the new signal. See {@link HalType} for available types.\n * @returns `true` on success, `false` on failure (error is thrown).\n * @throws Error if signal name already exists or creation fails.\n */\nconst newSignal = (signalName, type) => {\n return constants_1.halNative.new_sig(signalName, constants_1.HalTypeValue[type]);\n};\nexports.newSignal = newSignal;\n/**\n * Checks if the signal connected to an IN pin has at least one writer (another pin driving it).\n *\n * @param pinName - The full name of the IN pin.\n * @returns `true` if the pin is connected to a signal and that signal has one or more writers,\n * `false` otherwise.\n * @throws Error if the pin does not exist.\n */\nconst pinHasWriter = (pinName) => {\n return constants_1.halNative.pin_has_writer(pinName);\n};\nexports.pinHasWriter = pinHasWriter;\n/**\n * Sets the value of a HAL pin or parameter identified by its full name.\n *\n * The `value` is converted from its JavaScript type to a string and then parsed by\n * the C++ layer, similar to `halcmd setp`. This can set unconnected IN pins\n * (modifying their internal `dummysig`) or RW parameters.\n *\n * @param name - The full name of the pin or parameter.\n * @param value - The value to set (string, number, or boolean).\n * @returns `true` on success, `false` on failure (error is thrown).\n * @throws Error if item not found, if trying to set OUT pin or connected IN pin,\n * or if value conversion fails.\n *\n * @remarks Cannot set OUT pins or connected IN pins with this function.\n * Use direct signal manipulation or component proxy access for connected items.\n */\nconst setPinParamValue = (name, value) => {\n return constants_1.halNative.set_p(name, String(value));\n};\nexports.setPinParamValue = setPinParamValue;\n/**\n * Sets the value of an unconnected HAL signal identified by its name.\n *\n * The `value` is converted and parsed similarly to `setPinParamValue`.\n *\n * @param name - The full name of the signal.\n * @param value - The value to set (string, number, or boolean).\n * @returns `true` on success, `false` on failure (error is thrown).\n * @throws Error if signal not found, if signal has writers, or if value conversion fails.\n */\nconst setSignalValue = (name, value) => {\n return constants_1.halNative.set_s(name, String(value));\n};\nexports.setSignalValue = setSignalValue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setSignalValue = exports.setPinParamValue = exports.pinHasWriter = exports.newSignal = exports.getInfoParams = exports.getInfoSignals = exports.getInfoPins = exports.getValue = exports.disconnect = exports.connect = exports.setMsgLevel = exports.getMsgLevel = exports.Param = exports.Pin = exports.HalItem = exports.HalComponent = void 0;\n// --- Exported classes ---\nvar component_1 = require(\"./component\");\nObject.defineProperty(exports, \"HalComponent\", { enumerable: true, get: function () { return component_1.HalComponent; } });\nvar item_1 = require(\"./item\");\nObject.defineProperty(exports, \"HalItem\", { enumerable: true, get: function () { return item_1.HalItem; } });\nObject.defineProperty(exports, \"Pin\", { enumerable: true, get: function () { return item_1.Pin; } });\nObject.defineProperty(exports, \"Param\", { enumerable: true, get: function () { return item_1.Param; } });\n// --- Global functions ---\nvar functions_1 = require(\"./functions\");\nObject.defineProperty(exports, \"getMsgLevel\", { enumerable: true, get: function () { return functions_1.getMsgLevel; } });\nObject.defineProperty(exports, \"setMsgLevel\", { enumerable: true, get: function () { return functions_1.setMsgLevel; } });\nObject.defineProperty(exports, \"connect\", { enumerable: true, get: function () { return functions_1.connect; } });\nObject.defineProperty(exports, \"disconnect\", { enumerable: true, get: function () { return functions_1.disconnect; } });\nObject.defineProperty(exports, \"getValue\", { enumerable: true, get: function () { return functions_1.getValue; } });\nObject.defineProperty(exports, \"getInfoPins\", { enumerable: true, get: function () { return functions_1.getInfoPins; } });\nObject.defineProperty(exports, \"getInfoSignals\", { enumerable: true, get: function () { return functions_1.getInfoSignals; } });\nObject.defineProperty(exports, \"getInfoParams\", { enumerable: true, get: function () { return functions_1.getInfoParams; } });\nObject.defineProperty(exports, \"newSignal\", { enumerable: true, get: function () { return functions_1.newSignal; } });\nObject.defineProperty(exports, \"pinHasWriter\", { enumerable: true, get: function () { return functions_1.pinHasWriter; } });\nObject.defineProperty(exports, \"setPinParamValue\", { enumerable: true, get: function () { return functions_1.setPinParamValue; } });\nObject.defineProperty(exports, \"setSignalValue\", { enumerable: true, get: function () { return functions_1.setSignalValue; } });\n","'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR,\n SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","/*global navigator*/\n'use strict';\n\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n if (typeof navigator !== 'undefined' && navigator.platform) {\n const platform = navigator.platform.toLowerCase();\n return platform === 'win32' || platform === 'windows';\n }\n\n if (typeof process !== 'undefined' && process.platform) {\n return process.platform === 'win32';\n }\n\n return false;\n};\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n const segs = path.split(windows ? /[\\\\/]/ : '/');\n const last = segs[segs.length - 1];\n\n if (last === '') {\n return segs[segs.length - 2];\n }\n\n return last;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(opts.windows);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.output = (prev.output || prev.value) + tok.value;\n prev.value += tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(opts.windows);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = opts.windows;\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst pico = require('./lib/picomatch');\nconst utils = require('./lib/utils');\n\nfunction picomatch(glob, options, returnState = false) {\n // default to os.platform()\n if (options && (options.windows === null || options.windows === undefined)) {\n // don't mutate the original options object\n options = { ...options, windows: utils.isWindows() };\n }\n\n return pico(glob, options, returnState);\n}\n\nObject.assign(picomatch, pico);\nmodule.exports = picomatch;\n","/**\n * LinuxCNC Service\n *\n * Exposes LinuxCNC status monitoring and command execution via AppBus.\n * Implements LinuxCNCProtocol from covenant-protocol.\n */\n\nimport { StatChannel, CommandChannel, ErrorChannel } from \"@linuxcnc-node/core\";\nimport { StatChange } from \"@linuxcnc-node/types\";\nimport type { LinuxCNCProtocol } from \"covenant-protocol\";\nimport type { HostConnection } from \"@edenapp/types\";\nimport delve from \"dlv\";\nconst SERVICE_NAME = \"linuxcnc\";\n\n// Shared state across all connections\nlet statChannel: StatChannel | null = null;\nlet commandChannel: CommandChannel | null = null;\nlet errorChannel: ErrorChannel | null = null;\n\n// Connected clients\nconst connections = new Map<string, HostConnection<LinuxCNCProtocol>>();\n\n/**\n * Broadcast stat delta to all connected clients\n */\nfunction broadcastDelta(changes: StatChange[]): void {\n if (changes.length === 0 || !statChannel) return;\n\n const message = {\n changes,\n cursor: statChannel.getCursor(),\n timestamp: Date.now(),\n };\n\n for (const conn of connections.values()) {\n try {\n conn.send(\"stat-delta\", message);\n } catch (err) {\n console.error(\"[LinuxCNC] Error sending delta:\", err);\n }\n }\n}\n\n/**\n * Initialize the LinuxCNC service\n */\nexport function initLinuxCNCService(): void {\n // Create channels (shared across all connections)\n statChannel = new StatChannel({ pollInterval: 50 });\n commandChannel = new CommandChannel();\n errorChannel = new ErrorChannel({ pollInterval: 100 });\n\n // Listen to native delta updates from StatChannel\n statChannel.on(\"delta\", broadcastDelta);\n\n // Forward error channel events\n errorChannel.on(\"message\", (error) => {\n for (const conn of connections.values()) {\n try {\n conn.send(\"error-channel-event\", error);\n } catch (err) {\n console.error(\"[LinuxCNC] Error forwarding error event:\", err);\n }\n }\n });\n\n // Expose the service\n worker!.appBus.exposeService(\n SERVICE_NAME,\n (connection, { appId: clientAppId }) => {\n console.log(`[LinuxCNC] Client connected: ${clientAppId}`);\n\n const typedConn = connection as HostConnection<LinuxCNCProtocol>;\n connections.set(clientAppId, typedConn);\n\n // Handle disconnect\n connection.onClose(() => {\n console.log(`[LinuxCNC] Client disconnected: ${clientAppId}`);\n connections.delete(clientAppId);\n });\n\n // === STAT HANDLERS ===\n\n typedConn.handle(\"stat/sync\", () => {\n const stat = statChannel!.get();\n if (!stat) {\n throw new Error(\"StatChannel not ready\");\n }\n\n return {\n stat,\n cursor: statChannel!.getCursor(),\n };\n });\n\n typedConn.handle(\"stat/get-value\", ({ path }) => {\n const stat = statChannel!.get();\n if (!stat) {\n throw new Error(\"StatChannel not ready\");\n }\n return { value: delve(stat, path) };\n });\n\n // === COMMAND HANDLERS ===\n\n typedConn.handle(\"cmd/set-task-mode\", async ({ mode }) => {\n return commandChannel!.setTaskMode(mode);\n });\n\n typedConn.handle(\"cmd/set-state\", async ({ state }) => {\n return commandChannel!.setState(state);\n });\n\n typedConn.handle(\"cmd/mdi\", async ({ command }) => {\n return commandChannel!.mdi(command);\n });\n\n typedConn.handle(\"cmd/abort\", async () => {\n return commandChannel!.abortTask();\n });\n\n typedConn.handle(\"cmd/task-plan-synch\", async () => {\n return commandChannel!.taskPlanSynch();\n });\n\n typedConn.handle(\"cmd/reset-interpreter\", async () => {\n return commandChannel!.resetInterpreter();\n });\n\n // Program control\n typedConn.handle(\"cmd/program-open\", async ({ filePath }) => {\n return commandChannel!.programOpen(filePath);\n });\n\n typedConn.handle(\"cmd/program-run\", async ({ startLine }) => {\n return commandChannel!.runProgram(startLine ?? 0);\n });\n\n typedConn.handle(\"cmd/program-pause\", async () => {\n return commandChannel!.pauseProgram();\n });\n\n typedConn.handle(\"cmd/program-resume\", async () => {\n return commandChannel!.resumeProgram();\n });\n\n typedConn.handle(\"cmd/program-step\", async () => {\n return commandChannel!.stepProgram();\n });\n\n typedConn.handle(\"cmd/program-reverse\", async () => {\n return commandChannel!.reverseProgram();\n });\n\n typedConn.handle(\"cmd/program-forward\", async () => {\n return commandChannel!.forwardProgram();\n });\n\n // Motion control\n typedConn.handle(\"cmd/set-feed-rate\", async ({ scale }) => {\n return commandChannel!.setFeedRate(scale);\n });\n\n typedConn.handle(\"cmd/set-rapid-rate\", async ({ scale }) => {\n return commandChannel!.setRapidRate(scale);\n });\n\n typedConn.handle(\"cmd/set-max-velocity\", async ({ velocity }) => {\n return commandChannel!.setMaxVelocity(velocity);\n });\n\n typedConn.handle(\"cmd/set-traj-mode\", async ({ mode }) => {\n return commandChannel!.setTrajMode(mode);\n });\n\n typedConn.handle(\"cmd/teleop-enable\", async ({ enable }) => {\n return commandChannel!.teleopEnable(enable);\n });\n\n typedConn.handle(\"cmd/set-feed-override-enable\", async ({ enable }) => {\n return commandChannel!.setFeedOverrideEnable(enable);\n });\n\n typedConn.handle(\"cmd/set-feed-hold-enable\", async ({ enable }) => {\n return commandChannel!.setFeedHoldEnable(enable);\n });\n\n typedConn.handle(\"cmd/set-adaptive-feed-enable\", async ({ enable }) => {\n return commandChannel!.setAdaptiveFeedEnable(enable);\n });\n\n // Jogging - note: CommandChannel uses (axis, isJoint, speed) order\n typedConn.handle(\n \"cmd/jog-continuous\",\n async ({ axis, speed, isJoint }) => {\n return commandChannel!.jogContinuous(axis, isJoint ?? false, speed);\n }\n );\n\n typedConn.handle(\n \"cmd/jog-increment\",\n async ({ axis, speed, increment, isJoint }) => {\n return commandChannel!.jogIncrement(\n axis,\n isJoint ?? false,\n speed,\n increment\n );\n }\n );\n\n typedConn.handle(\"cmd/jog-stop\", async ({ axis, isJoint }) => {\n return commandChannel!.jogStop(axis, isJoint ?? false);\n });\n\n // Homing\n typedConn.handle(\"cmd/home\", async ({ joint }) => {\n return commandChannel!.homeJoint(joint);\n });\n\n typedConn.handle(\"cmd/unhome\", async ({ joint }) => {\n return commandChannel!.unhomeJoint(joint);\n });\n\n typedConn.handle(\n \"cmd/set-min-position-limit\",\n async ({ joint, limit }) => {\n return commandChannel!.setMinPositionLimit(joint, limit);\n }\n );\n\n typedConn.handle(\n \"cmd/set-max-position-limit\",\n async ({ joint, limit }) => {\n return commandChannel!.setMaxPositionLimit(joint, limit);\n }\n );\n\n // Spindle\n typedConn.handle(\"cmd/spindle-on\", async ({ speed, spindle, wait }) => {\n return commandChannel!.spindleOn(speed, spindle ?? 0, wait ?? false);\n });\n\n typedConn.handle(\"cmd/spindle-off\", async ({ spindle }) => {\n return commandChannel!.spindleOff(spindle ?? 0);\n });\n\n typedConn.handle(\"cmd/spindle-override\", async ({ scale, spindle }) => {\n return commandChannel!.setSpindleOverride(scale, spindle ?? 0);\n });\n\n typedConn.handle(\"cmd/spindle-brake\", async ({ engage, spindle }) => {\n return commandChannel!.spindleBrake(engage, spindle ?? 0);\n });\n\n typedConn.handle(\"cmd/spindle-increase\", async ({ spindle }) => {\n return commandChannel!.spindleIncrease(spindle ?? 0);\n });\n\n typedConn.handle(\"cmd/spindle-decrease\", async ({ spindle }) => {\n return commandChannel!.spindleDecrease(spindle ?? 0);\n });\n\n typedConn.handle(\n \"cmd/set-spindle-override-enable\",\n async ({ enable, spindle }) => {\n return commandChannel!.setSpindleOverrideEnable(enable, spindle ?? 0);\n }\n );\n\n // Coolant\n typedConn.handle(\"cmd/set-mist\", async ({ on }) => {\n return commandChannel!.setMist(on);\n });\n\n typedConn.handle(\"cmd/set-flood\", async ({ on }) => {\n return commandChannel!.setFlood(on);\n });\n\n // Tool\n typedConn.handle(\"cmd/load-tool-table\", async () => {\n return commandChannel!.loadToolTable();\n });\n\n typedConn.handle(\"cmd/set-tool\", async ({ tool }) => {\n return commandChannel!.setTool(tool);\n });\n\n // I/O\n typedConn.handle(\"cmd/set-digital-output\", async ({ index, value }) => {\n return commandChannel!.setDigitalOutput(index, value);\n });\n\n typedConn.handle(\"cmd/set-analog-output\", async ({ index, value }) => {\n return commandChannel!.setAnalogOutput(index, value);\n });\n\n // Misc\n typedConn.handle(\"cmd/override-limits\", async () => {\n return commandChannel!.overrideLimits();\n });\n\n typedConn.handle(\"cmd/set-optional-stop\", async ({ enable }) => {\n return commandChannel!.setOptionalStop(enable);\n });\n\n typedConn.handle(\"cmd/set-block-delete\", async ({ enable }) => {\n return commandChannel!.setBlockDelete(enable);\n });\n\n typedConn.handle(\"cmd/set-debug-level\", async ({ level }) => {\n return commandChannel!.setDebugLevel(level);\n });\n\n typedConn.handle(\"cmd/send-operator-error\", async ({ message }) => {\n return commandChannel!.sendOperatorError(message);\n });\n\n typedConn.handle(\"cmd/send-operator-text\", async ({ message }) => {\n return commandChannel!.sendOperatorText(message);\n });\n\n typedConn.handle(\"cmd/send-operator-display\", async ({ message }) => {\n return commandChannel!.sendOperatorDisplay(message);\n });\n\n // Connection\n typedConn.handle(\"ping\", () => {\n return { timestamp: Date.now() };\n });\n },\n { description: \"LinuxCNC status monitoring and command execution\" }\n );\n\n console.log(`[LinuxCNC] Service exposed as '${SERVICE_NAME}'`);\n}\n","/**\n * G-Code Service\n *\n * Exposes G-code parsing via AppBus using LinuxCNC's rs274ngc interpreter.\n * Implements GCodeProtocol from covenant-protocol.\n */\n\nimport { parseGCode } from \"@linuxcnc-node/gcode\";\nimport type { GCodeProtocol } from \"covenant-protocol\";\nimport type { HostConnection } from \"@edenapp/types\";\n\nconst SERVICE_NAME = \"gcode\";\n\n/**\n * Initialize the G-code service\n */\nexport function initGCodeService(): void {\n worker!.appBus.exposeService(\n SERVICE_NAME,\n (connection, { appId: clientAppId }) => {\n console.log(`[GCode] Client connected: ${clientAppId}`);\n\n const typedConn = connection as HostConnection<GCodeProtocol>;\n\n // Handle disconnect\n connection.onClose(() => {\n console.log(`[GCode] Client disconnected: ${clientAppId}`);\n });\n\n // Parse handler\n typedConn.handle(\n \"parse\",\n async ({ filepath, iniPath, progressUpdates }) => {\n try {\n const result = await parseGCode(filepath, {\n iniPath,\n progressUpdates: progressUpdates ?? 40,\n onProgress: (progress) => {\n // Stream progress updates to the client\n try {\n typedConn.send(\"parse-progress\", progress);\n } catch (err) {\n // Client may have disconnected\n console.error(\"[GCode] Error sending progress:\", err);\n }\n },\n });\n\n return result;\n } catch (err) {\n // Send error message\n typedConn.send(\"error\", {\n code: \"PARSE_ERROR\",\n message: err instanceof Error ? err.message : String(err),\n });\n throw err;\n }\n }\n );\n\n // Ping handler\n typedConn.handle(\"ping\", () => {\n return { timestamp: Date.now() };\n });\n },\n { description: \"G-code file parsing using LinuxCNC interpreter\" }\n );\n\n console.log(`[GCode] Service exposed as '${SERVICE_NAME}'`);\n}\n","/**\n * HAL Service\n *\n * Exposes HAL component management and I/O access via AppBus.\n * Each connection gets its own HalComponent lifecycle.\n * Implements HalProtocol from covenant-protocol.\n */\n\nimport {\n HalComponent,\n Pin,\n Param,\n getMsgLevel,\n setMsgLevel,\n getValue,\n getInfoPins,\n getInfoSignals,\n getInfoParams,\n newSignal,\n pinHasWriter,\n setSignalValue,\n} from \"@linuxcnc-node/hal\";\nimport type { HalType, HalPinDir, HalParamDir } from \"@linuxcnc-node/types\";\nimport type { HalProtocol, HalValue, HalDelta } from \"covenant-protocol\";\nimport type { HostConnection } from \"@edenapp/types\";\nimport picomatch from \"picomatch\";\n\nconst SERVICE_NAME = \"hal\";\n\ninterface ConnectionState {\n component: HalComponent | null;\n pins: Map<string, Pin>;\n params: Map<string, Param>;\n lastValues: Map<string, HalValue>;\n cursor: number;\n pollInterval: NodeJS.Timeout | null;\n}\n\n/**\n * Initialize the HAL service\n */\nexport function initHalService(): void {\n worker!.appBus.exposeService(\n SERVICE_NAME,\n (connection, { appId: clientAppId }) => {\n console.log(`[HAL] Client connected: ${clientAppId}`);\n\n const typedConn = connection as HostConnection<HalProtocol>;\n\n // Per-connection state\n const state: ConnectionState = {\n component: null,\n pins: new Map(),\n params: new Map(),\n lastValues: new Map(),\n cursor: 0,\n pollInterval: null,\n };\n\n // Clean up on disconnect\n connection.onClose(() => {\n console.log(`[HAL] Client disconnected: ${clientAppId}`);\n if (state.pollInterval) {\n clearInterval(state.pollInterval);\n }\n if (state.component) {\n state.component.dispose();\n }\n });\n\n // Start polling for value changes\n function startPolling(): void {\n if (state.pollInterval) return;\n\n state.pollInterval = setInterval(() => {\n if (!state.component) return;\n\n const changes: Array<{ name: string; value: HalValue }> = [];\n\n // Check all pins and params for changes\n for (const [name, pin] of state.pins) {\n const value = pin.getValue();\n const lastValue = state.lastValues.get(name);\n if (value !== lastValue) {\n changes.push({ name, value });\n state.lastValues.set(name, value);\n }\n }\n\n for (const [name, param] of state.params) {\n const value = param.getValue();\n const lastValue = state.lastValues.get(name);\n if (value !== lastValue) {\n changes.push({ name, value });\n state.lastValues.set(name, value);\n }\n }\n\n if (changes.length > 0) {\n state.cursor++;\n const delta: HalDelta = {\n changes,\n cursor: state.cursor,\n timestamp: Date.now(),\n };\n try {\n typedConn.send(\"items-delta\", delta);\n } catch (err) {\n console.error(\"[HAL] Error sending delta:\", err);\n }\n }\n }, 10); // 10ms polling interval\n }\n\n // === COMPONENT HANDLERS ===\n\n typedConn.handle(\"component/init\", ({ name, prefix }) => {\n if (state.component) {\n return {\n success: false,\n componentName: \"\",\n error: \"Component already initialized for this connection\",\n };\n }\n\n try {\n state.component = new HalComponent(name, prefix);\n return {\n success: true,\n componentName: state.component.name,\n };\n } catch (err) {\n return {\n success: false,\n componentName: \"\",\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"component/ready\", () => {\n if (!state.component) {\n return { success: false, error: \"Component not initialized\" };\n }\n\n try {\n state.component.ready();\n startPolling();\n\n typedConn.send(\"hal-ready\", {\n componentName: state.component.name,\n prefix: state.component.prefix,\n });\n\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"component/unready\", () => {\n if (!state.component) {\n return { success: false, error: \"Component not initialized\" };\n }\n\n try {\n state.component.unready();\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n // === PIN/PARAM HANDLERS ===\n\n typedConn.handle(\"pin/create\", ({ name, type, direction }) => {\n if (!state.component) {\n return {\n success: false,\n fullName: \"\",\n error: \"Component not initialized\",\n };\n }\n\n try {\n const pin = state.component.newPin(name, type, direction);\n state.pins.set(name, pin);\n state.lastValues.set(name, pin.getValue());\n\n return {\n success: true,\n fullName: `${state.component!.prefix}.${pin.name}`,\n };\n } catch (err) {\n return {\n success: false,\n fullName: \"\",\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"param/create\", ({ name, type, direction }) => {\n if (!state.component) {\n return {\n success: false,\n fullName: \"\",\n error: \"Component not initialized\",\n };\n }\n\n try {\n const param = state.component.newParam(name, type, direction);\n state.params.set(name, param);\n state.lastValues.set(name, param.getValue());\n\n return {\n success: true,\n fullName: `${state.component!.prefix}.${param.name}`,\n };\n } catch (err) {\n return {\n success: false,\n fullName: \"\",\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"item/get-value\", ({ name }) => {\n if (!state.component) {\n throw new Error(\"Component not initialized\");\n }\n\n const value = state.component.getValue(name);\n return { value };\n });\n\n typedConn.handle(\"item/set-value\", ({ name, value }) => {\n if (!state.component) {\n return { success: false, error: \"Component not initialized\" };\n }\n\n try {\n state.component.setValue(name, value);\n state.lastValues.set(name, value);\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"items/sync\", () => {\n if (!state.component) {\n throw new Error(\"Component not initialized\");\n }\n\n // Build current items snapshot\n const items: Record<string, HalValue> = {};\n for (const [name, pin] of state.pins) {\n items[name] = pin.getValue();\n }\n for (const [name, param] of state.params) {\n items[name] = param.getValue();\n }\n\n return {\n items,\n cursor: state.cursor,\n };\n });\n\n // === GLOBAL HANDLERS ===\n\n typedConn.handle(\"global/component-exists\", ({ componentName }) => {\n return { exists: HalComponent.exists(componentName) };\n });\n\n typedConn.handle(\"global/component-is-ready\", ({ componentName }) => {\n return { ready: HalComponent.isReady(componentName) };\n });\n\n typedConn.handle(\"global/signal-create\", ({ name, type }) => {\n try {\n newSignal(name, type);\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"global/signal-get-value\", ({ signalName }) => {\n const value = getValue(signalName);\n return { value };\n });\n\n typedConn.handle(\"global/signal-set-value\", ({ signalName, value }) => {\n try {\n setSignalValue(signalName, value);\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"global/signal-connect\", ({ pinName, signalName }) => {\n // This would need net/connect functionality from hal\n // For now, return not implemented\n return { success: false, error: \"Not implemented - use halcmd net\" };\n });\n\n typedConn.handle(\"global/signal-disconnect\", ({ pinName }) => {\n // This would need disconnect functionality from hal\n return {\n success: false,\n error: \"Not implemented - use halcmd unlinkp\",\n };\n });\n\n typedConn.handle(\"global/pin-has-writer\", ({ pinName }) => {\n return { hasWriter: pinHasWriter(pinName) };\n });\n\n typedConn.handle(\"global/get-value\", ({ name }) => {\n const value = getValue(name);\n // Determine type based on whether it's a pin, param, or signal\n // For simplicity, return \"pin\" - could be enhanced with proper detection\n return { value, type: \"pin\" as const };\n });\n\n typedConn.handle(\"global/list-pins\", ({ filter }) => {\n let pins = getInfoPins();\n if (filter) {\n const isMatch = picomatch(filter);\n pins = pins.filter((p) => isMatch(p.name));\n }\n return { pins };\n });\n\n typedConn.handle(\"global/list-params\", ({ filter }) => {\n let params = getInfoParams();\n if (filter) {\n const isMatch = picomatch(filter);\n params = params.filter((p) => isMatch(p.name));\n }\n return { params };\n });\n\n typedConn.handle(\"global/list-signals\", ({ filter }) => {\n let signals = getInfoSignals();\n if (filter) {\n const isMatch = picomatch(filter);\n signals = signals.filter((s) => isMatch(s.name));\n }\n return { signals };\n });\n\n typedConn.handle(\"global/list-all\", () => {\n return {\n pins: getInfoPins(),\n params: getInfoParams(),\n signals: getInfoSignals(),\n };\n });\n\n typedConn.handle(\"global/msg-level-get\", () => {\n return { level: getMsgLevel() };\n });\n\n typedConn.handle(\"global/msg-level-set\", ({ level }) => {\n const previousLevel = getMsgLevel();\n setMsgLevel(level);\n return { success: true, previousLevel };\n });\n\n // === CONNECTION HANDLERS ===\n\n typedConn.handle(\"ping\", () => {\n return { timestamp: Date.now() };\n });\n\n typedConn.handle(\"get-status\", () => {\n return {\n connected: true,\n componentName: state.component?.name ?? \"\",\n componentReady: state.component\n ? HalComponent.isReady(state.component.name)\n : false,\n pinCount: state.pins.size,\n paramCount: state.params.size,\n uptime: process.uptime(),\n };\n });\n },\n { description: \"HAL component management and I/O access\" }\n );\n\n console.log(`[HAL] Service exposed as '${SERVICE_NAME}'`);\n}\n","/**\n * Position Logger Service\n *\n * Exposes machine position logging and history streaming via AppBus.\n * Implements PositionLoggerProtocol from covenant-protocol.\n */\n\nimport { PositionLogger } from \"@linuxcnc-node/core\";\nimport { POSITION_STRIDE } from \"@linuxcnc-node/types\";\nimport type { PositionLoggerProtocol } from \"covenant-protocol\";\nimport type { HostConnection } from \"@edenapp/types\";\n\nconst SERVICE_NAME = \"position-logger\";\nconst UPDATE_INTERVAL_MS = 50;\n\n// Shared position logger instance\nlet logger: PositionLogger | null = null;\n\n// Cursor tracking\nlet cursor = 0;\nlet lastHistoryCount = 0;\n\n// Connected clients\nconst connections = new Map<string, HostConnection<PositionLoggerProtocol>>();\n\n// Update interval for pushing position updates\nlet updateInterval: NodeJS.Timeout | null = null;\n\n/**\n * Start the update loop for pushing position deltas to clients\n */\nfunction startUpdateLoop(): void {\n if (updateInterval) return;\n\n updateInterval = setInterval(() => {\n if (!logger || connections.size === 0) return;\n\n const currentCount = logger.getHistoryCount();\n if (currentCount <= lastHistoryCount) return;\n\n // Get new points since last update\n const newPointCount = currentCount - lastHistoryCount;\n const newPoints = logger.getMotionHistory(lastHistoryCount, newPointCount);\n\n cursor++;\n lastHistoryCount = currentCount;\n\n // Push to all connected clients - cast to any to handle type conflicts\n const message = {\n points: newPoints,\n count: newPointCount,\n cursor,\n };\n\n for (const conn of connections.values()) {\n try {\n conn.send(\"position-update\", message);\n } catch (err) {\n console.error(\"[PositionLogger] Error sending update:\", err);\n }\n }\n }, UPDATE_INTERVAL_MS);\n}\n\n/**\n * Stop the update loop\n */\nfunction stopUpdateLoop(): void {\n if (updateInterval) {\n clearInterval(updateInterval);\n updateInterval = null;\n }\n}\n\n/**\n * Initialize the Position Logger service\n */\nexport function initPositionLoggerService(): void {\n // Create shared logger instance\n logger = new PositionLogger();\n\n worker!.appBus.exposeService(\n SERVICE_NAME,\n (connection, { appId: clientAppId }) => {\n console.log(`[PositionLogger] Client connected: ${clientAppId}`);\n\n const typedConn = connection as HostConnection<PositionLoggerProtocol>;\n connections.set(clientAppId, typedConn);\n\n // Handle disconnect\n connection.onClose(() => {\n console.log(`[PositionLogger] Client disconnected: ${clientAppId}`);\n connections.delete(clientAppId);\n\n // Stop update loop if no clients\n if (connections.size === 0) {\n stopUpdateLoop();\n }\n });\n\n // Start handler\n typedConn.handle(\"start\", ({ interval, maxHistory }) => {\n if (!logger) {\n return { success: false, cursor: 0 };\n }\n\n logger.start({\n interval: interval ?? 0.01,\n maxHistorySize: maxHistory ?? 10000,\n });\n\n lastHistoryCount = 0;\n cursor++;\n\n // Start update loop if not running\n startUpdateLoop();\n\n return { success: true, cursor };\n });\n\n // Stop handler\n typedConn.handle(\"stop\", () => {\n if (!logger) {\n return { success: false };\n }\n\n logger.stop();\n return { success: true };\n });\n\n // Clear handler\n typedConn.handle(\"clear\", () => {\n if (!logger) {\n return { success: false };\n }\n\n logger.clear();\n lastHistoryCount = 0;\n cursor++;\n\n return { success: true };\n });\n\n typedConn.handle(\"sync\", () => {\n if (!logger) {\n return {\n history: new Float64Array(0),\n count: 0,\n cursor: 0,\n };\n }\n\n const currentCount = logger.getHistoryCount();\n const history = logger.getMotionHistory(0, currentCount);\n\n return {\n history,\n count: history.length / POSITION_STRIDE,\n cursor,\n };\n });\n\n typedConn.handle(\"get-current\", () => {\n if (!logger) {\n return { position: null };\n }\n\n const position = logger.getCurrentPosition();\n return { position };\n });\n\n // Get cursor\n typedConn.handle(\"get-cursor\", () => {\n return { cursor };\n });\n\n // Ping\n typedConn.handle(\"ping\", () => {\n return { timestamp: Date.now() };\n });\n },\n { description: \"Machine position logging and history streaming\" }\n );\n\n console.log(`[PositionLogger] Service exposed as '${SERVICE_NAME}'`);\n}\n","/**\n * Covenant Bridge Backend\n *\n * Main entry point for the LinuxCNC-Eden bridge.\n * Initializes and exposes all AppBus services.\n */\n\nimport { initLinuxCNCService } from \"./services/linuxcnc\";\nimport { initGCodeService } from \"./services/gcode\";\nimport { initHalService } from \"./services/hal\";\nimport { initPositionLoggerService } from \"./services/position-logger\";\n\nconst appId = process.env.EDEN_APP_ID;\nconsole.log(`[Covenant Bridge] Starting for ${appId}`);\n\n// Initialize all services\ninitLinuxCNCService();\ninitGCodeService();\ninitHalService();\ninitPositionLoggerService();\n\nconsole.log(\"[Covenant Bridge] All services initialized\");\n"],"mappings":"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","names":["exports","obj","key","def","p","undef","split","length","exports","exports","StatChannel","TaskMode","exports","TaskState","ExecState","InterpState","TrajMode","MotionType","KinematicsType","RcsStatus","ProgramUnits","NmlMessageType","JointType","OrientState","EmcDebug","exports","PositionLoggerIndex","PositionIndex","OperationType","exports","Plane","exports","exports","CommandChannel","exports","ErrorChannel","exports","PositionLogger","cursor","require_dist","exports","exports","parseGCode","exports","require_constants","exports","exports","Pin","Param","exports","HalComponent","exports","getMsgLevel","setMsgLevel","getValue","getInfoPins","getInfoSignals","getInfoParams","newSignal","pinHasWriter","setSignalValue","require_dist","exports","require_constants","exports","module","exports","exports","module","exports","module","opts","value","rest","source","exports","module","picomatch","state","require_picomatch","exports","module","picomatch","SERVICE_NAME","SERVICE_NAME","picomatch","import_core","SERVICE_NAME","connections"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/.pnpm/@linuxcnc-node+core@2.2.1/node_modules/@linuxcnc-node/core/dist/constants.js","../../node_modules/.pnpm/dlv@1.1.3/node_modules/dlv/index.js","../../node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js","../../node_modules/.pnpm/@linuxcnc-node+core@2.2.1/node_modules/@linuxcnc-node/core/dist/statChannel.js","../../node_modules/.pnpm/@linuxcnc-node+types@2.2.1/node_modules/@linuxcnc-node/types/src/constants.ts","../../node_modules/.pnpm/@linuxcnc-node+types@2.2.1/node_modules/@linuxcnc-node/types/src/core.ts","../../node_modules/.pnpm/@linuxcnc-node+types@2.2.1/node_modules/@linuxcnc-node/types/src/gcode.ts","../../node_modules/.pnpm/@linuxcnc-node+types@2.2.1/node_modules/@linuxcnc-node/types/src/index.ts","../../node_modules/.pnpm/@linuxcnc-node+core@2.2.1/node_modules/@linuxcnc-node/core/dist/commandChannel.js","../../node_modules/.pnpm/@linuxcnc-node+core@2.2.1/node_modules/@linuxcnc-node/core/dist/errorChannel.js","../../node_modules/.pnpm/@linuxcnc-node+core@2.2.1/node_modules/@linuxcnc-node/core/dist/positionLogger.js","../../node_modules/.pnpm/@linuxcnc-node+core@2.2.1/node_modules/@linuxcnc-node/core/dist/index.js","../../node_modules/.pnpm/@linuxcnc-node+gcode@2.2.1/node_modules/@linuxcnc-node/gcode/src/ts/parser.ts","../../node_modules/.pnpm/@linuxcnc-node+gcode@2.2.1/node_modules/@linuxcnc-node/gcode/src/ts/index.ts","../../node_modules/.pnpm/@linuxcnc-node+hal@2.2.1/node_modules/@linuxcnc-node/hal/dist/constants.js","../../node_modules/.pnpm/@linuxcnc-node+hal@2.2.1/node_modules/@linuxcnc-node/hal/dist/item.js","../../node_modules/.pnpm/@linuxcnc-node+hal@2.2.1/node_modules/@linuxcnc-node/hal/dist/component.js","../../node_modules/.pnpm/@linuxcnc-node+hal@2.2.1/node_modules/@linuxcnc-node/hal/dist/functions.js","../../node_modules/.pnpm/@linuxcnc-node+hal@2.2.1/node_modules/@linuxcnc-node/hal/dist/index.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/constants.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/utils.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/scan.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/parse.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/picomatch.js","../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/index.js","../src/services/linuxcnc.ts","../src/services/gcode.ts","../src/services/hal.ts","../src/services/position-logger.ts","../src/backend.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addon = void 0;\n// Native addon - loaded immediately on module import\nfunction loadAddon() {\n const paths = [\n \"../build/Release/nml_addon.node\",\n \"../../build/Release/nml_addon.node\", // Fallback for debug builds\n ];\n const errors = [];\n for (const path of paths) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require(path);\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n errors.push(`${path}: ${message}`);\n // Try next path\n }\n }\n throw new Error(`Failed to load linuxcnc-node nml native addon. Please ensure it's built correctly and that LinuxCNC is in your PATH/LD_LIBRARY_PATH.\\n${errors.join(\"\\n\")}`);\n}\nexports.addon = loadAddon();\n","export default function dlv(obj, key, def, p, undef) {\n\tkey = key.split ? key.split('.') : key;\n\tfor (p = 0; p < key.length; p++) {\n\t\tobj = obj ? obj[key[p]] : undef;\n\t}\n\treturn obj === undef ? def : obj;\n}\n","function dset(obj, keys, val) {\n\tkeys.split && (keys=keys.split('.'));\n\tvar i=0, l=keys.length, t=obj, x, k;\n\twhile (i < l) {\n\t\tk = ''+keys[i++];\n\t\tif (k === '__proto__' || k === 'constructor' || k === 'prototype') break;\n\t\tt = t[k] = (i === l) ? val : (typeof(x=t[k])===typeof(keys)) ? x : (keys[i]*0 !== 0 || !!~(''+keys[i]).indexOf('.')) ? {} : [];\n\t}\n}\n\nexports.dset = dset;","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StatChannel = exports.DEFAULT_STAT_POLL_INTERVAL = void 0;\nconst node_events_1 = require(\"node:events\");\nconst constants_1 = require(\"./constants\");\nconst dlv_1 = __importDefault(require(\"dlv\"));\nconst dset_1 = require(\"dset\");\nexports.DEFAULT_STAT_POLL_INTERVAL = 50; // ms\nclass StatChannel extends node_events_1.EventEmitter {\n constructor(options) {\n super();\n this.poller = null;\n this.isPolling = false;\n this.cursor = 0;\n this.currentStat = null;\n this.watchedProperties = new Map();\n this.nativeInstance = new constants_1.addon.NativeStatChannel();\n this.pollInterval = options?.pollInterval ?? exports.DEFAULT_STAT_POLL_INTERVAL;\n // Initial full sync to populate currentStat\n this.currentStat = {};\n const initialResult = this.nativeInstance.poll(true); // force=true gets all fields\n for (const change of initialResult.changes) {\n (0, dset_1.dset)(this.currentStat, change.path, change.value);\n }\n this.cursor = initialResult.cursor;\n this.startPolling();\n }\n startPolling() {\n if (this.poller || !this.nativeInstance)\n return;\n this.poller = setInterval(() => this.performPoll(), this.pollInterval);\n }\n stopPolling() {\n if (this.poller) {\n clearInterval(this.poller);\n this.poller = null;\n }\n }\n performPoll() {\n if (this.isPolling)\n return; // Prevent re-entrancy\n this.isPolling = true;\n try {\n const result = this.nativeInstance.poll();\n this.cursor = result.cursor;\n if (result.changes.length > 0 && this.currentStat) {\n // Apply deltas incrementally to local state (no full stat fetch)\n for (const change of result.changes) {\n (0, dset_1.dset)(this.currentStat, change.path, change.value);\n }\n // Emit raw deltas for listeners who want the batch\n this.emit(\"delta\", result.changes);\n // Notify individual property watchers via EventEmitter\n // Only check properties that actually changed (from C++)\n for (const change of result.changes) {\n const path = change.path;\n const watched = this.watchedProperties.get(path);\n if (watched) {\n const oldValue = watched.lastValue;\n const newValue = change.value;\n // Update lastValue\n watched.lastValue =\n typeof newValue === \"object\" && newValue !== null\n ? JSON.parse(JSON.stringify(newValue))\n : newValue;\n // Emit to listeners\n const listeners = this.rawListeners(path);\n for (const listener of listeners) {\n try {\n listener(newValue, oldValue, path);\n }\n catch (e) {\n console.error(`Error in StatChannel watch callback for ${path}:`, e);\n }\n }\n }\n }\n }\n }\n catch (e) {\n console.error(\"Error during StatChannel poll:\", e);\n }\n finally {\n this.isPolling = false;\n }\n }\n /**\n * Ensures that a property path is being tracked for changes.\n * This initializes the lastValue for comparing changes.\n */\n ensureWatched(propertyPath) {\n if (!this.watchedProperties.has(propertyPath)) {\n const initialValue = this.currentStat\n ? (0, dlv_1.default)(this.currentStat, propertyPath)\n : null;\n this.watchedProperties.set(propertyPath, {\n lastValue: typeof initialValue === \"object\" && initialValue !== null\n ? JSON.parse(JSON.stringify(initialValue))\n : initialValue,\n });\n }\n }\n on(event, listener) {\n if (event === \"delta\") {\n return super.on(event, listener);\n }\n this.ensureWatched(event);\n return super.on(event, listener);\n }\n /**\n * Registers a one-time listener for changes to a specific property path.\n * The listener will be removed after it fires once.\n * @param propertyPath A dot-separated path to the property.\n * @param listener The function to call when the property's value changes.\n * @returns this (for chaining)\n */\n once(propertyPath, listener) {\n this.ensureWatched(propertyPath);\n return super.once(propertyPath, listener);\n }\n off(event, listener) {\n if (event === \"delta\") {\n return super.off(event, listener);\n }\n const result = super.off(event, listener);\n // Clean up the watched property if no more listeners\n if (this.listenerCount(event) === 0) {\n this.watchedProperties.delete(event);\n }\n return result;\n }\n /**\n * Removes a listener for a specific property path.\n * Alias for off().\n * @param propertyPath The property path.\n * @param listener The listener function to remove.\n * @returns this (for chaining)\n */\n removeListener(propertyPath, listener) {\n return this.off(propertyPath, listener);\n }\n /**\n * Sets the polling interval for status updates.\n * @param interval The new interval in milliseconds.\n */\n setPollInterval(interval) {\n this.pollInterval = Math.max(10, interval); // Ensure a minimum interval\n this.stopPolling();\n this.startPolling();\n }\n /**\n * Gets the current polling interval.\n * @returns The interval in milliseconds.\n */\n getPollInterval() {\n return this.pollInterval;\n }\n /**\n * Retrieves the most recent full status object.\n * @returns The current LinuxCNCStat object, or null if not yet available.\n */\n get() {\n return this.currentStat;\n }\n /**\n * Forces a full resync of the stat object from native.\n * Use this if cursor gaps are detected or for initial sync scenarios.\n */\n sync() {\n this.currentStat = {};\n const result = this.nativeInstance.poll(true); // force=true gets all fields\n for (const change of result.changes) {\n (0, dset_1.dset)(this.currentStat, change.path, change.value);\n }\n this.cursor = result.cursor;\n // Update all watched property lastValues\n this.watchedProperties.forEach((watched, path) => {\n watched.lastValue = this.currentStat\n ? (0, dlv_1.default)(this.currentStat, path)\n : null;\n });\n }\n /**\n * Gets the current cursor value for sync verification.\n * The cursor increments each time the native layer detects changes.\n * @returns The current cursor value.\n */\n getCursor() {\n return this.cursor;\n }\n /**\n * Cleans up resources, stopping the polling timer.\n */\n destroy() {\n this.stopPolling();\n this.watchedProperties.clear();\n this.removeAllListeners();\n // Properly disconnect from the native NML channel\n if (this.nativeInstance) {\n this.nativeInstance.disconnect();\n }\n }\n // --- Convenience Getters for common properties ---\n // These access the locally cached `this.currentStat`\n get task() {\n return this.currentStat?.task;\n }\n get motion() {\n return this.currentStat?.motion;\n }\n get io() {\n return this.currentStat?.io;\n }\n get toolTable() {\n return this.currentStat?.toolTable;\n }\n}\nexports.StatChannel = StatChannel;\n",null,null,null,null,"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CommandChannel = void 0;\nconst constants_1 = require(\"./constants\");\nconst types_1 = require(\"@linuxcnc-node/types\");\nclass CommandChannel {\n constructor() {\n this.nativeInstance = new constants_1.addon.NativeCommandChannel();\n }\n async exec(cmdFunc, ...args) {\n try {\n const status = await cmdFunc.apply(this.nativeInstance, args);\n if (status !== types_1.RcsStatus.DONE && status !== types_1.RcsStatus.EXEC) {\n // EXEC can be ok for some commands that take time\n // Consider if specific commands expect EXEC or only DONE\n // For now, any non-DONE/non-EXEC is potentially an issue to warn about or handle\n throw new Error(`Command failed with RCS status: ${types_1.RcsStatus[status] || status}`);\n }\n return status;\n }\n catch (e) {\n // Native NAPI methods reject promises for async errors\n throw new Error(`Command native execution failed: ${e.message || e}`);\n }\n }\n // --- Task Commands ---\n /**\n * Sets the task execution mode for LinuxCNC\n *\n * @param mode - The task mode to set (MDI, MANUAL, or AUTO)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Switch to MDI mode for manual data input\n * await commandChannel.setTaskMode(TaskMode.MDI);\n *\n * // Switch to manual mode for jogging\n * await commandChannel.setTaskMode(TaskMode.MANUAL);\n *\n * // Switch to auto mode for program execution\n * await commandChannel.setTaskMode(TaskMode.AUTO);\n * ```\n */\n async setTaskMode(mode) {\n return this.exec(this.nativeInstance.setTaskMode, mode);\n }\n /**\n * Sets the task state for LinuxCNC\n *\n * @param state - The task state to set (ESTOP, ESTOP_RESET, OFF, or ON)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable E-stop\n * await commandChannel.setState(TaskState.ESTOP);\n *\n * // Reset E-stop\n * await commandChannel.setState(TaskState.ESTOP_RESET);\n *\n * // Turn machine on\n * await commandChannel.setState(TaskState.ON);\n * ```\n */\n async setState(state) {\n return this.exec(this.nativeInstance.setState, state);\n }\n /**\n * On completion of this call, the VAR file on disk is updated with live values from the interpreter.\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n */\n async taskPlanSynch() {\n return this.exec(this.nativeInstance.taskPlanSynch);\n }\n /**\n * Resets the G-code interpreter\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n */\n async resetInterpreter() {\n return this.exec(this.nativeInstance.resetInterpreter);\n }\n /**\n * Opens a G-code program file for execution\n *\n * @param filePath - Absolute path to the G-code file to open\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Open a G-code program\n * await commandChannel.programOpen('/home/user/programs/part.ngc');\n * ```\n */\n async programOpen(filePath) {\n return this.exec(this.nativeInstance.programOpen, filePath);\n }\n /**\n * Runs the currently loaded G-code program\n *\n * @param startLine - Line number to start execution from (default: 0 for beginning)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Run program from the beginning\n * await commandChannel.runProgram();\n *\n * // Run program starting from line 100\n * await commandChannel.runProgram(100);\n * ```\n */\n async runProgram(startLine = 0) {\n return this.exec(this.nativeInstance.runProgram, startLine);\n }\n /**\n * Pauses the currently running G-code program\n * Program can be resumed with resumeProgram()\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Pause the running program\n * await commandChannel.pauseProgram();\n * ```\n */\n async pauseProgram() {\n return this.exec(this.nativeInstance.pauseProgram);\n }\n /**\n * Resumes a paused G-code program\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Resume the paused program\n * await commandChannel.resumeProgram();\n * ```\n */\n async resumeProgram() {\n return this.exec(this.nativeInstance.resumeProgram);\n }\n /**\n * Executes a single step of the G-code program\n * Advances program execution by one line/block\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Step through program one line at a time\n * await commandChannel.stepProgram();\n * ```\n */\n async stepProgram() {\n return this.exec(this.nativeInstance.stepProgram);\n }\n /**\n * Reverses program execution direction\n * Used for backing up through a program\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n */\n async reverseProgram() {\n return this.exec(this.nativeInstance.reverseProgram);\n }\n /**\n * Sets program execution direction to forward\n * Used after reversing to resume normal forward execution\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n */\n async forwardProgram() {\n return this.exec(this.nativeInstance.forwardProgram);\n }\n /**\n * Aborts the currently running task/program\n * Immediately stops all motion and task execution\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Emergency stop of current program\n * await commandChannel.abortTask();\n * ```\n */\n async abortTask() {\n return this.exec(this.nativeInstance.abortTask);\n }\n /**\n * Enables or disables optional stop (M1) functionality\n * When enabled, M1 codes in programs will pause execution\n *\n * @param enable - true to enable optional stops, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable optional stops\n * await commandChannel.setOptionalStop(true);\n *\n * // Disable optional stops\n * await commandChannel.setOptionalStop(false);\n * ```\n */\n async setOptionalStop(enable) {\n return this.exec(this.nativeInstance.setOptionalStop, enable);\n }\n /**\n * Enables or disables block delete functionality\n * When enabled, lines beginning with \"/\" are skipped during execution\n *\n * @param enable - true to enable block delete, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable block delete - skip lines starting with \"/\"\n * await commandChannel.setBlockDelete(true);\n *\n * // Disable block delete - execute all lines\n * await commandChannel.setBlockDelete(false);\n * ```\n */\n async setBlockDelete(enable) {\n return this.exec(this.nativeInstance.setBlockDelete, enable);\n }\n /**\n * Executes a Manual Data Input (MDI) command\n * Allows direct execution of G-code commands without a program file\n *\n * @param command - G-code command string to execute\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Move to position\n * await commandChannel.mdi('G0 X10 Y20 Z5');\n *\n * // Set spindle speed\n * await commandChannel.mdi('S1000 M3');\n * ```\n */\n async mdi(command) {\n return this.exec(this.nativeInstance.mdi, command);\n }\n // --- Trajectory Commands ---\n /**\n * Sets the trajectory mode for coordinated motion\n *\n * @param mode - The trajectory mode (FREE, COORD, or TELEOP)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set to coordinated mode for normal G-code execution\n * await commandChannel.setTrajMode(TrajMode.COORD);\n *\n * // Set to free mode for individual joint control\n * await commandChannel.setTrajMode(TrajMode.FREE);\n * ```\n */\n async setTrajMode(mode) {\n return this.exec(this.nativeInstance.setTrajMode, mode);\n }\n /**\n * Sets the maximum velocity for trajectory planning\n *\n * @param velocity - Maximum velocity in machine units per second\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set maximum velocity to 200 units/second\n * await commandChannel.setMaxVelocity(200);\n * ```\n */\n async setMaxVelocity(velocity) {\n return this.exec(this.nativeInstance.setMaxVelocity, velocity);\n }\n /**\n * Sets the feedrate override scale factor\n *\n * @param scale - Feedrate scale factor (1.0 = 100%, 0.5 = 50%, 2.0 = 200%)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set feedrate to 50% of programmed values\n * await commandChannel.setFeedRate(0.5);\n *\n * // Set feedrate to 120% of programmed values\n * await commandChannel.setFeedRate(1.2);\n * ```\n */\n async setFeedRate(scale) {\n return this.exec(this.nativeInstance.setFeedRate, scale);\n }\n /**\n * Sets the rapid traverse override scale factor\n *\n * @param scale - Rapid rate scale factor (1.0 = 100%, 0.25 = 25%)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set rapid rate to 50%\n * await commandChannel.setRapidRate(0.5);\n * ```\n */\n async setRapidRate(scale) {\n return this.exec(this.nativeInstance.setRapidRate, scale);\n }\n /**\n * Sets the spindle speed override scale factor\n *\n * @param scale - Spindle override scale factor (1.0 = 100%)\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set spindle speed to 80% of programmed values\n * await commandChannel.setSpindleOverride(0.8);\n *\n * // Set spindle 1 speed to 110%\n * await commandChannel.setSpindleOverride(1.1, 1);\n * ```\n */\n async setSpindleOverride(scale, spindleIndex = 0) {\n return this.exec(this.nativeInstance.setSpindleOverride, scale, spindleIndex);\n }\n /**\n * Overrides axis limits to allow motion beyond normal soft limits\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Override limits for recovery from limit switch activation\n * await commandChannel.overrideLimits();\n * ```\n */\n async overrideLimits() {\n return this.exec(this.nativeInstance.overrideLimits);\n }\n /**\n * Enables or disables teleop mode\n *\n * @param enable - true to enable teleop mode, false for joint mode\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable teleop mode for Cartesian jogging\n * await commandChannel.teleopEnable(true);\n *\n * // Disable teleop mode for joint jogging\n * await commandChannel.teleopEnable(false);\n * ```\n */\n async teleopEnable(enable) {\n return this.exec(this.nativeInstance.teleopEnable, enable);\n }\n /**\n * Enables or disables feedrate override functionality\n *\n * @param enable - true to enable feedrate override, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable feedrate override control\n * await commandChannel.setFeedOverrideEnable(true);\n * ```\n */\n async setFeedOverrideEnable(enable) {\n return this.exec(this.nativeInstance.setFeedOverrideEnable, enable);\n }\n /**\n * Enables or disables spindle speed override functionality\n *\n * @param enable - true to enable spindle override, false to disable\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable spindle override control\n * await commandChannel.setSpindleOverrideEnable(true);\n * ```\n */\n async setSpindleOverrideEnable(enable, spindleIndex = 0) {\n return this.exec(this.nativeInstance.setSpindleOverrideEnable, enable, spindleIndex);\n }\n /**\n * Enables or disables feed hold functionality\n * When enabled, allows pausing motion without stopping the program\n *\n * @param enable - true to enable feed hold, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable feed hold capability\n * await commandChannel.setFeedHoldEnable(true);\n * ```\n */\n async setFeedHoldEnable(enable) {\n return this.exec(this.nativeInstance.setFeedHoldEnable, enable);\n }\n /**\n * Enables or disables adaptive feed functionality\n * Allows external signals to modulate feedrate in real-time\n *\n * @param enable - true to enable adaptive feed, false to disable\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Enable adaptive feed for force-sensitive machining\n * await commandChannel.setAdaptiveFeedEnable(true);\n * ```\n */\n async setAdaptiveFeedEnable(enable) {\n return this.exec(this.nativeInstance.setAdaptiveFeedEnable, enable);\n }\n // --- Joint Commands ---\n /**\n * Homes a specific joint by moving it to its home position\n *\n * @param jointIndex - Zero-based index of the joint to home, -1 to home all joints\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Home joint 0 (typically X-axis)\n * await commandChannel.homeJoint(0);\n *\n * // Home joint 2 (typically Z-axis)\n * await commandChannel.homeJoint(2);\n *\n * // Home all joints\n * await commandChannel.homeJoint(-1);\n * ```\n */\n async homeJoint(jointIndex) {\n return this.exec(this.nativeInstance.homeJoint, jointIndex);\n }\n /**\n * Unhomes a specific joint, clearing its homed status\n *\n * @param jointIndex - Zero-based index of the joint to unhome, -1 to unhome all joints\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Unhome joint 1 (typically Y-axis)\n * await commandChannel.unhomeJoint(1);\n *\n * // Unhome all joints\n * await commandChannel.unhomeJoint(-1);\n * ```\n */\n async unhomeJoint(jointIndex) {\n return this.exec(this.nativeInstance.unhomeJoint, jointIndex);\n }\n /**\n * Stops jogging motion for a specific axis or joint\n *\n * @param axisOrJointIndex - Index of the axis (0=X,1=Y,2=Z...) or joint to stop\n * @param isJointJog - true for joint jogging, false for axis jogging\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Stop axis X jogging\n * await commandChannel.jogStop(0, false);\n *\n * // Stop joint 1 jogging\n * await commandChannel.jogStop(1, true);\n * ```\n */\n async jogStop(axisOrJointIndex, isJointJog) {\n return this.exec(this.nativeInstance.jogStop, axisOrJointIndex, isJointJog);\n }\n /**\n * Starts continuous jogging motion for a specific axis or joint\n *\n * @param axisOrJointIndex - Index of the axis (0=X,1=Y,2=Z...) or joint to jog\n * @param isJointJog - true for joint jogging, false for axis jogging\n * @param speed - Jogging speed in machine units per second\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Jog X axis continuously at 10 units/sec\n * await commandChannel.jogContinuous(0, false, 10);\n *\n * // Jog joint 2 continuously at -5 units/sec (negative direction)\n * await commandChannel.jogContinuous(2, true, -5);\n * ```\n */\n async jogContinuous(axisOrJointIndex, isJointJog, speed) {\n return this.exec(this.nativeInstance.jogContinuous, axisOrJointIndex, isJointJog, speed);\n }\n /**\n * Jogs a specific distance at a given speed for an axis or joint\n *\n * @param axisOrJointIndex - Index of the axis (0=X,1=Y,2=Z...) or joint to jog\n * @param isJointJog - true for joint jogging, false for axis jogging\n * @param speed - Jogging speed in machine units per second\n * @param increment - Distance to jog in machine units\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Jog Y axis 1.0 unit at 5 units/sec\n * await commandChannel.jogIncrement(1, false, 5, 1.0);\n *\n * // Jog joint 0 back 0.1 units at 2 units/sec\n * await commandChannel.jogIncrement(0, true, 2, -0.1);\n * ```\n */\n async jogIncrement(axisOrJointIndex, isJointJog, speed, increment) {\n return this.exec(this.nativeInstance.jogIncrement, axisOrJointIndex, isJointJog, speed, increment);\n }\n /**\n * Sets the minimum position limit for a joint\n *\n * @param jointIndex - Zero-based index of the joint\n * @param limit - Minimum position limit in machine units\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set minimum limit for joint 0 to -100 units\n * await commandChannel.setMinPositionLimit(0, -100);\n * ```\n */\n async setMinPositionLimit(jointIndex, limit) {\n return this.exec(this.nativeInstance.setMinPositionLimit, jointIndex, limit);\n }\n /**\n * Sets the maximum position limit for a joint\n *\n * @param jointIndex - Zero-based index of the joint\n * @param limit - Maximum position limit in machine units\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set maximum limit for joint 0 to 200 units\n * await commandChannel.setMaxPositionLimit(0, 200);\n * ```\n */\n async setMaxPositionLimit(jointIndex, limit) {\n return this.exec(this.nativeInstance.setMaxPositionLimit, jointIndex, limit);\n }\n // --- Spindle Commands ---\n /**\n * Turns on the spindle at a specified speed\n *\n * @param speed - Spindle speed in RPM (positive = clockwise, negative = counterclockwise)\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @param waitForSpeed - Whether to wait for spindle to reach speed before continuing (default: true)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Turn on spindle at 1000 RPM clockwise\n * await commandChannel.spindleOn(1000);\n *\n * // Turn on spindle 1 at 500 RPM counterclockwise\n * await commandChannel.spindleOn(-500, 1);\n *\n * // Start spindle without waiting for speed\n * await commandChannel.spindleOn(800, 0, false);\n * ```\n */\n async spindleOn(speed, spindleIndex = 0, waitForSpeed = true) {\n return this.exec(this.nativeInstance.spindleOn, speed, spindleIndex, waitForSpeed);\n }\n /**\n * Increases spindle speed by a predefined increment\n * Spindle must already be running\n *\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Increase speed of main spindle\n * await commandChannel.spindleIncrease();\n *\n * // Increase speed of spindle 1\n * await commandChannel.spindleIncrease(1);\n * ```\n */\n async spindleIncrease(spindleIndex = 0) {\n return this.exec(this.nativeInstance.spindleIncrease, spindleIndex);\n }\n /**\n * Decreases spindle speed by a predefined increment\n * Spindle must already be running\n *\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Decrease speed of main spindle\n * await commandChannel.spindleDecrease();\n *\n * // Decrease speed of spindle 1\n * await commandChannel.spindleDecrease(1);\n * ```\n */\n async spindleDecrease(spindleIndex = 0) {\n return this.exec(this.nativeInstance.spindleDecrease, spindleIndex);\n }\n /**\n * Turns off the spindle\n *\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Turn off main spindle\n * await commandChannel.spindleOff();\n *\n * // Turn off spindle 1\n * await commandChannel.spindleOff(1);\n * ```\n */\n async spindleOff(spindleIndex = 0) {\n return this.exec(this.nativeInstance.spindleOff, spindleIndex);\n }\n /**\n * Engages or releases the spindle brake\n *\n * @param engage - true to engage brake, false to release brake\n * @param spindleIndex - Index of the spindle to control (default: 0)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Engage spindle brake\n * await commandChannel.spindleBrake(true);\n *\n * // Release brake on spindle 1\n * await commandChannel.spindleBrake(false, 1);\n * ```\n */\n async spindleBrake(engage, spindleIndex = 0) {\n return this.exec(this.nativeInstance.spindleBrake, engage, spindleIndex);\n }\n // --- Coolant Commands ---\n /**\n * Turns mist coolant on or off\n *\n * @param on - true to turn mist on, false to turn off\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Turn on mist coolant\n * await commandChannel.setMist(true);\n *\n * // Turn off mist coolant\n * await commandChannel.setMist(false);\n * ```\n */\n async setMist(on) {\n return this.exec(this.nativeInstance.setMist, on);\n }\n /**\n * Turns flood coolant on or off\n *\n * @param on - true to turn flood on, false to turn off\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Turn on flood coolant\n * await commandChannel.setFlood(true);\n *\n * // Turn off flood coolant\n * await commandChannel.setFlood(false);\n * ```\n */\n async setFlood(on) {\n return this.exec(this.nativeInstance.setFlood, on);\n }\n // --- Tool Commands ---\n /**\n * Reloads the tool table from disk\n * Updates the in-memory tool table with changes made to the tool table file\n *\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Reload tool table after editing the .tbl file\n * await commandChannel.loadToolTable();\n * ```\n */\n async loadToolTable() {\n return this.exec(this.nativeInstance.loadToolTable);\n }\n /**\n * Sets tool data for a specific tool number\n * Updates tool geometry and parameters in the tool table\n *\n * @param toolEntry - Tool entry containing tool number and optional geometry data\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set basic tool data\n * await commandChannel.setTool({\n * toolNo: 3,\n * pocketNo: 3\n * });\n *\n * // Set tool with geometry data\n * await commandChannel.setTool({\n * toolNo: 1,\n * pocketNo: 1,\n * diameter: 6.35,\n * offset: {\n * x: 0,\n * y: 0,\n * z: 25.4\n * }\n * });\n * ```\n */\n async setTool(toolEntry) {\n return this.exec(this.nativeInstance.setTool, toolEntry);\n }\n // --- IO Commands ---\n /**\n * Sets the state of a digital output pin\n *\n * @param index - Index of the digital output pin\n * @param value - true to set high, false to set low\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set digital output 0 high\n * await commandChannel.setDigitalOutput(0, true);\n *\n * // Set digital output 3 low\n * await commandChannel.setDigitalOutput(3, false);\n * ```\n */\n async setDigitalOutput(index, value) {\n return this.exec(this.nativeInstance.setDigitalOutput, index, value);\n }\n /**\n * Sets the value of an analog output pin\n *\n * @param index - Index of the analog output pin\n * @param value - Analog value to set\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Set analog output 0 to 13.3\n * await commandChannel.setAnalogOutput(0, 13.3);\n * ```\n */\n async setAnalogOutput(index, value) {\n return this.exec(this.nativeInstance.setAnalogOutput, index, value);\n }\n // --- Debug & Message Commands ---\n /**\n * Sets debug flags for LinuxCNC components using OR-ed EmcDebug flags\n * Multiple debug categories can be enabled simultaneously by combining flags\n *\n * @param level - Debug flags from EmcDebug enum, can be OR-ed together\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Disable all debugging\n * await commandChannel.setDebugLevel(0);\n *\n * // Enable interpreter debugging only\n * await commandChannel.setDebugLevel(EmcDebug.INTERP);\n *\n * // Enable multiple debug categories\n * await commandChannel.setDebugLevel(EmcDebug.INTERP | EmcDebug.MOTION_TIME);\n *\n * // Enable task and NML debugging\n * await commandChannel.setDebugLevel(EmcDebug.TASK_ISSUE | EmcDebug.NML);\n *\n * // Enable Python and remap debugging for custom components\n * await commandChannel.setDebugLevel(EmcDebug.PYTHON | EmcDebug.REMAP);\n * ```\n */\n async setDebugLevel(level) {\n return this.exec(this.nativeInstance.setDebugLevel, level);\n }\n /**\n * Sends an error message to the operator display\n *\n * @param message - Error message to display (max 254 characters)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Send error message\n * await commandChannel.sendOperatorError('Tool change required');\n * ```\n */\n async sendOperatorError(message) {\n return this.exec(this.nativeInstance.sendOperatorError, message);\n }\n /**\n * Sends a text message to the operator display\n *\n * @param message - Text message to display (max 254 characters)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Send informational message\n * await commandChannel.sendOperatorText('Setup complete');\n * ```\n */\n async sendOperatorText(message) {\n return this.exec(this.nativeInstance.sendOperatorText, message);\n }\n /**\n * Sends a display message to the operator\n *\n * @param message - Display message (max 254 characters)\n * @returns Promise resolving to RcsStatus indicating command completion\n *\n * @example\n * ```typescript\n * // Send display message\n * await commandChannel.sendOperatorDisplay('Insert tool T1 M6');\n * ```\n */\n async sendOperatorDisplay(message) {\n return this.exec(this.nativeInstance.sendOperatorDisplay, message);\n }\n // --- Misc ---\n /**\n * Synchronously waits for the last command to complete\n * This does the same as await but provides a synchronous way to wait for command completion\n *\n * @param timeout - Maximum time to wait in seconds (default: 5 seconds)\n * @returns RcsStatus indicating completion status (RCS_DONE, RCS_ERROR, or -1 for timeout)\n *\n * @example\n * ```typescript\n * // These two approaches are equivalent:\n *\n * // Approach 1: Using await (asynchronous)\n * await commandChannel.runProgram();\n * console.log('Program completed');\n *\n * // Approach 2: Using waitComplete (synchronous)\n * commandChannel.runProgram(); // Fire and forget - don't await\n * const status = commandChannel.waitComplete(); // Synchronously wait for completion\n * if (status === RcsStatus.DONE) {\n * console.log('Program completed');\n * }\n * ```\n */\n waitComplete(timeout) {\n if (!this.nativeInstance)\n throw new Error(\"CommandChannel native instance not available.\");\n return this.nativeInstance.waitComplete(timeout);\n }\n /**\n * Gets the serial number of the current command\n * Each command sent has a unique serial number for tracking\n *\n * @returns The current command serial number\n *\n * @example\n * ```typescript\n * // Get current command serial number\n * const serial = commandChannel.getSerial();\n * console.log(`Current command serial: ${serial}`);\n * ```\n */\n getSerial() {\n if (!this.nativeInstance)\n throw new Error(\"CommandChannel native instance not available.\");\n return this.nativeInstance.serial;\n }\n /**\n * Destroys the command channel and cleans up resources\n * Call this when done using the command channel\n */\n destroy() {\n if (this.nativeInstance) {\n this.nativeInstance.disconnect();\n }\n }\n}\nexports.CommandChannel = CommandChannel;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ErrorChannel = exports.DEFAULT_ERROR_POLL_INTERVAL = void 0;\nconst events_1 = require(\"events\");\nconst constants_1 = require(\"./constants\");\nconst types_1 = require(\"@linuxcnc-node/types\");\nexports.DEFAULT_ERROR_POLL_INTERVAL = 100; // ms\nclass ErrorChannel extends events_1.EventEmitter {\n constructor(options) {\n super();\n this.poller = null;\n this.isPolling = false;\n this.nativeInstance = new constants_1.addon.NativeErrorChannel();\n const pollInterval = options?.pollInterval ?? exports.DEFAULT_ERROR_POLL_INTERVAL;\n this.poller = setInterval(() => this.poll(), pollInterval);\n }\n poll() {\n if (this.isPolling)\n return;\n this.isPolling = true;\n try {\n const error = this.nativeInstance.poll();\n if (error) {\n this.emit(\"message\", error);\n // Emit specific event based on message type\n switch (error.type) {\n case types_1.NmlMessageType.EMC_OPERATOR_ERROR:\n this.emit(\"operatorError\", error);\n break;\n case types_1.NmlMessageType.EMC_OPERATOR_TEXT:\n this.emit(\"operatorText\", error);\n break;\n case types_1.NmlMessageType.EMC_OPERATOR_DISPLAY:\n this.emit(\"operatorDisplay\", error);\n break;\n case types_1.NmlMessageType.NML_ERROR:\n this.emit(\"nmlError\", error);\n break;\n case types_1.NmlMessageType.NML_TEXT:\n this.emit(\"nmlText\", error);\n break;\n case types_1.NmlMessageType.NML_DISPLAY:\n this.emit(\"nmlDisplay\", error);\n break;\n }\n }\n }\n catch (e) {\n console.error(\"Error during ErrorChannel poll:\", e);\n }\n finally {\n this.isPolling = false;\n }\n }\n destroy() {\n if (this.poller) {\n clearInterval(this.poller);\n this.poller = null;\n }\n this.removeAllListeners();\n this.nativeInstance.disconnect();\n }\n}\nexports.ErrorChannel = ErrorChannel;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PositionLogger = void 0;\nconst constants_1 = require(\"./constants\");\n/**\n * Position Logger for tracking machine tool path\n *\n * This class provides functionality to log the position of a LinuxCNC machine tool\n * over time. All positions are returned as Float64Array with 10 elements per point:\n * [x, y, z, a, b, c, u, v, w, motionType]\n *\n * Use PositionLoggerIndex enum (or destructure it for shorter access like data[X]) and POSITION_STRIDE constant for array access.\n */\nclass PositionLogger {\n constructor() {\n this.nativeLogger = new constants_1.addon.NativePositionLogger();\n }\n /**\n * Start position logging\n * @param options Logging options\n */\n start(options = {}) {\n const interval = options.interval || 0.01;\n const maxHistorySize = options.maxHistorySize || 10000;\n this.nativeLogger.start(interval, maxHistorySize);\n }\n /**\n * Stop position logging\n */\n stop() {\n this.nativeLogger.stop();\n }\n /**\n * Clear the position history (invalidates all previous cursors)\n */\n clear() {\n this.nativeLogger.clear();\n }\n /**\n * Get the current position as a Float64Array\n * Layout: [x, y, z, a, b, c, u, v, w, motionType]\n * @returns Float64Array with 10 values, or null if no position available\n */\n getCurrentPosition() {\n return this.nativeLogger.getCurrentPosition();\n }\n /**\n * Get the motion history as a Float64Array\n * Layout: [x, y, z, a, b, c, u, v, w, motionType] repeated for each point\n * Use POSITION_STRIDE (10) to iterate through points\n * @param startIndex Starting index (default: 0)\n * @param count Number of points to retrieve (default: all)\n * @returns Float64Array with 10 values per point\n */\n getMotionHistory(startIndex, count) {\n if (startIndex !== undefined && count !== undefined) {\n return this.nativeLogger.getMotionHistory(startIndex, count);\n }\n else if (startIndex !== undefined) {\n return this.nativeLogger.getMotionHistory(startIndex);\n }\n else {\n return this.nativeLogger.getMotionHistory();\n }\n }\n /**\n * Get the number of points in the motion history\n * @returns Number of logged points\n */\n getHistoryCount() {\n return this.nativeLogger.getHistoryCount();\n }\n /**\n * Get the most recent points from the history\n * @param count Number of recent points to get (default: 10)\n * @returns Float64Array with 10 values per point\n */\n getRecentHistory(count = 10) {\n const totalCount = this.getHistoryCount();\n if (totalCount === 0)\n return new Float64Array(0);\n const startIndex = Math.max(0, totalCount - count);\n const actualCount = Math.min(count, totalCount);\n return this.getMotionHistory(startIndex, actualCount);\n }\n /**\n * Get the current cursor position (monotonic counter of points ever added)\n * @returns Current cursor value\n */\n getCurrentCursor() {\n return this.nativeLogger.getCurrentCursor();\n }\n /**\n * Get delta points since a given cursor position\n * Use this for efficient incremental updates instead of fetching full history.\n * @param cursor Last known cursor (0 for full history)\n * @returns Delta result with points, count, new cursor, and wasReset flag\n */\n getDeltaSince(cursor) {\n return this.nativeLogger.getDeltaSince(cursor);\n }\n}\nexports.PositionLogger = PositionLogger;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PositionLogger = exports.ErrorChannel = exports.CommandChannel = exports.StatChannel = void 0;\nexports.setNmlFilePath = setNmlFilePath;\nexports.getNmlFilePath = getNmlFilePath;\nconst statChannel_1 = require(\"./statChannel\");\nObject.defineProperty(exports, \"StatChannel\", { enumerable: true, get: function () { return statChannel_1.StatChannel; } });\nconst commandChannel_1 = require(\"./commandChannel\");\nObject.defineProperty(exports, \"CommandChannel\", { enumerable: true, get: function () { return commandChannel_1.CommandChannel; } });\nconst errorChannel_1 = require(\"./errorChannel\");\nObject.defineProperty(exports, \"ErrorChannel\", { enumerable: true, get: function () { return errorChannel_1.ErrorChannel; } });\nconst positionLogger_1 = require(\"./positionLogger\");\nObject.defineProperty(exports, \"PositionLogger\", { enumerable: true, get: function () { return positionLogger_1.PositionLogger; } });\nconst constants_1 = require(\"./constants\");\nlet nmlFilePath = constants_1.addon.NMLFILE_DEFAULT;\n/**\n * Sets the NML file path for communication with LinuxCNC.\n * This must be called before creating any channel instances if using a non-default path.\n * @param filePath Absolute path to the .nml file.\n */\nfunction setNmlFilePath(filePath) {\n constants_1.addon.setNmlFilePath(filePath);\n nmlFilePath = filePath;\n}\n/**\n * Gets the current NML file path.\n * @returns The NML file path being used.\n */\nfunction getNmlFilePath() {\n return constants_1.addon.getNmlFilePath();\n}\n",null,null,"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RtapiMsgLevelFromValue = exports.HalParamDirFromValue = exports.HalPinDirFromValue = exports.HalTypeFromValue = exports.RtapiMsgLevelValue = exports.HalParamDirValue = exports.HalPinDirValue = exports.HalTypeValue = exports.halNative = void 0;\n// Native addon - loaded once on module import\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction loadAddon() {\n const paths = [\n \"../build/Release/hal_addon.node\",\n \"../../build/Release/hal_addon.node\",\n ];\n for (const path of paths) {\n try {\n return require(path);\n }\n catch {\n // Try next path\n }\n }\n throw new Error(\"Failed to load linuxcnc-node hal native addon. Please ensure it's built correctly and that LinuxCNC is in your PATH.\");\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexports.halNative = loadAddon();\n// Numeric value mappings for native interop\nexports.HalTypeValue = {\n bit: 1,\n float: 2,\n s32: 3,\n u32: 4,\n s64: 6,\n u64: 7,\n};\nexports.HalPinDirValue = {\n in: 16,\n out: 32,\n io: 48,\n};\nexports.HalParamDirValue = {\n ro: 64,\n rw: 192,\n};\nexports.RtapiMsgLevelValue = {\n none: 0,\n err: 1,\n warn: 2,\n info: 3,\n dbg: 4,\n all: 5,\n};\n// Helper to generate reverse mapping\nfunction createReverseMap(map) {\n const reverse = {};\n for (const [key, value] of Object.entries(map)) {\n reverse[value] = key;\n }\n return reverse;\n}\n// Reverse mappings for native -> TS conversion\nexports.HalTypeFromValue = createReverseMap(exports.HalTypeValue);\nexports.HalPinDirFromValue = createReverseMap(exports.HalPinDirValue);\nexports.HalParamDirFromValue = createReverseMap(exports.HalParamDirValue);\nexports.RtapiMsgLevelFromValue = createReverseMap(exports.RtapiMsgLevelValue);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Param = exports.Pin = exports.HalItem = void 0;\nconst events_1 = require(\"events\");\nclass HalItem extends events_1.EventEmitter {\n constructor(component, nameSuffix, type, direction) {\n super();\n this.component = component;\n this.name = nameSuffix;\n this.type = type;\n this.direction = direction;\n }\n /**\n * Retrieves the current value of this item.\n *\n * @returns The item's value (number or boolean depending on type).\n */\n getValue() {\n return this.component.getValue(this.name);\n }\n /**\n * Sets the value of this item.\n *\n * For pins, only applicable to `HAL_OUT` or `HAL_IO` pins.\n * For parameters, only applicable to `HAL_RW` parameters.\n *\n * @param value - The new value for the item.\n * @returns The value that was set.\n * @throws Error if trying to set an `HAL_IN` pin or `HAL_RO` parameter.\n */\n setValue(value) {\n return this.component.setValue(this.name, value);\n }\n}\nexports.HalItem = HalItem;\n/**\n * Represents a HAL pin. Instances are returned by `component.newPin()`.\n *\n * @example\n * ```typescript\n * const pin = comp.newPin(\"output\", \"float\", \"out\");\n * pin.setValue(123.45);\n * pin.on('change', (newVal, oldVal) => console.log(newVal));\n * ```\n */\nclass Pin extends HalItem {\n}\nexports.Pin = Pin;\n/**\n * Represents a HAL parameter. Instances are returned by `component.newParam()`.\n *\n * @example\n * ```typescript\n * const param = comp.newParam(\"speed\", \"float\", \"rw\");\n * param.setValue(100.0);\n * param.on('change', (newVal, oldVal) => console.log(newVal));\n * ```\n */\nclass Param extends HalItem {\n}\nexports.Param = Param;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HalComponent = exports.DEFAULT_POLL_INTERVAL = void 0;\nconst events_1 = require(\"events\");\nconst constants_1 = require(\"./constants\");\nconst item_1 = require(\"./item\");\n/** Default polling interval in milliseconds for monitoring value changes */\nexports.DEFAULT_POLL_INTERVAL = 10;\n/**\n * Represents a HAL component.\n *\n * This class provides functionality to create HAL components, pins, parameters,\n * and interact with the HAL environment.\n *\n * @example\n * ```typescript\n * const comp = new HalComponent(\"my-component\");\n * const pin = comp.newPin(\"output\", \"float\", \"out\");\n * comp.ready();\n * pin.setValue(123.45);\n *\n * // Listen for value changes\n * pin.on('change', (newVal, oldVal) => {\n * console.log(`Changed: ${oldVal} -> ${newVal}`);\n * });\n *\n * // Listen for batch delta updates\n * comp.on('delta', (delta) => {\n * console.log(`${delta.changes.length} items changed at cursor ${delta.cursor}`);\n * });\n * ```\n */\nclass HalComponent extends events_1.EventEmitter {\n /**\n * Creates a new HAL component.\n *\n * @param name - The name of the component (e.g., \"my-component\").\n * This will be registered with LinuxCNC HAL.\n * @param prefix - Optional prefix for pins and parameters created by this component.\n * If not provided, defaults to `name`.\n */\n constructor(name, prefix) {\n super();\n this.pins = {};\n this.params = {};\n // Monitoring system\n this.watchedItems = new Map();\n this.monitoringTimer = null;\n this.monitoringOptions = {\n pollInterval: exports.DEFAULT_POLL_INTERVAL,\n };\n /** Monotonic cursor incremented on each batch update */\n this.cursor = 0;\n this.nativeInstance = new constants_1.halNative.HalComponent(name, prefix);\n this.name = name;\n this.prefix = prefix || name;\n }\n /**\n * Checks if a HAL component with the given name exists in the system.\n *\n * @param name - The component name (e.g., \"halui\", \"my-custom-comp\").\n * @returns `true` if the component exists, `false` otherwise.\n */\n static exists(name) {\n return constants_1.halNative.component_exists(name);\n }\n /**\n * Checks if the HAL component with the given name has been marked as ready.\n *\n * @param name - The component name.\n * @returns `true` if the component exists and is ready, `false` otherwise.\n */\n static isReady(name) {\n return constants_1.halNative.component_is_ready(name);\n }\n /**\n * Gets the value of a pin or parameter by name.\n *\n * @param name - The nameSuffix of the pin or parameter.\n * @returns The current value.\n */\n getValue(name) {\n return this.nativeInstance.getProperty(name);\n }\n /**\n * Sets the value of a pin or parameter by name.\n *\n * @param name - The nameSuffix of the pin or parameter.\n * @param value - The value to set.\n * @returns The value that was set.\n */\n setValue(name, value) {\n if (typeof value !== \"number\" && typeof value !== \"boolean\") {\n throw new TypeError(\"Value must be a number or boolean\");\n }\n return this.nativeInstance.setProperty(name, value);\n }\n /**\n * Creates a new HAL pin associated with this component.\n *\n * This method can only be called before `ready()` or after `unready()`.\n *\n * @param nameSuffix - The suffix for the pin name (e.g., \"in1\", \"motor.0.pos\").\n * The full HAL name will be `this.prefix + \".\" + nameSuffix`.\n * @param type - The data type of the pin (e.g., `\"float\"`, `\"bit\"`).\n * See {@link HalType} for available types.\n * @param direction - The direction of the pin (e.g., `\"in\"`, `\"out\"`, `\"io\"`).\n * See {@link HalPinDir} for available directions.\n * @returns A new `Pin` object instance.\n * @throws Error if component is ready or if pin creation fails.\n */\n newPin(nameSuffix, type, direction) {\n const success = this.nativeInstance.newPin(nameSuffix, constants_1.HalTypeValue[type], constants_1.HalPinDirValue[direction]);\n if (!success) {\n console.error(`Failed to create pin '${nameSuffix}'`);\n }\n const pin = new item_1.Pin(this, nameSuffix, type, direction);\n this.pins[nameSuffix] = pin;\n this.setupItemListeners(pin, nameSuffix);\n return pin;\n }\n /**\n * Creates a new HAL parameter associated with this component.\n *\n * This method can only be called before `ready()` or after `unready()`.\n *\n * @param nameSuffix - The suffix for the parameter name.\n * The full HAL name will be `this.prefix + \".\" + nameSuffix`.\n * @param type - The data type of the parameter. See {@link HalType} for available types.\n * @param direction - The writability of the parameter (`\"ro\"` for read-only,\n * `\"rw\"` for read-write). See {@link HalParamDir}.\n * @returns A new `Param` object instance.\n * @throws Error if component is ready or if parameter creation fails.\n */\n newParam(nameSuffix, type, direction) {\n const success = this.nativeInstance.newParam(nameSuffix, constants_1.HalTypeValue[type], constants_1.HalParamDirValue[direction]);\n if (!success) {\n console.error(`Failed to create param '${nameSuffix}'`);\n }\n const param = new item_1.Param(this, nameSuffix, type, direction);\n this.params[nameSuffix] = param;\n this.setupItemListeners(param, nameSuffix);\n return param;\n }\n /**\n * Sets up auto-watch listeners for a pin or param.\n * @private\n */\n setupItemListeners(item, name) {\n item.on(\"newListener\", (event) => {\n if (event === \"change\" && !this.watchedItems.has(name)) {\n this.watchedItems.set(name, {\n item,\n lastValue: this.getValue(name),\n });\n this.ensureMonitoring();\n }\n });\n item.on(\"removeListener\", (event) => {\n if (event === \"change\" && item.listenerCount(\"change\") === 0) {\n this.watchedItems.delete(name);\n this.checkStopMonitoring();\n }\n });\n }\n /**\n * Marks this component as ready and available to the HAL system.\n *\n * Once ready, pins can be linked, and parameters can be accessed by other\n * HAL components or tools. Pins and parameters cannot be added after `ready()`\n * is called, unless `unready()` is called first.\n */\n ready() {\n this.nativeInstance.ready();\n }\n /**\n * Marks this component as not ready, allowing addition of more pins or parameters.\n *\n * `ready()` must be called again to make the component (and any new items)\n * available to HAL.\n */\n unready() {\n this.nativeInstance.unready();\n }\n /**\n * Retrieves a map of all `Pin` objects created for this component.\n *\n * @returns An object where keys are the `nameSuffix` of the pins and values\n * are the corresponding `Pin` instances.\n */\n getPins() {\n return this.pins;\n }\n /**\n * Retrieves a map of all `Param` objects created for this component.\n *\n * @returns An object where keys are the `nameSuffix` of the parameters and\n * values are the corresponding `Param` instances.\n */\n getParams() {\n return this.params;\n }\n /**\n * Gets a pin by name.\n *\n * @param name - The nameSuffix of the pin.\n * @returns The Pin instance, or undefined if not found.\n */\n getPin(name) {\n return this.pins[name];\n }\n /**\n * Gets a param by name.\n *\n * @param name - The nameSuffix of the param.\n * @returns The Param instance, or undefined if not found.\n */\n getParam(name) {\n return this.params[name];\n }\n /**\n * Gets the current cursor value for sync operations.\n *\n * The cursor is monotonically increasing and increments with each delta emit.\n *\n * @returns The current cursor value.\n */\n getCursor() {\n return this.cursor;\n }\n /**\n * Gets a snapshot of all current item values.\n *\n * Useful for initial sync or resync after cursor mismatch.\n *\n * @returns Object with items map, current cursor, and timestamp.\n */\n getSnapshot() {\n const items = {};\n for (const [name] of this.watchedItems.entries()) {\n items[name] = this.getValue(name);\n }\n return {\n items,\n cursor: this.cursor,\n timestamp: Date.now(),\n };\n }\n /**\n * Configures the monitoring system settings.\n *\n * The monitoring system will check for value changes at the specified interval.\n *\n * @param options - Configuration object with `pollInterval` property (in milliseconds).\n * Default polling interval is 10ms.\n */\n setMonitoringOptions(options) {\n this.monitoringOptions = { ...this.monitoringOptions, ...options };\n // Restart monitoring with new options if it's currently running\n if (this.monitoringTimer && this.watchedItems.size > 0) {\n this.stopMonitoring();\n this.startMonitoring();\n }\n }\n /**\n * Retrieves the current monitoring configuration.\n *\n * @returns A copy of the current monitoring options.\n */\n getMonitoringOptions() {\n return { ...this.monitoringOptions };\n }\n /**\n * Starts the monitoring timer if not already running.\n * @private\n */\n ensureMonitoring() {\n if (!this.monitoringTimer && this.watchedItems.size > 0) {\n this.startMonitoring();\n }\n }\n /**\n * Stops monitoring if no items are being watched.\n * @private\n */\n checkStopMonitoring() {\n if (this.watchedItems.size === 0) {\n this.stopMonitoring();\n }\n }\n /**\n * Starts the monitoring timer.\n * @private\n */\n startMonitoring() {\n if (this.monitoringTimer) {\n return;\n }\n this.monitoringTimer = setInterval(() => {\n this.checkForChanges();\n }, this.monitoringOptions.pollInterval || exports.DEFAULT_POLL_INTERVAL);\n }\n /**\n * Stops the monitoring timer.\n * @private\n */\n stopMonitoring() {\n if (this.monitoringTimer) {\n clearInterval(this.monitoringTimer);\n this.monitoringTimer = null;\n }\n }\n /**\n * Checks all watched items for value changes and emits events.\n *\n * Emits individual 'change' events on each HalItem, plus a batch 'delta'\n * event on the component with all changes aggregated.\n * @private\n */\n checkForChanges() {\n const changes = [];\n for (const [name, watched] of this.watchedItems.entries()) {\n try {\n const currentValue = this.getValue(name);\n if (currentValue !== watched.lastValue) {\n const oldValue = watched.lastValue;\n watched.lastValue = currentValue;\n watched.item.emit(\"change\", currentValue, oldValue);\n changes.push({ name, value: currentValue });\n }\n }\n catch (error) {\n console.error(`Error checking value for ${name}:`, error);\n }\n }\n // Emit batch delta if any changes occurred\n if (changes.length > 0) {\n this.cursor++;\n const delta = {\n changes,\n cursor: this.cursor,\n timestamp: Date.now(),\n };\n this.emit(\"delta\", delta);\n }\n }\n /**\n * Cleans up the component, stops monitoring and removes all listeners.\n *\n * Should be called when the component is no longer needed to prevent memory leaks.\n */\n dispose() {\n this.stopMonitoring();\n this.watchedItems.clear();\n // Remove all listeners from pins and params\n for (const pin of Object.values(this.pins)) {\n pin.removeAllListeners();\n }\n for (const param of Object.values(this.params)) {\n param.removeAllListeners();\n }\n }\n}\nexports.HalComponent = HalComponent;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setSignalValue = exports.setPinParamValue = exports.pinHasWriter = exports.newSignal = exports.getInfoParams = exports.getInfoSignals = exports.getInfoPins = exports.getValue = exports.disconnect = exports.connect = exports.setMsgLevel = exports.getMsgLevel = void 0;\nconst constants_1 = require(\"./constants\");\n/**\n * Gets the current RTAPI message verbosity level used by HAL.\n *\n * @returns The current message level (e.g., `hal.MSG_INFO`).\n * See {@link RtapiMsgLevel} for available levels.\n */\nconst getMsgLevel = () => {\n const nativeValue = constants_1.halNative.get_msg_level();\n return constants_1.RtapiMsgLevelFromValue[nativeValue] ?? \"none\";\n};\nexports.getMsgLevel = getMsgLevel;\n/**\n * Sets the RTAPI message verbosity level.\n *\n * @param level - The new message level to set. See {@link RtapiMsgLevel} for available levels.\n */\nconst setMsgLevel = (level) => {\n constants_1.halNative.set_msg_level(constants_1.RtapiMsgLevelValue[level]);\n};\nexports.setMsgLevel = setMsgLevel;\n/**\n * Links a HAL pin to a HAL signal.\n *\n * @param pinName - The full name of the pin (e.g., \"my-comp.out1\").\n * @param signalName - The name of the signal to connect to.\n * @returns `true` on success, `false` on failure (error is thrown by native layer).\n * @throws Error if pin or signal doesn't exist, or if connection fails.\n */\nconst connect = (pinName, signalName) => {\n return constants_1.halNative.connect(pinName, signalName);\n};\nexports.connect = connect;\n/**\n * Unlinks a HAL pin from any signal it's currently connected to.\n *\n * @param pinName - The full name of the pin.\n * @returns `true` on success, `false` on failure (error is thrown).\n * @throws Error if pin doesn't exist or disconnect fails.\n */\nconst disconnect = (pinName) => {\n return constants_1.halNative.disconnect(pinName);\n};\nexports.disconnect = disconnect;\n/**\n * Gets the current value of any HAL item (pin, parameter, or signal) identified by its full name.\n *\n * @param name - The full name of the pin, parameter, or signal.\n * @returns The value of the item (number or boolean).\n * @throws Error if the item is not found.\n */\nconst getValue = (name) => {\n return constants_1.halNative.get_value(name);\n};\nexports.getValue = getValue;\n/**\n * Retrieves a list of all HAL pins currently in the system.\n *\n * @returns An array of `HalPinInfo` objects. See {@link HalPinInfo} for structure.\n */\nconst getInfoPins = () => {\n const nativePins = constants_1.halNative.get_info_pins();\n return nativePins.map((pin) => ({\n ...pin,\n type: constants_1.HalTypeFromValue[pin.type] ?? \"bit\",\n direction: constants_1.HalPinDirFromValue[pin.direction] ?? \"in\",\n }));\n};\nexports.getInfoPins = getInfoPins;\n/**\n * Retrieves a list of all HAL signals currently in the system.\n *\n * @returns An array of `HalSignalInfo` objects. See {@link HalSignalInfo} for structure.\n */\nconst getInfoSignals = () => {\n const nativeSignals = constants_1.halNative.get_info_signals();\n return nativeSignals.map((signal) => ({\n ...signal,\n type: constants_1.HalTypeFromValue[signal.type] ?? \"bit\",\n }));\n};\nexports.getInfoSignals = getInfoSignals;\n/**\n * Retrieves a list of all HAL parameters currently in the system.\n *\n * @returns An array of `HalParamInfo` objects. See {@link HalParamInfo} for structure.\n */\nconst getInfoParams = () => {\n const nativeParams = constants_1.halNative.get_info_params();\n return nativeParams.map((param) => ({\n ...param,\n type: constants_1.HalTypeFromValue[param.type] ?? \"bit\",\n direction: constants_1.HalParamDirFromValue[param.direction] ?? \"ro\",\n }));\n};\nexports.getInfoParams = getInfoParams;\n/**\n * Creates a new HAL signal.\n *\n * @param signalName - The desired name for the new signal.\n * @param type - The data type for the new signal. See {@link HalType} for available types.\n * @returns `true` on success, `false` on failure (error is thrown).\n * @throws Error if signal name already exists or creation fails.\n */\nconst newSignal = (signalName, type) => {\n return constants_1.halNative.new_sig(signalName, constants_1.HalTypeValue[type]);\n};\nexports.newSignal = newSignal;\n/**\n * Checks if the signal connected to an IN pin has at least one writer (another pin driving it).\n *\n * @param pinName - The full name of the IN pin.\n * @returns `true` if the pin is connected to a signal and that signal has one or more writers,\n * `false` otherwise.\n * @throws Error if the pin does not exist.\n */\nconst pinHasWriter = (pinName) => {\n return constants_1.halNative.pin_has_writer(pinName);\n};\nexports.pinHasWriter = pinHasWriter;\n/**\n * Sets the value of a HAL pin or parameter identified by its full name.\n *\n * The `value` is converted from its JavaScript type to a string and then parsed by\n * the C++ layer, similar to `halcmd setp`. This can set unconnected IN pins\n * (modifying their internal `dummysig`) or RW parameters.\n *\n * @param name - The full name of the pin or parameter.\n * @param value - The value to set (string, number, or boolean).\n * @returns `true` on success, `false` on failure (error is thrown).\n * @throws Error if item not found, if trying to set OUT pin or connected IN pin,\n * or if value conversion fails.\n *\n * @remarks Cannot set OUT pins or connected IN pins with this function.\n * Use direct signal manipulation or component proxy access for connected items.\n */\nconst setPinParamValue = (name, value) => {\n return constants_1.halNative.set_p(name, String(value));\n};\nexports.setPinParamValue = setPinParamValue;\n/**\n * Sets the value of an unconnected HAL signal identified by its name.\n *\n * The `value` is converted and parsed similarly to `setPinParamValue`.\n *\n * @param name - The full name of the signal.\n * @param value - The value to set (string, number, or boolean).\n * @returns `true` on success, `false` on failure (error is thrown).\n * @throws Error if signal not found, if signal has writers, or if value conversion fails.\n */\nconst setSignalValue = (name, value) => {\n return constants_1.halNative.set_s(name, String(value));\n};\nexports.setSignalValue = setSignalValue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setSignalValue = exports.setPinParamValue = exports.pinHasWriter = exports.newSignal = exports.getInfoParams = exports.getInfoSignals = exports.getInfoPins = exports.getValue = exports.disconnect = exports.connect = exports.setMsgLevel = exports.getMsgLevel = exports.Param = exports.Pin = exports.HalItem = exports.HalComponent = void 0;\n// --- Exported classes ---\nvar component_1 = require(\"./component\");\nObject.defineProperty(exports, \"HalComponent\", { enumerable: true, get: function () { return component_1.HalComponent; } });\nvar item_1 = require(\"./item\");\nObject.defineProperty(exports, \"HalItem\", { enumerable: true, get: function () { return item_1.HalItem; } });\nObject.defineProperty(exports, \"Pin\", { enumerable: true, get: function () { return item_1.Pin; } });\nObject.defineProperty(exports, \"Param\", { enumerable: true, get: function () { return item_1.Param; } });\n// --- Global functions ---\nvar functions_1 = require(\"./functions\");\nObject.defineProperty(exports, \"getMsgLevel\", { enumerable: true, get: function () { return functions_1.getMsgLevel; } });\nObject.defineProperty(exports, \"setMsgLevel\", { enumerable: true, get: function () { return functions_1.setMsgLevel; } });\nObject.defineProperty(exports, \"connect\", { enumerable: true, get: function () { return functions_1.connect; } });\nObject.defineProperty(exports, \"disconnect\", { enumerable: true, get: function () { return functions_1.disconnect; } });\nObject.defineProperty(exports, \"getValue\", { enumerable: true, get: function () { return functions_1.getValue; } });\nObject.defineProperty(exports, \"getInfoPins\", { enumerable: true, get: function () { return functions_1.getInfoPins; } });\nObject.defineProperty(exports, \"getInfoSignals\", { enumerable: true, get: function () { return functions_1.getInfoSignals; } });\nObject.defineProperty(exports, \"getInfoParams\", { enumerable: true, get: function () { return functions_1.getInfoParams; } });\nObject.defineProperty(exports, \"newSignal\", { enumerable: true, get: function () { return functions_1.newSignal; } });\nObject.defineProperty(exports, \"pinHasWriter\", { enumerable: true, get: function () { return functions_1.pinHasWriter; } });\nObject.defineProperty(exports, \"setPinParamValue\", { enumerable: true, get: function () { return functions_1.setPinParamValue; } });\nObject.defineProperty(exports, \"setSignalValue\", { enumerable: true, get: function () { return functions_1.setSignalValue; } });\n","'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR,\n SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","/*global navigator*/\n'use strict';\n\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n if (typeof navigator !== 'undefined' && navigator.platform) {\n const platform = navigator.platform.toLowerCase();\n return platform === 'win32' || platform === 'windows';\n }\n\n if (typeof process !== 'undefined' && process.platform) {\n return process.platform === 'win32';\n }\n\n return false;\n};\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n const segs = path.split(windows ? /[\\\\/]/ : '/');\n const last = segs[segs.length - 1];\n\n if (last === '') {\n return segs[segs.length - 2];\n }\n\n return last;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(opts.windows);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.output = (prev.output || prev.value) + tok.value;\n prev.value += tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(opts.windows);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = opts.windows;\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst pico = require('./lib/picomatch');\nconst utils = require('./lib/utils');\n\nfunction picomatch(glob, options, returnState = false) {\n // default to os.platform()\n if (options && (options.windows === null || options.windows === undefined)) {\n // don't mutate the original options object\n options = { ...options, windows: utils.isWindows() };\n }\n\n return pico(glob, options, returnState);\n}\n\nObject.assign(picomatch, pico);\nmodule.exports = picomatch;\n","/**\n * LinuxCNC Service\n *\n * Exposes LinuxCNC status monitoring and command execution via AppBus.\n * Implements LinuxCNCProtocol from covenant-protocol.\n */\n\nimport { StatChannel, CommandChannel, ErrorChannel } from \"@linuxcnc-node/core\";\nimport { StatChange } from \"@linuxcnc-node/types\";\nimport type { LinuxCNCProtocol } from \"covenant-protocol\";\nimport type { HostConnection } from \"@edenapp/types\";\nimport delve from \"dlv\";\nconst SERVICE_NAME = \"linuxcnc\";\n\n// Shared state across all connections\nlet statChannel: StatChannel | null = null;\nlet commandChannel: CommandChannel | null = null;\nlet errorChannel: ErrorChannel | null = null;\n\n// Connected clients\nconst connections = new Map<string, HostConnection<LinuxCNCProtocol>>();\n\n/**\n * Broadcast stat delta to all connected clients\n */\nfunction broadcastDelta(changes: StatChange[]): void {\n if (changes.length === 0 || !statChannel) return;\n\n const message = {\n changes,\n cursor: statChannel.getCursor(),\n timestamp: Date.now(),\n };\n\n for (const conn of connections.values()) {\n try {\n conn.send(\"stat-delta\", message);\n } catch (err) {\n console.error(\"[LinuxCNC] Error sending delta:\", err);\n }\n }\n}\n\n/**\n * Initialize the LinuxCNC service\n */\nexport function initLinuxCNCService(): void {\n // Create channels (shared across all connections)\n statChannel = new StatChannel({ pollInterval: 50 });\n commandChannel = new CommandChannel();\n errorChannel = new ErrorChannel({ pollInterval: 100 });\n\n // Listen to native delta updates from StatChannel\n statChannel.on(\"delta\", broadcastDelta);\n\n // Forward error channel events\n errorChannel.on(\"message\", (error) => {\n for (const conn of connections.values()) {\n try {\n conn.send(\"error-channel-event\", error);\n } catch (err) {\n console.error(\"[LinuxCNC] Error forwarding error event:\", err);\n }\n }\n });\n\n // Expose the service\n worker!.appBus.exposeService(\n SERVICE_NAME,\n (connection, { appId: clientAppId }) => {\n console.log(`[LinuxCNC] Client connected: ${clientAppId}`);\n\n const typedConn = connection as HostConnection<LinuxCNCProtocol>;\n connections.set(clientAppId, typedConn);\n\n // Handle disconnect\n connection.onClose(() => {\n console.log(`[LinuxCNC] Client disconnected: ${clientAppId}`);\n connections.delete(clientAppId);\n });\n\n // === STAT HANDLERS ===\n\n typedConn.handle(\"stat/sync\", () => {\n const stat = statChannel!.get();\n if (!stat) {\n throw new Error(\"StatChannel not ready\");\n }\n\n return {\n stat,\n cursor: statChannel!.getCursor(),\n };\n });\n\n typedConn.handle(\"stat/get-value\", ({ path }) => {\n const stat = statChannel!.get();\n if (!stat) {\n throw new Error(\"StatChannel not ready\");\n }\n return { value: delve(stat, path) };\n });\n\n // === COMMAND HANDLERS ===\n\n typedConn.handle(\"cmd/set-task-mode\", async ({ mode }) => {\n return commandChannel!.setTaskMode(mode);\n });\n\n typedConn.handle(\"cmd/set-state\", async ({ state }) => {\n return commandChannel!.setState(state);\n });\n\n typedConn.handle(\"cmd/mdi\", async ({ command }) => {\n return commandChannel!.mdi(command);\n });\n\n typedConn.handle(\"cmd/abort\", async () => {\n return commandChannel!.abortTask();\n });\n\n typedConn.handle(\"cmd/task-plan-synch\", async () => {\n return commandChannel!.taskPlanSynch();\n });\n\n typedConn.handle(\"cmd/reset-interpreter\", async () => {\n return commandChannel!.resetInterpreter();\n });\n\n // Program control\n typedConn.handle(\"cmd/program-open\", async ({ filePath }) => {\n return commandChannel!.programOpen(filePath);\n });\n\n typedConn.handle(\"cmd/program-run\", async ({ startLine }) => {\n return commandChannel!.runProgram(startLine ?? 0);\n });\n\n typedConn.handle(\"cmd/program-pause\", async () => {\n return commandChannel!.pauseProgram();\n });\n\n typedConn.handle(\"cmd/program-resume\", async () => {\n return commandChannel!.resumeProgram();\n });\n\n typedConn.handle(\"cmd/program-step\", async () => {\n return commandChannel!.stepProgram();\n });\n\n typedConn.handle(\"cmd/program-reverse\", async () => {\n return commandChannel!.reverseProgram();\n });\n\n typedConn.handle(\"cmd/program-forward\", async () => {\n return commandChannel!.forwardProgram();\n });\n\n // Motion control\n typedConn.handle(\"cmd/set-feed-rate\", async ({ scale }) => {\n return commandChannel!.setFeedRate(scale);\n });\n\n typedConn.handle(\"cmd/set-rapid-rate\", async ({ scale }) => {\n return commandChannel!.setRapidRate(scale);\n });\n\n typedConn.handle(\"cmd/set-max-velocity\", async ({ velocity }) => {\n return commandChannel!.setMaxVelocity(velocity);\n });\n\n typedConn.handle(\"cmd/set-traj-mode\", async ({ mode }) => {\n return commandChannel!.setTrajMode(mode);\n });\n\n typedConn.handle(\"cmd/teleop-enable\", async ({ enable }) => {\n return commandChannel!.teleopEnable(enable);\n });\n\n typedConn.handle(\"cmd/set-feed-override-enable\", async ({ enable }) => {\n return commandChannel!.setFeedOverrideEnable(enable);\n });\n\n typedConn.handle(\"cmd/set-feed-hold-enable\", async ({ enable }) => {\n return commandChannel!.setFeedHoldEnable(enable);\n });\n\n typedConn.handle(\"cmd/set-adaptive-feed-enable\", async ({ enable }) => {\n return commandChannel!.setAdaptiveFeedEnable(enable);\n });\n\n // Jogging - note: CommandChannel uses (axis, isJoint, speed) order\n typedConn.handle(\n \"cmd/jog-continuous\",\n async ({ axis, speed, isJoint }) => {\n return commandChannel!.jogContinuous(axis, isJoint ?? false, speed);\n }\n );\n\n typedConn.handle(\n \"cmd/jog-increment\",\n async ({ axis, speed, increment, isJoint }) => {\n return commandChannel!.jogIncrement(\n axis,\n isJoint ?? false,\n speed,\n increment\n );\n }\n );\n\n typedConn.handle(\"cmd/jog-stop\", async ({ axis, isJoint }) => {\n return commandChannel!.jogStop(axis, isJoint ?? false);\n });\n\n // Homing\n typedConn.handle(\"cmd/home\", async ({ joint }) => {\n return commandChannel!.homeJoint(joint);\n });\n\n typedConn.handle(\"cmd/unhome\", async ({ joint }) => {\n return commandChannel!.unhomeJoint(joint);\n });\n\n typedConn.handle(\n \"cmd/set-min-position-limit\",\n async ({ joint, limit }) => {\n return commandChannel!.setMinPositionLimit(joint, limit);\n }\n );\n\n typedConn.handle(\n \"cmd/set-max-position-limit\",\n async ({ joint, limit }) => {\n return commandChannel!.setMaxPositionLimit(joint, limit);\n }\n );\n\n // Spindle\n typedConn.handle(\"cmd/spindle-on\", async ({ speed, spindle, wait }) => {\n return commandChannel!.spindleOn(speed, spindle ?? 0, wait ?? false);\n });\n\n typedConn.handle(\"cmd/spindle-off\", async ({ spindle }) => {\n return commandChannel!.spindleOff(spindle ?? 0);\n });\n\n typedConn.handle(\"cmd/spindle-override\", async ({ scale, spindle }) => {\n return commandChannel!.setSpindleOverride(scale, spindle ?? 0);\n });\n\n typedConn.handle(\"cmd/spindle-brake\", async ({ engage, spindle }) => {\n return commandChannel!.spindleBrake(engage, spindle ?? 0);\n });\n\n typedConn.handle(\"cmd/spindle-increase\", async ({ spindle }) => {\n return commandChannel!.spindleIncrease(spindle ?? 0);\n });\n\n typedConn.handle(\"cmd/spindle-decrease\", async ({ spindle }) => {\n return commandChannel!.spindleDecrease(spindle ?? 0);\n });\n\n typedConn.handle(\n \"cmd/set-spindle-override-enable\",\n async ({ enable, spindle }) => {\n return commandChannel!.setSpindleOverrideEnable(enable, spindle ?? 0);\n }\n );\n\n // Coolant\n typedConn.handle(\"cmd/set-mist\", async ({ on }) => {\n return commandChannel!.setMist(on);\n });\n\n typedConn.handle(\"cmd/set-flood\", async ({ on }) => {\n return commandChannel!.setFlood(on);\n });\n\n // Tool\n typedConn.handle(\"cmd/load-tool-table\", async () => {\n return commandChannel!.loadToolTable();\n });\n\n typedConn.handle(\"cmd/set-tool\", async ({ tool }) => {\n return commandChannel!.setTool(tool);\n });\n\n // I/O\n typedConn.handle(\"cmd/set-digital-output\", async ({ index, value }) => {\n return commandChannel!.setDigitalOutput(index, value);\n });\n\n typedConn.handle(\"cmd/set-analog-output\", async ({ index, value }) => {\n return commandChannel!.setAnalogOutput(index, value);\n });\n\n // Misc\n typedConn.handle(\"cmd/override-limits\", async () => {\n return commandChannel!.overrideLimits();\n });\n\n typedConn.handle(\"cmd/set-optional-stop\", async ({ enable }) => {\n return commandChannel!.setOptionalStop(enable);\n });\n\n typedConn.handle(\"cmd/set-block-delete\", async ({ enable }) => {\n return commandChannel!.setBlockDelete(enable);\n });\n\n typedConn.handle(\"cmd/set-debug-level\", async ({ level }) => {\n return commandChannel!.setDebugLevel(level);\n });\n\n typedConn.handle(\"cmd/send-operator-error\", async ({ message }) => {\n return commandChannel!.sendOperatorError(message);\n });\n\n typedConn.handle(\"cmd/send-operator-text\", async ({ message }) => {\n return commandChannel!.sendOperatorText(message);\n });\n\n typedConn.handle(\"cmd/send-operator-display\", async ({ message }) => {\n return commandChannel!.sendOperatorDisplay(message);\n });\n\n // Connection\n typedConn.handle(\"ping\", () => {\n return { timestamp: Date.now() };\n });\n },\n { description: \"LinuxCNC status monitoring and command execution\" }\n );\n\n console.log(`[LinuxCNC] Service exposed as '${SERVICE_NAME}'`);\n}\n","/**\n * G-Code Service\n *\n * Exposes G-code parsing via AppBus using LinuxCNC's rs274ngc interpreter.\n * Implements GCodeProtocol from covenant-protocol.\n */\n\nimport { parseGCode } from \"@linuxcnc-node/gcode\";\nimport type { GCodeProtocol } from \"covenant-protocol\";\nimport type { HostConnection } from \"@edenapp/types\";\n\nconst SERVICE_NAME = \"gcode\";\n\n/**\n * Initialize the G-code service\n */\nexport function initGCodeService(): void {\n worker!.appBus.exposeService(\n SERVICE_NAME,\n (connection, { appId: clientAppId }) => {\n console.log(`[GCode] Client connected: ${clientAppId}`);\n\n const typedConn = connection as HostConnection<GCodeProtocol>;\n\n // Handle disconnect\n connection.onClose(() => {\n console.log(`[GCode] Client disconnected: ${clientAppId}`);\n });\n\n // Parse handler\n typedConn.handle(\n \"parse\",\n async ({ filepath, iniPath, progressUpdates }) => {\n try {\n const result = await parseGCode(filepath, {\n iniPath,\n progressUpdates: progressUpdates ?? 40,\n onProgress: (progress) => {\n // Stream progress updates to the client\n try {\n typedConn.send(\"parse-progress\", progress);\n } catch (err) {\n // Client may have disconnected\n console.error(\"[GCode] Error sending progress:\", err);\n }\n },\n });\n\n return result;\n } catch (err) {\n // Send error message\n typedConn.send(\"error\", {\n code: \"PARSE_ERROR\",\n message: err instanceof Error ? err.message : String(err),\n });\n throw err;\n }\n }\n );\n\n // Ping handler\n typedConn.handle(\"ping\", () => {\n return { timestamp: Date.now() };\n });\n },\n { description: \"G-code file parsing using LinuxCNC interpreter\" }\n );\n\n console.log(`[GCode] Service exposed as '${SERVICE_NAME}'`);\n}\n","/**\n * HAL Service\n *\n * Exposes HAL component management and I/O access via AppBus.\n * Each connection gets its own HalComponent lifecycle.\n * Implements HalProtocol from covenant-protocol.\n */\n\nimport {\n HalComponent,\n Pin,\n Param,\n getMsgLevel,\n setMsgLevel,\n getValue,\n getInfoPins,\n getInfoSignals,\n getInfoParams,\n newSignal,\n pinHasWriter,\n setSignalValue,\n} from \"@linuxcnc-node/hal\";\nimport type { HalType, HalPinDir, HalParamDir } from \"@linuxcnc-node/types\";\nimport type { HalProtocol, HalValue, HalDelta } from \"covenant-protocol\";\nimport type { HostConnection } from \"@edenapp/types\";\nimport picomatch from \"picomatch\";\n\nconst SERVICE_NAME = \"hal\";\n\ninterface ConnectionState {\n component: HalComponent | null;\n pins: Map<string, Pin>;\n params: Map<string, Param>;\n lastValues: Map<string, HalValue>;\n cursor: number;\n pollInterval: NodeJS.Timeout | null;\n}\n\n/**\n * Initialize the HAL service\n */\nexport function initHalService(): void {\n worker!.appBus.exposeService(\n SERVICE_NAME,\n (connection, { appId: clientAppId }) => {\n console.log(`[HAL] Client connected: ${clientAppId}`);\n\n const typedConn = connection as HostConnection<HalProtocol>;\n\n // Per-connection state\n const state: ConnectionState = {\n component: null,\n pins: new Map(),\n params: new Map(),\n lastValues: new Map(),\n cursor: 0,\n pollInterval: null,\n };\n\n // Clean up on disconnect\n connection.onClose(() => {\n console.log(`[HAL] Client disconnected: ${clientAppId}`);\n if (state.pollInterval) {\n clearInterval(state.pollInterval);\n }\n if (state.component) {\n state.component.dispose();\n }\n });\n\n // Start polling for value changes\n function startPolling(): void {\n if (state.pollInterval) return;\n\n state.pollInterval = setInterval(() => {\n if (!state.component) return;\n\n const changes: Array<{ name: string; value: HalValue }> = [];\n\n // Check all pins and params for changes\n for (const [name, pin] of state.pins) {\n const value = pin.getValue();\n const lastValue = state.lastValues.get(name);\n if (value !== lastValue) {\n changes.push({ name, value });\n state.lastValues.set(name, value);\n }\n }\n\n for (const [name, param] of state.params) {\n const value = param.getValue();\n const lastValue = state.lastValues.get(name);\n if (value !== lastValue) {\n changes.push({ name, value });\n state.lastValues.set(name, value);\n }\n }\n\n if (changes.length > 0) {\n state.cursor++;\n const delta: HalDelta = {\n changes,\n cursor: state.cursor,\n timestamp: Date.now(),\n };\n try {\n typedConn.send(\"items-delta\", delta);\n } catch (err) {\n console.error(\"[HAL] Error sending delta:\", err);\n }\n }\n }, 10); // 10ms polling interval\n }\n\n // === COMPONENT HANDLERS ===\n\n typedConn.handle(\"component/init\", ({ name, prefix }) => {\n if (state.component) {\n return {\n success: false,\n componentName: \"\",\n error: \"Component already initialized for this connection\",\n };\n }\n\n try {\n state.component = new HalComponent(name, prefix);\n return {\n success: true,\n componentName: state.component.name,\n };\n } catch (err) {\n return {\n success: false,\n componentName: \"\",\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"component/ready\", () => {\n if (!state.component) {\n return { success: false, error: \"Component not initialized\" };\n }\n\n try {\n state.component.ready();\n startPolling();\n\n typedConn.send(\"hal-ready\", {\n componentName: state.component.name,\n prefix: state.component.prefix,\n });\n\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"component/unready\", () => {\n if (!state.component) {\n return { success: false, error: \"Component not initialized\" };\n }\n\n try {\n state.component.unready();\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n // === PIN/PARAM HANDLERS ===\n\n typedConn.handle(\"pin/create\", ({ name, type, direction }) => {\n if (!state.component) {\n return {\n success: false,\n fullName: \"\",\n error: \"Component not initialized\",\n };\n }\n\n try {\n const pin = state.component.newPin(name, type, direction);\n state.pins.set(name, pin);\n state.lastValues.set(name, pin.getValue());\n\n return {\n success: true,\n fullName: `${state.component!.prefix}.${pin.name}`,\n };\n } catch (err) {\n return {\n success: false,\n fullName: \"\",\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"param/create\", ({ name, type, direction }) => {\n if (!state.component) {\n return {\n success: false,\n fullName: \"\",\n error: \"Component not initialized\",\n };\n }\n\n try {\n const param = state.component.newParam(name, type, direction);\n state.params.set(name, param);\n state.lastValues.set(name, param.getValue());\n\n return {\n success: true,\n fullName: `${state.component!.prefix}.${param.name}`,\n };\n } catch (err) {\n return {\n success: false,\n fullName: \"\",\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"item/get-value\", ({ name }) => {\n if (!state.component) {\n throw new Error(\"Component not initialized\");\n }\n\n const value = state.component.getValue(name);\n return { value };\n });\n\n typedConn.handle(\"item/set-value\", ({ name, value }) => {\n if (!state.component) {\n return { success: false, error: \"Component not initialized\" };\n }\n\n try {\n state.component.setValue(name, value);\n state.lastValues.set(name, value);\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"items/sync\", () => {\n if (!state.component) {\n throw new Error(\"Component not initialized\");\n }\n\n // Build current items snapshot\n const items: Record<string, HalValue> = {};\n for (const [name, pin] of state.pins) {\n items[name] = pin.getValue();\n }\n for (const [name, param] of state.params) {\n items[name] = param.getValue();\n }\n\n return {\n items,\n cursor: state.cursor,\n };\n });\n\n // === GLOBAL HANDLERS ===\n\n typedConn.handle(\"global/component-exists\", ({ componentName }) => {\n return { exists: HalComponent.exists(componentName) };\n });\n\n typedConn.handle(\"global/component-is-ready\", ({ componentName }) => {\n return { ready: HalComponent.isReady(componentName) };\n });\n\n typedConn.handle(\"global/signal-create\", ({ name, type }) => {\n try {\n newSignal(name, type);\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"global/signal-get-value\", ({ signalName }) => {\n const value = getValue(signalName);\n return { value };\n });\n\n typedConn.handle(\"global/signal-set-value\", ({ signalName, value }) => {\n try {\n setSignalValue(signalName, value);\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n\n typedConn.handle(\"global/signal-connect\", ({ pinName, signalName }) => {\n // This would need net/connect functionality from hal\n // For now, return not implemented\n return { success: false, error: \"Not implemented - use halcmd net\" };\n });\n\n typedConn.handle(\"global/signal-disconnect\", ({ pinName }) => {\n // This would need disconnect functionality from hal\n return {\n success: false,\n error: \"Not implemented - use halcmd unlinkp\",\n };\n });\n\n typedConn.handle(\"global/pin-has-writer\", ({ pinName }) => {\n return { hasWriter: pinHasWriter(pinName) };\n });\n\n typedConn.handle(\"global/get-value\", ({ name }) => {\n const value = getValue(name);\n // Determine type based on whether it's a pin, param, or signal\n // For simplicity, return \"pin\" - could be enhanced with proper detection\n return { value, type: \"pin\" as const };\n });\n\n typedConn.handle(\"global/list-pins\", ({ filter }) => {\n let pins = getInfoPins();\n if (filter) {\n const isMatch = picomatch(filter);\n pins = pins.filter((p) => isMatch(p.name));\n }\n return { pins };\n });\n\n typedConn.handle(\"global/list-params\", ({ filter }) => {\n let params = getInfoParams();\n if (filter) {\n const isMatch = picomatch(filter);\n params = params.filter((p) => isMatch(p.name));\n }\n return { params };\n });\n\n typedConn.handle(\"global/list-signals\", ({ filter }) => {\n let signals = getInfoSignals();\n if (filter) {\n const isMatch = picomatch(filter);\n signals = signals.filter((s) => isMatch(s.name));\n }\n return { signals };\n });\n\n typedConn.handle(\"global/list-all\", () => {\n return {\n pins: getInfoPins(),\n params: getInfoParams(),\n signals: getInfoSignals(),\n };\n });\n\n typedConn.handle(\"global/msg-level-get\", () => {\n return { level: getMsgLevel() };\n });\n\n typedConn.handle(\"global/msg-level-set\", ({ level }) => {\n const previousLevel = getMsgLevel();\n setMsgLevel(level);\n return { success: true, previousLevel };\n });\n\n // === CONNECTION HANDLERS ===\n\n typedConn.handle(\"ping\", () => {\n return { timestamp: Date.now() };\n });\n\n typedConn.handle(\"get-status\", () => {\n return {\n connected: true,\n componentName: state.component?.name ?? \"\",\n componentReady: state.component\n ? HalComponent.isReady(state.component.name)\n : false,\n pinCount: state.pins.size,\n paramCount: state.params.size,\n uptime: process.uptime(),\n };\n });\n },\n { description: \"HAL component management and I/O access\" }\n );\n\n console.log(`[HAL] Service exposed as '${SERVICE_NAME}'`);\n}\n","/**\n * Position Logger Service\n *\n * Exposes machine position logging and history streaming via AppBus.\n * Implements PositionLoggerProtocol from covenant-protocol.\n */\n\nimport { PositionLogger } from \"@linuxcnc-node/core\";\nimport { POSITION_STRIDE } from \"@linuxcnc-node/types\";\nimport type { PositionLoggerProtocol } from \"covenant-protocol\";\nimport type { HostConnection } from \"@edenapp/types\";\n\nconst SERVICE_NAME = \"position-logger\";\nconst UPDATE_INTERVAL_MS = 50;\n\n// Shared position logger instance\nlet logger: PositionLogger | null = null;\n\n// Cursor tracking\nlet cursor = 0;\nlet lastHistoryCount = 0;\n\n// Connected clients\nconst connections = new Map<string, HostConnection<PositionLoggerProtocol>>();\n\n// Update interval for pushing position updates\nlet updateInterval: NodeJS.Timeout | null = null;\n\n/**\n * Start the update loop for pushing position deltas to clients\n */\nfunction startUpdateLoop(): void {\n if (updateInterval) return;\n\n updateInterval = setInterval(() => {\n if (!logger || connections.size === 0) return;\n\n const currentCount = logger.getHistoryCount();\n if (currentCount <= lastHistoryCount) return;\n\n // Get new points since last update\n const newPointCount = currentCount - lastHistoryCount;\n const newPoints = logger.getMotionHistory(lastHistoryCount, newPointCount);\n\n cursor++;\n lastHistoryCount = currentCount;\n\n // Push to all connected clients - cast to any to handle type conflicts\n const message = {\n points: newPoints,\n count: newPointCount,\n cursor,\n };\n\n for (const conn of connections.values()) {\n try {\n conn.send(\"position-update\", message);\n } catch (err) {\n console.error(\"[PositionLogger] Error sending update:\", err);\n }\n }\n }, UPDATE_INTERVAL_MS);\n}\n\n/**\n * Stop the update loop\n */\nfunction stopUpdateLoop(): void {\n if (updateInterval) {\n clearInterval(updateInterval);\n updateInterval = null;\n }\n}\n\n/**\n * Initialize the Position Logger service\n */\nexport function initPositionLoggerService(): void {\n // Create shared logger instance\n logger = new PositionLogger();\n\n worker!.appBus.exposeService(\n SERVICE_NAME,\n (connection, { appId: clientAppId }) => {\n console.log(`[PositionLogger] Client connected: ${clientAppId}`);\n\n const typedConn = connection as HostConnection<PositionLoggerProtocol>;\n connections.set(clientAppId, typedConn);\n\n // Handle disconnect\n connection.onClose(() => {\n console.log(`[PositionLogger] Client disconnected: ${clientAppId}`);\n connections.delete(clientAppId);\n\n // Stop update loop if no clients\n if (connections.size === 0) {\n stopUpdateLoop();\n }\n });\n\n // Start handler\n typedConn.handle(\"start\", ({ interval, maxHistory }) => {\n if (!logger) {\n return { success: false, cursor: 0 };\n }\n\n logger.start({\n interval: interval ?? 0.01,\n maxHistorySize: maxHistory ?? 10000,\n });\n\n lastHistoryCount = 0;\n cursor++;\n\n // Start update loop if not running\n startUpdateLoop();\n\n return { success: true, cursor };\n });\n\n // Stop handler\n typedConn.handle(\"stop\", () => {\n if (!logger) {\n return { success: false };\n }\n\n logger.stop();\n return { success: true };\n });\n\n // Clear handler\n typedConn.handle(\"clear\", () => {\n if (!logger) {\n return { success: false };\n }\n\n logger.clear();\n lastHistoryCount = 0;\n cursor++;\n\n return { success: true };\n });\n\n typedConn.handle(\"sync\", () => {\n if (!logger) {\n return {\n history: new Float64Array(0),\n count: 0,\n cursor: 0,\n };\n }\n\n const currentCount = logger.getHistoryCount();\n const history = logger.getMotionHistory(0, currentCount);\n\n return {\n history,\n count: history.length / POSITION_STRIDE,\n cursor,\n };\n });\n\n typedConn.handle(\"get-current\", () => {\n if (!logger) {\n return { position: null };\n }\n\n const position = logger.getCurrentPosition();\n return { position };\n });\n\n // Get cursor\n typedConn.handle(\"get-cursor\", () => {\n return { cursor };\n });\n\n // Ping\n typedConn.handle(\"ping\", () => {\n return { timestamp: Date.now() };\n });\n },\n { description: \"Machine position logging and history streaming\" }\n );\n\n console.log(`[PositionLogger] Service exposed as '${SERVICE_NAME}'`);\n}\n","/**\n * Covenant Bridge Backend\n *\n * Main entry point for the LinuxCNC-Eden bridge.\n * Initializes and exposes all AppBus services.\n */\n\nimport { initLinuxCNCService } from \"./services/linuxcnc\";\nimport { initGCodeService } from \"./services/gcode\";\nimport { initHalService } from \"./services/hal\";\nimport { initPositionLoggerService } from \"./services/position-logger\";\n\nconst appId = process.env.EDEN_APP_ID;\nconsole.log(`[Covenant Bridge] Starting for ${appId}`);\n\n// Initialize all services\ninitLinuxCNCService();\ninitGCodeService();\ninitHalService();\ninitPositionLoggerService();\n\nconsole.log(\"[Covenant Bridge] All services initialized\");\n"],"mappings":"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","names":["exports","obj","key","def","p","undef","split","length","exports","exports","StatChannel","TaskMode","exports","TaskState","ExecState","InterpState","TrajMode","MotionType","KinematicsType","RcsStatus","ProgramUnits","NmlMessageType","JointType","OrientState","EmcDebug","exports","PositionLoggerIndex","PositionIndex","OperationType","exports","Plane","exports","exports","CommandChannel","exports","ErrorChannel","exports","PositionLogger","cursor","require_dist","exports","exports","parseGCode","exports","require_constants","exports","exports","Pin","Param","exports","HalComponent","exports","getMsgLevel","setMsgLevel","getValue","getInfoPins","getInfoSignals","getInfoParams","newSignal","pinHasWriter","setSignalValue","require_dist","exports","require_constants","exports","module","exports","exports","module","exports","module","opts","value","rest","source","exports","module","picomatch","state","require_picomatch","exports","module","picomatch","SERVICE_NAME","SERVICE_NAME","picomatch","import_core","SERVICE_NAME","connections"]}
|