https://github.com/homeboy445/scriptorchestrator
JS library for managing scripts on the webpage easily.
https://github.com/homeboy445/scriptorchestrator
document-object-model javascript-library typescript
Last synced: 6 months ago
JSON representation
JS library for managing scripts on the webpage easily.
- Host: GitHub
- URL: https://github.com/homeboy445/scriptorchestrator
- Owner: homeboy445
- License: mit
- Created: 2024-05-25T10:45:23.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-22T15:21:59.000Z (over 1 year ago)
- Last Synced: 2025-05-27T03:21:19.797Z (9 months ago)
- Topics: document-object-model, javascript-library, typescript
- Language: JavaScript
- Homepage:
- Size: 257 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## ScriptOrchestrator: A Powerful Script Manager for Web Browsers
**ScriptOrchestrator** is a JavaScript library designed to simplify and streamline script management within web browsers. It acts as a one-stop solution for loading and executing both inline and external scripts, offering a structured and efficient approach.
### Key Features
* **Sequential Script Loading:** ScriptOrchestrator ensures scripts are loaded and executed in a prioritized order. This prevents conflicts and guarantees scripts are loaded only after their dependencies are met.
* **Priority Management:** Scripts can be assigned different priority levels (Exceptional, High, Medium, Low) to control their execution order. Exceptional priority scripts execute immediately, while others are loaded based on their assigned priority.
* **Event-Driven Loading:** Scripts can be configured to load upon specific events triggered within your web application. This allows for dynamic script loading based on user interaction or application state.
* **Inline and External Script Support:** ScriptOrchestrator handles both inline JavaScript code snippets and external scripts referenced through URLs.
* **Flexible Script Configuration:** Customize script behavior by attaching attributes and defining timeouts for external scripts.
### Installation
**ScriptOrchestrator** can be used via a CDN link:
```
https://cdn.jsdelivr.net/gh/homeboy445/ScriptOrchestrator@main/release/bundle.js
```
### Usage
**ScriptOrchestrator** provides a user-friendly API for managing scripts. Here's a breakdown of its core functionalities:
**1. Initialization:**
```javascript
const scriptOrch = require('...'); // For NPM users
const mainInitConfig = scriptOrch.default();
```
This code initializes the ScriptOrchestrator instance and creates a configuration object for script management.
**2. Adding Scripts:**
* **External Script:**
```javascript
mainInitConfig.scripts.add().src("path/to/your/script.js");
```
This adds an external script to the queue, specifying its URL via the `src` method.
* **Inline Script:**
```javascript
mainInitConfig.scripts.add().inlineCode("console.log('Inline Script Executed!')");
```
This adds an inline script containing the provided JavaScript code string using the `inlineCode` method. You can also pass a function as an argument.
**3. Configuring Scripts (Optional):**
The `add` method allows for additional configuration options:
* `attr`: An object containing HTML attributes to be attached to the script tag.
* `priority`: A priority level (0: Exceptional, 1: High, 2: Medium, 3: Low) to define the script's execution order.
* `timeout`: A timeout value (in milliseconds) to specify the waiting time between loading consecutive external scripts.
**4. Attaching Event Listeners (Optional):**
Scripts can be configured to trigger event listeners upon specific events:
```javascript
mainInitConfig.scripts.add().src("path/to/your/script.js").listen("load");
```
This attaches a `load` event listener to the script being added. You can customize the event name and optionally define a custom event handler.
**5. Running the ScriptOrchestrator:**
```javascript
mainInitConfig.run();
```
This command initiates the script execution process based on the defined configuration and priority levels.
### Advanced Configuration
* **Stateful Mode:** By default, ScriptOrchestrator maintains an in-memory queue for maintaining the script list. To disable this behavior and avoid storing any data in-memory simply, set the `stateFull` property to `false` during initialization:
```javascript
const mainInitConfig = scriptOrch.default({ stateFull: false });
```
### Usage example
```
Document
const handler = scriptOrch.default()
handler.scripts.add().src("URL1");
handler.scripts.add().src("URL2");
handler.scripts.add().inlineCode("console.log('js code!')");
handler.scripts.add(({ priority: 2 })).src("URL3");
handler.run()
This is a test page!
```
### API Reference
This section provides a detailed explanation of the available methods and their parameters:
**1. initializer(config?: { stateFull: boolean })**
* Initializes the ScriptOrchestrator instance.
* Optional `config` object allows setting the `stateFull` property to `false` for stateless mode.
* In stateFull mode all the date is stored in memory.
**2. run(reRun?: boolean)**
* Executes the script loading and execution process based on the configured scripts.
* Optional `reRun` parameter (defaults to `false`) allows re-running previously loaded scripts.
**3. add(config?: { attr?: GenericObject; priority?: LoadPriority; timeout?: number; })**
* Adds a script (either inline or external) to the execution queue.
* Optional `config` object allows for additional configuration.
* For passing attributes, simply pass them directly inside the config object.
* In case you need to use any attributes that are reserved such as priority, timeout, etc. then pass those values inside attr key!
**4. src(srcUrl: string)**
* Used within the `add` method to specify the URL for an external script.
**5. inlineCode(jsCode: string | Function)**
* Used within the `add` method to provide inline JavaScript code
* Can accept js code as string or a function.
* In case function is passed as parameter, it will not be accesible globally.
**6. listen(eventName: string, additionalInfo?: { isCustom: boolean })**
* Attaches an event listener to the script being added.
* `eventName` specifies the event to listen for (e.g., `load`, `error`).
* Optional `additionalInfo` object allows customization:
* `isCustom`: Set to `true` to attach the listener to a custom event handler within ScriptOrchestrator (defaults to attaching to the window object).
**7. Priority Levels:**
* Scripts can be assigned priority levels to control execution order:
* **0: Exceptional:** Executes immediately, bypassing the queue.
* **1: High:** High priority scripts execute before lower priority ones.
* **2: Medium:** Default priority level.
* **3: Low:** Lower priority scripts execute after higher priority ones.
**8. Exceptional Priority:**
* Scripts with exceptional priority (value 0) are executed immediately upon adding them, ensuring they run before other scripts regardless of the queue.
### Benefits of Using ScriptOrchestrator
* **Improved Performance:** By prioritizing script loading, you can prevent blocking of critical resources and optimize page load times.
* **Enhanced Code Organization:** Separate script management promotes cleaner and more maintainable code.
* **Reduced Complexity:** ScriptOrchestrator simplifies script handling, especially for complex web applications with numerous dependencies.
* **Increased Flexibility:** Event-driven loading and custom configuration options provide greater control over script behavior.
### Contributing
We welcome contributions from the open-source community! You can find details on contributing to the ScriptOrchestrator project on the project's GitHub repository (link to be added).
### License
ScriptOrchestrator is licensed under the MIT License (see LICENSE file for details).
This README provides a comprehensive overview of ScriptOrchestrator and its functionalities. We encourage you to explore the library and leverage its capabilities to streamline your web development workflow.