{"id":30642237,"url":"https://github.com/marianfoo/ui5-plugin-loader","last_synced_at":"2025-08-31T02:07:13.566Z","repository":{"id":303806531,"uuid":"1016724321","full_name":"marianfoo/ui5-plugin-loader","owner":"marianfoo","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-23T20:34:30.000Z","size":256,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-28T15:04:54.135Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marianfoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-09T12:35:34.000Z","updated_at":"2025-07-24T06:08:49.000Z","dependencies_parsed_at":"2025-07-09T14:49:26.197Z","dependency_job_id":"cd709134-d31d-4da7-9a05-03fa6489fb49","html_url":"https://github.com/marianfoo/ui5-plugin-loader","commit_stats":null,"previous_names":["marianfoo/ui5-plugin-loader"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marianfoo/ui5-plugin-loader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianfoo%2Fui5-plugin-loader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianfoo%2Fui5-plugin-loader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianfoo%2Fui5-plugin-loader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianfoo%2Fui5-plugin-loader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marianfoo","download_url":"https://codeload.github.com/marianfoo/ui5-plugin-loader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianfoo%2Fui5-plugin-loader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272930015,"owners_count":25017058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-31T02:07:13.017Z","updated_at":"2025-08-31T02:07:13.553Z","avatar_url":"https://github.com/marianfoo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ui5‑plugin‑loader\n\n\u003e **A UI5 Tooling v4 extension that auto‑mounts other extensions based on manifest JSON files**\n\n## Overview\n\n**ui5‑plugin‑loader v0.2.x** provides a *single‑line* integration that automatically discovers and loads UI5 tooling extensions based on manifest JSON files. Simply add one entry to your `ui5.yaml` and all compatible dependencies will be loaded automatically in the correct order.\n\n## Features\n\n- ✅ **Single-line setup** - Only requires one `ui5.yaml` entry\n- ✅ **Auto-discovery** - Scans all dependencies for manifest files\n- ✅ **Smart ordering** - Fixed pattern ordering: stringreplace → transpile → modules → livereload → rest\n- ✅ **Server \u0026 Build support** - Works with both `ui5 serve` and `ui5 build`\n- ✅ **Fallback manifests** - Includes manifests for popular extensions\n- ✅ **Disable/Override support** - Disable extensions or override their configuration\n- ✅ **Graceful failure** - Invalid manifests won't crash your dev server\n- ✅ **Comprehensive logging** - Uses `@ui5/logger` with configurable levels\n\n## Requirements\n\n- **UI5 Tooling v4.0 or higher** (for dynamic middleware registration)\n- **Node.js v18.0.0 or higher**\n- **npm v8 or higher**\n\n## Installation\n\n```bash\nnpm install --save-dev ui5-plugin-loader\n```\n\n## Quick Start\n\n### 1. Add to your `ui5.yaml`\n\n```yaml\nspecVersion: '4.0'\nmetadata:\n  name: my-ui5-app\ntype: application\n\nserver:\n  customMiddleware:\n    - name: ui5-plugin-loader\n      afterMiddleware: compression\n\nbuilder:\n  customTasks:\n    - name: ui5-plugin-loader-task\n      afterTask: replaceVersion\n```\n\n### 2. Install extensions\n\nInstall any supported UI5 tooling extension:\n\n```bash\nnpm install --save-dev ui5-tooling-modules\nnpm install --save-dev ui5-middleware-livereload\nnpm install --save-dev ui5-tooling-transpile\nnpm install --save-dev ui5-tooling-stringreplace\n```\n\n### 3. Run your project\n\n```bash\nui5 serve  # or ui5 build\n```\n\nThat's it! The plugin loader will automatically:\n1. Scan all your dependencies and devDependencies\n2. Look for `ui5-plugin-loader.json` manifests in each package\n3. Fall back to built-in manifests for popular extensions\n4. Auto-register all found middlewares and tasks with smart ordering\n\n## Currently Supported Extensions\n\nThe plugin loader includes built-in support for these popular UI5 tooling extensions:\n\n### Middlewares\n- **`ui5-tooling-stringreplace`** - String replacement for placeholders\n- **`ui5-tooling-transpile`** - TypeScript and modern JavaScript transpilation\n- **`ui5-tooling-modules`** - ES modules and Node.js modules transformation\n- **`ui5-middleware-livereload`** - Live reload functionality for development\n\n### Tasks  \n- **`ui5-tooling-stringreplace`** - Build-time string replacement\n- **`ui5-tooling-transpile`** - Build-time TypeScript transpilation\n- **`ui5-tooling-modules`** - Build-time modules transformation\n\n### Adding More Extensions\n\nTo add support for additional extensions, create a manifest file in the `manifests/` directory or contribute to this project by submitting a PR with new manifest files.\n\n## How It Works\n\nThe plugin loader follows this discovery and processing pipeline:\n\n1. **Load Configuration**: Validate and normalize the configuration options\n2. **Discover Manifests**: Scan dependencies for manifest files  \n3. **Apply Disable**: Remove extensions from the disable list\n4. **Fill Defaults**: Add default `afterMiddleware: compression` and `afterTask: replaceVersion`\n5. **Apply Overrides**: Merge override configurations\n6. **Validate References**: Check that all after/before targets exist\n7. **Deduplicate**: Remove duplicates (first occurrence wins)\n8. **Smart Sort**: Apply fixed pattern ordering: stringreplace → transpile → modules → livereload → rest\n\n## Configuration Options\n\nYou can customize the plugin loader behavior in your `ui5.yaml`:\n\n```yaml\nserver:\n  customMiddleware:\n    - name: ui5-plugin-loader\n      afterMiddleware: compression\n      configuration:\n        debug: false                            # Enable debug logging\n        disable:                               # Disable specific extensions\n          - ui5-middleware-livereload\n          - ui5-tooling-stringreplace-middleware\n        override:                             # Override extension configurations\n          ui5-tooling-transpile-middleware:\n            afterMiddleware: ui5-tooling-stringreplace-middleware\n            configuration:\n              debug: true\n\nbuilder:\n  customTasks:\n    - name: ui5-plugin-loader-task\n      afterTask: replaceVersion\n      configuration:\n        debug: false                            # Enable debug logging\n        disable:                               # Disable specific extensions\n          - ui5-tooling-stringreplace-task\n        override:                             # Override extension configurations\n          ui5-tooling-modules-task:\n            afterTask: ui5-tooling-transpile-task\n            configuration:\n              debug: true\n```\n\n### Configuration Properties\n\n- **`debug`** *(boolean, default: false)*: Enable debug logging to `@ui5/logger` verbose\n- **`disable`** *(string[], default: [])*: Array of extension names to disable\n- **`override`** *(object, default: {})*: Override configurations for specific extensions\n  - Each key is an extension name\n  - Each value can contain:\n    - `afterMiddleware`/`beforeMiddleware` - Change middleware order\n    - `afterTask`/`beforeTask` - Change task order  \n    - `mountPath` - Override middleware mount path\n    - `configuration` - Merge with extension's default configuration\n\n## Example Configurations\n\n### Basic Development Setup\n```yaml\nserver:\n  customMiddleware:\n    - name: ui5-plugin-loader\n      afterMiddleware: compression\n```\n\n### TypeScript Development with Customization\n```yaml\nserver:\n  customMiddleware:\n    - name: ui5-plugin-loader\n      afterMiddleware: compression\n      configuration:\n        debug: true\n        disable:\n          - ui5-middleware-livereload  # Disable livereload\n        override:\n          ui5-tooling-stringreplace-middleware:\n            configuration:\n              files: [\"**/*.ts\"]       # Only process TypeScript files\n```\n\n### Production Build Configuration\n```yaml\nbuilder:\n  customTasks:\n    - name: ui5-plugin-loader-task\n      afterTask: replaceVersion\n      configuration:\n        disable:\n          - ui5-tooling-stringreplace-task  # Skip string replacement in production\n        override:\n          ui5-tooling-modules-task:\n            configuration:\n              minify: true                  # Enable minification\n```\n\n## Smart Ordering\n\nThe plugin loader uses a fixed pattern ordering system:\n\n1. **String replacement** (priority 10) - `ui5-tooling-stringreplace-*`\n2. **Transpilation** (priority 20) - `ui5-tooling-transpile-*`\n3. **Modules** (priority 30) - `ui5-tooling-modules-*`\n4. **Live reload** (priority 40) - `ui5-middleware-livereload`\n5. **Rest** (priority 50) - All other extensions\n\nThis ensures that transformations happen in the correct order without manual configuration.\n\n## Extension Development Guide\n\n### Making Your Extension Compatible\n\nTo make your UI5 tooling extension work with the plugin loader:\n\n1. **Create a manifest file** `ui5-plugin-loader.json` in your package root:\n\n```json\n{\n  \"$schema\": \"https://sap.github.io/ui5-plugin-loader/schema/ui5-plugin-loader.schema.json\",\n  \"middleware\": [\n    {\n      \"name\": \"my-custom-middleware\",\n      \"configuration\": {\n        \"debug\": false\n      }\n    }\n  ],\n  \"tasks\": [\n    {\n      \"name\": \"my-custom-task\",\n      \"configuration\": {\n        \"debug\": false\n      }\n    }\n  ]\n}\n```\n\n2. **Follow naming conventions**:\n   - Middleware: `\u003cpackage-name\u003e-middleware` or `\u003cpackage-name\u003e`\n   - Tasks: `\u003cpackage-name\u003e-task`\n\n3. **Test with the plugin loader**:\n   - Install your extension alongside `ui5-plugin-loader`\n   - Verify it gets auto-discovered and registered\n\n## Troubleshooting\n\n### Enable Debug Logging\n\n```yaml\nserver:\n  customMiddleware:\n    - name: ui5-plugin-loader\n      configuration:\n        debug: true\n```\n\n### Common Issues\n\n1. **Extension not found**: Ensure the package is in your `dependencies` or `devDependencies`\n2. **Wrong order**: Use the `override` configuration to adjust ordering\n3. **Duplicate registration**: Check for manual registrations in your `ui5.yaml`\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Add tests for new functionality\n4. Submit a pull request\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Changelog\n\n### v0.2.x\n- ✅ Removed preset functionality (breaking change)\n- ✅ Added `debug`, `disable`, and `override` configuration options\n- ✅ Implemented fixed pattern smart ordering\n- ✅ Improved pipeline processing with validation\n- ✅ Enhanced error handling and logging\n\n### v0.1.x\n- ✅ Initial release with basic auto-discovery\n- ✅ Support for popular UI5 tooling extensions\n- ✅ Preset functionality (deprecated in v0.2.x) ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarianfoo%2Fui5-plugin-loader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarianfoo%2Fui5-plugin-loader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarianfoo%2Fui5-plugin-loader/lists"}