Reorganize RSpade directory structure for clarity

Improve Jqhtml_Integration.js documentation with hydration system explanation
Add jqhtml-laravel integration packages for traditional Laravel projects

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-11-24 09:41:48 +00:00
parent 0143f6ae9f
commit bd5809fdbd
20716 changed files with 387 additions and 6444 deletions

View File

@@ -54,7 +54,7 @@ Before RPC: 900+ Node.js process spawns during manifest build (~30-60s overhead)
After RPC: Single Node.js process, reused across all sanitizations (~1-2s startup overhead) After RPC: Single Node.js process, reused across all sanitizations (~1-2s startup overhead)
### Parallel to JS Parser ### Parallel to JS Parser
This architecture mirrors the JS parser RPC server pattern. See `/app/RSpade/Core/JavaScript/CLAUDE.md` for detailed RPC pattern documentation. This architecture mirrors the JS parser RPC server pattern. See `/app/RSpade/Core/JsParsers/CLAUDE.md` for detailed RPC pattern documentation.
## Js_CodeQuality_Rpc - RPC Server Architecture ## Js_CodeQuality_Rpc - RPC Server Architecture

View File

@@ -3,7 +3,7 @@
namespace App\RSpade\Commands\Rsx; namespace App\RSpade\Commands\Rsx;
use App\Console\Commands\FrameworkDeveloperCommand; use App\Console\Commands\FrameworkDeveloperCommand;
use App\RSpade\Core\JavaScript\Js_Transformer; use App\RSpade\Core\JsParsers\Js_Transformer;
class Rsx_Js_Transform_Command extends FrameworkDeveloperCommand class Rsx_Js_Transform_Command extends FrameworkDeveloperCommand
{ {

View File

@@ -2186,7 +2186,7 @@ implode("\n", array_map(fn ($f) => ' - ' . str_replace(base_path() . '/', '',
// Transform the file (will use cache if available) // Transform the file (will use cache if available)
try { try {
$transformed_code = \App\RSpade\Core\JavaScript\Js_Transformer::transform($file); $transformed_code = \App\RSpade\Core\JsParsers\Js_Transformer::transform($file);
// Write transformed code to a temp file // Write transformed code to a temp file
$temp_file = storage_path('rsx-tmp/babel_' . md5($file) . '.js'); $temp_file = storage_path('rsx-tmp/babel_' . md5($file) . '.js');

View File

@@ -26,8 +26,8 @@ class Core_Bundle extends Rsx_Bundle_Abstract
'app/RSpade/Core/Data', 'app/RSpade/Core/Data',
'app/RSpade/Core/Database', 'app/RSpade/Core/Database',
'app/RSpade/Core/SPA', 'app/RSpade/Core/SPA',
'app/RSpade/Core/Debug', // Debug components (JS_Tree_Debug_*)
'app/RSpade/Lib', 'app/RSpade/Lib',
'app/RSpade/Components',
], ],
]; ];
} }

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\RSpade\Core\JavaScript; namespace App\RSpade\Core\JsParsers;
use RuntimeException; use RuntimeException;

View File

@@ -5,12 +5,12 @@
* use snake_case (underscore_wherever_possible). * use snake_case (underscore_wherever_possible).
*/ */
namespace App\RSpade\Core\JavaScript; namespace App\RSpade\Core\JsParsers;
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\File;
use Symfony\Component\Process\Exception\ProcessFailedException; use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process; use Symfony\Component\Process\Process;
use App\RSpade\Core\JavaScript\Js_Exception; use App\RSpade\Core\JsParsers\Js_Exception;
class Js_Parser class Js_Parser
{ {
@@ -22,7 +22,7 @@ class Js_Parser
/** /**
* Node.js RPC server script path * Node.js RPC server script path
*/ */
protected const RPC_SERVER_SCRIPT = 'app/RSpade/Core/JavaScript/resource/js-parser-server.js'; protected const RPC_SERVER_SCRIPT = 'app/RSpade/Core/JsParsers/resource/js-parser-server.js';
/** /**
* Unix socket path for RPC server * Unix socket path for RPC server

View File

@@ -10,7 +10,7 @@
* use snake_case (underscore_wherever_possible). * use snake_case (underscore_wherever_possible).
*/ */
namespace App\RSpade\Core\JavaScript; namespace App\RSpade\Core\JsParsers;
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\File;
use Symfony\Component\Process\Process; use Symfony\Component\Process\Process;
@@ -22,12 +22,12 @@ class Js_Transformer
/** /**
* Node.js transformer script path (RPC server) * Node.js transformer script path (RPC server)
*/ */
protected const RPC_SERVER_SCRIPT = 'app/RSpade/Core/JavaScript/resource/js-transformer-server.js'; protected const RPC_SERVER_SCRIPT = 'app/RSpade/Core/JsParsers/resource/js-transformer-server.js';
/** /**
* Transformer script path for availability checking (RPC server used for actual transformations) * Transformer script path for availability checking (RPC server used for actual transformations)
*/ */
protected const TRANSFORMER_SCRIPT = 'app/RSpade/Core/JavaScript/resource/js-transformer.js'; protected const TRANSFORMER_SCRIPT = 'app/RSpade/Core/JsParsers/resource/js-transformer.js';
/** /**
* Cache directory for transformed JavaScript files * Cache directory for transformed JavaScript files

View File

@@ -99,7 +99,7 @@ When `start_rpc_server()` is called:
```php ```php
$process = new Process([ $process = new Process([
'node', 'node',
base_path('app/RSpade/Core/JavaScript/resource/js-parser-server.js'), base_path('app/RSpade/Core/JsParsers/resource/js-parser-server.js'),
'--socket=' . $socket_path '--socket=' . $socket_path
]); ]);
$process->start(); $process->start();
@@ -348,11 +348,11 @@ When implementing RPC server for another operation:
Reference these when implementing pattern elsewhere: Reference these when implementing pattern elsewhere:
- **PHP Server Management:** `/system/app/RSpade/Core/JavaScript/Js_Parser.php` - **PHP Server Management:** `/system/app/RSpade/Core/JsParsers/Js_Parser.php`
- Methods: `start_rpc_server()`, `stop_rpc_server()`, `ping_rpc_server()` - Methods: `start_rpc_server()`, `stop_rpc_server()`, `ping_rpc_server()`
- Lines: 528-680 - Lines: 528-680
- **Node.js RPC Server:** `/system/app/RSpade/Core/JavaScript/resource/js-parser-server.js` - **Node.js RPC Server:** `/system/app/RSpade/Core/JsParsers/resource/js-parser-server.js`
- Full example server with line-delimited JSON handling - Full example server with line-delimited JSON handling
- Socket cleanup, signal handlers, graceful shutdown - Socket cleanup, signal handlers, graceful shutdown
@@ -398,7 +398,7 @@ echo '{"id":1,"method":"ping"}' | nc -U storage/rsx-tmp/js-parser-server.sock
### Manual Server Test ### Manual Server Test
```bash ```bash
# Start server manually # Start server manually
node system/app/RSpade/Core/JavaScript/resource/js-parser-server.js \ node system/app/RSpade/Core/JsParsers/resource/js-parser-server.js \
--socket=/tmp/test.sock --socket=/tmp/test.sock
# In another terminal: # In another terminal:

View File

@@ -51,7 +51,7 @@ The build process in Manifest.php follows these phases:
### Phase 1: File Discovery (__discover_files) ### Phase 1: File Discovery (__discover_files)
- Scans directories from `config('rsx.manifest.scan_directories')` - Scans directories from `config('rsx.manifest.scan_directories')`
- Default: `['rsx', 'app/RSpade/Core/Js', 'app/RSpade/Modules']` - Default: `['rsx', 'app/RSpade/Core/Js', 'app/RSpade/Core/Manifest/Modules']`
- Excludes: vendor/, node_modules/, .git/, storage/, public/ - Excludes: vendor/, node_modules/, .git/, storage/, public/
- Returns array of file paths with basic stats (mtime, size) - Returns array of file paths with basic stats (mtime, size)
@@ -213,7 +213,7 @@ This ensures **fail-fast behavior** - no silent failures.
### Built-in Modules ### Built-in Modules
Located in `/app/RSpade/Modules/`: Located in `/app/RSpade/Core/Manifest/Modules/`:
- `Php_ManifestModule` - PHP reflection and attribute extraction - `Php_ManifestModule` - PHP reflection and attribute extraction
- `Blade_ManifestModule` - Blade directive parsing - `Blade_ManifestModule` - Blade directive parsing
@@ -310,7 +310,7 @@ When testing manifest functionality:
- Cache file: `storage/rsx-build/manifest_data.php` - Cache file: `storage/rsx-build/manifest_data.php`
- JS stubs: `storage/rsx-build/js-stubs/` - JS stubs: `storage/rsx-build/js-stubs/`
- Model stubs: `storage/rsx-build/js-model-stubs/` - Model stubs: `storage/rsx-build/js-model-stubs/`
- Default scan dirs: `['rsx', 'app/RSpade/Core/Js', 'app/RSpade/Modules']` - Default scan dirs: `['rsx', 'app/RSpade/Core/Js', 'app/RSpade/Core/Manifest/Modules']`
## Direct Data Access ## Direct Data Access

View File

@@ -2494,7 +2494,7 @@ class Manifest
case 'js': case 'js':
console_debug('BUILD', "Parsing JS file: {$file_path}"); console_debug('BUILD', "Parsing JS file: {$file_path}");
$js_metadata = \App\RSpade\Core\JavaScript\Js_Parser::extract_metadata($absolute_path); $js_metadata = \App\RSpade\Core\JsParsers\Js_Parser::extract_metadata($absolute_path);
$data = array_merge($data, $js_metadata); $data = array_merge($data, $js_metadata);
break; break;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\RSpade\Modules; namespace App\RSpade\Core\Manifest\Modules;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;

View File

@@ -1,14 +1,12 @@
<?php <?php
namespace App\RSpade\Services; namespace App\RSpade\Core\Task;
use App\RSpade\Core\Service\Rsx_Service_Abstract;
use App\RSpade\Core\Task\Task_Instance;
use App\RSpade\Core\Task\Task_Attribute;
use App\RSpade\Core\Task\Schedule;
use App\RSpade\Core\Task\Task_Status;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\File;
use App\RSpade\Core\Service\Rsx_Service_Abstract;
use App\RSpade\Core\Task\Task_Instance;
use App\RSpade\Core\Task\Task_Status;
/** /**
* Cleanup Service * Cleanup Service

View File

@@ -5,7 +5,7 @@
* use snake_case (underscore_wherever_possible). * use snake_case (underscore_wherever_possible).
*/ */
namespace App\RSpade\Testing; namespace App\RSpade\Core\Testing;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;

View File

@@ -1,52 +1,104 @@
/** /**
* JQHTML Integration - Automatic component registration and binding * JQHTML Integration - Component Hydration System
* *
* This module automatically: * This module bridges server-rendered HTML and client-side jqhtml components.
* 1. Registers component classes that extend Component *
* 2. Binds templates to component classes when names match * == THE HYDRATION PROBLEM ==
* 3. Enables $(selector).component("Component_Name") syntax *
* When PHP/Blade renders a page, jqhtml components appear as placeholder elements:
*
* Blade source: <User_Card $name="John" />
* Rendered HTML: <div class="Component_Init"
* data-component-init-name="User_Card"
* data-component-args='{"name":"John"}'>
* </div>
*
* These are just div tags - they have no behavior until JavaScript runs.
* "Hydration" is the process of finding these placeholders and converting them
* into live, interactive jqhtml components.
*
* == TWO-PHASE INITIALIZATION ==
*
* Phase 1: _on_framework_modules_define() - Component Registration
* - Runs early in framework boot, before DOM is processed
* - Registers all ES6 classes extending Component with jqhtml runtime
* - After this phase, jqhtml knows: "User_Card" → UserCardClass
*
* Phase 2: _on_framework_modules_init() - DOM Hydration
* - Runs after templates are loaded
* - Finds all .Component_Init elements in the DOM
* - Extracts component name and args from data attributes
* - Calls $element.component(name, args) to hydrate each one
* - Recursively processes nested components
* - Triggers 'jqhtml_ready' when all components are initialized
*
* == THE TRANSFORMATION ==
*
* Before hydration:
* <div class="Component_Init" data-component-init-name="User_Card" ...>
*
* After hydration:
* <div class="User_Card"> ← Component_Init removed, component class added
* [component template content] ← Template rendered into element
* </div>
*
* The element is now a live component with event handlers, state, and lifecycle.
*
* == KEY PARTICIPANTS ==
*
* JqhtmlBladeCompiler.php - Transforms <Component /> tags into .Component_Init divs
* jqhtml runtime - Maintains registry of component names → classes
* This module - Orchestrates registration and hydration
* $().component() - jQuery plugin that creates component instances
*/ */
class Jqhtml_Integration { class Jqhtml_Integration {
/** /**
* Compiled Jqhtml templates self-register. The developer (the framework in this case) is still * Phase 1: Register Component Classes
* responsible for registering es6 component classes with jqhtml. This does so at an early stage *
* of framework init. * Compiled .jqhtml templates self-register their render methods with jqhtml.
* But the framework must separately register ES6 component classes (the ones
* extending Component with lifecycle methods like on_create, on_load, etc).
*
* This runs during framework_modules_define, before any DOM processing.
*/ */
static _on_framework_modules_define() { static _on_framework_modules_define() {
// ─────────────────────────────────────────────────────────────────────
// Register Component Classes with jqhtml Runtime
//
// The Manifest knows all classes extending Component. We register each
// with jqhtml so it can instantiate them by name during hydration.
// ─────────────────────────────────────────────────────────────────────
let jqhtml_components = Manifest.get_extending('Component'); let jqhtml_components = Manifest.get_extending('Component');
console_debug('JQHTML_INIT', 'Registering ' + jqhtml_components.length + ' Components'); console_debug('JQHTML_INIT', 'Registering ' + jqhtml_components.length + ' Components');
for (let component of jqhtml_components) { for (let component of jqhtml_components) {
jqhtml.register_component(component.class_name, component.class_object); jqhtml.register_component(component.class_name, component.class_object);
} }
// Assign unique cache IDs to all static methods for component caching // ─────────────────────────────────────────────────────────────────────
// This enables JQHTML to generate deterministic cache keys when functions // Tag Static Methods with Cache IDs
// are passed as component arguments (e.g., DataGrid data_source functions) //
// jqhtml caches component output based on args. When a function is passed
// as an arg (e.g., DataGrid's data_source), we need a stable string key.
//
// Without this: data_source: function() {...} → no cache (functions aren't serializable)
// With this: function._jqhtml_cache_id = "My_DataGrid.fetch_data" → cacheable
// ─────────────────────────────────────────────────────────────────────
const all_classes = Manifest.get_all_classes(); const all_classes = Manifest.get_all_classes();
let methods_tagged = 0; let methods_tagged = 0;
for (const class_info of all_classes) { for (const class_info of all_classes) {
const class_object = class_info.class_object; const class_object = class_info.class_object;
const class_name = class_info.class_name; const class_name = class_info.class_name;
// Get all property names from the class object (static methods/properties)
const property_names = Object.getOwnPropertyNames(class_object); const property_names = Object.getOwnPropertyNames(class_object);
for (const property_name of property_names) { for (const property_name of property_names) {
// Skip built-in properties and non-functions if (property_name === 'length' || property_name === 'name' || property_name === 'prototype') {
if (property_name === 'length' ||
property_name === 'name' ||
property_name === 'prototype') {
continue; continue;
} }
const property_value = class_object[property_name]; const property_value = class_object[property_name];
// Only tag functions (static methods)
if (typeof property_value === 'function') { if (typeof property_value === 'function') {
// Assign unique cache ID: "ClassName.methodName"
property_value._jqhtml_cache_id = `${class_name}.${property_name}`; property_value._jqhtml_cache_id = `${class_name}.${property_name}`;
methods_tagged++; methods_tagged++;
} }
@@ -55,24 +107,57 @@ class Jqhtml_Integration {
console_debug('JQHTML_INIT', `Tagged ${methods_tagged} static methods with _jqhtml_cache_id`); console_debug('JQHTML_INIT', `Tagged ${methods_tagged} static methods with _jqhtml_cache_id`);
// Set the cache key for jqhtml to the application key to enable component caching in local storage. // ─────────────────────────────────────────────────────────────────────
// Modifying the application or the user logging out modifies the scope_key and will invalidate jqhtml cache. // Configure jqhtml Caching
//
// scope_key() changes when: app code changes, user logs out, site changes.
// This automatically invalidates cached component renders.
// ─────────────────────────────────────────────────────────────────────
jqhtml.set_cache_key(Rsx.scope_key()); jqhtml.set_cache_key(Rsx.scope_key());
// set this to true if we desire jqhtml verbose output (probably not necessary for end developers)
window.jqhtml.debug.verbose = false; window.jqhtml.debug.verbose = false;
} }
/** /**
* Framework modules init phase - Bind components and initialize DOM * Phase 2: DOM Hydration
* This runs after templates are registered to bind component classes *
* @param {jQuery} [$scope] Optional scope to search within (defaults to body) * Finds all .Component_Init placeholders and converts them into live components.
* @returns {Array<Promise>|undefined} Array of promises for recursive calls, undefined for top-level *
* == HYDRATION PROCESS ==
*
* For each .Component_Init element:
*
* 1. EXTRACT: Read data-component-init-name and data-component-args
* 2. CLEANUP: Remove data attributes (prevents re-hydration, hides implementation)
* 3. CAPTURE: Save innerHTML for slot/content() processing
* 4. INSTANTIATE: Call $element.component(name, args)
* 5. RECURSE: After render, hydrate any nested .Component_Init elements
*
* == NESTED COMPONENT HANDLING ==
*
* Components can contain other components in their Blade output:
*
* <User_Card> ← Parent hydrates first
* <Avatar /> ← Child hydrates after parent renders
* </User_Card>
*
* We skip nested .Component_Init elements on first pass (they're inside a parent
* that hasn't rendered yet). After each component renders, we recursively scan
* its content for children to hydrate.
*
* == ASYNC COMPLETION ==
*
* Hydration is async because components may have on_load() methods that fetch data.
* We track all component promises and trigger 'jqhtml_ready' only when every
* component (including nested ones) has completed its full lifecycle.
*
* @param {jQuery} [$scope] Scope to search (defaults to body). Recursive calls pass component.$
* @returns {Array<Promise>|undefined} Promises for recursive calls; undefined for top-level
*/ */
static _on_framework_modules_init($scope) { static _on_framework_modules_init($scope) {
const is_top_level = !$scope; const is_top_level = !$scope;
const promises = []; const promises = [];
const components_needing_init = ($scope || $('body')).find('.Component_Init'); const components_needing_init = ($scope || $('body')).find('.Component_Init');
if (components_needing_init.length > 0) { if (components_needing_init.length > 0) {
console_debug('JQHTML_INIT', `Initializing ${components_needing_init.length} DOM components`); console_debug('JQHTML_INIT', `Initializing ${components_needing_init.length} DOM components`);
} }
@@ -80,35 +165,27 @@ class Jqhtml_Integration {
components_needing_init.each(function () { components_needing_init.each(function () {
const $element = $(this); const $element = $(this);
// Skip if element is no longer attached to the document // Guard: Element may have been removed by a parent component's render
// (may have been removed by a parent component's .empty() call)
if (!document.contains($element[0])) { if (!document.contains($element[0])) {
return; return;
} }
// Check if any parent has Component_Init class - skip nested components // Guard: Skip nested components - they'll be processed after their parent renders
let parent = $element[0].parentElement; let parent = $element[0].parentElement;
while (parent) { while (parent) {
if (parent.classList.contains('Component_Init')) { if (parent.classList.contains('Component_Init')) {
return; // Skip this element, it's nested return;
} }
parent = parent.parentElement; parent = parent.parentElement;
} }
// ─────────────────────────────────────────────────────────────────
// STEP 1: Extract hydration data from placeholder element
// ─────────────────────────────────────────────────────────────────
const component_name = $element.attr('data-component-init-name'); const component_name = $element.attr('data-component-init-name');
// jQuery's .data() doesn't auto-parse JSON - we need to parse it manually
let component_args = {};
const args_string = $element.attr('data-component-args'); const args_string = $element.attr('data-component-args');
// Unset component- php side initialization args, it is no longer needed as a compionent attribute let component_args = {};
// Unsetting also prevents undesired access to this code in other parts of the program, prevening an
// unwanted future dependency on this paradigm
$element.removeAttr('data-component-init-name');
$element.removeAttr('data-component-args');
$element.removeData('component-init-name');
$element.removeData('component-args');
if (args_string) { if (args_string) {
try { try {
component_args = JSON.parse(args_string); component_args = JSON.parse(args_string);
@@ -118,13 +195,22 @@ class Jqhtml_Integration {
} }
} }
// ─────────────────────────────────────────────────────────────────
// STEP 2: Remove hydration markers (cleanup)
//
// These attributes served their purpose. Removing them:
// - Prevents accidental re-hydration
// - Hides implementation details from DOM inspection
// - Prevents other code from depending on this internal mechanism
// ─────────────────────────────────────────────────────────────────
$element.removeAttr('data-component-init-name');
$element.removeAttr('data-component-args');
$element.removeData('component-init-name');
$element.removeData('component-args');
if (component_name) { if (component_name) {
// Transform $ prefixed keys to data- attributes
let component_args_filtered = {}; let component_args_filtered = {};
for (const [key, value] of Object.entries(component_args)) { for (const [key, value] of Object.entries(component_args)) {
// if (key.startsWith('$')) {
// component_args_filtered[key.substring(1)] = value;
// } else
if (key.startsWith('data-')) { if (key.startsWith('data-')) {
component_args_filtered[key.substring(5)] = value; component_args_filtered[key.substring(5)] = value;
} else { } else {
@@ -133,29 +219,41 @@ class Jqhtml_Integration {
} }
try { try {
// Store inner HTML as string for nested component processing // ─────────────────────────────────────────────────────────
// STEP 3: Capture innerHTML for slot/content() processing
//
// Blade content between <Component>...</Component> tags
// becomes available to the template via content() function
// ─────────────────────────────────────────────────────────
component_args_filtered._inner_html = $element.html(); component_args_filtered._inner_html = $element.html();
$element.empty(); $element.empty();
// Remove the init class before instantiation to prevent re-initialization // ─────────────────────────────────────────────────────────
// STEP 4: Instantiate the component
//
// Remove .Component_Init first to prevent re-initialization
// if this element is somehow scanned again
// ─────────────────────────────────────────────────────────
$element.removeClass('Component_Init'); $element.removeClass('Component_Init');
// Create promise for this component's initialization
const component_promise = new Promise((resolve) => { const component_promise = new Promise((resolve) => {
// Use jQuery component plugin to create the component // $().component(name, args) creates the component instance,
// Plugin handles element internally, just pass args // binds it to the element, and starts the lifecycle
// Get the updated $element from
let component = $element.component(component_name, component_args_filtered).component(); let component = $element.component(component_name, component_args_filtered).component();
// ─────────────────────────────────────────────────────
// STEP 5: Recurse after render
//
// Component's template may contain nested .Component_Init
// elements. We must wait for render before we can find them.
//
// Note: If the template changed the tag (e.g., tag="button"),
// the original $element may have been replaced. Always use
// component.$ to get the current element.
// ─────────────────────────────────────────────────────
component.on('render', function () { component.on('render', function () {
// Recursively collect promises from nested components
// Getting the updated component here - if the tag name was not div, the element would have been recreated, so we need to get the element set on the component, not from our earlier selector
const nested_promises = Jqhtml_Integration._on_framework_modules_init(component.$); const nested_promises = Jqhtml_Integration._on_framework_modules_init(component.$);
promises.push(...nested_promises); promises.push(...nested_promises);
// Resolve this component's promise
resolve(); resolve();
}).$; }).$;
}); });
@@ -168,7 +266,9 @@ class Jqhtml_Integration {
} }
}); });
// Top-level call: spawn async handler to wait for all promises, then trigger event // ─────────────────────────────────────────────────────────────────────
// COMPLETION: Top-level call waits for all components, then signals ready
// ─────────────────────────────────────────────────────────────────────
if (is_top_level) { if (is_top_level) {
(async () => { (async () => {
await Promise.all(promises); await Promise.all(promises);
@@ -177,26 +277,23 @@ class Jqhtml_Integration {
return; return;
} }
// Recursive call: return promises for parent to collect // Recursive calls return promises for parent to collect
return promises; return promises;
} }
/** // ═══════════════════════════════════════════════════════════════════════
* Get all registered component names // Utility Methods (pass-through to jqhtml runtime)
* @returns {Array<string>} Array of component names // ═══════════════════════════════════════════════════════════════════════
*/
/** Get all registered component names. Useful for debugging/introspection. */
static get_component_names() { static get_component_names() {
return jqhtml.get_component_names(); return jqhtml.get_component_names();
} }
/** /** Check if a component is registered by name. */
* Check if a component is registered
* @param {string} name Component name
* @returns {boolean} True if component is registered
*/
static has_component(name) { static has_component(name) {
return jqhtml.has_component(name); return jqhtml.has_component(name);
} }
} }
// RSX manifest automatically makes classes global - no manual assignment needed // Class is automatically made global by RSX manifest - no window assignment needed

View File

View File

@@ -124,7 +124,7 @@ return [
'manifest_support' => [ 'manifest_support' => [
\App\RSpade\Core\Dispatch\Route_ManifestSupport::class, \App\RSpade\Core\Dispatch\Route_ManifestSupport::class,
\App\RSpade\Modules\Model_ManifestSupport::class, \App\RSpade\Core\Manifest\Modules\Model_ManifestSupport::class,
\App\RSpade\Integrations\Jqhtml\Jqhtml_ManifestSupport::class, \App\RSpade\Integrations\Jqhtml\Jqhtml_ManifestSupport::class,
\App\RSpade\Core\SPA\Spa_ManifestSupport::class, \App\RSpade\Core\SPA\Spa_ManifestSupport::class,
], ],
@@ -280,13 +280,10 @@ return [
'scan_directories' => [ 'scan_directories' => [
'rsx', // Main RSX application directory (symlinked to ../rsx) 'rsx', // Main RSX application directory (symlinked to ../rsx)
'app/RSpade/Core', // Core framework classes (runtime essentials) 'app/RSpade/Core', // Core framework classes (runtime essentials)
'app/RSpade/Modules', // Manifest support modules
'app/RSpade/Integrations', // Integration modules (Jqhtml, Scss, etc.) 'app/RSpade/Integrations', // Integration modules (Jqhtml, Scss, etc.)
'app/RSpade/Bundles', // Third-party bundles 'app/RSpade/Bundles', // Third-party bundles
'app/RSpade/CodeQuality', // Code quality rules and checks 'app/RSpade/CodeQuality', // Code quality rules and checks
'app/RSpade/Testing', // Testing framework classes 'app/RSpade/Lib', // UI features (Flash alerts, etc.)
'app/RSpade/Lib', // UI features and other extras
'app/RSpade/Components', // Framework-provided reusable components
'app/RSpade/temp', // Framework developer testing directory 'app/RSpade/temp', // Framework developer testing directory
], ],

16
node_modules/.bin/acorn generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../acorn/bin/acorn" "$@"
else
exec node "$basedir/../acorn/bin/acorn" "$@"
fi

1
node_modules/.bin/acorn generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../acorn/bin/acorn

17
node_modules/.bin/acorn.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\acorn\bin\acorn" %*

28
node_modules/.bin/acorn.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args
} else {
& "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../acorn/bin/acorn" $args
} else {
& "node$exe" "$basedir/../acorn/bin/acorn" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/ansi-html generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../ansi-html-community/bin/ansi-html" "$@"
else
exec node "$basedir/../ansi-html-community/bin/ansi-html" "$@"
fi

1
node_modules/.bin/ansi-html generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../ansi-html-community/bin/ansi-html

17
node_modules/.bin/ansi-html.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\ansi-html-community\bin\ansi-html" %*

28
node_modules/.bin/ansi-html.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../ansi-html-community/bin/ansi-html" $args
} else {
& "$basedir/node$exe" "$basedir/../ansi-html-community/bin/ansi-html" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../ansi-html-community/bin/ansi-html" $args
} else {
& "node$exe" "$basedir/../ansi-html-community/bin/ansi-html" $args
}
$ret=$LASTEXITCODE
}
exit $ret

17
node_modules/.bin/autoprefixer.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\autoprefixer\bin\autoprefixer" %*

28
node_modules/.bin/autoprefixer.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
} else {
& "$basedir/node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
} else {
& "node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\baseline-browser-mapping\dist\cli.js" %*

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
} else {
& "node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

17
node_modules/.bin/browserslist.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\browserslist\cli.js" %*

28
node_modules/.bin/browserslist.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../browserslist/cli.js" $args
} else {
& "node$exe" "$basedir/../browserslist/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/concat generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../concat/bin/concat" "$@"
else
exec node "$basedir/../concat/bin/concat" "$@"
fi

1
node_modules/.bin/concat generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../concat/bin/concat

17
node_modules/.bin/concat.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\concat\bin\concat" %*

28
node_modules/.bin/concat.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../concat/bin/concat" $args
} else {
& "$basedir/node$exe" "$basedir/../concat/bin/concat" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../concat/bin/concat" $args
} else {
& "node$exe" "$basedir/../concat/bin/concat" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/create-jest generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../create-jest/bin/create-jest.js" "$@"
else
exec node "$basedir/../create-jest/bin/create-jest.js" "$@"
fi

1
node_modules/.bin/create-jest generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../create-jest/bin/create-jest.js

17
node_modules/.bin/create-jest.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\create-jest\bin\create-jest.js" %*

28
node_modules/.bin/create-jest.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../create-jest/bin/create-jest.js" $args
} else {
& "$basedir/node$exe" "$basedir/../create-jest/bin/create-jest.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../create-jest/bin/create-jest.js" $args
} else {
& "node$exe" "$basedir/../create-jest/bin/create-jest.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/cross-env generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../cross-env/src/bin/cross-env.js" "$@"
else
exec node "$basedir/../cross-env/src/bin/cross-env.js" "$@"
fi

1
node_modules/.bin/cross-env generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../cross-env/src/bin/cross-env.js

16
node_modules/.bin/cross-env-shell generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../cross-env/src/bin/cross-env-shell.js" "$@"
else
exec node "$basedir/../cross-env/src/bin/cross-env-shell.js" "$@"
fi

1
node_modules/.bin/cross-env-shell generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../cross-env/src/bin/cross-env-shell.js

View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\cross-env\src\bin\cross-env-shell.js" %*

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../cross-env/src/bin/cross-env-shell.js" $args
} else {
& "$basedir/node$exe" "$basedir/../cross-env/src/bin/cross-env-shell.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../cross-env/src/bin/cross-env-shell.js" $args
} else {
& "node$exe" "$basedir/../cross-env/src/bin/cross-env-shell.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

17
node_modules/.bin/cross-env.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\cross-env\src\bin\cross-env.js" %*

28
node_modules/.bin/cross-env.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../cross-env/src/bin/cross-env.js" $args
} else {
& "$basedir/node$exe" "$basedir/../cross-env/src/bin/cross-env.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../cross-env/src/bin/cross-env.js" $args
} else {
& "node$exe" "$basedir/../cross-env/src/bin/cross-env.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/cssesc generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../cssesc/bin/cssesc" "$@"
else
exec node "$basedir/../cssesc/bin/cssesc" "$@"
fi

1
node_modules/.bin/cssesc generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../cssesc/bin/cssesc

17
node_modules/.bin/cssesc.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\cssesc\bin\cssesc" %*

28
node_modules/.bin/cssesc.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../cssesc/bin/cssesc" $args
} else {
& "$basedir/node$exe" "$basedir/../cssesc/bin/cssesc" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../cssesc/bin/cssesc" $args
} else {
& "node$exe" "$basedir/../cssesc/bin/cssesc" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/detect-libc generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../detect-libc/bin/detect-libc.js" "$@"
else
exec node "$basedir/../detect-libc/bin/detect-libc.js" "$@"
fi

1
node_modules/.bin/detect-libc generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../detect-libc/bin/detect-libc.js

17
node_modules/.bin/detect-libc.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\detect-libc\bin\detect-libc.js" %*

28
node_modules/.bin/detect-libc.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../detect-libc/bin/detect-libc.js" $args
} else {
& "$basedir/node$exe" "$basedir/../detect-libc/bin/detect-libc.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../detect-libc/bin/detect-libc.js" $args
} else {
& "node$exe" "$basedir/../detect-libc/bin/detect-libc.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

17
node_modules/.bin/envinfo.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\envinfo\dist\cli.js" %*

28
node_modules/.bin/envinfo.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../envinfo/dist/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../envinfo/dist/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../envinfo/dist/cli.js" $args
} else {
& "node$exe" "$basedir/../envinfo/dist/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

17
node_modules/.bin/esbuild.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esbuild\bin\esbuild" %*

28
node_modules/.bin/esbuild.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
} else {
& "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../esbuild/bin/esbuild" $args
} else {
& "node$exe" "$basedir/../esbuild/bin/esbuild" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/esparse generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../esprima/bin/esparse.js" "$@"
else
exec node "$basedir/../esprima/bin/esparse.js" "$@"
fi

1
node_modules/.bin/esparse generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../esprima/bin/esparse.js

17
node_modules/.bin/esparse.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esprima\bin\esparse.js" %*

28
node_modules/.bin/esparse.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../esprima/bin/esparse.js" $args
} else {
& "$basedir/node$exe" "$basedir/../esprima/bin/esparse.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../esprima/bin/esparse.js" $args
} else {
& "node$exe" "$basedir/../esprima/bin/esparse.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/esvalidate generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../esprima/bin/esvalidate.js" "$@"
else
exec node "$basedir/../esprima/bin/esvalidate.js" "$@"
fi

1
node_modules/.bin/esvalidate generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../esprima/bin/esvalidate.js

17
node_modules/.bin/esvalidate.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esprima\bin\esvalidate.js" %*

28
node_modules/.bin/esvalidate.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../esprima/bin/esvalidate.js" $args
} else {
& "$basedir/node$exe" "$basedir/../esprima/bin/esvalidate.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../esprima/bin/esvalidate.js" $args
} else {
& "node$exe" "$basedir/../esprima/bin/esvalidate.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/flat generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../flat/cli.js" "$@"
else
exec node "$basedir/../flat/cli.js" "$@"
fi

1
node_modules/.bin/flat generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../flat/cli.js

17
node_modules/.bin/flat.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\flat\cli.js" %*

28
node_modules/.bin/flat.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../flat/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../flat/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../flat/cli.js" $args
} else {
& "node$exe" "$basedir/../flat/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/handlebars generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../handlebars/bin/handlebars" "$@"
else
exec node "$basedir/../handlebars/bin/handlebars" "$@"
fi

1
node_modules/.bin/handlebars generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../handlebars/bin/handlebars

17
node_modules/.bin/handlebars.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\handlebars\bin\handlebars" %*

28
node_modules/.bin/handlebars.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../handlebars/bin/handlebars" $args
} else {
& "$basedir/node$exe" "$basedir/../handlebars/bin/handlebars" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../handlebars/bin/handlebars" $args
} else {
& "node$exe" "$basedir/../handlebars/bin/handlebars" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/he generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../he/bin/he" "$@"
else
exec node "$basedir/../he/bin/he" "$@"
fi

1
node_modules/.bin/he generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../he/bin/he

17
node_modules/.bin/he.cmd generated vendored
View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\he\bin\he" %*

28
node_modules/.bin/he.ps1 generated vendored
View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../he/bin/he" $args
} else {
& "$basedir/node$exe" "$basedir/../he/bin/he" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../he/bin/he" $args
} else {
& "node$exe" "$basedir/../he/bin/he" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../html-minifier-terser/cli.js" "$@"
else
exec node "$basedir/../html-minifier-terser/cli.js" "$@"
fi

1
node_modules/.bin/html-minifier-terser generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../html-minifier-terser/cli.js

View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\html-minifier-terser\cli.js" %*

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../html-minifier-terser/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../html-minifier-terser/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../html-minifier-terser/cli.js" $args
} else {
& "node$exe" "$basedir/../html-minifier-terser/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../import-local/fixtures/cli.js" "$@"
else
exec node "$basedir/../import-local/fixtures/cli.js" "$@"
fi

1
node_modules/.bin/import-local-fixture generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../import-local/fixtures/cli.js

View File

@@ -1,17 +0,0 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\import-local\fixtures\cli.js" %*

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../import-local/fixtures/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../import-local/fixtures/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../import-local/fixtures/cli.js" $args
} else {
& "node$exe" "$basedir/../import-local/fixtures/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/is-docker generated vendored
View File

@@ -1,16 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../is-docker/cli.js" "$@"
else
exec node "$basedir/../is-docker/cli.js" "$@"
fi

1
node_modules/.bin/is-docker generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../is-docker/cli.js

Some files were not shown because too many files have changed in this diff Show More