From 5112879aa5cd78dd31d103564c728ded75ef3d71 Mon Sep 17 00:00:00 2001 From: d3xter666 Date: Thu, 2 Oct 2025 10:20:38 +0300 Subject: [PATCH 1/5] refactor: Create separate package for documentation --- .../docs/images/Module_overview.png | Bin 0 -> 289207 bytes .../docs/images/UI5_CLI/Task_Minify.svg | 459 +++++++++ .../documentation/docs/images/UI5_logo.png | Bin 0 -> 36760 bytes .../docs/images/UI5_logo_wide.png | Bin 0 -> 66942 bytes .../documentation/docs/images/favicon.png | Bin 0 -> 15086 bytes packages/documentation/docs/images/logo.svg | 6 + packages/documentation/docs/index.md | 138 +++ .../documentation/docs/pages/Benchmarking.md | 163 ++++ packages/documentation/docs/pages/Builder.md | 192 ++++ packages/documentation/docs/pages/CLI.md | 397 ++++++++ .../documentation/docs/pages/CodeAnalysis.md | 177 ++++ .../documentation/docs/pages/Configuration.md | 920 ++++++++++++++++++ .../documentation/docs/pages/ESSupport.md | 580 +++++++++++ packages/documentation/docs/pages/FAQ.md | 28 + .../documentation/docs/pages/FileSystem.md | 47 + .../docs/pages/GettingStarted.md | 99 ++ .../documentation/docs/pages/Guidelines.md | 60 ++ packages/documentation/docs/pages/OpenUI5.md | 73 ++ packages/documentation/docs/pages/Overview.md | 127 +++ packages/documentation/docs/pages/Privacy.md | 5 + packages/documentation/docs/pages/Project.md | 71 ++ packages/documentation/docs/pages/SAPUI5.md | 84 ++ packages/documentation/docs/pages/Server.md | 83 ++ .../docs/pages/Troubleshooting.md | 92 ++ .../documentation/docs/pages/Workspace.md | 151 +++ .../extensibility/CustomServerMiddleware.md | 256 +++++ .../docs/pages/extensibility/CustomTasks.md | 480 +++++++++ .../docs/pages/extensibility/ProjectShims.md | 183 ++++ packages/documentation/docs/pages/index.md | 144 +++ .../documentation/docs/pages/indexJsdoc.md | 7 + .../docs/public/TripPinClassDiagram.jpg | Bin 0 -> 45518 bytes .../public/UI5-VitePress-fire-and-water.jpg | Bin 0 -> 167975 bytes .../documentation/docs/public/favicon.ico | Bin 0 -> 15086 bytes .../docs/public/icons/logo/Autoprefixer.svg | 1 + .../docs/public/icons/logo/PlantUML.svg | 41 + .../docs/public/icons/logo/PostCSS.svg | 1 + .../docs/public/icons/logo/Rollup.svg | 3 + .../docs/public/icons/logo/TailwindCSS.svg | 4 + .../docs/public/icons/logo/TypeScript-wm.svg | 1 + .../docs/public/icons/logo/TypeScript.svg | 1 + .../docs/public/icons/logo/UI5.svg | 9 + .../docs/public/icons/logo/VitePress.svg | 1 + .../docs/public/icons/logo/Vitejs.svg | 15 + .../docs/public/icons/logo/Vuejs.svg | 1 + .../docs/public/icons/logo/Web-Components.svg | 1 + .../public/icons/logo/cssnano-wm-vertical.svg | 1 + .../docs/public/icons/logo/cssnano-wm.svg | 1 + .../docs/public/icons/logo/cssnano.svg | 8 + .../docs/public/icons/logo/markdown.svg | 1 + .../public/icons/logo/powering-sap-btp.svg | 1 + .../documentation/docs/public/icons/ui5/B.svg | 1 + .../docs/public/icons/ui5/B_OpenUI5_H.svg | 1 + .../docs/public/icons/ui5/B_OpenUI5_V.svg | 1 + .../docs/public/icons/ui5/B_UI5_H.svg | 1 + .../docs/public/icons/ui5/B_UI5_V.svg | 1 + .../documentation/docs/public/icons/ui5/O.svg | 1 + .../docs/public/icons/ui5/O_OpenUI5_H.svg | 1 + .../docs/public/icons/ui5/O_OpenUI5_V.svg | 1 + .../docs/public/icons/ui5/O_UI5_H.svg | 1 + .../docs/public/icons/ui5/O_UI5_V.svg | 1 + .../docs/public/icons/ui5/UI5.svg | 9 + .../documentation/docs/public/learn-more.svg | 9 + .../tailwind-css-vsc-color-completion.png | Bin 0 -> 13680 bytes .../documentation/docs/stylesheets/extra.css | 199 ++++ .../documentation/docs/updates/migrate-v1.md | 64 ++ .../documentation/docs/updates/migrate-v2.md | 68 ++ .../documentation/docs/updates/migrate-v3.md | 234 +++++ .../documentation/docs/updates/migrate-v4.md | 147 +++ packages/documentation/package-lock.json | 17 + packages/documentation/package.json | 24 + 70 files changed, 5894 insertions(+) create mode 100644 packages/documentation/docs/images/Module_overview.png create mode 100644 packages/documentation/docs/images/UI5_CLI/Task_Minify.svg create mode 100644 packages/documentation/docs/images/UI5_logo.png create mode 100644 packages/documentation/docs/images/UI5_logo_wide.png create mode 100644 packages/documentation/docs/images/favicon.png create mode 100644 packages/documentation/docs/images/logo.svg create mode 100644 packages/documentation/docs/index.md create mode 100644 packages/documentation/docs/pages/Benchmarking.md create mode 100644 packages/documentation/docs/pages/Builder.md create mode 100644 packages/documentation/docs/pages/CLI.md create mode 100644 packages/documentation/docs/pages/CodeAnalysis.md create mode 100644 packages/documentation/docs/pages/Configuration.md create mode 100644 packages/documentation/docs/pages/ESSupport.md create mode 100644 packages/documentation/docs/pages/FAQ.md create mode 100644 packages/documentation/docs/pages/FileSystem.md create mode 100644 packages/documentation/docs/pages/GettingStarted.md create mode 100644 packages/documentation/docs/pages/Guidelines.md create mode 100644 packages/documentation/docs/pages/OpenUI5.md create mode 100644 packages/documentation/docs/pages/Overview.md create mode 100644 packages/documentation/docs/pages/Privacy.md create mode 100644 packages/documentation/docs/pages/Project.md create mode 100644 packages/documentation/docs/pages/SAPUI5.md create mode 100644 packages/documentation/docs/pages/Server.md create mode 100644 packages/documentation/docs/pages/Troubleshooting.md create mode 100644 packages/documentation/docs/pages/Workspace.md create mode 100644 packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md create mode 100644 packages/documentation/docs/pages/extensibility/CustomTasks.md create mode 100644 packages/documentation/docs/pages/extensibility/ProjectShims.md create mode 100644 packages/documentation/docs/pages/index.md create mode 100644 packages/documentation/docs/pages/indexJsdoc.md create mode 100644 packages/documentation/docs/public/TripPinClassDiagram.jpg create mode 100644 packages/documentation/docs/public/UI5-VitePress-fire-and-water.jpg create mode 100644 packages/documentation/docs/public/favicon.ico create mode 100644 packages/documentation/docs/public/icons/logo/Autoprefixer.svg create mode 100644 packages/documentation/docs/public/icons/logo/PlantUML.svg create mode 100644 packages/documentation/docs/public/icons/logo/PostCSS.svg create mode 100644 packages/documentation/docs/public/icons/logo/Rollup.svg create mode 100644 packages/documentation/docs/public/icons/logo/TailwindCSS.svg create mode 100644 packages/documentation/docs/public/icons/logo/TypeScript-wm.svg create mode 100644 packages/documentation/docs/public/icons/logo/TypeScript.svg create mode 100644 packages/documentation/docs/public/icons/logo/UI5.svg create mode 100644 packages/documentation/docs/public/icons/logo/VitePress.svg create mode 100644 packages/documentation/docs/public/icons/logo/Vitejs.svg create mode 100644 packages/documentation/docs/public/icons/logo/Vuejs.svg create mode 100644 packages/documentation/docs/public/icons/logo/Web-Components.svg create mode 100644 packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg create mode 100644 packages/documentation/docs/public/icons/logo/cssnano-wm.svg create mode 100644 packages/documentation/docs/public/icons/logo/cssnano.svg create mode 100644 packages/documentation/docs/public/icons/logo/markdown.svg create mode 100644 packages/documentation/docs/public/icons/logo/powering-sap-btp.svg create mode 100644 packages/documentation/docs/public/icons/ui5/B.svg create mode 100644 packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg create mode 100644 packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg create mode 100644 packages/documentation/docs/public/icons/ui5/B_UI5_H.svg create mode 100644 packages/documentation/docs/public/icons/ui5/B_UI5_V.svg create mode 100644 packages/documentation/docs/public/icons/ui5/O.svg create mode 100644 packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg create mode 100644 packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg create mode 100644 packages/documentation/docs/public/icons/ui5/O_UI5_H.svg create mode 100644 packages/documentation/docs/public/icons/ui5/O_UI5_V.svg create mode 100644 packages/documentation/docs/public/icons/ui5/UI5.svg create mode 100644 packages/documentation/docs/public/learn-more.svg create mode 100644 packages/documentation/docs/public/tailwind-css-vsc-color-completion.png create mode 100644 packages/documentation/docs/stylesheets/extra.css create mode 100644 packages/documentation/docs/updates/migrate-v1.md create mode 100644 packages/documentation/docs/updates/migrate-v2.md create mode 100644 packages/documentation/docs/updates/migrate-v3.md create mode 100644 packages/documentation/docs/updates/migrate-v4.md create mode 100644 packages/documentation/package-lock.json create mode 100644 packages/documentation/package.json diff --git a/packages/documentation/docs/images/Module_overview.png b/packages/documentation/docs/images/Module_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..aa1a4471b63918a08ebc3c980598fc9b2cc0306a GIT binary patch literal 289207 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

-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�(S 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 Vi=ImFi6ij8hl1h)8TT|i{vRvjizom9 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/images/UI5_CLI/Task_Minify.svg b/packages/documentation/docs/images/UI5_CLI/Task_Minify.svg new file mode 100644 index 0000000000..30f3c19ce4 --- /dev/null +++ b/packages/documentation/docs/images/UI5_CLI/Task_Minify.svg @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + Task_Minify + + + Layer 1 + + + + + Minify a JS + Resource + + + + + + + + processors/minifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Terser + + + + + tasks/minify + + + + + + + Search for Source Map + Reference in Resource + + + + + + + Remove + sourceMappingURL + Reference in Resource + + + + + + + Resolve + Reference + + + + + + + Log Warning + "Not Supported" + + + + + + + Locate Resource + within Project + + + + + + + Decode + base64 + Payload + + + + + + + Clone Source Map + + + + + + + Create Debug + Variant by Cloning + Modified Resource + + + + + + This Indicates the + Presence of an + "Input Source Map" + + + + + + + Execute Minification + (Using Input Source Map If + One Has Been Resolved) + + + + + + + Reference Source + Map in Debug + Resource + + + + + + + + + + + + Contains a Reference + + + + + + + + + + + + + + + + Resource Has Been Modified by Previous Tasks + + + + + + + + + + + + + + + + + + + Relative URL + + + + + + + + + Data-URL ("data:") + + + + + + + + + Absolute URL or + HTTP(S) URL + + + + + + + + + + + + + Not Found + + + + + + + + + + Log Warning + "Not Found" + + + + + + + + + + + + + + + + + + + + + + + + + + Contains No Reference + + + + + + + + + Found + + + + + + + + + + + + + + + + + + + + + + + + + Change "file" + Attribute to Name of + Debug Resource + + + + + + + Create Resource + "<debug resource + name>.map" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Searching For String + "//# sourceMappingURL=" + at the End of the File + + + + + + There Is a High Risk That the + Referenced Source Map Does + Not Reflect the Modification + + + + + + + + + + + + + Resource Is Not Modified + + + + + + + + + + + + + Appending String + "//# sourceMappingURL=<debug resource name>.map" + to the End of the Resource + + + + + + + Write Resources + to Workspace + + + + + + This Is the Only Path + on Which Terser Will + Be Provided With an + Input Source Map + + + + + + + + + + + + + + + + + + + + + + + + Resulting Resources (Example): + • Module.js + • Module.js.map + • Module-dbg.js + • Module-dbg.js.map + + + + + diff --git a/packages/documentation/docs/images/UI5_logo.png b/packages/documentation/docs/images/UI5_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c950982e053382b22f0c3ff9c62d83021dbc0aaf GIT binary patch literal 36760 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/images/UI5_logo_wide.png b/packages/documentation/docs/images/UI5_logo_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..6099c574d19323ed237f1aae1f2bc42cb83f5879 GIT binary patch literal 66942 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

nh2oLjMX-|d+|#3zROLsUZvPz`DjvANE% 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/images/favicon.png b/packages/documentation/docs/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9c6dfa32ab07754682c6c51de4cecaf0f4a44b GIT binary patch literal 15086 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 + + + + \ No newline at end of file diff --git a/packages/documentation/docs/index.md b/packages/documentation/docs/index.md new file mode 100644 index 0000000000..556605af16 --- /dev/null +++ b/packages/documentation/docs/index.md @@ -0,0 +1,138 @@ +![UI5 logo](images/UI5_logo_wide.png) + +# UI5 CLI + +An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. + +!!! abstract "Project Rename" + **UI5 Tooling has been renamed to UI5 CLI 🚨** + + Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)** + +!!! tip "New Release" + **UI5 CLI V4 is here 🎉** + + Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** + + And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation. + +[**Get Started**](./pages/GettingStarted.md){: .md-button .md-button--primary .sap-icon-initiative } + +## Main Features + +### 💻 UI5 CLI + +*Also see the [UI5 CLI Documentation](./pages/CLI.md)* + +```sh +# Global +npm install --global @ui5/cli + +# In your project +npm install --save-dev @ui5/cli +``` + +#### ⚙️ Project Setup + +Configure your project for use with UI5 CLI. +*Also see the [Configuration Documentation](./pages/Configuration.md)* + +``` +❯ ui5 init +Wrote ui5.yaml: + +specVersion: "4.0" +metadata: + name: my-app +type: application +``` + +#### 🚚 Dependency Management + +UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager. + +``` +❯ ui5 use SAPUI5@1.117.0 +Updated configuration written to ui5.yaml +This project is now using SAPUI5 version 1.117.0 + +❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3 +Updated configuration written to ui5.yaml +Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies +``` + +#### 🏄 Development Server + +Start a local development server to work on your project. +*Also see the [Server Documentation](./pages/Server.md)* + +``` +❯ ui5 serve +Server started +URL: http://localhost:8080 +``` + +#### 🛠 Build for Production + +Build an optimized version of your project. +*Also see the [Builder Documentation](./pages/Builder.md)* + +``` bash +❯ ui5 build +info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0 +info ProjectBuilder Preparing build for project my-app +info ProjectBuilder Target directory: ./dist +info ProjectBuilder Cleaning target directory... +info Project 1 of 1: ❯ Building application project my-app... +info my-app › Running task escapeNonAsciiCharacters... +info my-app › Running task replaceCopyright... +info my-app › Running task replaceVersion... +info my-app › Running task minify... +info my-app › Running task generateFlexChangesBundle... +info my-app › Running task generateComponentPreload... +info ProjectBuilder Build succeeded in 296 ms +info ProjectBuilder Executing cleanup tasks... +``` + +### 🧪 Node.js API + +Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. +This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project. + +All available APIs are documented in the [UI5 CLI API Reference](https://ui5.github.io/cli/v4/api/index.html). + +=== "ESM" + + ```js linenums="1" + import {graphFromPackageDependencies} from "@ui5/project/graph"; + + async function buildApp(projectPath, destinationPath) { + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); + } + ``` + +=== "CommonJS" + + ```js linenums="1" + async function buildApp(projectPath, destinationPath) { + const {graphFromPackageDependencies} = + await import("@ui5/project/graph"); + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); + } + ``` diff --git a/packages/documentation/docs/pages/Benchmarking.md b/packages/documentation/docs/pages/Benchmarking.md new file mode 100644 index 0000000000..236812f882 --- /dev/null +++ b/packages/documentation/docs/pages/Benchmarking.md @@ -0,0 +1,163 @@ +# Benchmarking UI5 CLI + +For benchmarking UI5 CLI we typically make use of the open source tool [hyperfine](https://github.com/sharkdp/hyperfine). + +In general we only benchmark calls to the UI5 CLI. However, we might add scripted benchmarks for some components in the future. + +The following is a walk-through on how to evaluate the performance impact of an imaginary change in the UI5 Builder project. + +## Setup + +1. Install [hyperfine](https://github.com/sharkdp/hyperfine#installation) +1. Prepare the UI5 CLI projects you want to measure *(optional if your development environment already reflects this)*: + 1. Start in an empty directory + ```sh + mkdir ui5-cli-benchmark && cd ui5-cli-benchmark/ + ``` + 1. Clone [UI5 CLI](https://github.com/SAP/ui5-cli) + ```sh + git clone git@github.com:SAP/ui5-cli.git + ``` + 1. Clone [UI5 Builder](https://github.com/SAP/ui5-builder) (or your fork) + ```sh + git clone git@github.com:SAP/ui5-builder.git + ``` + Make sure you check out the `main` branch, since we'll perform the baseline test first + 1. Install npm dependencies in both directories + ```sh + (cd ui5-cli && npm install) + (cd ui5-builder && npm install) + ``` + 1. Create global npm links for both projects + ```sh + (cd ui5-cli && npm link) + (cd ui5-builder && npm link) + ``` + 1. Link UI5 Builder into UI5 CLI + ```sh + (cd ui5-cli && npm link @ui5/builder) + ``` + 1. Verify your setup + ```sh + ui5 --version + ``` + This should output the version and location of the UI5 CLI you just cloned. + + For example: + ``` + 3.0.0 (from /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs) + ``` + +1. Prepare your test project (we choose the [openui5-sample-app](https://github.com/SAP/openui5-sample-app)) + 1. Clone the project + ```sh + git clone git@github.com:SAP/openui5-sample-app.git + ``` + 1. Navigate into the project + ```sh + cd openui5-sample-app + ``` + 1. Install any required npm dependencies + ```sh + npm install + ``` + Note: We won't link UI5 CLI into this project. Instead, we'll call it directly. + 1. Verify that the previously installed UI5 CLI can be called with the following command: + ```sh + UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version + ``` + On Windows: + ```sh + set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version + ``` + *(Replace the path to ui5.cjs with the one shown in the previous `ui5 --version` output)* + +## Benchmarking + +1. Depending on how reliable you'd like the measurements to be, consider preparing your system: + 1. Connect your computer to a power supply + 1. Make sure no updates or anti-virus scans are taking place + 1. Close all applications. This includes your IDE, since it might start indexing any new files created during the build, thus impacting I/O + 1. Don't interact with your system wile the benchmarking is running + +1. Perform the baseline measurement + 1. In the project, start your first benchmark + ```sh + hyperfine --warmup 1 \ + 'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ + --export-markdown ./baseline.md + ``` + On Windows: + ```sh + hyperfine --warmup 1 \ + 'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ + --export-markdown ./baseline.md + ``` + 1. Your baseline benchmark is now stored in `baseline.md` and should look similar to this: + + | Command | Mean [s] | Min [s] | Max [s] | Relative | + |:---|---:|---:|---:|---:| + | `UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build` | 1.439 ± 0.036 | 1.400 | 1.507 | 1.00 | + +1. Prepare your change + 1. Switch to the branch that contains your change + ```sh + (cd ../pages/ui5-builder && git checkout my-change) + ``` + 1. If your change requires different npm dependencies, reinstall them + ```sh + (cd ../pages/ui5-builder && npm install) + ``` + 1. The link from UI5 CLI is still in place. However, if you have changes in **multiple** UI5 CLI modules, you might need to `npm link` those again + +1. Perform the change measurement + 1. In the project, start your second benchmark + ```sh + hyperfine --warmup 1 \ + 'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ + --export-markdown ./my_change.md + ``` + On Windows: + ```sh + hyperfine --warmup 1 \ + 'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ + --export-markdown ./my_change.md + ``` + 1. Your change's benchmark is now stored in `my_change.md` + +## Compile Results + +1. Merge both measurements into one markdown + 1. In this setup, Hyperfine can't correctly calculate the relative difference between results. The respective column always reads "1". Either remove the "Relative" column or calculate the relative difference yourself: + * Use this formula to calculate the percentage increase based on the *Mean* result: + `(newMean - baselineMean) / baselineMean * 100` + ^^JavaScript function:^^ + `#!js function calcDiff(baseVal, newVal) {return (newVal - baseVal) / baseVal * 100;}` + + * **Example for a performance improvement:** + Baseline of 10 seconds decreased to 7 seconds: + `(7-10)/10*100 = -30` => **-30%** change + + * **Example for a performance deterioration:** + Baseline of 10 seconds increased to 12 seconds: + `(12-10)/10*100 = 20` => **+20%** change + + 1. Change the unit in the Mean/Min/Max column headers to seconds or milliseconds according to your results. + 1. Change the command column to only contain the relevant `ui5 build` command, including any parameters. E.g. `ui5 build --all` + 1. You should end up with a markdown like this: + ```md + ui5-builder Ref | Command | Mean [s] | Min [s] | Max [s] | Relative + |:---|:---|---:|---:|---:|---:| + | main ([`1234567`](https://github.com/SAP/ui5-builder/commit/)) | `ui5 build` | 1.439 ± 0.036 | 1.400 | 1.507 | Baseline | + | feature-duck ([`9101112`](https://github.com/SAP/ui5-builder/commit/)) | `ui5 build` | 1.584 ± 0.074 | 1.477 | 1.680 | **+10%** | + ``` + Rendering like this: + + | ui5-builder Ref | Command | Mean [s] | Min [s] | Max [s] | Relative | + |:---|:---|---:|---:|---:|---:| + | main ([`1234567`](https://github.com/SAP/ui5-builder/commit/)) | `ui5 build` | 1.439 ± 0.036 | 1.400 | 1.507 | Baseline | + | feature-duck ([`9101112`](https://github.com/SAP/ui5-builder/commit/)) | `ui5 build` | 1.584 ± 0.074 | 1.477 | 1.680 | **+10%** | + +1. You can now share these results on GitHub or wherever you might need them. + +**Happy benchmarking! 🏎** diff --git a/packages/documentation/docs/pages/Builder.md b/packages/documentation/docs/pages/Builder.md new file mode 100644 index 0000000000..e3dfdd0840 --- /dev/null +++ b/packages/documentation/docs/pages/Builder.md @@ -0,0 +1,192 @@ +# UI5 Builder + +The [UI5 Builder](https://github.com/SAP/ui5-builder) module takes care of building your project. + +Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks". + +For every type there is a set of default tasks. You can disable single tasks using the `--exclude-task` [CLI parameter](./CLI#ui5-build), and you can include tasks using the `--include-task` parameter. + +

+ +## Tasks +Tasks are specific build steps to be executed during build phase. + +They are responsible for collecting resources which can be modified by a processor. A task configures one or more processors and supplies them with the collected resources. After the respective processor processed the resources, the task is able to continue with its workflow. + +A project can add custom tasks to the build by using the [Custom Tasks Extensibility](./extensibility/CustomTasks). + +### Standard Tasks + +All available standard tasks are documented [in the API reference](https://ui5.github.io/cli/v4/api/index.html). Search for `@ui5/builder/tasks/` to filter the API reference for all available tasks. The list below offers the actual order of their execution: + +| Task | Type `application` | Type `library` | Type `theme-library` | +| ------------------------------ | :----------------: | :------------: | :------------------: | +| escapeNonAsciiCharacters | *enabled* | *enabled* | | +| replaceCopyright | *enabled* | *enabled* | *enabled* | +| replaceVersion | *enabled* | *enabled* | *enabled* | +| replaceBuildtime | | *enabled* | | +| generateJsdoc | | *disabled* ^1^ | | +| executeJsdocSdkTransformation | | *disabled* ^1^ | | +| minify | *enabled* | *enabled* | | +| generateFlexChangesBundle | *enabled* | *enabled* | | +| generateLibraryManifest | | *enabled* | | +| enhanceManifest | *enabled* | *enabled* | | +| generateComponentPreload | *enabled* | *disabled* ^2^ | | +| generateLibraryPreload | | *enabled* | | +| generateStandaloneAppBundle | *disabled* ^3^ | | | +| transformBootstrapHtml | *disabled* ^3^ | | | +| generateBundle | *disabled* ^4^ | *disabled* ^4^ | | +| buildThemes | | *enabled* | *enabled* | +| generateThemeDesignerResources | | *disabled* ^5^ | *disabled* ^5^ | +| generateVersionInfo | *disabled* ^1^ | | | +| generateCachebusterInfo | *disabled* | | | +| generateApiIndex | *disabled* ^1^ | | | +| generateResourcesJson | *disabled* | *disabled* | *disabled* | + +*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](./CLI#ui5-build). See footnotes where given* + +--- + +^1^ Enabled in `jsdoc` build, which disables most of the other tasks +^2^ Enabled for projects defining a [component preload configuration](./Configuration#component-preload-generation) +^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` +^4^ Enabled for projects defining a [bundle configuration](./Configuration#custom-bundling) +^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped + +### minify + +The `minify` task compresses all JavaScript resources of a project while preserving the original sources as so-called **debug variants**. For example when compressing a resource named `Module.js`, its content will be [minified](https://developer.mozilla.org/en-US/docs/Glossary/Minification) and a new resource `Module-dbg.js` is created and placed next to it. + +The UI5 runtime can be instructed to load those debug variants instead of compressed resources and bundles. This can ease debugging in some cases, since the original sources are then used directly in the browser. For details, refer to the [UI5 framework documentation on debugging](https://ui5.sap.com/#/topic/c9b0f8cca852443f9b8d3bf8ba5626ab%23loioc9b0f8cca852443f9b8d3bf8ba5626ab). + +For each resource it compresses, the `minify` task will also create a [**source map**](https://firefox-source-docs.mozilla.org/devtools-user/debugger/how_to/use_a_source_map/index.html) resource. Browsers can use this to map the content of a compressed JavaScript resource back to the original source file (now contained in the debug variant). All this happens automatically once you open the development tools in the browser and start debugging a project. While the browser still executes the code of the compressed resources, it will also show the debug variants and use the source maps to connect the two. This results in an improved debugging experience, which is almost identical to loading the debug variants directly as described before, only much faster. + +Related to this, the bundling tasks will also incorporate the generated source maps to map the content of the bundles to the individual debug variants of the bundled modules. + +#### Input Source Maps + +::: info Info +Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0). + +::: + +For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code. + +UI5 CLI's `minify` task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze. + +::: warning Warning +If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result. + +It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools. + +Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`. + +::: + +Expand the block below to view a diagram illustrating the minification process and source map handling. + +??? info "Minification Activity Diagram + ![minify Task Activity](../images/UI5_CLI/Task_Minify.svg) + + +### Generation of Supported Locales + +The `enhanceManifest` task fills the `supportedLocales` property in the `manifest.json` of a UI5 library/application automatically with the available locales determined by the existence of the respective `.properties` translation files. To disable the automatic generation of the `supportedLocales`, set `supportedLocales` to any desired value. For further resource bundle configuration options, see [Supported Locales and Fallback Chain](https://ui5.sap.com/#/topic/ec753bc539d748f689e3ac814e129563). + +#### Requirements + +This feature only becomes active under the following conditions: +- The `_version` property in the `manifest.json` is set to `1.21.0` or higher +- The specified resource bundle is located inside the project and within the namespace defined in the `manifest.json` + +#### Scenario: Application + +```txt +- webapp/i18n/ + - i18n.properties + - i18n_en.properties + - i18n_en_US.properties + - i18n_de.properties + - i18n_de_DE.properties +``` + +In the `manifest.json` the `supportedLocales` property will be enhanced as follows: + +**Source** +```json +"models": { + "i18n": { + "type": "sap.ui.model.resource.ResourceModel", + "settings": { + "bundleName": "my.app.i18n.i18n + } + } +} +``` + +**Build Result** +```json +"models": { + "i18n": { + "type": "sap.ui.model.resource.ResourceModel", + "settings": { + "bundleName": "my.app.i18n.i18n", + "supportedLocales": [ + "", + "de", + "de_DE", + "en", + "en_US + ] + } + } +} +``` + +## Processors +Processors work with provided resources. They contain the actual build step logic to apply specific modifications to supplied resources, or to make use of the resources' content to create new resources out of that. + +Processors can be implemented generically. The string replacer is an example for that. +Since string replacement is a common build step, it can be useful in different contexts, e.g. code, version, date, and copyright replacement. A concrete replacement operation could be achieved by passing a custom configuration to the processor. This way, multiple tasks can make use of the same processor to achieve their build step. + +To get a list of all available processors, please visit [the API reference](https://ui5.github.io/cli/v4/api/index.html) and search for `@ui5/builder/processors/`. + +## Legacy Bundle Tooling (lbt) +JavaScript port of the "legacy" Maven/Java based bundle tooling. + + +### JavaScript Files Requiring Top Level Scope +UI5 CLI packages JavaScript files that require "top level scope" as a string, provided your project uses a Specification Version lower than `4.0`. In this case, the code is evaluated using [`eval`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) at runtime. + +This ensures that the script works as expected, e.g. with regards to implicitly used globals. However, this `eval` runtime feature will be discontinued with UI5 2.x because of [security best practices](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) and to comply with stricter CSP settings (i.e. [unsafe-eval](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#unsafe_eval_expressions)). + +If your project defines [Specification Version 4.0](./Configuration#specification-version-40) or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI: +> Module myFancyModule requires top level scope and can only be embedded as a string (requires 'eval'), which is not supported with specVersion 4.0 and higher. + +If you see this error message, please adjust your code by applying one of the following options: + +**Option 1**: Use [ui5-tooling-modules](https://www.npmjs.com/package/ui5-tooling-modules) to bundle third-party `npm` packages. It converts files to `sap.ui.define` modules automatically. + +**Option 2**: Wrap the respective files manually in `sap.ui.define` modules as shown below: + + +::: details Example +**Before**: +```js +const myFancyModule = {}; +``` + +**After**: +```js +sap.ui.define([], () => { + "use strict"; + const myFancyModule = {}; + return myFancyModule; +}); +``` + +::: \ No newline at end of file diff --git a/packages/documentation/docs/pages/CLI.md b/packages/documentation/docs/pages/CLI.md new file mode 100644 index 0000000000..d74e02a07f --- /dev/null +++ b/packages/documentation/docs/pages/CLI.md @@ -0,0 +1,397 @@ +--- +layout: doc +--- + +# UI5 CLI +## Requirements +- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) +- [npm](https://www.npmjs.com/) version v8.0.0 or higher + +## Installation + +Install the CLI using the npm package manager: + +```sh +npm install --global @ui5/cli + +# Verify installation +ui5 --help +``` + +## Usage/Syntax + +` + ui5 [options] +` + +The CLI automatically checks for updates using [update-notifier](https://github.com/yeoman/update-notifier). While this is skipped in CI environments, you might also opt-out manually by following the steps described [here](https://github.com/yeoman/update-notifier/blob/-/readme.md#user-settings). + +## Common options + +These options you can use with each command. + +| Option | Description | Details | +| --- | --- | --- | +| -h, --help | Show help | [boolean] | +| -v, --version | Show version number | [boolean] | +| -c, --config | Path to project configuration file in YAML format | [string] | +| --dependency-definition | Path to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies. | [string] | +| --workspace-config | Path to workspace configuration file in YAML format | [string] | +| -w, --workspace | Name of the workspace configuration to use | [string] [default: "default"] | +| --loglevel, --log-level | Set the logging level | [string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"] | +| --verbose | Enable verbose logging. | [boolean] [default: false] | +| --perf | Enable performance measurements and related logging. | [boolean] [default: false] | +| --silent | Disable all log output. | [boolean] [default: false] | + +## Examples + +Execute command using a static dependency tree instead of resolving node package dependencies +``` +ui5 --dependency-definition /path/to/projectDependencies.yaml +``` +Execute command using a project configuration from custom path +``` +ui5 --config /path/to/ui5.yaml +``` +Execute command using the 'dolphin' workspace of a ui5-workspace.yaml +``` +ui5 --workspace dolphin +``` +Execute command with the maximum log output +``` +ui5 --log-level silly +``` + +## Commands + +### ui5 add + +**Description** + +Add SAPUI5/OpenUI5 framework libraries to the project configuration. + +**Usage** + +` +ui5 add [--development] [--optional] +` + + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| -D, --development, --dev | Add as development dependency | [boolean] [default: false] | +| -O, --optional | Add as optional dependency | [boolean] [default: false] | + +**Positionals** + +| Positional | Description | Details | +| --- | --- | --- | +| framework-libraries | Framework library names | [array] [required] [default: []] | + +**Examples** + +Add the framework libraries sap.ui.core and sap.m as dependencies +``` +ui5 add sap.ui.core sap.m +``` +Add the framework library sap.ui.support as development dependency +``` +ui5 add -D sap.ui.support +``` +Add the framework library themelib_sap_fiori_3 as optional dependency +``` +ui5 add --optional themelib_sap_fiori_3 +``` +### ui5 build + +**Description** + +Build project in current directory + +**Usage** + +` +ui5 build +` + +**Child Commands** + +| Command | Description | +| --- | --- | +| ui5 build jsdoc | Build JSDoc resources | +| ui5 build preload | (default) Build project and create preload bundles | +| ui5 build self-contained | Build project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies | + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| -a, --include-all-dependencies, --all | Include all dependencies in the build result. This is equivalent to '--include-dependency "*"' | [boolean] [default: false] | +| --include-dependency | A list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | +| --include-dependency-regexp | A list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'. | [array] | +| --include-dependency-tree | A list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'. | [array] | +| --exclude-dependency | A list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | +| --exclude-dependency-regexp | A list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'. | [array] | +| --exclude-dependency-tree | A list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list. | [array] | +| --dest | Path of build destination | [string] [default: "./dist"] | +| --clean-dest | If present, clean the destination directory before building | [boolean] [default: false] | +| --create-build-manifest | Store build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds | [boolean] [default: false] | +| --include-task | A list of tasks to be added to the default execution set. This option takes precedence over any excludes. | [array] | +| --exclude-task | A list of tasks to be excluded from the default task execution set | [array] | +| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | +| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | +| --experimental-css-variables | Generate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes | [boolean] [default: false] | +| --output-style | Processes build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style. | [string] [choices: "Default", "Flat", "Namespace"] [default: "Default"] | + + +**Examples** + +Preload build for project without dependencies +``` +ui5 build +``` +Self-contained build for project +``` +ui5 build self-contained +``` +Build project but only apply the minify- and generateComponentPreload tasks +``` +ui5 build --exclude-task=* --include-task=minify generateComponentPreload +``` +Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task +``` +ui5 build --include-task=minify --exclude-task=generateComponentPreload +``` +Preload build with experimental CSS variables artifacts +``` +ui5 build --experimental-css-variables +``` +### ui5 config + +**Description** + +Get and set UI5 CLI configuration options + +**Usage** + +` +ui5 config +` + +**Child Commands** + +| Command | Description | +| --- | --- | +| ui5 config set [value] | Set the value for a given configuration option. Clear an existing configuration by omitting the value | +| ui5 config get | Get the value for a given configuration option | +| ui5 config list | Display the current configuration | + + + +**Examples** + +Set a value for the ui5DataDir configuration +``` +ui5 config set ui5DataDir /path/to/.ui5 +``` +Unset the current value of the ui5DataDir configuration +``` +ui5 config set ui5DataDir +``` +### ui5 init + +**Description** + +Initialize the UI5 CLI configuration for an application or library project. + +**Usage** + +` +ui5 init +` + + + + +### ui5 remove + +**Description** + +Remove SAPUI5/OpenUI5 framework libraries from the project configuration. + +**Usage** + +` +ui5 remove +` + + + +**Positionals** + +| Positional | Description | Details | +| --- | --- | --- | +| framework-libraries | Framework library names | [array] [required] [default: []] | + +**Examples** + +Remove the framework libraries sap.ui.core and sap.m as dependencies +``` +ui5 remove sap.ui.core sap.m +``` +### ui5 serve + +**Description** + +Start a web server for the current project + +**Usage** + +` +ui5 serve +` + + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| -p, --port | Port to bind on (default for HTTP: 8080, HTTP/2: 8443) | [number] | +| -o, --open | Open web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL | [string] | +| --h2 | Shortcut for enabling the HTTP/2 protocol for the web server | [boolean] [default: false] | +| --simple-index | Use a simplified view for the server directory listing | [boolean] [default: false] | +| --accept-remote-connections | Accept remote connections. By default the server only accepts connections from localhost | [boolean] [default: false] | +| --key | Path to the private key | [string] [default: "~/.ui5/server/server.key"] | +| --cert | Path to the certificate | [string] [default: "~/.ui5/server/server.crt"] | +| --sap-csp-policies | Always send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode | [boolean] [default: false] | +| --serve-csp-reports | Collects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json' | [boolean] [default: false] | +| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | +| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | + + +**Examples** + +Start a web server for the current project +``` +ui5 serve +``` +Enable the HTTP/2 protocol for the web server (requires SSL certificate) +``` +ui5 serve --h2 +``` +Use the project configuration from a custom path +``` +ui5 serve --config /path/to/ui5.yaml +``` +Use a static dependency definition file +``` +ui5 serve --dependency-definition /path/to/projectDependencies.yaml +``` +Listen to port 1337 and launch default browser with `http://localhost:1337/test/QUnit.html` +``` +ui5 serve --port 1337 --open tests/QUnit.html +``` +### ui5 tree + +**Description** + +Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account. + +**Usage** + +` +ui5 tree +` + + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| --flat | Output a flat list of all dependencies instead of a tree hierarchy | [boolean] [default: false] | +| --level | Limit the number of levels shown in the tree hierarchy | [number] | +| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | +| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | +| | | | + + +### ui5 use + +**Description** + +Initialize or update the project's framework configuration. + +**Usage** + +` +ui5 use +` + + + +**Positionals** + +| Positional | Description | Details | +| --- | --- | --- | +| framework-info | Framework name, version or both (name@version).
Name can be "SAPUI5" or "OpenUI5" (case-insensitive).
Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry.
For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT". | [string] [required] | + +**Examples** + +Use SAPUI5 in the latest available version +``` +ui5 use sapui5@latest +``` +Use OpenUI5 in the latest available 1.76 patch version +``` +ui5 use openui5@1.76 +``` +Use the latest available version of the configured framework +``` +ui5 use latest +``` +Use OpenUI5 in the latest available version +``` +ui5 use openui5 +``` +### ui5 versions + +**Description** + +Shows the versions of all UI5 CLI modules + +**Usage** + +` +ui5 versions +` + + + + + +## Local vs. Global Installation +In general, we recommend a global installation of the UI5 CLI (`npm install --global @ui5/cli`). + +However, it makes sense to add the UI5 CLI as a [devDependency](https://docs.npmjs.com/files/package.json#devdependencies) (`npm install --save-dev @ui5/cli`) to a project's `package.json`. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version. + +In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because [npm scripts](https://docs.npmjs.com/misc/scripts) defined in your `package.json` will also always invoke the local installation. + +This behavior can be disabled by setting the environment variable `UI5_CLI_NO_LOCAL`. + +**Example** +You have a project located in the directory `/my-application`. + +You have installed the UI5 CLI globally. In addition, the project's `package.json` defines a `devDependency` to `@ui5/cli` and a start script `"ui5 serve"`. This means there are at least two installations of `@ui5/cli` on your system. Their versions might not match. + +This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project. + +| Current Working Directory | Command | Global UI5 CLI | Local UI5 CLI | +| ------------------------- | ------------------------------- | :-----------------------------: | :----------------------------: | +| `/` | `ui5 --version` | enabled | +| `/my-application` | `ui5 --version` | | enabled | +| `/my-application` | `ui5 serve` | | enabled | +| `/my-application` | `UI5_CLI_NO_LOCAL=X ui5 serve` | enabled | +| `/my-application` | `npm start` | | enabled | +| `/my-application` | `UI5_CLI_NO_LOCAL=X npm start` | | enabled | diff --git a/packages/documentation/docs/pages/CodeAnalysis.md b/packages/documentation/docs/pages/CodeAnalysis.md new file mode 100644 index 0000000000..5111e8792e --- /dev/null +++ b/packages/documentation/docs/pages/CodeAnalysis.md @@ -0,0 +1,177 @@ +# Code Analysis + +During the build process, UI5 CLI executes a static code analysis of your project. In the following sections the term "simple literal" is used for the following language features: + +- string literals +- numeric literals +- Boolean literals +- `null` / `undefined` +- template literals without any expressions +- arrays of the previous (spread operators are ignored) +- object literals with "simple literals" used as keys and values (again, spread operators are ignored) + +## Dependency Analysis + +UI5 CLI extracts dependency information from a project's code as outlined in the following sections. +The APIs described there require the usage of "simple literals" when declaring dependencies. + +### JSModule Analyzer + +The following APIs are analyzed by the JSModule Analyzer: + +- sap.ui.define +- sap.ui.require +- jQuery.sap.declare (deprecated) +- jQuery.sap.require (deprecated) +- sap.ui.requireSync (deprecated) +- sap.ui.preload (restricted) +- sap.ui.require.preload (restricted) + +The [JSModule Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/JSModuleAnalyzer.js) uses the ["Abstract Syntax Tree"](https://en.wikipedia.org/wiki/Abstract_syntax_tree) (AST) of a JavaScript file to decide whether a code block is executed *conditionally* or *unconditionally*. + +The analyzer uses a set of rules to decide whether one of the above APIs is called whenever the module is executed or whether the API is only called under certain conditions. + +For example, top-level code is always executed. Flow-control statements in JavaScript imply that certain blocks of code are only executed under certain conditions (for example, `if` blocks, `else` blocks, ...). Besides these inherent JavaScript rules, further common patterns are known to the analyzer, e.g. immediately invoked function expressions or the factory function of AMD modules. + +Any dependencies found that - according to these rules - are always executed, are collected as eager (or standard) dependencies. Dependencies that are found on a code path that depends on certain conditions are collected as conditional dependencies. + +The bundling implemented by UI5 CLI can either follow only eager dependencies (`resolve`: `true`) or additionally conditional dependencies (`resolveConditional`). For more information, see [Custom Bundling](https://ui5.github.io/cli/v4/pages/Configuration/#custom-bundling). + +When a dependency in one of the mentioned APIs is not a "simple literal" but an expression, the corresponding module is marked as "having dynamic dependencies". This marker is currently not further evaluated by UI5 CLI. + +### Component Analyzer + +The [Component Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/ComponentAnalyzer.js) analyzes JavaScript files named `Component.js` to collect dependency information by searching for a `manifest.json` located in the same folder as the `Component.js`. If one is found, the `sap.ui5` section is evaluated in the following way: + +- Any library dependency is added as a dependency to the `library.js` module of that library. If the library dependency is modeled as 'lazy', the + module dependency will be added as 'conditional'. +- Any component dependency is added as a dependency to a file named `Component.js`. If the dependency is modeled as 'lazy', the module dependency will be added as 'conditional'. +- For each UI5 model for which a type is configured, a module dependency to that type is added. +- For each route that contains a view name, a module dependency to that view is added. + +### Smart Template Analyzer + +The [Smart Template Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/SmartTemplateAnalyzer.js) analyzes a Smart Template app and its underlying template components to collect dependency information. It searches for a `manifest.json` located in the same folder as the `Component.js`. If it is found and if it is valid JSON, an `sap.ui.generic.app` section is searched and evaluated in the following way: + +- For each page configuration, the configured component is added as a dependency to the template app module. +- If the page configuration contains a `templateName`, a dependency to that template view is added to the app. +- Otherwise, the class definition of the component is analyzed to find a default template view name. If found, a dependency to that view is added to the app module. + +The template component is analyzed in the following way: + +- precondition: the template component class is defined in an AMD-style module, using define or sap.ui.define +- precondition: the module `sap/suite/ui/generic/template/lib/TemplateAssembler` is imported +- precondition: a call to `TemplateAssembler.getTemplateComponent` is used to define the component class +- precondition: that call is used in a top-level return statement of the factory function +- precondition: necessary parameters to that call are given as an object literal (no further coding) +- precondition: the settings define a managed property `metadata.properties.templateName` with a defaultValue of type string +The default value of the property represents the template view of the template component. +The manifest of the template app could in theory specify an alternative template in +`component.settings.templateName`. + +### XML Template Analyzer + +The [XML Template Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/XMLTemplateAnalyzer.js) tackles `XMLView` and `XMLFragment`. It parses the XML, collects controls, and adds them as dependency to the ModuleInfo object. +Additionally, some special dependencies are handled: + +- controller of the view +- resource bundle (note: as locale-dependent dependencies can't be modelled yet in the ModuleInfo, only a dependency to the development version (aka raw language) of the bundle will be added) +- component referenced via the ComponentContainer control +- embedded fragments or views + +In an XMLView/XMLFragment, usually three categories of element nodes exist: Controls, aggregations, and non-UI5 nodes (e.g. XHTML or SVG). The third category usually can be identified by its namespace. To distinguish between the first two categories, the analyzer checks whether a resource exists in the project or its dependencies whose name matches the qualified node name. +For example, if the qualified node name is `sap.m.Text`, the analyzer checks whether `sap/m/Text.js` exists. If so, UI5 CLI detects this node as a control, otherwise as an aggregation. + +### XML Composite Analyzer + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless, UI5 CLI will attempt to analyze the declaration of any such controls in a project. + +The [XML Composite Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/XMLCompositeAnalyzer.js) searches for the name of the configured fragment containing the **XMLComposite** control. + +#### Name of the XMLComposite is equal to fragment name + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", {} + }); + ``` + +#### Dedicated fragment name + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite + } + }); + ``` + +## Library Initialization + +The [library.js Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/analyzeLibraryJS.js) checks every `library.js` file in the namespace of a library for occurences of a `sap/ui/core/Core#initLibrary` call. If found, the following information will be placed in the generated manifest.json: + +- noLibraryCSS: false when the noLibraryCSS property had been set in the initLibrary info object +- types: string array with the names of the types contained in the library +- controls: string array with the names of the controls defined in the library +- elements: string array with the names of the elements defined in the library +- interfaces: string array with the names of the interfaces defined in the library + +`sap/ui/core/Core#initLibrary` requires the usage of "simple literals" for the parameters passed to this function call. + +Note: Currently only the usage via the global `sap.ui.getCore().initLibrary` is supported by this analyzer. Requiring `sap/ui/core/Core` and then calling `Core.initLibrary` is not recognized by this analyzer. + +## JSDoc + +The UI5 CLI offers a JSDoc build, which is enhanced by UI5-specific JSDoc features. + +An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our [Developer's Guide](https://github.com/SAP/openui5/blob/-/docs/developing#building-the-openui5-sdk-demo-kit). + +Currently, the resources needed for a UI5 SDK build are stored in [openui5](https://github.com/SAP/openui5/tree/-/lib/jsdoc) and in [ui5-builder](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc). This double maintenance is needed because these files are not part of the `sap.ui.core` library artefact, so building JSDoc for any library has no access to the needed resources. It's therefore necessary to have these resources also available in the *ui5-builder*. This might change in the future. + +The following artefacts contribute to the JSDoc build: + +- [jsdocGenerator.js](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/jsdocGenerator.js): + Executes the actual JSDoc build. UI5 CLI wrapper for `plugin.cjs`. +- [sdkTransformer.js](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/sdkTransformer.js): + UI5 CLI wrapper for `transformApiJson.cjs`. +- [apiIndexGenerator.js](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/apiIndexGenerator.js): + UI5 CLI wrapper for `createIndexFiles.cjs`. +- [createIndexFiles.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/createIndexFiles.cjs): + Creates API index resources from all `api.json` resources and by interpreting the `sap-ui-version.json` available in the given test resources directory. The resulting index resources (e.g. `api-index.json`, `api-index-deprecated.json`, + `api-index-experimental.json` and `api-index-since.json`) are only to be used in a UI5 SDK. +- [transformApiJson.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/transformApiJson.cjs): + Preprocesses `api.json` files for use in UI5 SDKs. Transforms the `api.json` as created by the JSDoc build into a pre-processed `api.json` file suitable for the SDK. The pre-processing includes formatting of type references, rewriting of links, and other time-consuming calculations. +- [plugin.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/ui5/plugin.cjs): + UI5 plugin for JSDoc3. The plugin adds the following UI5-specific tag definitions to JSDoc3: + + - disclaimer + - experimental + - final + - interface + - implements + - ui5-restricted, and more + + It furthermore listens to the following JSDoc3 events to implement additional functionality: + + - parseBegin: to create short names for all files that are to be parsed + - fileBegin: to write to the log (a kind of progress indicator) + - jsdocCommentFound: to pre-process comments, empty lines are used as paragraph markers, a default visibility is added, and legacy tag combinations used in JSDoc2 are converted to JSDoc3 conventions + - newDoclet + - parseComplete: remove undocumented/ignored/private doclets or duplicate doclets + + Last but not least, it implements an astNodeVisitor to detect UI5-specific "extend" calls and to create documentation for the properties, aggregations, etc. that are created with the "extend" call. + +- [publish.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/ui5/template/publish.cjs): JSDoc3 template for UI5 documentation generation. + + - adds missing namespaces + - determines the export names of exported APIs + - writes out the `api.json` from the collected JSDoc information + - calculates the inheritance hierarchy + - checks for cyclic dependencies + - removes unnecessary whitespace from an HTML document + +- [versionUtil.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/ui5/template/utils/versionUtil.cjs): Provides helper methods to determine version-related information. diff --git a/packages/documentation/docs/pages/Configuration.md b/packages/documentation/docs/pages/Configuration.md new file mode 100644 index 0000000000..ebdd6afafe --- /dev/null +++ b/packages/documentation/docs/pages/Configuration.md @@ -0,0 +1,920 @@ +# Configuration + +A projects UI5 CLI configuration is typically located in a [YAML](https://yaml.org/) file named `ui5.yaml`, located in the root directory. + +::: info Info +This document describes the configuration of UI5 CLI-based projects and extensions. It represents **[Specification Version 3.0](#specification-versions)**. + +::: + +## Validation / IDE support + +Starting with [Specification Version 2.0](#specification-version-20) the configuration is validated according to a JSON schema. +The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json + +The schema is also part of the [JSON Schema Store Catalog](http://schemastore.org/json/) which is used by the [YAML Language Server](https://github.com/redhat-developer/yaml-language-server). +See the list of [clients](https://github.com/redhat-developer/yaml-language-server/blob/main/README#clients) to find extensions for various IDEs and editors. + +## Example + +```yaml +specVersion: "4.0 +type: application|library|theme-library|module +metadata: + name: some.project.name +``` + +## General Configuration + +### Specification Version and -Type +A project must define a specification version (`specVersion`), to which its configuration is compatible to. Also see [Specification Versions](#specification-versions). + +In addition, a project must define a `type`. This can be either `application`, `library`, `theme-library` (since Specification Version 1.1), or `module`. + +The type defines the default path mappings and build tasks. See [UI5 Builder: Types](./Builder#types) for details. + +::: details Example + +#### application + + ```yaml + specVersion: "4.0 + type: application + ``` + +#### library + + ```yaml + specVersion: "4.0 + type: library + ``` + +#### theme-library + + ```yaml + specVersion: "4.0 + type: theme-library + ``` + +#### module + + ```yaml + specVersion: "4.0 + type: module + ``` + +::: + +### Kind + +The configuration may also contain a `kind` property. This is used to differentiate between projects and extensions. + +This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility//CustomTasks#custom-task-extension). + +### Metadata + +::: details Example +```yaml +metadata: + name: my.company.project + copyright: |- + My Project + * (c) Copyright 2009-${currentYear} My Company + * Licensed under the XYZ License, Version n - see LICENSE.txt. +``` + +::: + +#### name + +A project must have a `name`. + +In UI5 CLI, a project is typically identified by the configured `name`. It must be unique and should ideally follow a namespace scheme like `organization.product.project` for UI5 projects or `ui5-task-heavy-boulder` for extension-projects. + +The `name` property of **projects defining Specification Version 3.0 and higher** must satisfy the following conditions: + +* Must be at least 3 characters long +* Must be no longer than 80 characters +* Must contain lowercase characters only +* Must contain alphanumeric characters, dash, underscore and period only + - Exception: The `@` and `/` characters are allowed at certain positions as + explained below +* Must start with an alphabetic character or an `@` character +* If it starts with an `@` character, it must contain exactly one + forward slash `/` + - This is aligned with the npm concept for package scopes, for example `@org/lib.name` + +#### copyright + +A given `copyright` string will be used to fill placeholders like `${copyright}` and `@copyright@` in a project's source code. `|-` is a way to define a multi line string in YAML. Check the [YAML Specification](https://yaml.org/spec/1.2/spec.html#id2794534) for details. +Inside the copyright string, you can use the placeholder `${currentYear}` which will be replaced with the current year. + +#### deprecated + +In case your project is deprecated you may also define a property `deprecated: true`. In projects that have a direct dependency to your project, UI5 CLI will then display a deprecation warning. + +## Resources +### Path Mapping +Depending on the project type, UI5 CLI expects your projects source files to be located in certain directories. + +If your project's sources are located in different directories, you need to configure the path mapping accordingly. Depending on the type of project, there are several different path mappings available. + +Note that all configured paths must be written in POSIX (i.e. using only forward slashes `/` as path segment separators) and relative to the project's root directory. + +#### Available Path Mappings + +#### Applications + - `webapp`: Mapped to runtime path `/` (root) + + ```yaml + resources: + configuration: + paths: + webapp: webapp + ``` + +#### Libraries + - `src`: Mapped to runtime path `/resources` + - `test`: Mapped to runtime path `/test-resources` + + ```yaml + resources: + configuration: + paths: + src: src + test: test + ``` + +#### Modules + Modules can map any virtual paths to any physical path within the project. + + However, it is recommended that modules include their namespace in the virtual path and use the `/resources` prefix (e.g. `/resources/my/library/module-xy/`) to avoid name clashes with other projects. + + ```yaml + resources: + configuration: + paths: + /resources/my/library/module-xy/: lib + /resources/my/library/module-xy-min/: dist + ``` + +::: details Example +For an application project with the following directory structure, you need the path mapping configuration given below: + +``` +my-app/ +\_ ui5.yaml +\_ lib/ + \_ js/ + \_ app/ +``` + +```yaml +resources: + configuration: + paths: + webapp: lib/js/app +``` + + +::: + +### Encoding of `*.properties` files + +::: info Info +This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) + +::: details Example +#### UTF-8 + + ```yaml + resources: + configuration: + propertiesFileSourceEncoding: UTF-8 + ``` + +#### ISO-8859-1 + + ```yaml + resources: + configuration: + propertiesFileSourceEncoding: ISO-8859-1 + ``` + +::: + +By default UI5 CLI expects different encodings for `*.properties` i18n files, depending on the project's specification version: + +Specification Version | Default `propertiesFileSourceEncoding` +--- | --- +**2.0+** | `UTF-8` +**0.1, 1.0 or 1.1** | `ISO-8859-1` + +If your project uses a different encoding for `*.properties` files, you need to set the `propertiesFileSourceEncoding` configuration property. + +UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects `*.properties` files to be encoded. Please refer to [RFC 7](https://github.com/UI5/cli/blob/main/rfcs/0007-properties-file-encoding) for details. + +## Custom Configuration + +::: info Info +This configuration is available since UI5 CLI [`v2.2.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.2.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.1 or higher. + +::: details Example +```yaml +customConfiguration: + myTool: + key: value + myOtherTool: + otherKey: otherValue +``` + +::: + +Custom configuration that is ignored by UI5 CLI. +This can be used to store UI5 specific configuration for third-party tools. + +The "customConfiguration" value must be an object. +For third-party tools it is recommended to follow a namespace-like structure. + +## Framework Configuration + +::: info Info +This configuration is available since UI5 CLI [`v2.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.0.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.0 or higher. + +::: + +Define your project's framework dependencies. + +### Framework and Version + +In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version: + +#### OpenUI5 + ```yaml + framework: + name: OpenUI5 + version: 1.82.0 + ``` + +#### SAPUI5 + ```yaml + framework: + name: SAPUI5 + version: 1.82.0 + ``` + +If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5). + +You can find an overview of the available versions for each framework here: + +- [**OpenUI5** Version Overview](https://openui5.hana.ondemand.com/versionoverview.html) + - *The lowest version supported by UI5 CLI is __1.52.5__* +- [**SAPUI5** Version Overview](http://ui5.sap.com/versionoverview.html) + - *The lowest version supported by UI5 CLI is __1.76.0__* + +::: info Info +Projects that use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. + +::: + +### Dependencies + +::: details Example +#### application + ```yaml + specVersion: "4.0 + type: application + metadata: + name: my.company.app + framework: + name: OpenUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.table + - name: themelib_sap_fiori_3 + ``` + +#### library + ```yaml + specVersion: "4.0 + type: library + metadata: + name: my.company.library + framework: + name: SAPUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: themelib_sap_belize + optional: true + - name: themelib_sap_bluecrystal + optional: true + - name: themelib_sap_fiori_3 + optional: true + ``` + + When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library. + +::: + +#### Runtime Dependencies + +All libraries required by your project must be listed in the `libraries` section of the framework configuration: + +#### OpenUI5 + ```yaml + framework: + name: OpenUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.table + ``` + +#### SAPUI5 + ```yaml + framework: + name: SAPUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.comp + ``` + +#### Development Dependencies +Development dependencies are only installed if the project defining them is the current root project. +They are typically only required during the development of the project. + +```yaml + libraries: + - name: sap.ushell + development: true +``` + +Note that a development dependency cannot be optional and vice versa. + +#### Optional Dependencies +Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. +You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency. + +```yaml + libraries: + - name: themelib_sap_fiori_3 + optional: true +``` + +## Build Configuration +### Exclude Resources + +::: details Example +#### application + ```yaml + builder: + resources: + excludes: + # You can specify paths relative to the configured "webapp" directory + - "index.html + # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix + - "/resources/my/project/namespace/test/** + ``` + +#### library or theme-library + ```yaml + builder: + resources: + excludes: + # For libraries, all paths must be absolute, except for wildcards + - "/resources/some/project/name/test_results/** + - "/test-resources/** + - "!/test-resources/some/project/name/demo-app/** + - "**/*.svg + ``` + +#### module + !!! info + For projects of type `module`, this configuration is available since UI5 CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0) + and applies only to projects defining [Specification Version](#specification-versions) 3.1 or higher. + ```yaml + builder: + resources: + excludes: + # For modules, all paths must be absolute, except for wildcards + - "/resources/my/library/module-xy/min/** + - "!/resources/my/library/module-xy/min/module-xy-bundle.js + - "**/*.svg + ``` + +::: + +You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks. + +Patterns are applied to the **virtual resource paths** (i.e. the UI5 runtime paths). Exclude patterns are always applied after any includes. + +### Cachebuster + +::: details Example +#### time (default) + ```yaml + builder: + cachebuster: + signatureType: time + ``` +#### hash + ```yaml + builder: + cachebuster: + signatureType: hash + ``` + +::: + +By default, the generated cachebuster info file signatures are based on timestamps (`time`). In setups like CI environments, a mechanism based on file hashes (`hash`) might be more reliable. Also see [PR #241](https://github.com/SAP/ui5-builder/pull/241) for more details. + +### Component Preload Generation + +For projects of type `application` a `Component-preload.js` bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the component. +You can override this default behavior by defining a `componentPreload` configuration. + +For projects of type `library`, no Component Preload is created by default. +However you can define a `componentPreload` configuration to create Component Preload bundles. Those will be created in addition to the `library-preload.js` bundle. + +There are two ways to define the set of components for which preload bundles should be generated. You can either provide `paths` (allowing patterns) or `namespaces`. You can also combine both configuration options. Defining any of them overrides the default preload bundle generation for the root component of `application` projects. + +#### paths + +::: details Example +```yaml +builder: + componentPreload: + paths: + - "my/awesome/app/**/Component.js +``` + +::: + +The `paths` option takes one or multiple patterns. For every matched file a separate `Component-preload.js` will be generated. Patterns are always applied relative to the project's virtual source directory `/resources/`. + +#### namespaces + +::: details Example +```yaml +builder: + componentPreload: + namespaces: + - "my/awesome/app + - "my/awesome/app/componentOne + - "my/awesome/app/componentTwo +``` + +::: + +The `namespaces` option takes one or multiple component namespaces, which correspond to the directory structures. + +#### excludes + +::: info Info +This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.3 or higher. + +::: details Example +#### Single Component + + ```yaml + builder: + componentPreload: + excludes: + - "my/awesome/app/localService/** + ``` + +#### Multiple Components + + ```yaml + builder: + componentPreload: + namespaces: + - "my/awesome/app + - "my/awesome/app/componentOne + - "my/awesome/app/componentTwo + excludes: + - "my/awesome/app/**/thirdparty/ + - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js + ``` + +::: + +List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. + +Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the namespace of the component they apply to. + +### Library Preload Generation + +For projects of type `library` a `library-preload.js` bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the library. + +#### excludes + +::: info Info +This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.3 or higher. + +::: details Example +```yaml +builder: + libraryPreload: + excludes: + - "my/lib/thirdparty/ + - "!my/lib/thirdparty/NotExcluded.js +``` +::: + +List of modules declared as glob patterns (resource name patterns) that are excluded from `library-preload.js` bundle. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. + +Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the library's namespace. + +### Custom Tasks + +::: details Example +```yaml +builder: + customTasks: + - name: custom-task-1 + beforeTask: replaceCopyright + configuration: + some-key: some value + - name: custom-task-2 + afterTask: custom-task-1 + configuration: + color: blue +``` + +::: + +You can define custom build tasks that will be executed for the project. Please refer to the [Custom Tasks Documentation](./extensibility/CustomTasks) for a detailed explanation and examples of the build extensibility. + +Each `customTasks` entry must define the `name` of the custom task as defined in its `metadata.name` property. + +In addition, the execution order needs to be defined by referencing a [standard task](./Builder#tasks) or an already configured custom task using the `afterTask` or `beforeTask` property. + +Optionally, arbitrary `configuration` can be passed to the custom task. + +### JSDoc + +::: details Example +```yaml +builder: + jsdoc: + excludes: + - "some/project/name/thirdparty/** +``` + +::: + +You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task. + +Patterns are always applied relative to the project's virtual **source** directory `/resources/`. + +These excludes are applied *before* any general builder excludes that have been defined in `builder.resources.excludes`. + +### Include Dependencies + +::: info Info +This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.5 or higher. + +::: details Example +```yaml +builder: + settings: + includeDependency: + - shimmed.thirdparty.library + includeDependencyRegExp: + - ^com\.namespace + includeDependencyTree: + - sap.m +``` + +::: + +You can include certain dependencies into the build process using the `includeDependency` builder setting. By using `includeDependencyRegExp`, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using `includeDependencyTree`, a selected dependency including all of its sub-dependencies is used. + +This configuration can be overwritten more precisely with the CLI parameters `--include-dependency`, `--include-dependency-regexp`, `--include-dependency-tree`, `--exclude-dependency`, `--exclude-dependency-regexp` and `--exclude-dependency-tree`. + +### Minification + +For projects of types `application` and `library`, minification is done for all JavaScript files. During the minification step debug variants are created, original resources are minified, and source maps are created. You can exclude the resources of a project from minification using a list of glob patterns. Matching resources won't be minified, and no debug variants or source maps will be created. + +The project's `ui5.yaml` file can contain a list of modules declared as glob patterns (resource name patterns) that are excluded from resource minification. Re-includes have to be marked with a leading exclamation mark `!`; see the example below. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. + +Note that patterns are always applied relative to the project's virtual source directory `/resources/`. + +::: info Info +This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.6 or higher. + +::: details Example +```yaml +builder: + minification: + excludes: + - "my/lib/thirdparty/ + - "!my/lib/thirdparty/NotExcluded.js +``` + +::: + +## Server Configuration + +::: details Example +```yaml +server: + settings: + httpPort: 1337 + httpsPort: 1443 +``` + +::: + +By default, UI5 CLI will serve applications using Port `8080`. When running in HTTP/2 or HTTPS mode, Port `8443` will be used. + +If the default port is already in use, the next highest free port will be used. + +A project can also configure alternative default ports. If the configured port is already in use, an error will be thrown. + +The default and configured server ports can always be overwritten with the CLI parameter `--port`. + +## Extension Configuration + +::: details Example +```yaml +specVersion: "4.0 +type: application +metadata: + name: my.application +--- +specVersion: "4.0 +kind: extension +type: project-shim +metadata: + name: my.application.thirdparty +shims: + configurations: + lodash: + specVersion: "4.0 + type: module + metadata: + name: lodash + resources: + configuration: + paths: + /resources/my/application/thirdparty/: " +``` + +::: + +Extensions configuration can be added to any projects `ui5.yaml`. For better readability, it should to be located *after* the projects configuration, separated by [three dashes](https://yaml.org/spec/1.2/spec.html#id2760395) "`---`". + +In cases where an extension shall be reused across multiple projects you can make it a module itself and have its configuration in a standalone `ui5.yaml` located inside that module. + +Extensions can be identified by the `kind: extension` configuration. Note that if no `kind` configuration is given, [`project`](#project-configuration) is assumed. + +### Available Extensions +- [Custom Tasks](./extensibility/CustomTasks) +- [Custom Server Middleware](./extensibility/CustomServerMiddleware) +- [Project Shims](./extensibility/ProjectShims) + +## Custom Bundling + +::: details Example +```yaml +builder: + bundles: + - bundleDefinition: + name: "sap-ui-custom.js + sections: + - mode: raw + filters: + - ui5loader-autoconfig.js + resolve: true + sort: true + bundleOptions: + optimize: true + - bundleDefinition: + name: "app.js + sections: + - mode: preload + filters: + - some/app/Component.js + resolve: true + sort: true + - mode: provided + filters: + - ui5loader-autoconfig.js + resolve: true + bundleOptions: + optimize: true +``` + +::: + +Custom bundles can be defined in the `ui5.yaml`. Within the `builder/bundles` configuration a list of `bundleDefinitions` can be described. + +### Properties + +**bundles** + +A list of bundle definitions. A `bundleDefinition` contains of the following options: + +- `name`: The module bundle name +- `defaultFileTypes`: List of default file types which should be included in the bundle. Defaults to: `.js`, `.control.xml`, `.fragment.html`, `.fragment.json`, `.fragment.xml`, `.view.html`, `.view.json` and `.view.xml` +- `sections`: A list of module bundle definition sections. Each section specifies an embedding technology (see [API-Reference](https://ui5.github.io/cli/v4/api/module-@ui5_builder_processors_bundlers_moduleBundler.html#~ModuleBundleDefinition)) and lists the resources that should be in- or excluded from the section. + - `mode`: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require) + - `filters`: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. + - `resolve`: Setting resolve to `true` will also include all (transitive) dependencies of the files + - `resolveConditional`: Whether conditional dependencies of modules should be resolved and added to the module set for this section. By default set to `false` + - `declareRawModules`: Whether raw modules should be declared after jQuery.sap.global became available. With the usage of the ui5loader, this flag should be set to 'false'. By default set to `false` + - `renderer`: Whether renderers for controls should be added to the module set. By default set to `false` + - `sort`: By default, modules are sorted by their dependencies. The sorting can be suppressed by setting the option to `false` + - `async` (only available if `mode` equals `require`): Specifies whether the `require` section of the module should use an asynchronous API. When set to `true`, the modules are loaded using `sap.ui.require`. When set to `false`, modules are loaded using `sap.ui.requireSync`, which is not available in UI5 2.x. + - Projects defining [Specification Version](#specification-versions) 4.0 and higher: Defaults to `true` + - Projects defining [Specification Version](#specification-versions) lower than 4.0: Behaves like `false` but can't be configured + +**bundleOptions** + +- `optimize`: If set to `true`, the module bundle gets minified + - Projects defining [Specification Version](#specification-versions) 3.0 and higher: Defaults to `true` + - Projects defining [Specification Version](#specification-versions) lower than 3.0: Defaults to `false` +- `decorateBootstrapModule`: By default set to `false`. If set to `true`, the module will be decorated with an optimization marker +- `addTryCatchRestartWrapper`: By default set to `false`. If set to `true`, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors +- `numberOfParts`: By default set to `1`. The number of parts into which a module bundle should be splitted +- `sourceMap`: By default set to `true`. Adds source map support to the bundle. Available since UI5 CLI `v4.0.0` + +## Specification Versions +A project must define a specification version by setting the `specVersion` property. UI5 CLI uses this information to detect whether the currently installed version is compatible to a project's configuration. + +```yaml +specVersion: "4.0 +[...] +``` + +To use new features, a project might need to update the `specVersion` property. + +For a given Specification Version **MAJOR.MINOR** we will increment: + +1. **MAJOR** when there are breaking changes that might require additional actions by the project maintainer +2. **MINOR** when adding new features that are fully backward compatible + +All changes are documented below. + +### Compatibility Matrix + +Unless otherwise noted in the table below, UI5 CLI modules are backward compatible. + +Version | UI5 CLI Release +--- | --- +**4.0** | v4.0.0+ +**3.2** | v3.8.0+ +**3.1** | v3.5.0+ +**3.0** | v3.0.0+ +**2.6** | v2.14.0+ +**2.5** | v2.12.0+ +**2.4** | v2.11.0+ +**2.3** | v2.10.0+ +**2.2** | v2.4.0+ +**2.1** | v2.2.0+ +**2.0** | v2.0.0+ +**1.1** | v1.13.0+ +**1.0** | v1.0.0+ +**0.1** | v0.0.1+ + +### Specification Version 4.0 + +**Breaking changes:** + +- Removed bundle option [`usePredefineCalls`](#properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. +- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](./Configuration#properties) for details. + +Specification Version 4.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v4.0.0 and above. + +Also see [Migrate to v4](../updates/migrate-v4#changes-for-projects) for details on these breaking changes. + +### Specification Version 3.2 + +**Features:** + +- Adds a new bundling mode `depCache` for providing a dependencies cache: [`builder.bundles.bundleDefinition.sections.mode=depCache`](#properties) + +Specification Version 3.2 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v3.8.0 and above. + +### Specification Version 3.1 + +**Features:** + +- Adds support for maintaining the [`builder.resources.excludes`](#exclude-resources) configuration for projects of type `module` + +Specification Version 3.1 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v3.5.0 and above. + +### Specification Version 3.0 + +**Breaking changes:** + +- The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [`name`](#name) for details +- [bundleOptions](#custom-bundling) has been modified: + * `debugMode` has been removed + * `optimize` now always defaults to `true` [#685](https://github.com/SAP/ui5-builder/pull/685) + +**Features:** + +- Adds support for `sourceMap` configuration for the application and library [bundleOptions](#properties) + +Specification Version 3.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v3.0.0 and above. + +### Specification Version 2.6 +**Features:** + +- Adds support for `excludes` configuration for the application and library [minification](#excludes_2) + +Specification Version 2.6 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.14.0 and above. + +### Specification Version 2.5 +**Features:** + +- Adds support for the build configuration [`includeDependency`](#include-dependencies) +- Allows [server configuration](#server-configuration) in projects of type `module` + +Specification Version 2.5 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.12.0 and above. + +### Specification Version 2.4 +**Features:** + +- Adds support for `bundleInfo` mode in bundle definitions. + +Specification Version 2.4 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.11.0 and above. + +### Specification Version 2.3 + +**Features:** + +- Adds support for `excludes` configuration of [component](#excludes)- and [library](#excludes_1) preload bundles + +Specification Version 2.3 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.10.0 and above. + +### Specification Version 2.2 + +**Features:** + +- Custom task extensions can make use of the [`TaskUtil` Helper Class](./extensibility/CustomTasks#helper-class-taskutil) + +Specification Version 2.2 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.4.0 and above. + +### Specification Version 2.1 + +**Features:** + +- Adds support for the ["customConfiguration"](#custom-configuration) configuration +- Custom middleware extensions can make use of the [`MiddlewareUtil` Helper Class](./extensibility/CustomServerMiddleware#helper-class-middlewareutil) + +Specification Version 2.1 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.2.0 and above. + +### Specification Version 2.0 + +**Breaking changes:** + +- Adds and enforces schema validation of the ui5.yaml +- By default the encoding of `*.properties` files is expected to be `UTF-8` (as opposed to `ISO-8859-1` in projects defining specification versions below 2.0) + - A project can still explicitly configure the [encoding of its `*.properties` files](#encoding-of-properties-files) + +**Features:** + +- Adds support for the ["framework"](#framework-configuration) configuration to consume SAPUI5 libraries. + +Specification Version 2.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.0.0 and above. + +### Specification Version 1.1 + +**Features:** + +- Adds support for the `theme-library` type. + +Specification Version 1.1 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v1.13.0 and above. + +### Specification Version 1.0 +First stable release. + +Specification Version 1.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v1.0.0 and above. + +### Specification Version 0.1 +Initial version. + +Specification Version 0.1 projects are compatible with [UI5 CLI](https://github.com/SAP/ui5-cli) v0.0.1 and above. diff --git a/packages/documentation/docs/pages/ESSupport.md b/packages/documentation/docs/pages/ESSupport.md new file mode 100644 index 0000000000..a85798e723 --- /dev/null +++ b/packages/documentation/docs/pages/ESSupport.md @@ -0,0 +1,580 @@ + +# ECMAScript Support + +UI5 CLI offers general support for `ES2023` ECMAScript features. While a `ui5 build` is executed, UI5 CLI analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax. + +| UI5 CLI Version | Supported ECMAScript Version | Note | +|-------------------- |----------------------------- | ---- | +| v3.11+ | ECMAScript 2023 | | +| v3.0+ | ECMAScript 2022 | | +| v2.0+ | ECMAScript 2009/ES5 | Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features | + +The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 CLI check out [Code Analysis](./CodeAnalysis). + +## Language Features with Restrictions + +The following sections describe the restrictions grouped by the ECMAScript language feature. + +### JavaScript modules + +In general, UI5 CLI only analyzes **JavaScript** files of type `script`. [JavaScript Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) are not analyzed. + +UI5 CLI and the UI5 Runtime does not support the usage of `export` and `import` of JavaScript Modules. Therefore, `sap.ui.define` has to be used. + +#### Supported + + ```javascript + sap.ui.define([ + "ModuleA", + "ModuleB + ], function(ModuleA, ModuleB) { + return ModuleA.extend("ModuleC", {}); + }); + ``` + +#### Not Supported + + ```javascript + import ModuleA from "ModuleA"; + import ModuleB from "ModuleB"; + export default class ModuleC extends ModuleA {}; + ``` + +### Template Literal + +[Template Literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) without an expressions can be used in all places where string literals can be used. However, since UI5 CLI will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. `Hello ${planets[2]}`) can't be used in the scenarios described below. + +#### Template Literal in `sap.ui.define` or `sap.ui.require` + +Template Literals with one or more expressions inside a `sap.ui.define` or `sap.ui.require` call are not supported. + +#### Supported + + ```javascript + sap.ui.define([ + `ModuleA`, + `ModuleB` + ], function(ModuleA, ModuleB) { + }); + ``` + +#### Not Supported + + ```javascript + const i = `B`; + sap.ui.define([ + `ModuleA`, + `Module${i}` + ], function(ModuleA, ModuleB) { + }); + ``` + +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Template Literal in Smart Template Declaration + +When declaring a **Smart Template** using a **Template Literal** with one or more expressions in the name of the **Smart Template** is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + `sap/suite/ui/generic/template/lib/TemplateAssembler` + ], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.Component`, { + metadata: { + properties: { + templateName: { + type: `string`, + defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` + } + }, + manifest: `json` + } + } + ); + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + `sap/suite/ui/generic/template/lib/TemplateAssembler` + ], function(TemplateAssembler) { + const name = `Component`; + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.${name}`, { + metadata: { + properties: { + templateName: { + type: `string`, + defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` + } + }, + manifest: `json` + } + } + ); + }); + ``` + +#### Template Literal in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. + +Declaring an **XMLComposite** control using a **Template Literal** with one or more expressions in the name, is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + `sap/ui/core/XMLComposite` + ], function(XMLComposite) { + return XMLComposite.extend(`composites.MyComposite`, {} + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + `sap/ui/core/XMLComposite` + ], function(XMLComposite) { + const name = `MyComposite`; + return XMLComposite.extend(`composites.${name}`, {}); + }); + ``` + +#### Template Literal in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Template Literal** with one or more expressions for the library name. + +#### Supported + + ```javascript + sap.ui.getCore().initLibrary({ + name: `my.lib` + }); + ``` + +#### Not Supported + + ```javascript + const libraryName = `lib`; + sap.ui.getCore().initLibrary({ + name: `my.${libraryName}` + }); + ``` + +#### Reserved Variable Names in a Template Literal + +While UI5 CLI performs a build placeholders are replaced with a values offered by the build. For example `${version}` is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any **Template Literal** where any expression contains variable with following names: + +- `version` +- `project.version` +- `buildtime` +- `copyright` + +#### Supported + + ```javascript + const myVersion = `1.2`; + const transformedVersion `v${myVersion}` + ``` + +#### Not Supported + + ```javascript + const version = `1.2`; + const transformedVersion `v${version}` + ``` + +UI5 CLI searches for the exact match of `${version}`, so with adding whitespaces before and after the variable name `${ version }` UI5 CLI won't replace this occurence. This can be enforced by the dedicated ESLint config [template-curly-spacing](https://eslint.org/docs/latest/rules/template-curly-spacing) with option `always`. + +### Spread Element + +A [Spread Element](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) can be used in all places, except the following. + +#### Spread Element in `sap.ui.define` or `sap.ui.require` + +A **Spread Element** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "ModuleA", + "ModuleB + ], function(ModuleA, ModuleB) { + }); + ``` + +#### Not Supported + + ```javascript + const dependencies = ["ModuleA", "ModuleB"]; + sap.ui.define([ + ...dependencies + ], function(ModuleA, ModuleB) { + }); + ``` + +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Spread Element in Smart Template Declaration + +When declaring a **Smart Template**, the usage of a **Spread Element** in the configuration is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler + ], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + } + }, + manifest: "json + } + } + ); + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler + ], function(TemplateAssembler) { + const myTemplate = { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + } + }; + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + ...myTemplate + } + manifest: "json + } + } + ); + }); + ``` + +#### Spread Element in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. + +When declaring an **XMLComposite**, the usage of a **Spread Element** in the configuration is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite + } + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + const myXMLComposite = { + fragment: "composites.custom.MyComposite + }; + return XMLComposite.extend(`composites.MyComposite`, { + ...myXMLComposite + }); + }); + ``` + +#### Spread Element in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Spread Element**. + +#### Supported + + ```javascript + sap.ui.getCore().initLibrary({ + name: "my.lib + }); + ``` + +#### Not Supported + + ```javascript + const mylib = { + name: "my.lib + }; + sap.ui.getCore().initLibrary({ + ...mylib + }); + ``` + +### Object Expression + +An **Object Expression** can be used in all places except in following places. + +#### Object Expression in `sap.ui.define` or `sap.ui.require` + +An **Object Expression** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "Bar + ], function(Bar){ + }); + + ``` + +#### Not Supported + + ```javascript + const dependency = "Bar"; + sap.ui.define([ + dependency + ], function(Bar){ + }); + ``` + +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Object Expression in Smart Template Declaration + +When declaring a **Smart Template**, the usage of an **Object Expression** in the configuration is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler + ], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + } + }, + manifest: "json + } + } + ); + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler + ], function(TemplateAssembler) { + const key = "templateName + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.${name}`, { + metadata: { + properties: { + [key]: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + } + } + manifest: "json + } + } + ); + }); + ``` + +#### Object Expression in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. + +When declaring an **XMLComposite**, the usage of an **Object Expression** in the configuration is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite + } + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + const key = "fragment"; + return XMLComposite.extend("composites.MyComposite", { + [key]: "composites.custom.MyComposite + }); + }); + ``` + +#### Object Expression in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Object Expression**. + +#### Supported + + ```javascript + sap.ui.getCore().initLibrary({ + name: "my.lib + }); + ``` + +#### Not Supported + + ```javascript + const key = "name"; + sap.ui.getCore().initLibrary({ + [key]: "my.lib + }); + ``` + +### Computed Property + +A **Computed Property** can be used in all places except in following places. + +#### Computed Property when using `extend` + +One or more **Computed Property** as a parameter in an UI5 Module `extend` call is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "Bar + ], function(Bar){ + return Bar.extend("my.Bar" {}); + }); + + ``` + +#### Not Supported + + ```javascript + const name = "my"; + sap.ui.define([ + "Bar + ], function(Bar){ + return Bar.extend(name + ".Bar", {}); + }); + ``` + +#### Computed Properties in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Computed Property**. + +#### Supported + + ```javascript + sap.ui.getCore().initLibrary({ + name: "my.lib + }); + ``` + +#### Not Supported + + ```javascript + const name = "my"; + sap.ui.getCore().initLibrary({ + name: name + ".lib + }); + ``` + +### Class Declaration + +If you want to generate a JSDoc build of your project and using a **Class Declaration** the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration. + +#### Supported + + ```javascript + sap.ui.define([ + "Bar + ], function(Bar){ + /** + * JSDoc block here + */ + class Foo extends Bar { + make () {} + } + + return Foo; + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "Bar + ], function(Bar){ + /** + * JSDoc block here + */ + return class Foo extends Bar { + make () {} + } + }); + ``` + +### Arrow Function Expression + +If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command. + +#### Supported + + ```javascript + sap.ui.define([ + "Bar + ], + /** + * JSDoc block here + */ + (Bar) => Bar.extends("Foo", { + + })); + ``` + +#### Not Supported + + ```javascript + /** + * JSDoc block here + */ + sap.ui.define([ + "Bar + ], (Bar) => Bar.extends("Foo", { + + })); + ``` diff --git a/packages/documentation/docs/pages/FAQ.md b/packages/documentation/docs/pages/FAQ.md new file mode 100644 index 0000000000..0e87511488 --- /dev/null +++ b/packages/documentation/docs/pages/FAQ.md @@ -0,0 +1,28 @@ +# FAQ +### How Can I Contribute? +Please check our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING). + +### How Can I Obtain Support? +Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. + +### What's the Difference Between OpenUI5 and SAPUI5? +The open source project [OpenUI5](https://openui5.org/) provides most of the fundamental framework features. [SAPUI5](https://ui5.sap.com/) enhances this by providing **additional libraries** under a **different license**. + +OpenUI5 is provided under the Apache 2.0 license. The SAPUI5 packages that are consumed in UI5 CLI are provided under the terms of the [SAP Developer License Agreement](https://tools.hana.ondemand.com/developer-license-3.1.txt). + +Note that projects which use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. However, SAPUI5 projects can depend on OpenUI5 projects. + +Please also see the [UI5 SDK documentation "SAPUI5 vs. OpenUI5"](https://ui5.sap.com/#/topic/5982a9734748474aa8d4af9c3d8f31c0). + +### Why package.json? / Why npm? +Currently, UI5 CLI can only resolve dependencies defined in a `package.json` file. This might change in the future by adding Translators for additional dependency management systems. + +To manage your dependencies, you can use almost any `Node.js` package manager that relies on `package.json` files. Popular ones are [npm](https://www.npmjs.com/), [Yarn](https://yarnpkg.com/) and [pnpm](https://pnpm.js.org/). UI5 CLI itself uses [npm](https://www.npmjs.com/). + +UI5 CLI resolves dependencies almost the same way `Node.js` does when executing a `require` / `import` statement. + +### Where are the npm Packages? + +* [OpenUI5 Libraries](https://www.npmjs.com/org/openui5) +* [SAPUI5 Libraries](https://www.npmjs.com/org/sapui5) +* [UI5 CLI Modules](https://www.npmjs.com/org/ui5) diff --git a/packages/documentation/docs/pages/FileSystem.md b/packages/documentation/docs/pages/FileSystem.md new file mode 100644 index 0000000000..fa4a2f4f4b --- /dev/null +++ b/packages/documentation/docs/pages/FileSystem.md @@ -0,0 +1,47 @@ +# UI5 FS + +The [UI5 FS](https://github.com/SAP/ui5-fs) provides a UI5-specific file system abstraction. + + + +## Overview + +The virtual file system "UI5 FS" offers an abstraction layer from the physical file system. Among other features, it can combine a set of scattered file locations into a well-defined virtual structure. + +### Resource + +A [Resource](https://ui5.github.io/cli/v4/api/@ui5_fs_Resource.html) basically represents a file. Besides providing access to the file content, it also carries metadata like the **virtual path** of the Resource. + +Resources are typically created and stored in [Adapters](#adapters). Once read from a physical file system, they are typically kept in memory for further processing in other modules. + +This ensures a high build performance, as physical read and write access for a high number of resources is kept to a minimum. + +### Adapters + +Adapters abstract access to different resource locations. + +The [Memory Adapter](https://ui5.github.io/cli/v4/api/@ui5_fs_adapters_Memory.html) represents a virtual file system which maintains respective [Resources](#resource) inside a virtual data structure. + +The [File System Adapter](https://ui5.github.io/cli/v4/api/@ui5_fs_adapters_FileSystem.html), on the other hand, has direct access to the physical file system. It maps a "virtual base path" to a given physical path. + +Both adapters provide APIs to retrieve and persist [Resources](#resource), namely + +- to retrieve a single resource by its virtual path use `byPath()`, +- to retrieve many resources based on patterns use `byGlob()`, +- to persist a single resource use `write()`. + + +### Reader Collections + +Reader collections allow grouped access to multiple adapters, which might even be nested in other reader collections. + +They implement the same API for **retrieving** resources as adapters (`byPath` and `byGlob`). Multiple flavors exist: + +* [ReaderCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_ReaderCollection.html): The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections) +* [ReaderCollectionPrioritized](https://ui5.github.io/cli/v4/api/@ui5_fs_ReaderCollectionPrioritized.html): Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another +* [DuplexCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_DuplexCollection.html): Contains a single reader and a single "writer". It therefore also implements the Adapter API for **persisting** resources (`write()`). When retrieving resources, the writer is prioritized over the reader +* [WriterCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_WriterCollection.html): Contains a set of writers and a mapping for each of them. When writing a resource, the writer is chosen based on the resource's virtual path. diff --git a/packages/documentation/docs/pages/GettingStarted.md b/packages/documentation/docs/pages/GettingStarted.md new file mode 100644 index 0000000000..203fe30ef9 --- /dev/null +++ b/packages/documentation/docs/pages/GettingStarted.md @@ -0,0 +1,99 @@ +# Getting Started +## Installing the UI5 CLI +### Requirements +- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) +- [npm](https://www.npmjs.com/) version v8.0.0 or higher + +### Installation +```sh +# Global installation to have the command available +npm install --global @ui5/cli + +# Additional local install in your project +npm install --save-dev @ui5/cli + +# Verify installation +ui5 --help +``` + +The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the [UI5 CLI documentation](./CLI#local-vs-global-installation) for details. + +## ⚡️ Quick Start: OpenUI5 Sample App +Check out the [OpenUI5 Sample App](https://github.com/SAP/openui5-sample-app) featuring a full blown [How-to](https://github.com/SAP/openui5-sample-app/#openui5-sample-app) to play around with UI5 CLI! + +## Starting a New Project +The easiest way to start a new UI5 project is to use a template generator like [**generator-easy-ui5**](https://github.com/SAP/generator-easy-ui5). + +Choose a template that is designed for the type of project you want to create and the target environment where you want to deploy it to. +Make sure that the template already uses UI5 CLI. A good indicator for that is the presence of a `ui5.yaml` file in the generated project. + +When working with SAP Business Application Studio, there are several templates available to you. Check out the tutorial on creating a basic SAPUI5 application and deploying it to Cloud Foundry from within SAP Business Application Studio: [Create an SAP Fiori App Using SAP Business Application Studio](https://developers.sap.com/tutorials/appstudio-fioriapps-create.html) + +You can find many guides on UI5 development with SAP Business Application Studio in the [Tutorial Navigator](https://developers.sap.com/tutorial-navigator.html?tag=topic:sapui5&tag=products:technology-platform/sap-business-application-studio). + +## Enabling an Existing Project +You can easily check whether or not a project (application or library) can already be used with the UI5 CLI by looking for a `ui5.yaml` file in the project's root directory. +This file (with some exceptions) is required for all projects and their dependencies (e.g. reuse libraries) to use them in the UI5 CLI. + +### Setup +If your project is not set up for use with the UI5 CLI yet, follow these steps: + +1. If your project does not have a `package.json` file, let npm generate it: + ```sh + npm init --yes + ``` + +1. Generate the `ui5.yaml` file: + ```sh + ui5 init + ``` + +1. Define the framework you want to use + + === "OpenUI5 + + ```sh + ui5 use openui5@latest + ``` + + === "SAPUI5 + + ```sh + ui5 use sapui5@latest + ``` + + You can choose between the OpenUI5 and the SAPUI5 framework. + + Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5). + +1. Add required libraries + ```sh + ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 # [...] + ``` + + You can find a documentation of all libraries, including samples and more, in the Demo Kit: + + - [**OpenUI5** Demo Kit](https://openui5.hana.ondemand.com/api) + - [**SAPUI5** Demo Kit](https://ui5.sap.com/#/api) + +1. Start the server and work on your project! 🎉 + ```sh + ui5 serve + ``` + + !!! tip + Use `ui5 serve` to start a local development server and `ui5 build --all` to produce an optimized, static version of your project, which you can then deploy to your production environment. + + Find more information here: + + - [Server](./Server) + - [Builder](./Builder) + - [CLI](./CLI) + +1. If you are using Git or similar version control, commit `package.json` and `ui5.yaml` to your repository. + ```sh + git add package.json ui5.yaml + git commit -m "Enable use with UI5 CLI + ``` + +**🎉 Hooray! You can now use UI5 CLI in your project! 🎉** diff --git a/packages/documentation/docs/pages/Guidelines.md b/packages/documentation/docs/pages/Guidelines.md new file mode 100644 index 0000000000..9739695c09 --- /dev/null +++ b/packages/documentation/docs/pages/Guidelines.md @@ -0,0 +1,60 @@ +# Development Conventions and Guidelines +## JavaScript Coding Guidelines +We enforce code style rules using [ESLint](https://eslint.org). Execute `npm run lint` to check your code for style issues. +You may also find an ESLint integration for your favorite IDE [here](https://eslint.org/docs/user-guide/integrations). + +## Testing +Unit testing is based on the [ava](https://github.com/avajs/ava) test-framework. You can run all tests using `npm test` (this is what our CI will do for all pull requests). + +During development, you might want to use `npm run unit` or `npm run unit-watch` (re-runs tests automatically after file changes) to quickly execute all unit tests and see whether your change just broke one of them. 😉 + +## Git Guidelines +### No Merge Commits +Please use [rebase instead of merge](https://www.atlassian.com/git/tutorials/merging-vs-rebasing) to update a branch to the latest main. This helps keeping a clean commit history in the project. + +### Commit Message Style +#### Commit Summary +The commit summary is the first line of the commit message. + +- It should be **50-70 characters** long. +- It must be **prefixed** by `[FIX]`, `[FEATURE]` or `[INTERNAL]` accordingly, followed by the name of the component or module which was the main subject of the change. + + Use `[FIX]` for bugfixes. + + Use `[FEATURE]` for new features / enhancements. + + Use `[BREAKING]` for breaking / incompatible changes. + _**Note:** The commit body of a breaking change should also include a paragraph starting with `BREAKING CHANGE:`. + This paragraph will be highlighted in the changelog._ + + Use `[DEPENDENCY]` for dependency updates that should be mentioned in the changelog. + + Use `[INTERNAL]` for all other changes (e.g. refactorings, documentation, etc.). These changes will not be listed in the changelog. + + Exceptions are changes created by automated processes like releases or dependency updates +- It must not contain `[` or `]` anywhere but in the prefix. +- It shall be written in **imperative present tense** (as recommended by [Git](https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project)) + + Examples: Instead of *"Adding tests for"* or *"I added tests for"* use *"Add tests for"* or *"Add feature xy"*. + +#### Commit Body +After the commit summary there should be an empty line followed by the commit body. + +- Describe the intention and reasoning of the change +- If a change fixes an issue reported on GitHub, add the following line to the commit message: + + `Fixes: #` (e.g. `Fixes: #42`) +- Breaking changes should include a paragraph starting with `BREAKING CHANGE:`. This paragraph will be highlighted in the changelog. + +#### Example +``` +[FIX] npm translator: Correct handling of devDependencies + +- devDevependencies should only be included in certain cases +- Was caused by a refactoring + +Fixes: #42 +Fixes: #45 +``` + +## Work on Release Branches +Major releases are typically prepared on dedicated branches like `next`. + +There are some things to be aware of when working on these branches. + +### Implementing Changes in Multiple Code Lines +While working on a new major release (e.g. `5.0.0`), any fixes or new features implemented on the **current** (main) code line (e.g. 4.x) should be cherry-picked as `[INTERNAL]` to the dedicated (pre-)release branch (typically `next`). This is to prevent changes declared as `[FEATURE]` or `[FIX]` from appearing in the changelog twice, which can be confusing since the new major version has not yet been released and should naturally contain any fixes or features released in any of the preceding releases. Listing them twice might confuse users. Note that our changelog is generated based on all tags of the repository, independent of the currently checked out branch (also see [git-chglog/issues/123](https://github.com/git-chglog/git-chglog/issues/123)). + +However, once a new major release becomes **current** (i.e. "main", not a pre-release), any changes applied to multiple code lines should be cherry picked with the original prefix, so that they appear for multiple versions in the changelog. diff --git a/packages/documentation/docs/pages/OpenUI5.md b/packages/documentation/docs/pages/OpenUI5.md new file mode 100644 index 0000000000..6458f1e766 --- /dev/null +++ b/packages/documentation/docs/pages/OpenUI5.md @@ -0,0 +1,73 @@ +# Consuming OpenUI5 Libraries + +OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on [Consuming SAPUI5 Libraries](./SAPUI5) for a general description of how UI5 CLI can fetch and provide framework dependencies to your project. + +Note that projects using the SAPUI5 framework can depend on projects using the OpenUI5 framework. However, OpenUI5 projects can't depend on SAPUI5 projects. + +Please also refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ#whats-the-difference-between-openui5-and-sapui5). + +::: info Info +The minimum OpenUI5 version that can be consumed by UI5 CLI is **1.52.5** + +::: + +## Configuration +Your project's `ui5.yaml` provides a configuration section dedicated to framework dependency handling. + +This configuration can be maintained by editing the file, or by using the UI5 CLI: + +::: details Example + Using the [UI5 CLI](./CLI): + ```sh + ui5 use openui5@latest + ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 + ``` + +::: + +**Example ui5.yaml of an application** +```yaml +specVersion: "4.0 +type: application +metadata: + name: some.project.name +framework: + name: OpenUI5 + version: 1.76.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.table + - name: themelib_sap_fiori_3 +``` + +**Example ui5.yaml of a library** +```yaml +specVersion: "4.0 +type: library +metadata: + name: some.library +framework: + name: OpenUI5 + version: 1.76.0 + libraries: + - name: sap.ui.core + - name: themelib_sap_belize + optional: true + - name: themelib_sap_bluecrystal + optional: true + - name: themelib_sap_fiori_3 + optional: true +``` + +Please make sure that your project defines [Specification Version 2.0](./Configuration#specification-version-20) or higher. + +For details, please see the corresponding [framework configuration documentation](./Configuration#framework-configuration). + +## Linking Framework Dependencies +When working on UI5 applications or libraries that use OpenUI5, you can link a local OpenUI5 repository into that project. This allows you to make changes to the project itself as well as to the OpenUI5 libraries simultaneously and test them immediately. + +A detailed step-by-step guide on how to achieve such a setup with the OpenUI5 Sample App can be found [here](https://github.com/SAP/openui5-sample-app#working-with-local-dependencies). + +## OpenUI5 Framework Development +Please refer to the [OpenUI5 Framework Development Documentation](https://github.com/SAP/openui5/blob/-/docs/developing#developing-ui5). diff --git a/packages/documentation/docs/pages/Overview.md b/packages/documentation/docs/pages/Overview.md new file mode 100644 index 0000000000..b448cfd179 --- /dev/null +++ b/packages/documentation/docs/pages/Overview.md @@ -0,0 +1,127 @@ +# Development Overview +When developing a UI5 project on your local system, you should use the UI5 Server (`ui5 serve`) and not the UI5 Builder (`ui5 build`). Building a project should only be required when deploying it. + +However, you might have good reasons to also use the UI5 Builder during development. In such cases, feel free to let us know! Maybe your use case could be covered by a future enhancement of the UI5 Server. + +## Project Dependencies + +UI5 CLI differentiates between "framework dependencies" and "project dependencies". + +**Framework dependencies** are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options: + +* [Working with **OpenUI5** Framework Dependencies](./OpenUI5) +* [Working with **SAPUI5** Framework Dependencies](./SAPUI5) + +**Project dependencies** are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: [FAQ: Why package.json? / Why npm?](./FAQ#why-packagejson-why-npm). + +## Linking Projects +Would you like to work on an application project and one or more of its dependencies at the same time? We got you covered! + +### UI5 Workspaces +The recommended approach for setting up a development environment where simultaneous work on multiple UI5 projects is required. + +Head over to the [UI5 Workspaces](./Workspace) documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project: + +**Example: Your Directory Structure** +``` +my-app/ + \_ node_modules/ + \_ webapp/ + \_ ui5.yaml + \_ package.json +my-reuse-library/ + \_ node_modules/ + \_ src/ + \_ test/ + \_ ui5.yaml + \_ package.json +``` + +In its `package.json`, `my-app` should already define a dependency to `my-reuse-library`. So, after running the `npm install` command, a copy of the `my-reuse-library`-package should be retrieved from the package registry and added to my-app's `node_modules/` directory. + +In the `my-app` directory, create a new file named `ui5-workspace.yaml` with the following content: + +```yaml +specVersion: workspace/1.0 +metadata: + name: default +dependencyManagement: + resolutions: + - path: ../pages/my-reuse-library +``` + +That's it! Start a server via `ui5 serve`, and you will see that any changes you make in `my-reuse-library` are immediately visible in `my-app`. + +## Package Managers + +By leaving dependency management up to the tool of your choice (see [FAQ: Why package.json? / Why npm?](./FAQ#why-packagejson-why-npm)) you have a variety of other options for linking dependencies into your project. + +Here is an example using the [npm CLI](https://www.npmjs.com/get-npm) in Version 8, an application, and a reuse library project: + +**Example: Your Directory Structure** +``` +my-app/ + \_ node_modules/ + \_ webapp/ + \_ ui5.yaml + \_ package.json +my-reuse-library/ + \_ node_modules/ + \_ src/ + \_ test/ + \_ ui5.yaml + \_ package.json +``` + +In its `package.json`, `my-app` should already define a dependency to `my-reuse-library`. So, after running the `npm install` command, a copy of the "my-reuse-library"-package should be retrieved from the package registry and added to my-app's `node_modules/` directory. + +Now all you need to do is replacing this copy of the `my-reuse-library` package with a link to the `my-reuse-library` project located somewhere on your computer. In this example it is right next to `my-app`, but that doesn't really matter. + +First, in the directory of the `my-reuse-library` project, create a global link: +```sh +npm link +``` + +Then, in the `my-app` directory, use that link to replace the registry package: +```sh +npm link my-reuse-library +``` +_**Note:** "my-reuse-library" is the name defined in the `package.json` and not necessarily the directory or `ui5.yaml` name_ + +That's it. You can check whether the linking worked by executing `ui5 tree` in the `my-app` directory and looking for the path attributes in its output. + +## Static Dependency Definition + +As an alternative to defining your project dependencies in the `package.json`, you can define a static dependency hierarchy for the project in a YAML file. This is typically only advised in special cases where none of the other concepts work. + +To use such a file in UI5 CLI, provide a path to it using the [`--dependency-definition`](./CLI#common-options) parameter. Note that all `package.json` dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in `ui5.yaml` will still be used. + +**Example: `projectDependencies.yaml`** + +```yaml +id: my.app +version: "local +path: ". +dependencies: + - id: my.lib + version: "local + path: "../pages/my.lib +``` + +By placing this file in the root directory of the `my.app` application project, you can start a server with a local copy of the `my.lib` dependency, located in the same parent directory, using the command `ui5 serve --dependency-definition ./projectDependencies.yaml`. + +The structure of the dependency definition file follows that of the [`@ui5/project/graph/providers/DependencyTree~TreeNode`](https://ui5.github.io/cli/stable/api/@ui5_project_graph_providers_DependencyTree.html#~TreeNode) type. + +## HTTP/2 Development Webserver +The UI5 CLI contains a web server to serve the project via HTTP/2 protocol. + +```sh +ui5 serve --h2 +``` + +This requires an SSL certificate. You are guided through the automatic generation process. Also see the [UI5 Server documentation](./Server#ssl-certificates) + +## Integration in Other Tools +One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other `Node.js`-based tools and frameworks like [Grunt](https://gruntjs.com/) or [Gulp](https://gulpjs.com/). + +All JavaScript APIs available for direct consumption are listed [here](https://ui5.github.io/cli/v4/api/index.html). However, for standard UI5 development, the [UI5 CLI](./CLI) should always be the first choice. diff --git a/packages/documentation/docs/pages/Privacy.md b/packages/documentation/docs/pages/Privacy.md new file mode 100644 index 0000000000..e9087b52a0 --- /dev/null +++ b/packages/documentation/docs/pages/Privacy.md @@ -0,0 +1,5 @@ +# Privacy + +This site is hosted by GitHub Pages. +Please see the +GitHub Privacy Statement for any information how GitHub processes your personal data. diff --git a/packages/documentation/docs/pages/Project.md b/packages/documentation/docs/pages/Project.md new file mode 100644 index 0000000000..76dc14c039 --- /dev/null +++ b/packages/documentation/docs/pages/Project.md @@ -0,0 +1,71 @@ +# UI5 Project + +The [UI5 Project](https://github.com/SAP/ui5-project) module provides functionality to build a UI5 project. Also see [Development Overview: Project Dependencies](./Overview#project-dependencies). + +## Types +Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration. + +Also see [UI5 Project: Configuration](./Configuration#general-configuration) + +### application +Projects of type `application` are typically the main or root project. In a projects dependency tree, there should only be one project of type `application`. If multiple are found, those further away from the root are ignored. + +The source directory of an application (typically named `webapp`) is mapped to the virtual root path `/`. + +An applications source directory may or may not contain a `Component.js` file. If it does, it must also contain a `manifest.json` file. If there is a `Component.js` file, an optimized `Component-preload.js` file will be generated during the build. + +### library +UI5 libraries are often referred to as reuse-, custom- or [control libraries](https://github.com/SAP/openui5/blob/-/docs/controllibraries). They are a key component in sharing code across multiple projects in UI5. + +A project of type `library` must have a source directory (typically named `src`). It may also feature a "test" directory. These directories are mapped to the virtual directories `/resources` for the sources and `/test-resources` for the test resources. + +These directories should contain a directory structure representing the namespace of the library (e.g. `src/my/first/library`) to prevent name clashes between the resources of different libraries. + +### theme-library +*Available since [Specification Version](./Configuration#specification-versions) 1.1* + +UI5 theme libraries provide theming resources for the controls of one or multiple libraries. + +A project of type `theme-library` must have a source directory (typically named `src`). It may also feature a "test" directory. These directories are mapped to the virtual directories `/resources` for the sources and `/test-resources` for the test resources. + +The source directory must contain a directory structure representing the namespaces of the libraries it provides theme resources for. For example, a theme library named `my_custom_theme`, providing resources for a library named `my.library` should have these resources in a directory path `my/library/themes/my_custom_theme/`. + +### module +The `module` type is meant for usage with non-UI5 resources like third-party libraries. Their path mapping can be configured freely. During a build, their resources are copied without modifications. + + +## Build Output Style + +The _Output Style_ offers you control over your project's build output folder. Namespaces like `sap.m` or `sap.ui.core` can be streamlined, producing a more concise and flat output. For example, a resource like `/resources/sap/m/RangeSlider.js` will be transformed into `./RangeSlider.js`. And vice versa, applications that are built by default with `Flat` output, can leverage any namespaces they might have. + +In the table below you can find the available combinations of project type & output style. + +| Project Type / Requested Output Style | Resulting Style | +|---|---| +| **application** | | +| `Default` | Root project is written `Flat`-style. ^1^ | +| `Flat` | Same as `Default`. | +| `Namespace` | Root project is written `Namespace`-style (resources are prefixed with the project's namespace). ^1^ | +| **library** | | +| `Default` | Root project is written `Namespace`-style. ^1^ | +| `Flat` | Root project is written `Flat`-style (without its namespace, logging warnings for resources outside of it). ^1^ | +| `Namespace` | Same as `Default`. | +| **theme-library** | | +| `Default` | Root project is written in the style of the sources (multiple namespaces). ^1^ | +| `Flat` | **Unsupported** ^2^ | +| `Namespace` | **Unsupported** ^2^ | +| **module** | | +| `Default` | Root project is written with the [configured paths](https://ui5.github.io/cli/stable/pages/Configuration/#available-path-mappings). ^1^ | +| `Flat` | **Unsupported** ^3^ | +| `Namespace` | **Unsupported** ^3^ | + +^1^ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their `Default` output style. +^2^ Theme libraries in most cases have more than one namespace. +^3^ Modules have explicit path mappings configured and no namespace concept. + + + diff --git a/packages/documentation/docs/pages/SAPUI5.md b/packages/documentation/docs/pages/SAPUI5.md new file mode 100644 index 0000000000..f55a3ef197 --- /dev/null +++ b/packages/documentation/docs/pages/SAPUI5.md @@ -0,0 +1,84 @@ +# Consuming SAPUI5 Libraries + +::: info Info +Make sure you have installed the UI5 CLI in Version 2.0 or later: `npm install --global @ui5/cli` + +The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.** +For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy). + +::: + +## Overview + +SAPUI5 libraries are hosted on the public npm registry at `registry.npmjs.org`. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide. + +::: info Note +For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-and-sapui5-the-next-step/) + +::: + +## Usage +Since Version 2.0 of the UI5 CLI, it will automatically download all required framework dependencies of a project that have been listed in the corresponding `ui5.yaml` file. They will be cached in a `.ui5` directory located in the user's home directory. This happens transparently whenever you execute the `ui5 serve` or `ui5 build` commands. + +All non-framework dependencies, such as reuse libraries or UI5 CLI extensions, still need to be maintained as npm dependencies in the projects `package.json`. At the same time, framework dependencies listed in the `ui5.yaml` should not be listed in the `package.json` as they will be ignored by the UI5 CLI. + +## Configuration + +Your project's `ui5.yaml` provides a configuration section dedicated to framework dependency handling. + +This configuration can be maintained by editing the file, or by using the UI5 CLI: + +::: details Example + Using the [UI5 CLI](./CLI): + ```sh + ui5 use sapui5@latest + ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3 + ui5 add -D sap.ushell + ``` + +::: + +**Example ui5.yaml of an application** +```yaml +specVersion: "4.0 +type: application +metadata: + name: some.project.name +framework: + name: SAPUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.comp + - name: sap.ushell + development: true + - name: themelib_sap_fiori_3 +``` + +**Example ui5.yaml of a library** +```yaml +specVersion: "4.0 +type: library +metadata: + name: some.library +framework: + name: SAPUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: themelib_sap_belize + optional: true + - name: themelib_sap_bluecrystal + optional: true + - name: themelib_sap_fiori_3 + optional: true +``` + +Please make sure that your project defines [Specification Version 2.0](./Configuration#specification-version-20) or higher. + +For details please refer to the [framework configuration documentation](././Configuration#framework-configuratio). + +## Differences Between OpenUI5 and SAPUI5 + +Please refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5) diff --git a/packages/documentation/docs/pages/Server.md b/packages/documentation/docs/pages/Server.md new file mode 100644 index 0000000000..f998d80c9d --- /dev/null +++ b/packages/documentation/docs/pages/Server.md @@ -0,0 +1,83 @@ +# UI5 Server + +The [UI5 Server](https://github.com/SAP/ui5-server) module provides server capabilities for local development of UI5 projects. + + + +## Standard Middleware + +All available standard middleware are listed below in the order of their execution. + +A project can also add custom middleware to the server by using the [Custom Server Middleware Extensibility](./extensibility/CustomServerMiddleware). + +| Middleware | Description | +| ---- | ---- | +| `csp` | See chapter [csp](#csp) | +| `compression` | Standard [Express compression middleware](http://expressjs.com/en/resources/middleware/compression.html) | +| `cors` | Standard [Express cors middleware](http://expressjs.com/en/resources/middleware/cors.html) | +| `discovery` | See chapter [discovery](#discovery) | +| `serveResources` | See chapter [serveResources](#serveresources) | +| `testRunner` | See chapter [testRunner](#testrunner) | +| `serveThemes` | See chapter [serveThemes](#servethemes) | +| `versionInfo` | See chapter [versionInfo](#versioninfo) | +| `nonReadRequests` | See chapter [nonReadRequests](#nonreadrequests) | +| `serveIndex` | See chapter [serveIndex](#serveindex) | + +### csp +The Content Security Policy ([CSP](https://www.w3.org/TR/CSP/)) middleware is active by default. + +The header `content-security-policy` can be set by adding URL parameter `sap-ui-xx-csp-policy` to the request with the policy name as value. + +To set the policy to report-only, append `:report-only` or `:ro` to the policy name. +E.g. `/index.html?sap-ui-xx-csp-policy=sap-target-level-1:report-only` + +#### sendSAPTargetCSP parameter +The default CSP policies can be modified using parameter `sendSAPTargetCSP` (`--sap-csp-policies` when using the CLI). +With `sendSAPTargetCSP` set to `true` the policies `sap-target-level-1` and `sap-target-level-3` policies are activated and send as report-only. + +#### Serve CSP Reports +Serving of CSP reports can be activated with parameter `serveCSPReports` (`--serve-csp-reports` when using the CLI). +With `serveCSPReports` set to `true`, the CSP reports are collected and can be downloaded from the server path `/.ui5/csp/csp-reports.json`. + +### discovery + +This middleware lists project files with URLs under several `/discovery` endpoints. This is exclusively used by the OpenUI5 test suite application. + +### serveResources +This middleware resolves requests using the [ui5-fs](https://github.com/SAP/ui5-fs)-file system abstraction. + +The following file content transformations are executed: + +- Escaping non-ASCII characters in `.properties` translation files based on a project's [configuration](./Configuration#encoding-of-properties-files) +- Enhancing the `manifest.json` with supported locales determined by available `.properties` [translation files](./Builder#generation-of-supported-locales) + +### testRunner +Serves a static version of the UI5 QUnit TestRunner at `/test-resources/sap/ui/qunit/testrunner.html`. + +### serveThemes +Compiles CSS files for themes on-the-fly from the source `*.less` files. + +Changes made to these `*.less` files while the server is running will automatically lead to the re-compilation of the relevant CSS files when requested again. + +### versionInfo +Generates and serves the version info file `/resources/sap-ui-version.json`, which is required for several framework functionalities. + +### nonReadRequests +Answers all non-read requests (POST, PUT, DELETE, etc.) that have not been answered by any other middleware with the 404 "Not Found" status code . This signals the client that these operations are not supported by the server. + +### serveIndex +In case a directory has been requested, this middleware renders an HTML with a list of the directory's content. + +## SSL Certificates +When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 CLI parameter `--h2`, you will be prompted for the automatic generation of a local SSL certificate if necessary. + +Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under `.ui5/server` in your user's home directory. + +::: tip Tip +If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete". + +::: \ No newline at end of file diff --git a/packages/documentation/docs/pages/Troubleshooting.md b/packages/documentation/docs/pages/Troubleshooting.md new file mode 100644 index 0000000000..64a7a9528a --- /dev/null +++ b/packages/documentation/docs/pages/Troubleshooting.md @@ -0,0 +1,92 @@ +# Troubleshooting +## UI5 Server +### Chrome Redirects HTTP URLs to HTTPS (`ERR_SSL_PROTOCOL_ERROR`) +An HTTPS server or proxy that was previously running on a domain (e.g. `localhost`), might have set an HSTS header, enforcing Chrome to always use HTTPS for this domain. See https://www.chromium.org/hsts. This makes it impossible to connect to an HTTP-only server running on the same domain. + +#### Resolution +You need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. `localhost`) and pressing "delete". + +## Issues Not Listed Here +Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. + +## UI5 Project +### `~/.ui5` Taking too Much Disk Space + +There are possibly many versions of UI5 framework dependencies installed on your system, taking a large amount of disk space. + +#### Resolution + +Remove the `.ui5/framework/` directory from your user's home directory: + +```sh +rm -rf ~/.ui5/framework/ +``` + +Any missing framework dependencies will be downloaded again during the next UI5 CLI invocation. + +## Environment Variables +### Changing the Log Level + +In CI environments or in a combination with other tools, the usage of [UI5 CLI's `--log-level`](https://ui5.github.io/cli/stable/pages/CLI/#common-options) command parameter might be inconvenient and even impossible. + +#### Resolution + +Replace UI5 CLI's `--log-level` option with the `UI5_LOG_LVL` environment variable. + +Example: + +`UI5_LOG_LVL=silly ui5 build` + +On Windows: + +`set UI5_LOG_LVL=silly ui5 build` + +Cross Environment via [cross-env](https://www.npmjs.com/package/cross-env): + +`cross-env UI5_LOG_LVL=silly ui5 build` + +UI5 + Karma: + +`cross-env UI5_LOG_LVL=verbose npm run karma` + + +::: warning Warning +The combination of the `UI5_LOG_LVL` environment variable with the `--log-level` CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the `UI5_LOG_LVL` environment variable. + +::: + +### Changing UI5 CLI's Data Directory + +UI5 CLI's data directory is by default at `~/.ui5`. It's the place where the framework artifacts are stored. +In some cases and environments this is not a convenient location and the user needs to provide a better one. + +The path to it can either be provided via environment variable or permanently set in the configuration. + +::: info Info +Paths are resolved relative to the current root project path (i.e. where the package.json is located). + +::: + +#### Environment variable `UI5_DATA_DIR` + +Unix: +```sh +UI5_DATA_DIR=/my/custom/location/.ui5 ui5 build +``` + +Windows: +```sh +set UI5_DATA_DIR="C:\\my\\custom\\location\\.ui5" ui5 build +``` + +#### Configuration `ui5DataDir` + +Configure a custom directory: +```sh +ui5 config set ui5DataDir /my/custom/location/.ui5 +``` + +Unset the configuration to switch back to the default directory: +```sh +ui5 config set ui5DataDir +``` diff --git a/packages/documentation/docs/pages/Workspace.md b/packages/documentation/docs/pages/Workspace.md new file mode 100644 index 0000000000..7620251325 --- /dev/null +++ b/packages/documentation/docs/pages/Workspace.md @@ -0,0 +1,151 @@ +# UI5 Workspaces + +::: info Info +**UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)** + +::: details Example +```yaml +specVersion: workspace/1.0 +metadata: + name: default +dependencyManagement: + resolutions: + - path: ../pages/heavy.library +``` + +::: + +## General Concept + +UI5 Workspaces can be used to create a personalized local development environment for a UI5 project. They allow to use UI5 dependencies from local directories without the need to use the link features of package managers like npm. "UI5 dependencies" generally refers to projects that have a `ui5.yaml`. + +Workspaces are typically configured in a `ui5-workspace.yaml` file, located next to the project's `ui5.yaml`. The file can contain one or many workspace configurations, each separated by [three dashes](https://yaml.org/spec/1.2.2/#22-structures). For example: + +::: details Example +```yaml +specVersion: workspace/1.0 +metadata: + name: default +dependencyManagement: + resolutions: + - path: ../pages/heavy.library +--- +specVersion: workspace/1.0 +metadata: + name: extended +dependencyManagement: + resolutions: + - path: ../pages/heavy.library + - path: ../pages/light.library + - path: ../pages/test.library +``` + +::: + +If a workspace configuration named `default` exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter `--workspace`. + +Workspaces can only be used in the project that is currently being worked on, i.e. the current root project. Workspace configurations of dependencies are ignored. The workspace file, however, does not necessarily have to be located within the project. You can reference any workspace configuration file via the UI5 CLI parameter `--workspace-config`. + +This concept has been discussed in an RFC: [RFC 0006 Local Dependency Resolution](https://github.com/UI5/cli/blob/main/rfcs/0006-local-dependency-resolution) + +## Configuration +A UI5 Workspace configuration must define a specification version (`specVersion`) compatible with its configuration. For more information, see [Workspace Specification Versions](#workspace-specification-versions). + +```yaml +specVersion: "workspace/1.0 +``` + +### Metadata + +::: details Example +```yaml +specVersion: workspace/1.0 +metadata: + name: dolphin +``` + +::: + +#### name + +A workspace must have a `name`. This allows to easily switch between individual workspace configurations. + +If a workspace is named `default`, **it will be used automatically**, unless a different workspace is selected using the `--workspace` CLI parameter. + +The `name` property must satisfy the following conditions. They are identical to [project names](./Configuration#name): + +* Must be at least 3 characters long +* Must be no longer than 80 characters +* Must contain lowercase characters only +* Must contain alphanumeric characters, dash, underscore and period only + - Exception: The `@` and `/` characters are allowed at certain positions as + explained below +* Must start with an alphabetic character or an `@` character +* If it starts with an `@` character, it must contain exactly one + forward slash `/` + - This is aligned with the npm concept for package scopes, for example `@org/lib.name` + +## Dependency Management + +UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project. + +::: details Example +```yaml +specVersion: workspace/1.0 +metadata: + name: dolphin +dependencyManagement: + resolutions: + - path: ../pages/light.library + - path: ../pages/heavy.library + - path: ../pages/test.library +``` + +::: + +### Resolutions + +```yaml +dependencyManagement: + resolutions: + - path: ../pages/test.library +``` + +Resolution paths will be used by UI5 CLI to look for project dependencies. Any dependencies found via these paths will be used over the ones found with the regular dependency resolution mechanism. This includes UI5 CLI extensions. + +Paths must point to a directory containing a `package.json`. UI5 CLI will attempt to find a UI5 project here. However, if the `package.json` contains a [`workspaces`](https://docs.npmjs.com/cli/v8/using-npm/workspaces), or equivalently, `ui5.workspaces` configuration (which overrules the first), UI5 CLI will resolve the workspace first and attempt to find UI5 projects in the configured "npm workspaces". This is commonly used in mono-repos. An example can be found in the [OpenUI5 repository](https://github.com/SAP/openui5/blob/b4267488e5d3546de4cd9577ccac4208482d71e0/package.json#L130-L132). + +Paths must be written in POSIX (i.e. using only forward slashes `/` as path segment separators) and must be **relative to the workspace configuration file**. Absolute paths, or paths relative to the home directory (`~`), are not allowed. This is to ensure that workspace configuration files are easy to share and to reduce the chance of them exposing sensitive information like user names or large directory hierarchies. Symbolic links are followed. + +Note that this configuration only affects the resolution of dependencies which have already been found during the regular dependency resolution process of a project. For example, if a workspace resolution path resolves to a project that would otherwise not be part of the dependency tree of the current root project, it will not be added to the dependency tree. Also, transitive dependencies of resolved projects are not being followed. + +## Workspace Specification Versions +A workspace configuration must define a Specification Version by setting the `specVersion` property. UI5 CLI uses this information to detect whether the currently installed version is compatible with a workspace's configuration. + +```yaml +specVersion: "workspace/1.0 +[...] +``` + +To use new features, a workspace configuration might need to update the `specVersion` property. + +For a given Specification Version "workspace/**MAJOR.MINOR**"" we will increment: + +1. **MAJOR** when there are breaking changes that might require additional actions by the project's maintainer +2. **MINOR** when adding new features that are fully backward-compatible + +All changes are documented below. + +### Compatibility Matrix + +Unless otherwise noted in the table below, UI5 CLI modules are backward-compatible. + +Version | UI5 CLI Release +--- | --- +**`workspace/1.0`** | v3.0.0+ + +### Specification Version `workspace/1.0` + +Initial version. + +Specification Version `workspace/1.0` configurations are compatible with [UI5 CLI](https://github.com/SAP/ui5-cli) v3.0.0 and above. diff --git a/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md b/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md new file mode 100644 index 0000000000..9a50c20267 --- /dev/null +++ b/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md @@ -0,0 +1,256 @@ +# Custom UI5 Server Middleware + +The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal [express](https://expressjs.com/) server of the UI5 Server module. + +The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by `ui5-middleware-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-middleware-). + +Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. + +## Configuration + +In a projects `ui5.yaml` file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored. + +A middleware may be executed before or after any other middleware. This can either be a [standard middleware](../Server#standard-middleware) or another custom middleware. + +### Example: Basic configuration + +```yaml +specVersion: "4.0 +type: application +metadata: + name: my.application +server: + customMiddleware: + - name: myCustomMiddleware + mountPath: /myapp + afterMiddleware: compression + configuration: + debug: true +``` + +In the above example the middleware `compression` is already included as a standard middleware by the UI5 Server. When serving the application `my.application`, the server will call the custom middleware `myCustomMiddleware` after `compression`. + +There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below). + +An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the `app.use` call (see [express API reference](https://expressjs.com/en/4x/api.html#app.use)). + +### Execution order + +Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined *before* that reference. + +## Custom Middleware Extension + +A custom middleware extension consists of a `ui5.yaml` and a [custom middleware implementation](#custom-middleware-implementation). It can be a standalone module or part of an existing UI5 project. + +### Example: ui5.yaml + +```yaml +specVersion: "4.0 +kind: extension +type: server-middleware +metadata: + name: markdownHandler +middleware: + path: lib/middleware/markdownHandler.js +``` + +Custom middleware extensions can be **standalone modules** which are handled as dependencies. + +Alternatively you can implement a custom middleware extension as **part of your UI5 project**. +In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. + +The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup. + +### Example: Custom Middleware Extension defined in UI5 project + +```yaml +# Project configuration for the above example +specVersion: "4.0 +kind: project +type: application +metadata: + name: my.application +server: + customMiddleware: + - name: markdownHandler + beforeMiddleware: serveResources +--- +# Custom middleware extension as part of your project +specVersion: "4.0 +kind: extension +type: server-middleware +metadata: + name: markdownHandler +middleware: + path: lib/middleware/markdownHandler.js +``` + +## Custom Middleware Implementation + +A custom middleware implementation needs to return a function with the following signature: + +#### ESM + + ```js linenums="1 + /** + * Custom UI5 Server middleware API + * + * @param {object} parameters Parameters + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom middleware. + * This parameter is only provided to custom middleware + * extensions defining Specification Version 3.0 and later. + * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil + * Specification version-dependent interface to a + * MiddlewareUtil instance. See the corresponding API reference for details: + * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html + * @param {object} parameters.options Options + * @param {string} parameters.options.configuration + * Custom middleware configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.middlewareName + * Name of the custom middleware. + * This parameter is only provided to custom middleware extensions + * defining Specification Version 3.0 and later + * @param {object} parameters.resources Readers for accessing resources + * @param {module:@ui5/fs.AbstractReader} parameters.resources.all + * Reader to access resources of the root project and its dependencies + * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject + * Reader to access resources of the root project + * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies + * Reader to access resources of the project's dependencies. + * @returns {function} Middleware function to use + */ + export default function({log, middlewareUtil, options, resources}) { + return async function (req, res, next) { + // [...] + } + }; + ``` + +#### CommonJS + + ```js linenums="1 + /** + * Custom UI5 Server middleware API + * + * @param {object} parameters Parameters + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom middleware. + * This parameter is only provided to custom middleware + * extensions defining Specification Version 3.0 and later. + * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil + * Specification version-dependent interface to a + * MiddlewareUtil instance. See the corresponding API reference for details: + * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html + * @param {object} parameters.options Options + * @param {string} parameters.options.configuration + * Custom middleware configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.middlewareName + * Name of the custom middleware. + * This parameter is only provided to custom middleware extensions + * defining Specification Version 3.0 and later + * @param {object} parameters.resources Readers for accessing resources + * @param {module:@ui5/fs.AbstractReader} parameters.resources.all + * Reader to access resources of the root project and its dependencies + * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject + * Reader to access resources of the root project + * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies + * Reader to access resources of the project's dependencies. + * @returns {function} Middleware function to use + */ + module.exports = function({log, middlewareUtil, options, resources}) { + return async function (req, res, next) { + // [...] + } + }; + ``` + +### Example: lib/middleware/markdownHandler.(m)js + +#### ESM + + ```js linenums="1 + import MarkdownIt from "markdown-it"; + + export default async function({log, middlewareUtil, options, resources}) { + const md = new MarkdownIt(); + return function (req, res, next) { + if (!req.path || !req.path.endsWith(".html")) { + // Do not handle non-HTML requests + next(); + return; + } + // Try to read a corresponding markdown file + resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { + if (!resource) { + // No file found, hand over to next middleware + next(); + return; + } + log.info(`Rendering markdown for ${resource.getPath()}`); + const markdown = await resource.getBuffer(); + // Generate HTML from markdown string + const html = md.render(markdown.toString()); + res.type('.html'); + res.end(html); + }).catch((err) => { + next(err); + }); + } + }; + ``` + Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm) + +#### CommonJS + + ```js linenums="1 + module.exports = async function({log, middlewareUtil, options, resources}) { + const MarkdownIt = require("markdown-it"); + const md = new MarkdownIt(); + return function (req, res, next) { + if (!req.path || !req.path.endsWith(".html")) { + // Do not handle non-HTML requests + next(); + return; + } + // Try to read a corresponding markdown file + resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { + if (!resource) { + // No file found, hand over to next middleware + next(); + return; + } + log.info(`Rendering markdown for ${resource.getPath()}`); + const markdown = await resource.getBuffer(); + // Generate HTML from markdown string + const html = md.render(markdown.toString()); + res.type('.html'); + res.end(html); + }).catch((err) => { + next(err); + }); + } + }; + ``` + Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3) + +## Helper Class `MiddlewareUtil` + +Custom middleware defining [Specification Version](../Configuration#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance. + +In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html). + +## Integration with `karma-ui5` + +!!! Warning + The Karma project has been [deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes) as of 2023 + +[`karma-ui5`](https://github.com/SAP/karma-ui5) is a plugin for the popular [Karma test runner](https://karma-runner.github.io/). Based on your [configuration](https://github.com/SAP/karma-ui5#url), it can fetch resources from a dedicated server or start an internal server using parts of UI5 CLI. + +In the latter case, any custom middleware configured in the default `ui5.yaml` of the project will be used automatically. + +However, since Karma uses the [`connect`](https://github.com/senchalabs/connect) framework, as opposed to UI5 CLI's [`express`](https://github.com/expressjs/express), custom middleware might not always work as expected. Compared to `connect`, the `express` framework provides a more versatile API to middleware. + +Therefore, if you plan to use custom middleware in an integrated scenario with `karma-ui5`, you must **restrict the middleware to using the [`connect`](https://github.com/senchalabs/connect) API only** to ensure compatibility. + +Alternatively, you can start a server with the usual `ui5 serve` command and [configure the corresponding URL](https://github.com/SAP/karma-ui5#url) for use by `karma-ui5`. diff --git a/packages/documentation/docs/pages/extensibility/CustomTasks.md b/packages/documentation/docs/pages/extensibility/CustomTasks.md new file mode 100644 index 0000000000..9f81222a19 --- /dev/null +++ b/packages/documentation/docs/pages/extensibility/CustomTasks.md @@ -0,0 +1,480 @@ +# Custom UI5 Builder Tasks + +The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the [standard tasks](../Builder#standard-tasks), custom tasks can be created. + +The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by `ui5-task-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-task-). + +Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. + +## Configuration + +You can configure your build process with additional build task. These custom tasks are defined in the project [configuration](../Configuration). + +To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a [standard task](../Builder#standard-tasks) or another custom task. +Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position. + +In the below example, when building the library `my.library` the custom `babel` task will be executed before the standard task `generateComponentPreload`. +Another custom task called `render-markdown-files` is then executed immediately after the standard task `minify`. + +### Example: Basic configuration + +```yaml +# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. +specVersion: "4.0 +type: library +metadata: + name: my.library +builder: + customTasks: + - name: babel + beforeTask: generateComponentPreload + - name: render-markdown-files + afterTask: minify + configuration: + markdownStyle: + firstH1IsTitle: true +``` + +### Example: Connect multiple custom tasks + +You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined *before* you reference it via `beforeTask` or `afterTask`. + +```yaml +# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'. +specVersion: "4.0 +type: library +metadata: + name: my.library +builder: + customTasks: + - name: my-custom-task-1 + beforeTask: generateComponentPreload + - name: my-custom-task-2 + afterTask: my-custom-task-1 +``` + +## Custom Task Extension + +A custom task extension consists of a `ui5.yaml` and a [task implementation](#task-implementation). It can be a standalone module or part of an existing UI5 project. + +### Example: ui5.yaml + +```yaml +specVersion: "4.0 +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +``` + +Task extensions can be **standalone modules** which are handled as dependencies. + +Alternatively you can implement a task extension as **part of your UI5 project**. +In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. + +The task extension will then be automatically collected and processed during the processing of the project. + +### Example: Custom Task Extension defined in UI5 project + +```yaml +# Project configuration for the above example +specVersion: "4.0 +kind: project +type: library +metadata: + name: my.library +builder: + customTasks: + - name: render-markdown-files + afterTask: minify + configuration: + markdownStyle: + firstH1IsTitle: true +--- +# Task extension as part of your project +specVersion: "4.0 +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +``` + +## Task Implementation + +A custom task implementation needs to return a function with the following signature: + +#### ESM + + ```js linenums="1 + /** + * Custom task API + * + * @param {object} parameters + * + * @param {module:@ui5/fs.AbstractReader} parameters.dependencies + * Reader to access resources of the project's dependencies + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom task. + * This parameter is only available to custom task extensions + * defining Specification Version 3.0 and later. + * @param {object} parameters.options Options + * @param {string} parameters.options.projectName + * Name of the project currently being built + * @param {string} parameters.options.projectNamespace + * Namespace of the project currently being built + * @param {string} parameters.options.configuration + * Custom task configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.taskName + * Name of the custom task. + * This parameter is only provided to custom task extensions + * defining Specification Version 3.0 and later. + * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil + * Specification Version-dependent interface to a TaskUtil instance. + * See the corresponding API reference for details: + * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html + * @param {module:@ui5/fs.DuplexCollection} parameters.workspace + * Reader/Writer to access and modify resources of the + * project currently being built + * @returns {Promise} + * Promise resolving once the task has finished + */ + export default async function({dependencies, log, options, taskUtil, workspace}) { + // [...] + }; + ``` + +#### CommonJS + + ```js linenums="1 + /** + * Custom task API + * + * @param {object} parameters + * + * @param {module:@ui5/fs.AbstractReader} parameters.dependencies + * Reader to access resources of the project's dependencies + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom task. + * This parameter is only available to custom task extensions + * defining Specification Version 3.0 and later. + * @param {object} parameters.options Options + * @param {string} parameters.options.projectName + * Name of the project currently being built + * @param {string} parameters.options.projectNamespace + * Namespace of the project currently being built + * @param {string} parameters.options.configuration + * Custom task configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.taskName + * Name of the custom task. + * This parameter is only provided to custom task extensions + * defining Specification Version 3.0 and later. + * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil + * Specification Version-dependent interface to a TaskUtil instance. + * See the corresponding API reference for details: + * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html + * @param {module:@ui5/fs.DuplexCollection} parameters.workspace + * Reader/Writer to access and modify resources of the + * project currently being built + * @returns {Promise} + * Promise resolving once the task has finished + */ + module.exports = async function({dependencies, log, options, taskUtil, workspace}) { + // [...] + }; + ``` + +### Required Dependencies + +::: info Info +This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0) + +::: + +Custom tasks can export an optional callback function `determineRequiredDependencies` to control which dependency-resources are made available through the `dependencies`-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 CLI might be able to build a project faster. + +Before executing a task, UI5 CLI will ensure that all required dependencies have been built. + +If this callback is not provided, UI5 CLI will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension: + +* **Specification Version 3.0 and later:** If no callback is provided, UI5 CLI assumes that no dependencies are required. In this case, the `dependencies` parameter will be omitted. +* **Specification Versions before 3.0:** If no callback is provided, UI5 CLI assumes that all dependencies are required. + + +*For more details, see also [RFC 0012 UI5 CLI Extension API v3](https://github.com/UI5/cli/blob/rfc-ui5-tooling-extension-api-v3/rfcs/0012-UI5-Tooling-Extension-API-3#3-tasks-requiring-dependencies)* + +#### ESM + + ```js linenums="1 + /** + * Callback function to define the list of required dependencies + * + * @param {object} parameters + * @param {Set} parameters.availableDependencies + * Set containing the names of all direct dependencies of + * the project currently being built. + * @param {function} parameters.getDependencies + * Identical to TaskUtil#getDependencies + * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Creates a list of names of all direct dependencies + * of a given project. + * @param {function} parameters.getProject + * Identical to TaskUtil#getProject + * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Retrieves a Project-instance for a given project name. + * @param {object} parameters.options + * Identical to the options given to the standard task function. + * @returns {Promise} + * Promise resolving with a Set containing all dependencies + * that should be made available to the task. + * UI5 CLI will ensure that those dependencies have been + * built before executing the task. + */ + export async function determineRequiredDependencies({availableDependencies, getDependencies, getProject, options}) { + // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } + + // Reduce list of required dependencies: Do not require any UI5 framework projects + availableDependencies.forEach((depName) => { + if (getProject(depName).isFrameworkProject()) { + availableDependencies.delete(depName) + } + }); + // => Only resources of project "my.lib" will be available to the task + return availableDependencies; + } + ``` + +#### CommonJS + + ```js linenums="1 + /** + * Callback function to define the list of required dependencies + * + * @param {object} parameters + * @param {Set} parameters.availableDependencies + * Set containing the names of all direct dependencies of + * the project currently being built. + * @param {function} parameters.getDependencies + * Identical to TaskUtil#getDependencies + * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Creates a list of names of all direct dependencies + * of a given project. + * @param {function} parameters.getProject + * Identical to TaskUtil#getProject + * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Retrieves a Project-instance for a given project name. + * @param {object} parameters.options + * Identical to the options given to the standard task function. + * @returns {Promise} + * Promise resolving with a Set containing all dependencies + * that should be made available to the task. + * UI5 CLI will ensure that those dependencies have been + * built before executing the task. + */ + module.exports.determineRequiredDependencies = async function({availableDependencies, getDependencies, getProject, options}) { + // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } + + // Reduce list of required dependencies: Do not require any UI5 framework projects + availableDependencies.forEach((depName) => { + if (getProject(depName).isFrameworkProject()) { + availableDependencies.delete(depName) + } + }); + // => Only resources of project "my.lib" will be available to the task + return availableDependencies; + } + ``` + +### Examples + +The following code snippets show examples for custom task implementations. + +### Example: lib/tasks/renderMarkdownFiles.js + +This example is making use of the `resourceFactory` [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) +API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build +result by writing them into the provided `workspace`. + +#### ESM + + ```js linenums="1 + import path from "node:path"; + import renderMarkdown from "./renderMarkdown.js"; + + /* + * Render all .md (Markdown) files in the project to HTML + */ + export default async function({dependencies, log, options, taskUtil, workspace}) { + const {createResource} = taskUtil.resourceFactory; + const textResources = await workspace.byGlob("**/*.md"); + await Promise.all(textResources.map(async (resource) => { + const markdownResourcePath = resource.getPath(); + + log.info(`Rendering markdown file ${markdownResourcePath}...`); + const htmlString = await renderMarkdown(await resource.getString(), options.configuration); + + // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here + const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; + const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); + + const markdownResource = createResource({ + path: newResourcePath, + string: htmlString + }); + await workspace.write(markdownResource); + })); + }; + ``` + +#### CommonJS + + ```js linenums="1 + const path = require("node:path"); + const renderMarkdown = require("./renderMarkdown.js"); + + /* + * Render all .md (Markdown) files in the project to HTML + */ + module.exports = async function({dependencies, log, options, taskUtil, workspace}) { + const {createResource} = taskUtil.resourceFactory; + const textResources = await workspace.byGlob("**/*.md"); + await Promise.all(textResources.map(async (resource) => { + const markdownResourcePath = resource.getPath(); + + log.info(`Rendering markdown file ${markdownResourcePath}...`); + const htmlString = await renderMarkdown(await resource.getString(), options.configuration); + + // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here + const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; + const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); + + const markdownResource = createResource({ + path: newResourcePath, + string: htmlString + }); + await workspace.write(markdownResource); + })); + }; + ``` + +::: warning Warning +Depending on your project setup, UI5 CLI tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used. + +Tasks should ideally use the reader/writer APIs provided by UI5 CLI for working with project resources. + +::: + +### Example: lib/tasks/compileLicenseSummary.js + +This example is making use of multiple [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) +APIs to retrieve additional information about the project currently being built (`taskUtil.getProject()`) and its direct dependencies +(`taskUtil.getDependencies()`). Project configuration files like `package.json` can be accessed directly using `project.getRootReader()`. + +#### ESM + + ```js linenums="1 + import path from "node:path"; + + /* + * Compile a list of all licenses of the project's dependencies + * and write it to "dependency-license-summary.json + */ + export default async function({dependencies, log, options, taskUtil, workspace}) { + const {createResource} = taskUtil.resourceFactory; + const licenses = new Map(); + const projectsVisited = new Set(); + + async function processProject(project) { + return Promise.all(taskUtil.getDependencies().map(async (projectName) => { + if (projectsVisited.has(projectName)) { + return; + } + projectsVisited.add(projectName); + const project = taskUtil.getProject(projectName); + const pkgResource = await project.getRootReader().byPath(../package.json"); + if (pkgResource) { + const pkg = JSON.parse(await pkgResource.getString()) + + // Add project to list of licenses + if (licenses.has(pkg.license)) { + licenses.get(pkg.license).push(project.getName()); + } else { + // License not yet in map. Define it + licenses.set(pkg.license, [project.getName()]); + } + + } else { + log.info(`Could not find package.json file in project ${project.getName()}`); + } + return processProject(project); + })); + } + // Start processing dependencies of the root project + await processProject(taskUtil.getProject()); + + const summaryResource = createResource({ + path: "/dependency-license-summary.json", + string: JSON.stringify(Object.fromEntries(licenses), null, "\t") + }); + await workspace.write(summaryResource); + }; + ``` + +#### CommonJS + + ```js linenums="1 + const path = require("node:path"); + + /* + * Compile a list of all licenses of the project's dependencies + * and write it to "dependency-license-summary.json + */ + module.exports = async function({dependencies, log, options, taskUtil, workspace}) { + const {createResource} = taskUtil.resourceFactory; + const licenses = new Map(); + const projectsVisited = new Set(); + + async function processProject(project) { + return Promise.all(taskUtil.getDependencies().map(async (projectName) => { + if (projectsVisited.has(projectName)) { + return; + } + projectsVisited.add(projectName); + const project = taskUtil.getProject(projectName); + const pkgResource = await project.getRootReader().byPath(../package.json"); + if (pkgResource) { + const pkg = JSON.parse(await pkgResource.getString()) + + // Add project to list of licenses + if (licenses.has(pkg.license)) { + licenses.get(pkg.license).push(project.getName()); + } else { + // License not yet in map. Define it + licenses.set(pkg.license, [project.getName()]); + } + + } else { + log.info(`Could not find package.json file in project ${project.getName()}`); + } + return processProject(project); + })); + } + // Start processing dependencies of the root project + await processProject(taskUtil.getProject()); + + const summaryResource = createResource({ + path: "/dependency-license-summary.json", + string: JSON.stringify(Object.fromEntries(licenses), null, "\t") + }); + await workspace.write(summaryResource); + }; + ``` + +## Helper Class `TaskUtil` + +Custom tasks defining [Specification Version](../Configuration#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance. + +In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). diff --git a/packages/documentation/docs/pages/extensibility/ProjectShims.md b/packages/documentation/docs/pages/extensibility/ProjectShims.md new file mode 100644 index 0000000000..bd3b180bab --- /dev/null +++ b/packages/documentation/docs/pages/extensibility/ProjectShims.md @@ -0,0 +1,183 @@ +### Project Shims +A project shim extension can be used to define or extend a project configuration of a module. The most popular use case is probably to add UI5 project configuration to a third party module that otherwise could not be used with the UI5 CLI. + +Also see [RFC 0002 Project Shims](https://github.com/UI5/cli/blob/main/rfcs/0002-project-shims). + +#### Structure +```yaml +specVersion: "4.0 +kind: extension +type: project-shim +metadata: + name: +shims: + configurations: + : + specVersion: "4.0 + type: + metadata: + name: + : + specVersion: "4.0 + type: + metadata: + name: + dependencies: + : + - + - + - + collections: + : + modules: + : + : + : +``` + +"module name" refers to the name of the module as identified by the used translator. E.g. when using the npm translator, the name declared in the modules `package.json` is used here. In most cases, the module name also becomes the internal ID of the project. + +#### Properties +##### configurations (optional) +Used to add configuration to any module. + +Map of module names. The values represent the configuration that should be applied to the module. + +**Note:** Configuration is applied to the module using [`Object.assign()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign). This means that existing configuration properties will be overwritten. + +##### dependencies (optional) +Used to add dependencies to any module. + +Map of module names. The value is an array of module names that this module depends on. Note that the other modules need to be part of the dependency tree of the root project (not as direct children, just somewhere). + +##### collections (optional) +Used when a dependency contains multiple modules. Also referred to as a [Monorepo](https://en.wikipedia.org/wiki/Monorepo). + +Map of module names. The values are objects with collection-specific configuration: +- `modules`: Map of project IDs and their relative file system paths inside the collection module. The project ID does not have to match the actual module name (as for instance defined in the modules `package.json`). UI5 Project will use it in place of a module name. + +#### Example A: +An application "my-application" defines a npm dependency to [lodash](https://lodash.com/) in its `package.json` and configures it by using a project-shim extension added to its `ui5.yaml`. + +**ui5.yaml** +```yaml +specVersion: "4.0 +type: application +metadata: + name: my.application +--- # Everything below this line could also be put into the ui5.yaml of a standalone extension module +specVersion: "4.0 +kind: extension +type: project-shim +metadata: + name: my.application.thirdparty +shims: + configurations: + lodash: # name as defined in package.json + specVersion: "4.0 + type: module # Use module type + metadata: + name: lodash + resources: + configuration: + paths: + /resources/my/application/thirdparty/: "" # map root directory of lodash module +``` + +#### Example B: +An application "application.a" depends on a library "legacy.library.a" which does not contain a `ui5.yaml` or `package.json` yet (nor do its dependencies). + +##### Structure of the legacy library directories (two repositories) +``` +legacy-libs/ + \_ src/ + \_ library.a/ + \_ src/ + \_ test/ + \_ library.b/ + \_ src/ + \_ test/ +legacy-library-x/ + \_ src/ + \_ test/ +``` + +##### Dependencies between the legacy libraries +``` +legacy.library.a depends on legacy.library.b +legacy.library.a depends on legacy.library.x + +legacy.library.b depends on legacy.library.x +``` + +##### application.a +**Directory structure** +``` +application-a/ + \_ node_modules/ + \_ legacy-libs/ + \_ legacy-library-x/ + \_ webapp/ + \_ ui5.yaml + \_ package.json +``` + +**package.json (extract)** +[napa](https://github.com/shama/napa) can install git repositories that are lacking a `package.json` with npm. Within `ui5-project`, the npm translator already detects dependencies defined in the `napa` section of a `package.json` and tries to resolve them. + +```json +{ + "scripts": { + "install": "napa + }, + "napa": { + "legacy-libs": "", + "legacy-library-x": " + } +} + +``` + +**ui5.yaml** +The shim defined in the application configures the legacy libraries and defines their dependencies. This shim might as well be a standalone module that is added to the applications dependencies. That would be the typical reuse scenario for shims. + +```yaml +specVersion: "4.0 +type: application +metadata: + name: application.a +---- +specVersion: "4.0 +kind: extension +type: project-shim +metadata: + name: legacy-lib-shims +shims: + configurations: + legacy-library-a: + specVersion: "4.0 + type: library + metadata: + name: legacy.library.a + legacy-library-b: + specVersion: "4.0 + type: library + metadata: + name: legacy.library.b + legacy-library-x: + specVersion: "4.0 + type: library + metadata: + name: legacy.library.x + dependencies: + legacy-library-a: + - legacy-library-b + - legacy-library-x + legacy-library-b: + - legacy-library-x + collections: + legacy-libs: + modules: + legacy-library-a: src/library.a + legacy-library-b: src/library.b +``` diff --git a/packages/documentation/docs/pages/index.md b/packages/documentation/docs/pages/index.md new file mode 100644 index 0000000000..4074abce8f --- /dev/null +++ b/packages/documentation/docs/pages/index.md @@ -0,0 +1,144 @@ +![UI5 logo](../images/UI5_logo_wide.png) + +# UI5 CLI + +An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. + +::: warning Project Rename +**UI5 Tooling has been renamed to UI5 CLI 🚨** + +Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)** +::: + +::: tip New Release +**UI5 CLI V4 is here 🎉** + +Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** + +And checkout the **[Migrate to v4](../updates/migrate-v4)** documentation. +::: + + + +## Main Features + +### 💻 UI5 CLI + +*Also see the [UI5 CLI Documentation](./CLI)* + +```sh +# Global +npm install --global @ui5/cli + +# In your project +npm install --save-dev @ui5/cli +``` + +#### ⚙️ Project Setup + +Configure your project for use with UI5 CLI. +*Also see the [Configuration Documentation](./Configuration)* + +``` +❯ ui5 init +Wrote ui5.yaml: + +specVersion: "4.0 +metadata: + name: my-app +type: application +``` + +#### 🚚 Dependency Management + +UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager. + +``` +❯ ui5 use SAPUI5@1.117.0 +Updated configuration written to ui5.yaml +This project is now using SAPUI5 version 1.117.0 + +❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3 +Updated configuration written to ui5.yaml +Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies +``` + +#### 🏄 Development Server + +Start a local development server to work on your project. +*Also see the [Server Documentation](./Server)* + +``` +❯ ui5 serve +Server started +URL: http://localhost:8080 +``` + +#### 🛠 Build for Production + +Build an optimized version of your project. +*Also see the [Builder Documentation](./Builder)* + +``` bash +❯ ui5 build +info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0 +info ProjectBuilder Preparing build for project my-app +info ProjectBuilder Target directory: ./dist +info ProjectBuilder Cleaning target directory... +info Project 1 of 1: ❯ Building application project my-app... +info my-app › Running task escapeNonAsciiCharacters... +info my-app › Running task replaceCopyright... +info my-app › Running task replaceVersion... +info my-app › Running task minify... +info my-app › Running task generateFlexChangesBundle... +info my-app › Running task generateComponentPreload... +info ProjectBuilder Build succeeded in 296 ms +info ProjectBuilder Executing cleanup tasks... +``` + +### 🧪 Node.js API + +Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. +This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project. + +All available APIs are documented in the [UI5 CLI API Reference](https://ui5.github.io/cli/v4/api/index.html). + +#### ESM + + ```js linenums="1 + import {graphFromPackageDependencies} from "@ui5/project/graph"; + + async function buildApp(projectPath, destinationPath) { + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); + } + ``` + +#### CommonJS + + ```js linenums="1 + async function buildApp(projectPath, destinationPath) { + const {graphFromPackageDependencies} = + await import("@ui5/project/graph"); + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); + } + ``` diff --git a/packages/documentation/docs/pages/indexJsdoc.md b/packages/documentation/docs/pages/indexJsdoc.md new file mode 100644 index 0000000000..e05da464ef --- /dev/null +++ b/packages/documentation/docs/pages/indexJsdoc.md @@ -0,0 +1,7 @@ +# UI5 CLI API Reference + +## Support +Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. Or chat with us in the [`#tooling`](https://openui5.slack.com/archives/C0A7QFN6B) channel of the [OpenUI5 Community Slack](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com) + +## License +This project is licensed under the Apache Software License, Version 2.0 except as noted otherwise in the [LICENSE](https://github.com/UI5/cli/blob/main/LICENSE.txt) file. diff --git a/packages/documentation/docs/public/TripPinClassDiagram.jpg b/packages/documentation/docs/public/TripPinClassDiagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44dfb5669c203a175f19df3cd026a1d6dca001a7 GIT binary patch literal 45518 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

S>HQY|?q#lil2pSyF7z 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è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ˬO>6_PT8h${?nqeT;@I7;Ip!VP@b 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 \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/PlantUML.svg b/packages/documentation/docs/public/icons/logo/PlantUML.svg new file mode 100644 index 0000000000..96535d4553 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/PlantUML.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/PostCSS.svg b/packages/documentation/docs/public/icons/logo/PostCSS.svg new file mode 100644 index 0000000000..baf9b1e760 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/PostCSS.svg @@ -0,0 +1 @@ +postcss-logo-symbol diff --git a/packages/documentation/docs/public/icons/logo/Rollup.svg b/packages/documentation/docs/public/icons/logo/Rollup.svg new file mode 100644 index 0000000000..20bb5dfe63 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/Rollup.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/TailwindCSS.svg b/packages/documentation/docs/public/icons/logo/TailwindCSS.svg new file mode 100644 index 0000000000..e0e971530c --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/TailwindCSS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg b/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg new file mode 100644 index 0000000000..3c9fa5d366 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/TypeScript.svg b/packages/documentation/docs/public/icons/logo/TypeScript.svg new file mode 100644 index 0000000000..a46d53d49f --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/TypeScript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/UI5.svg b/packages/documentation/docs/public/icons/logo/UI5.svg new file mode 100644 index 0000000000..c54ff84762 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/UI5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/documentation/docs/public/icons/logo/VitePress.svg b/packages/documentation/docs/public/icons/logo/VitePress.svg new file mode 100644 index 0000000000..ed6438ade1 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/VitePress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/Vitejs.svg b/packages/documentation/docs/public/icons/logo/Vitejs.svg new file mode 100644 index 0000000000..de4aeddc12 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/Vitejs.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/documentation/docs/public/icons/logo/Vuejs.svg b/packages/documentation/docs/public/icons/logo/Vuejs.svg new file mode 100644 index 0000000000..a6c05382d6 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/Vuejs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/Web-Components.svg b/packages/documentation/docs/public/icons/logo/Web-Components.svg new file mode 100644 index 0000000000..a1e3ce54c3 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/Web-Components.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg b/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg new file mode 100644 index 0000000000..8faebaf4da --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano-wm.svg b/packages/documentation/docs/public/icons/logo/cssnano-wm.svg new file mode 100644 index 0000000000..e0a266aa49 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/cssnano-wm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano.svg b/packages/documentation/docs/public/icons/logo/cssnano.svg new file mode 100644 index 0000000000..58bfe27f2d --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/cssnano.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/packages/documentation/docs/public/icons/logo/markdown.svg b/packages/documentation/docs/public/icons/logo/markdown.svg new file mode 100644 index 0000000000..efaefee739 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg b/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg new file mode 100644 index 0000000000..260b75880f --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B.svg b/packages/documentation/docs/public/icons/ui5/B.svg new file mode 100644 index 0000000000..b5c1033309 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg new file mode 100644 index 0000000000..0b66b01e83 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg new file mode 100644 index 0000000000..00be266e41 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg b/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg new file mode 100644 index 0000000000..690ee70443 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg b/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg new file mode 100644 index 0000000000..fd78b9bc78 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O.svg b/packages/documentation/docs/public/icons/ui5/O.svg new file mode 100644 index 0000000000..122eacd4ab --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg new file mode 100644 index 0000000000..633e548432 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg new file mode 100644 index 0000000000..d272c1a348 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg b/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg new file mode 100644 index 0000000000..b0659ccbbb --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg b/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg new file mode 100644 index 0000000000..79304ca259 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/UI5.svg b/packages/documentation/docs/public/icons/ui5/UI5.svg new file mode 100644 index 0000000000..c54ff84762 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/UI5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/documentation/docs/public/learn-more.svg b/packages/documentation/docs/public/learn-more.svg new file mode 100644 index 0000000000..22a412cd6e --- /dev/null +++ b/packages/documentation/docs/public/learn-more.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/documentation/docs/public/tailwind-css-vsc-color-completion.png b/packages/documentation/docs/public/tailwind-css-vsc-color-completion.png new file mode 100644 index 0000000000000000000000000000000000000000..889123407f2c11558d9eb9c58b047ff7bb48ffc1 GIT binary patch literal 13680 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 z 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/stylesheets/extra.css b/packages/documentation/docs/stylesheets/extra.css new file mode 100644 index 0000000000..cbc02d2937 --- /dev/null +++ b/packages/documentation/docs/stylesheets/extra.css @@ -0,0 +1,199 @@ +@font-face { + font-family: "SAP-icons"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/SAP-icons.woff2") format("woff2"), local("SAP-icons"); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 400; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular.woff2") format("woff2"), local("72"); +} +@font-face { + font-family: "72full"; + font-style: normal; + font-weight: 400; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 700; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold.woff2") format("woff2"), local("72-Bold"); +} +@font-face { + font-family: "72full"; + font-style: normal; + font-weight: 700; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 300; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light.woff2") format("woff2"), local("72-Light"); +} +@font-face { + font-family: "72full"; + font-style: normal; + font-weight: 300; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-Bold"; + font-style: normal; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold.woff2") format("woff2"), local("72-Bold"); +} +@font-face { + font-family: "72-Boldfull"; + font-style: normal; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-Light"; + font-style: normal; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light.woff2") format("woff2"), local("72-Light"); +} +@font-face { + font-family: "72-Lightfull"; + font-style: normal; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Mono"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular.woff2") format("woff2"), local("72Mono"); +} +@font-face { + font-family: "72Monofull"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Mono-Bold"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold.woff2") format("woff2"), local("72Mono-Bold"); +} +@font-face { + font-family: "72Mono-Boldfull"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Black"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff2") format("woff2"); +} +@font-face { + font-family: "72Blackfull"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-SemiboldDuplex"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex.woff2") format("woff2"); +} +@font-face { + font-family: "72-SemiboldDuplexfull"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 400; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 700; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 300; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-Bold"; + font-style: normal; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-Light"; + font-style: normal; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Mono"; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Mono-Bold"; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Black"; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-SemiboldDuplex"; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex-full.woff2") format("woff2"); +} + +html, body, h1, h2, h3, h4, h5, h6, p { + font-family: "72-Regular", "72", "72full", Arial, Helvetica, sans-serif; +} + +.sap-icon-initiative::before { + font-family: SAP-icons; + content: "\e161"; + margin-right: 0.5em; +} + +.sap-icon-accept::before { + font-family: SAP-icons; + content: "\e05b"; +} + +.sap-icon-ui5-after::after { + font-family: SAP-icons; + content: "\e21b"; + margin-left: 0.5em; + color: var(--md-primary-fg-color); +} + +.ui5-footer-item { + flex-grow: 0; + color: var(--md-footer-fg-color--lighter); + font-size: .64rem; + margin: auto 0.6rem; + padding: 0.4rem 0; +} + +.md-copyright { + flex-grow: 1; +} diff --git a/packages/documentation/docs/updates/migrate-v1.md b/packages/documentation/docs/updates/migrate-v1.md new file mode 100644 index 0000000000..a35c3af8cc --- /dev/null +++ b/packages/documentation/docs/updates/migrate-v1.md @@ -0,0 +1,64 @@ +# Migrate to v1 + +v1.0.0 is the first stable release of the UI5 CLI. There are only a few notable changes to the 0.x alpha version. + +## Breaking changes + +**ui5-builder: Add transformation of apps index.html in self-contained build ([SAP/ui5-builder#137](https://github.com/SAP/ui5-builder/pull/137))** + +When running a self-contained build on an application project, the +index.html will be transformed by adopting the UI5 bootstrap script tag +to load the custom bundle file instead. + +**ui5-project: normalizer: Rename optional parameter "translator" ([SAP/ui5-project#96](https://github.com/SAP/ui5-project/pull/96))** + +Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName + +**ui5-fs: Remove top-level access to adapters ([SAP/ui5-fs#69](https://github.com/SAP/ui5-fs/pull/69))** + +Adapters "AbstractAdapter", "FileSystem" and "Memory" used to be accessible via the top-level export of index.js +Example: +```js +require("@ui5/project").FileSystem +``` + +This is no longer possible. Adapters are now grouped in the top-level object "adapters" and can be accessed from there +Example: +```js +require("@ui5/project").adapters.FileSystem +``` + +## How to upgrade + +### Global installation + +To upgrade your global installation, just run the installation command again, which will upgrade to the latest version. + +``` +npm install --global @ui5/cli +``` + +**Note:** Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see [Local vs. Global installation](https://github.com/SAP/ui5-cli#local-vs-global-installation)). + +### Local installation + +To upgrade the CLI installation within a project you need to run the following command. + +``` +npm install @ui5/cli@^1 +``` + +### ui5.yaml + +#### `specVersion: "1.0"` + +We have introduced the [specification version `1.0`](../pages/Configuration#specification-version-10). +New features will only be available for projects with specVersion `1.0` or newer. +The specVersion `0.1` will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects. + +```yaml +specVersion: "1.0 +metadata: + name: +type: +``` diff --git a/packages/documentation/docs/updates/migrate-v2.md b/packages/documentation/docs/updates/migrate-v2.md new file mode 100644 index 0000000000..decbc4cce0 --- /dev/null +++ b/packages/documentation/docs/updates/migrate-v2.md @@ -0,0 +1,68 @@ +# Migrate to v2 + +v2.0.0 of the UI5 CLI was released on April 1, 2020. As a major feature, it introduces the easy consumption of SAPUI5 libraries in UI5 projects. + +## Breaking changes +**All UI5 CLI Modules: Require Node.js >= 10** + +Support for older Node.js releases has been dropped. + +**UI5 Builder: Make namespace mandatory for application and library projects ([SAP/ui5-builder#430](https://github.com/SAP/ui5-builder/pull/430))** + +The UI5 CLI must be able to determine an application- or library project's namespace. Otherwise an error is thrown. + +Ideally the namespace should be defined in the `sap.app/id` field of the [`manifest.json`](https://ui5.sap.com/#/topic/be0cf40f61184b358b5faedaec98b2da) + +In case of libraries, additional fallbacks are in place: + +1. The `name` attribute defined in the `.library` file +2. The path of the `library.js` file + +**UI5 Builder: LibraryFormatter: Ignore manifest.json of nested apps ([SAP/ui5-builder#392](https://github.com/SAP/ui5-builder/pull/392))** + +If a library contains both a manifest.json and a .library file, they must be located in the same directory. Otherwise the manifest.json is ignored. In cases where the manifest.json is located at a higher level or in a different directory at the same level as the .library file, an exception is thrown. + +**UI5 Server: serveResources middleware: Expect `*.properties` files in UTF-8 by default ([SAP/ui5-server#303](https://github.com/SAP/ui5-server/pull/303))** + +For projects of types **other** than `application` or `library`, the UI5 Server now expects `*.properties` files to be UTF-8 encoded as opposed to `ISO-8859-1` before. + +_**Note:** This change does not affect most projects as `*.properties` files are typically only located in applications or libraries, for which their project specific [configuration](../pages/Configuration#encoding-of-properties-files) is used._ + +**UI5 FS: Remove deprecated parameter useNamespaces ([SAP/ui5-fs#223](https://github.com/SAP/ui5-fs/pull/223))** + +Remove the deprecated parameter `useNamespaces` from method [`resourceFactory.createCollectionsForTree`](https://ui5.github.io/cli/v2/api/module-@ui5_fs.resourceFactory.html#.createCollectionsForTree). Use the parameter `getVirtualBasePathPrefix` instead. + +## How to upgrade + +### Global installation + +To upgrade your global installation, just run the installation command again, which will upgrade to the latest version. + +``` +npm install --global @ui5/cli +``` + +**Note:** Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see [Local vs. Global installation](https://github.com/SAP/ui5-cli#local-vs-global-installation)). + +### Local installation + +To upgrade the CLI installation within a project, you need to run the following command: + +``` +npm install --save-dev @ui5/cli@^2 +``` + +### ui5.yaml + +#### `specVersion: "2.0"` + +We have introduced the [specification version `2.0`](../pages/Configuration#specification-version-10). +New features will only be available for projects with specVersion `2.0` or newer. +Most projects defining specVersion `0.1` or `1.0` can still be used. + +```yaml +specVersion: "2.0 +metadata: + name: +type: +``` diff --git a/packages/documentation/docs/updates/migrate-v3.md b/packages/documentation/docs/updates/migrate-v3.md new file mode 100644 index 0000000000..70acb97dba --- /dev/null +++ b/packages/documentation/docs/updates/migrate-v3.md @@ -0,0 +1,234 @@ +# Migrate to v3 + +::: warning Superseded +**UI5 CLI 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4).** + +Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 CLI 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)** + +::: + +## Node.js and npm Version Support + +**This release requires Node.js versions v16.18.0, v18.12.0 or higher as well as npm v8 or higher.** +Support for older Node.js and npm releases has been dropped and will cause an error to be shown. + +## Specification Versions Support + +Going forward, **only projects with Specification Versions 2.0 and higher are supported.** + +In case a legacy specification version is detected, **an automatic migration is attempted.** +This means your old projects might still work. Unless they have non-standard configuration in their ui5.yaml. + +## Changes for Projects + +::: info Info +✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** + +::: + +For projects defining the latest **Specification Versions 3.0 and higher**, some changes apply: + +* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration#name) for details + +See also [Configuration: Specification Version 3.0](../pages/Configuration#specification-version-30). + +## Changes for Extensions + +::: info Info +✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** + +::: + +For extensions defining the latest **Specification Versions 3.0 and higher**, some changes and improvements apply: + +* **Breaking Change:** Custom Tasks need to request access to dependency resources + * By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name `determineRequiredDependencies`. In this function it can define the scope of dependency-access. Please refer to the [Custom Task: Required Dependencies](../pages/extensibility/CustomTasks#required-dependencies) documentation for details +* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration#name) for details +* **Features:** Enhanced TaskUtil and MiddlewareUtil API + * For example providing access to a [project's root directory](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#~ProjectInterface), or [dependencies](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#getDependencies) + * See also [Custom Tasks](../pages/extensibility/CustomTasks) and [Custom Server Middleware](../pages/extensibility/CustomServerMiddleware) + +## Changes to Dependency Configuration + +::: info Info +✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 CLI v3. + +Configuration like the following is not needed anymore: + +```diff +{ + [...] +- "ui5": { +- "dependencies": [ +- "my-package +- ] +- } + [...] +} +``` + +`dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104). +If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed. + +Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`. + +::: + +## Changes to Module API + +The `normalizer` and `projectTree` modules have been removed. The `builder` API has been moved from @ui5/builder to @ui5/project. + +The JSON based, internal representation of a project dependency tree has been replaced with a graph. This is the result of a major refactoring of @ui5/project which lead to a series of API changes. + +Also the @ui5/server API has been changed. Instead of a `tree`, it now only accepts a `graph` instance as the first parameter. + +### Migrate Your Code + +The UI5 CLI-related modules such as @ui5/builder, etc. have been transformed to ES Modules ("ESM"). Therefore, they no longer use a CommonJS export and cannot be included via `require`. +If your code is in CommonJS format, it needs to use dynamic imports or be converted to [ES Modules](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c). + + +**Old: @ui5/project v2** + +```js +const {normalizer} = require("@ui5/project"); +const {builder} = require("@ui5/builder"); + +const tree = await normalizer.generateProjectTree({cwd: "."}); + +await builder.build({ + tree, + destPath: "./dist", + buildDependencies: true, +}); +``` + +**New: @ui5/project v3** + +#### ESM + + ```js + import {graphFromPackageDependencies} from "@ui5/project/graph"; + + let graph = await graphFromPackageDependencies({cwd: "."}); + + await graph.build({ + destPath: "./dist", + includedDependencies: ["*"], // Parameter "buildDependencies" has been removed + }); + ``` + +#### CommonJS + + ```js + // Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function + async function buildProject() { + const {graphFromPackageDependencies} = await import("@ui5/project/graph"); + + let graph = await graphFromPackageDependencies({cwd: "."}); + + await graph.build({ + destPath: "./dist", + includedDependencies: ["*"], // Parameter "buildDependencies" has been removed + }); + } + ``` + +## Changes to @ui5/cli + +* The CLI option `--translator` has been removed. For static dependency resolution, use the new option `--dependency-definition` to provide a file with static dependency information. +* The `ui5 build dev` command has been removed. Use `ui5 build --exclude-task=* --include-task=replaceCopyright replaceVersion replaceBuildtime buildThemes` instead. + +## JSDoc Processor Fails When JSDoc Reports an Error + +The `jsdocGenerator` processor and the corresponding `generateJsdoc` task will now throw an error when JSDoc reports an error (exit code != 0). This will also fail the build when running `ui5 build jsdoc`. + +## Always Building Required Dependencies + +If any of a project's build tasks requires access to resources of the project's dependencies, UI5 CLI v3 will now **always build that dependency upfront**. + +This ensures that tasks always access processed resources and never the raw sources of a dependency. Resulting in better reproducibility of build results and resolving common issues. + +Especially for projects of type `library`, where standard tasks like [`buildThemes`](https://github.com/SAP/ui5-project/blob/b40e3f569e0f01c6dd8e72141c7ba43449812d01/lib/build/definitions/library.js#L139) always require dependency access, UI5 CLI will now always build all dependencies. + +In the future, a caching mechanism should help and improve build times with this new behavior. + +::: info Info +The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result. + +Please also refer to the [`ui5 build` documentation](../pages/CLI#ui5-build). + +::: + +## Removal of Standard Tasks and Processors + +The following tasks have been removed: + +* createDebugFiles +* generateManifestBundle +* uglify + +The following processors have been removed: + +* debugFileCreator +* manifestBundler +* resourceCopier +* uglifier + +**Task Migration** + +| UI5 CLI v2 | UI5 CLI v3 | Note | +| --------------------------- | --------------------------- | ------------------------- | +| createDebugFiles
uglify | minify | The minify task is executed earlier, before the bundling process takes place. Any existing `beforeTask` or `afterTask` configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the `generateResourcesJson` task for subscription before or after the last standard task. By default, `generateResourcesJson` is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order. | +| generateVersionInfo | generateVersionInfo | The task is no longer executed by default for application projects. It can be re-enabled by using the `--include-task` parameter. | +| generateManifestBundle | *None* | This task was only needed for the HTML5 repository in Cloud Foundry. Meanwhile, the HTML5 repository implemented its own mechanism, so the task is no longer needed | + +**Updated list of standard tasks:** + +| Task | Type `application` | Type `library` | Type `theme-library` | +| ------------------------- | :----------------: | :------------: | :------------------: | +| escapeNonAsciiCharacters | *enabled* | *enabled* | | +| replaceCopyright | *enabled* | *enabled* | *enabled* | +| replaceVersion | *enabled* | *enabled* | *enabled* | +| replaceBuildtime | | *enabled* | | +| generateJsdoc | | *disabled* ^1^ | | +| executeJsdocSdkTransformation | | *disabled* ^1^ | | +| **ADDED:** minify | *enabled* | *enabled* | | +| generateFlexChangesBundle | *enabled* | *enabled* | | +| **REMOVED:** ~~generateManifestBundle~~ | *~~disabled~~* | *~~disabled~~* | | +| generateLibraryManifest | | *enabled* | | +| generateComponentPreload | *enabled* | *disabled* ^2^ | | +| generateLibraryPreload | | *enabled* | | +| generateStandaloneAppBundle | *disabled* ^3^ | | | +| transformBootstrapHtml | *disabled* ^3^ | | | +| generateBundle | *disabled* ^4^ | *disabled* ^4^ | | +| buildThemes | | *enabled* | *enabled* | +| generateThemeDesignerResources | | *disabled* ^5^ | *disabled* ^5^ | +| **REMOVED:** ~~createDebugFiles~~ | *~~enabled~~* | *~~enabled~~* | | +| **REMOVED:** ~~uglify~~ | *~~enabled~~* | *~~enabled~~* | | +| generateVersionInfo | **disabled** | | | +| generateCachebusterInfo | *disabled* | | | +| generateApiIndex | *disabled* ^1^ | | | +| generateResourcesJson | *disabled* | *disabled* | *disabled* | + +*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](../pages/CLI#ui5-build). See footnotes where given* + +--- + +^1^ Enabled in `jsdoc` build, which disables most of the other tasks +^2^ Enabled for projects defining a [component preload configuration](../pages/Configuration#component-preload-generation) +^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` +^4^ Enabled for projects defining a [bundle configuration](../pages/Configuration#custom-bundling) +^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped + +## Removal of Standard Middleware + +The following middleware has been removed from the [standard middlewares list](../pages/Server#standard-middleware): + +* connectUi5Proxy + +**Middleware Migration** + +| UI5 CLI v2 | UI5 CLI v3 | Note | +| --------------------------- | --------------------------- | ------------------------- | +| connectUi5Proxy | *None* | More sophisticated proxy solutions for ui5-server are now available in the form of [custom middleware extensions from the UI5-community](https://bestofui5.org/#/packages?tokens=proxy:tag). Make sure to refactor any custom middleware that attaches to `beforeMiddleware` or `afterMiddleware` of `connectUi5Proxy` to reference some other middleware. | diff --git a/packages/documentation/docs/updates/migrate-v4.md b/packages/documentation/docs/updates/migrate-v4.md new file mode 100644 index 0000000000..0b3742aa27 --- /dev/null +++ b/packages/documentation/docs/updates/migrate-v4.md @@ -0,0 +1,147 @@ +# Migrate to v4 + +::: tip New Release +**UI5 CLI 4.0 has been released on July 24, 2024 🎉** + +Install the latest version in your projects via: `npm i --save-dev @ui5/cli@latest` +And update your global install via `npm i --global @ui5/cli@latest` + +And find the announcement blog post here: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** + +::: + +## UI5 2.x Compatibility + +*Also see the blog post [SAP Community: Introducing OpenUI5 2.x](https://community.sap.com/t5/open-source-blogs/introducing-openui5-2-x/ba-p/13580633)* + +UI5 CLI 4.0 is required for building UI5 2.x projects. The UI5 2.x framework libraries define Specification Version 4.0 and therefore can't be built using older UI5 CLI versions. + +For applications and libraries running with UI5 2.x, the use of Specification Version 4.0 is not enforced. It is highly recommended, however, since only then UI5 CLI will ensure UI5 2.x compatibility of the generated bundles. + +## Node.js and npm Version Support + +This release requires **Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)** as well as npm v8 or higher. +Support for older Node.js releases has been dropped; their use will cause an error. + +## Specification Versions Support + +As with UI5 CLI 3.x, all projects with Specification Versions 2.0 and higher are supported. + +If a legacy specification version is detected, an automatic migration is attempted. +Old projects might therefore still work, unless they have a non-standard configuration in their ui5.yaml. + +## Changes for Projects + +::: tip No changes for Specification Versions 2.x and 3.x +Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 CLI v4** + +The following does not apply to them. + +::: + +For projects defining the latest **Specification Version 4.0 or higher**, the following changes apply: + +* **Breaking Change:** Bundling of JavaScript modules requiring "top level scope" as a string is terminated. + + In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will **omit affected module from the bundle and log an error message instead.** + + For more details, see [Builder: JavaScript Files Requiring Top Level Scope](../pages/Builder#javascript-files-requiring-top-level-scope). + +* **Breaking Change:** New `async` option for the `require` sections of bundle definitions. + + This option defaults to `true` for Specification Version 4.0 and higher, **which can influence the loading behavior of your project**. Require sections are now expressed using `sap.ui.require` instead of `sap.ui.requireSync`. The latter is not available in UI5 2.x. + + Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles. + + See [Configuration: `bundleDefinition.sections`](../pages/Configuration#properties) for more on the new `async` option. + +* **Breaking Change:** Removal of the `usePredefineCalls` [bundle option](../pages/Configuration#properties). UI5 CLI v4 will _always_ use `sap.ui.predefine` calls in bundles, making this option obsolete. + + **We do not expect any negative impact** on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration. + +You can find a summary of the above at [Configuration: Specification Version 4.0](../pages/Configuration#specification-version-40). + +## Migrate Your Code + +When using the Node.js API of UI5 CLI, or when integrating it into other tools, the following changes might be relevant to you: + +### Changes to @ui5/cli + +Occurrences of `console.log` in the code base are replaced with `process.stderr`. +Аny scripts that capture the output from `console.log` need to be adjusted to rely on `process.stderr`. + +### Changes to @ui5/fs + +Non-public `DuplexCollection#byGlobSource` API has been removed. + +### Changes to @ui5/builder + +- **Bundling**: The `usePredefineCalls` option has been removed. Bundling now enforces the use of `sap.ui.predefine` instead of function wrappers. + +- **Task API**: The `namespace` option has been renamed to `projectNamespace`. For more information, check the documentation for [CustomTasks API](../pages/extensibility/CustomTasks#task-implementation) + +- **New Option**: Added a new `async` option for `builder.bundles.bundleDefinition.section`. + +::: details Example +```yaml +builder: + bundles: + - bundleDefinition: + name: "app.js + sections: + - mode: require + filters: + - some/app/Component.js + resolve: true + sort: true + async: true +``` + +::: + +### Changes to @ui5/project + +- **Default Workspace Name**: The default `workspaceName` is now `"default"` for API usage. + +::: details Example +```js +import {graphFromPackageDependencies} from "@ui5/project/graph"; + +graphFromPackageDependencies({ + /* workspaceName: "default" */ +}); +``` + +::: + +- **Directory Naming**: The `ui5HomeDir` has been renamed to `ui5DataDir` in APIs. + +::: details Example +```js +import Resolver from "@ui5/project/ui5Framework/Openui5Resolver"; + +await Resolver.resolveVersion("1.120.15", { + ui5DataDir: "~/.ui5", + cwd: process.cwd() +}); +``` + +::: + +- **Dependencies**: The `@ui5/builder` is now an optional dependency to the `@ui5/project` + +Consumers of the Node.js API that make use of the `ProjectGraph#build` method need to declare a dependency to `@ui5/builder` in their respective `package.json`. The package manager should ensure that the version fulfills the range specified in the `package.json` of `@ui5/project`. + +## Troubleshooting + +### App Stops Working With UI5 1.71 + +This might be caused by a mismatch of your project's manifest version and your UI5 version. + +UI5 CLI v4 enhances the manifest.json with information about the `supportedLocales` (also see [Builder: Generation of Supported Locales](../pages/Builder#generation-of-supported-locales)). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message `TypeError: invalid input` and a failure to process the manifest file. + +UI5 CLI uses the manifest's `_version` property to decide whether the `supportedLocales` can be generated. For UI5 1.71, only versions up to `1.17.0` are supported. See [UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json)](https://sdk.openui5.org/#/topic/be0cf40f61184b358b5faedaec98b2da) for a mapping per manifest version. + +To resolve this issue, adjust the manifest version according to the UI5 version you are using. + +*This issue was first raised here: [UI5 CLI #988](https://github.com/UI5/cli/issues/988)* diff --git a/packages/documentation/package-lock.json b/packages/documentation/package-lock.json new file mode 100644 index 0000000000..50a789a5ba --- /dev/null +++ b/packages/documentation/package-lock.json @@ -0,0 +1,17 @@ +{ + "name": "@ui5/documentation", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@ui5/documentation", + "version": "0.0.1", + "license": "Apache-2.0", + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + } + } + } +} diff --git a/packages/documentation/package.json b/packages/documentation/package.json new file mode 100644 index 0000000000..b4c09b6861 --- /dev/null +++ b/packages/documentation/package.json @@ -0,0 +1,24 @@ +{ + "name": "@ui5/documentation", + "private": true, + "version": "0.0.1", + "description": "UI5 CLI Documentation", + "author": { + "name": "SAP SE", + "email": "openui5@sap.com", + "url": "https://www.sap.com" + }, + "license": "Apache-2.0", + "keywords": [ + "openui5", + "sapui5", + "ui5", + "documentation", + "vitepress" + ], + "type": "module", + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + } +} \ No newline at end of file From 6660d25e5e981afcf2a9fba08c66fe7e8c17e5f8 Mon Sep 17 00:00:00 2001 From: d3xter666 Date: Thu, 2 Oct 2025 10:30:18 +0300 Subject: [PATCH 2/5] refactor: Move /docs to the newly create package --- docs/images/Module_overview.png | Bin 289207 -> 0 bytes docs/images/UI5_CLI/Task_Minify.svg | 459 --------- docs/images/UI5_logo.png | Bin 36760 -> 0 bytes docs/images/UI5_logo_wide.png | Bin 66942 -> 0 bytes docs/images/favicon.png | Bin 15086 -> 0 bytes docs/images/logo.svg | 6 - docs/index.md | 138 --- docs/pages/Benchmarking.md | 163 ---- docs/pages/Builder.md | 182 ---- docs/pages/CodeAnalysis.md | 177 ---- docs/pages/Configuration.md | 876 ------------------ docs/pages/ESSupport.md | 580 ------------ docs/pages/FAQ.md | 28 - docs/pages/FileSystem.md | 43 - docs/pages/GettingStarted.md | 100 -- docs/pages/OpenUI5.md | 69 -- docs/pages/Overview.md | 127 --- docs/pages/Privacy.md | 5 - docs/pages/Project.md | 67 -- docs/pages/SAPUI5.md | 78 -- docs/pages/Server.md | 77 -- docs/pages/Troubleshooting.md | 88 -- docs/pages/Workspace.md | 143 --- .../extensibility/CustomServerMiddleware.md | 256 ----- docs/pages/extensibility/CustomTasks.md | 476 ---------- docs/pages/extensibility/ProjectShims.md | 183 ---- docs/stylesheets/extra.css | 199 ---- docs/updates/migrate-v1.md | 64 -- docs/updates/migrate-v2.md | 68 -- docs/updates/migrate-v3.md | 224 ----- docs/updates/migrate-v4.md | 137 --- .../documentation/docs}/Guidelines.md | 0 packages/documentation/docs/index.md | 8 +- .../documentation/docs}/indexJsdoc.md | 0 .../documentation/docs/pages/Benchmarking.md | 4 +- packages/documentation/docs/pages/Builder.md | 70 +- packages/documentation/docs/pages/CLI.md | 397 -------- .../documentation/docs/pages/CodeAnalysis.md | 16 +- .../documentation/docs/pages/Configuration.md | 762 +++++++-------- .../documentation/docs/pages/ESSupport.md | 182 ++-- packages/documentation/docs/pages/FAQ.md | 4 +- .../documentation/docs/pages/FileSystem.md | 6 +- .../docs/pages/GettingStarted.md | 19 +- .../documentation/docs/pages/Guidelines.md | 60 -- packages/documentation/docs/pages/OpenUI5.md | 34 +- packages/documentation/docs/pages/Overview.md | 28 +- packages/documentation/docs/pages/Project.md | 14 +- packages/documentation/docs/pages/SAPUI5.md | 42 +- packages/documentation/docs/pages/Server.md | 18 +- .../docs/pages/Troubleshooting.md | 14 +- .../documentation/docs/pages/Workspace.md | 104 +-- .../extensibility/CustomServerMiddleware.md | 28 +- .../docs/pages/extensibility/CustomTasks.md | 74 +- .../docs/pages/extensibility/ProjectShims.md | 28 +- packages/documentation/docs/pages/index.md | 144 --- .../documentation/docs/pages/indexJsdoc.md | 7 - .../docs/public/TripPinClassDiagram.jpg | Bin 45518 -> 0 bytes .../public/UI5-VitePress-fire-and-water.jpg | Bin 167975 -> 0 bytes .../documentation/docs/public/favicon.ico | Bin 15086 -> 0 bytes .../docs/public/icons/logo/Autoprefixer.svg | 1 - .../docs/public/icons/logo/PlantUML.svg | 41 - .../docs/public/icons/logo/PostCSS.svg | 1 - .../docs/public/icons/logo/Rollup.svg | 3 - .../docs/public/icons/logo/TailwindCSS.svg | 4 - .../docs/public/icons/logo/TypeScript-wm.svg | 1 - .../docs/public/icons/logo/TypeScript.svg | 1 - .../docs/public/icons/logo/UI5.svg | 9 - .../docs/public/icons/logo/VitePress.svg | 1 - .../docs/public/icons/logo/Vitejs.svg | 15 - .../docs/public/icons/logo/Vuejs.svg | 1 - .../docs/public/icons/logo/Web-Components.svg | 1 - .../public/icons/logo/cssnano-wm-vertical.svg | 1 - .../docs/public/icons/logo/cssnano-wm.svg | 1 - .../docs/public/icons/logo/cssnano.svg | 8 - .../docs/public/icons/logo/markdown.svg | 1 - .../public/icons/logo/powering-sap-btp.svg | 1 - .../documentation/docs/public/icons/ui5/B.svg | 1 - .../docs/public/icons/ui5/B_OpenUI5_H.svg | 1 - .../docs/public/icons/ui5/B_OpenUI5_V.svg | 1 - .../docs/public/icons/ui5/B_UI5_H.svg | 1 - .../docs/public/icons/ui5/B_UI5_V.svg | 1 - .../documentation/docs/public/icons/ui5/O.svg | 1 - .../docs/public/icons/ui5/O_OpenUI5_H.svg | 1 - .../docs/public/icons/ui5/O_OpenUI5_V.svg | 1 - .../docs/public/icons/ui5/O_UI5_H.svg | 1 - .../docs/public/icons/ui5/O_UI5_V.svg | 1 - .../docs/public/icons/ui5/UI5.svg | 9 - .../documentation/docs/public/learn-more.svg | 9 - .../tailwind-css-vsc-color-completion.png | Bin 13680 -> 0 bytes .../documentation/docs/updates/migrate-v1.md | 6 +- .../documentation/docs/updates/migrate-v2.md | 6 +- .../documentation/docs/updates/migrate-v3.md | 88 +- .../documentation/docs/updates/migrate-v4.md | 96 +- 93 files changed, 769 insertions(+), 6622 deletions(-) delete mode 100644 docs/images/Module_overview.png delete mode 100644 docs/images/UI5_CLI/Task_Minify.svg delete mode 100644 docs/images/UI5_logo.png delete mode 100644 docs/images/UI5_logo_wide.png delete mode 100644 docs/images/favicon.png delete mode 100644 docs/images/logo.svg delete mode 100644 docs/index.md delete mode 100644 docs/pages/Benchmarking.md delete mode 100644 docs/pages/Builder.md delete mode 100644 docs/pages/CodeAnalysis.md delete mode 100644 docs/pages/Configuration.md delete mode 100644 docs/pages/ESSupport.md delete mode 100644 docs/pages/FAQ.md delete mode 100644 docs/pages/FileSystem.md delete mode 100644 docs/pages/GettingStarted.md delete mode 100644 docs/pages/OpenUI5.md delete mode 100644 docs/pages/Overview.md delete mode 100644 docs/pages/Privacy.md delete mode 100644 docs/pages/Project.md delete mode 100644 docs/pages/SAPUI5.md delete mode 100644 docs/pages/Server.md delete mode 100644 docs/pages/Troubleshooting.md delete mode 100644 docs/pages/Workspace.md delete mode 100644 docs/pages/extensibility/CustomServerMiddleware.md delete mode 100644 docs/pages/extensibility/CustomTasks.md delete mode 100644 docs/pages/extensibility/ProjectShims.md delete mode 100644 docs/stylesheets/extra.css delete mode 100644 docs/updates/migrate-v1.md delete mode 100644 docs/updates/migrate-v2.md delete mode 100644 docs/updates/migrate-v3.md delete mode 100644 docs/updates/migrate-v4.md rename {docs => packages/documentation/docs}/Guidelines.md (100%) rename {docs => packages/documentation/docs}/indexJsdoc.md (100%) delete mode 100644 packages/documentation/docs/pages/CLI.md delete mode 100644 packages/documentation/docs/pages/Guidelines.md delete mode 100644 packages/documentation/docs/pages/index.md delete mode 100644 packages/documentation/docs/pages/indexJsdoc.md delete mode 100644 packages/documentation/docs/public/TripPinClassDiagram.jpg delete mode 100644 packages/documentation/docs/public/UI5-VitePress-fire-and-water.jpg delete mode 100644 packages/documentation/docs/public/favicon.ico delete mode 100644 packages/documentation/docs/public/icons/logo/Autoprefixer.svg delete mode 100644 packages/documentation/docs/public/icons/logo/PlantUML.svg delete mode 100644 packages/documentation/docs/public/icons/logo/PostCSS.svg delete mode 100644 packages/documentation/docs/public/icons/logo/Rollup.svg delete mode 100644 packages/documentation/docs/public/icons/logo/TailwindCSS.svg delete mode 100644 packages/documentation/docs/public/icons/logo/TypeScript-wm.svg delete mode 100644 packages/documentation/docs/public/icons/logo/TypeScript.svg delete mode 100644 packages/documentation/docs/public/icons/logo/UI5.svg delete mode 100644 packages/documentation/docs/public/icons/logo/VitePress.svg delete mode 100644 packages/documentation/docs/public/icons/logo/Vitejs.svg delete mode 100644 packages/documentation/docs/public/icons/logo/Vuejs.svg delete mode 100644 packages/documentation/docs/public/icons/logo/Web-Components.svg delete mode 100644 packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg delete mode 100644 packages/documentation/docs/public/icons/logo/cssnano-wm.svg delete mode 100644 packages/documentation/docs/public/icons/logo/cssnano.svg delete mode 100644 packages/documentation/docs/public/icons/logo/markdown.svg delete mode 100644 packages/documentation/docs/public/icons/logo/powering-sap-btp.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/B.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/B_UI5_H.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/B_UI5_V.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/O.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/O_UI5_H.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/O_UI5_V.svg delete mode 100644 packages/documentation/docs/public/icons/ui5/UI5.svg delete mode 100644 packages/documentation/docs/public/learn-more.svg delete mode 100644 packages/documentation/docs/public/tailwind-css-vsc-color-completion.png diff --git a/docs/images/Module_overview.png b/docs/images/Module_overview.png deleted file mode 100644 index aa1a4471b63918a08ebc3c980598fc9b2cc0306a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289207 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

-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�(S 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 Vi=ImFi6ij8hl1h)8TT|i{vRvjizom9 diff --git a/docs/images/UI5_CLI/Task_Minify.svg b/docs/images/UI5_CLI/Task_Minify.svg deleted file mode 100644 index 30f3c19ce4..0000000000 --- a/docs/images/UI5_CLI/Task_Minify.svg +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - - - - - - - - - - - - Task_Minify - - - Layer 1 - - - - - Minify a JS - Resource - - - - - - - - processors/minifier - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Terser - - - - - tasks/minify - - - - - - - Search for Source Map - Reference in Resource - - - - - - - Remove - sourceMappingURL - Reference in Resource - - - - - - - Resolve - Reference - - - - - - - Log Warning - "Not Supported" - - - - - - - Locate Resource - within Project - - - - - - - Decode - base64 - Payload - - - - - - - Clone Source Map - - - - - - - Create Debug - Variant by Cloning - Modified Resource - - - - - - This Indicates the - Presence of an - "Input Source Map" - - - - - - - Execute Minification - (Using Input Source Map If - One Has Been Resolved) - - - - - - - Reference Source - Map in Debug - Resource - - - - - - - - - - - - Contains a Reference - - - - - - - - - - - - - - - - Resource Has Been Modified by Previous Tasks - - - - - - - - - - - - - - - - - - - Relative URL - - - - - - - - - Data-URL ("data:") - - - - - - - - - Absolute URL or - HTTP(S) URL - - - - - - - - - - - - - Not Found - - - - - - - - - - Log Warning - "Not Found" - - - - - - - - - - - - - - - - - - - - - - - - - - Contains No Reference - - - - - - - - - Found - - - - - - - - - - - - - - - - - - - - - - - - - Change "file" - Attribute to Name of - Debug Resource - - - - - - - Create Resource - "<debug resource - name>.map" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Searching For String - "//# sourceMappingURL=" - at the End of the File - - - - - - There Is a High Risk That the - Referenced Source Map Does - Not Reflect the Modification - - - - - - - - - - - - - Resource Is Not Modified - - - - - - - - - - - - - Appending String - "//# sourceMappingURL=<debug resource name>.map" - to the End of the Resource - - - - - - - Write Resources - to Workspace - - - - - - This Is the Only Path - on Which Terser Will - Be Provided With an - Input Source Map - - - - - - - - - - - - - - - - - - - - - - - - Resulting Resources (Example): - • Module.js - • Module.js.map - • Module-dbg.js - • Module-dbg.js.map - - - - - diff --git a/docs/images/UI5_logo.png b/docs/images/UI5_logo.png deleted file mode 100644 index c950982e053382b22f0c3ff9c62d83021dbc0aaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36760 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 diff --git a/docs/images/UI5_logo_wide.png b/docs/images/UI5_logo_wide.png deleted file mode 100644 index 6099c574d19323ed237f1aae1f2bc42cb83f5879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66942 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

nh2oLjMX-|d+|#3zROLsUZvPz`DjvANE% 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 diff --git a/docs/images/favicon.png b/docs/images/favicon.png deleted file mode 100644 index bb9c6dfa32ab07754682c6c51de4cecaf0f4a44b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmcgz33yahmM&W%3kgYBHHx6^w7a7%cH83C?zT&}-Q)Q6Oyk&UJI>b*{k7V-kErY* zn?OWXNg#+2NPw^jghfDT6%+*tNh(WKB~_JFrIM;tQp=hDzi-K_Y=F{zzwdBgUfp-^ zIrpA(&x*};lvS zVt`X^9LsO`E$84|*!h2K!y0D;t_S1*oPao>LyJp1)++I~CO|-gNHeIj9!J6_oP%?5 zPR@PyKY|L(n++HTZ~@v|JTB3oTUshhB=F^X(ztJw_;x%h^_%V%Z}Beyw@dxz`@~oB zpAtCuinLVZO2mIi;*qBIIoh8%H`mBMQ#4?%vjBGh_5#fPjz?M~T(d_ScD^Le+#99p zy}@FCw-5SMaV}1m+PuCBT)FAuTAC)V5Bn&n`#4MLi!T=c?gu1ve1=4uzQe2utj9ID z7S}xMhtPrVdjXySn0p=vAB1amiKlp^RL{FWDrfZ3Azdn`1Ev9H_7%sXOsQR-CAG_R z$jcO0ZidvZ$P`Z@U~OMO2F~UxX+H8g=s1pL5*pX!+P%IH4frk@K-n@6I@;_I-=0^c zX2DRYn#H|N2lSQ7SpeW%ITN_g(CI+$SV$WBwbPLYT9y<4e&Q(t6lN(JJZt(&!`ADh zrF=g43bNAPxHfS}J{=k`p8L-4S^%oGy7o!kn!BZXZeI=NWJuL)9Y8|@9Tpm#i$Oy^ zX#nsna3-F${lvSjzj#SQ5&l+m;5-TkNZ{{(f;`!cW!V!4;&MvofN|t^o}0e!aS2td z6W8*qrRM!~K&Dg^asYDy9q6dEo(Jft!r8cTfj4PTbO7Hqz30?HUEi)JlnylTLQfn!@e$q)2PnRYM_a`A>2tz8b1v>L zRk&L!#$tcp0$$i}1Ju5Eqyw}ZCoM07CeXq2P-g+Ys$GUXUO51A3cNQ0e}H%0K)ma( z$#)m`tt+peG=DoAsF{s84!52G{-#|({jFL{Wg+GpBF-h?7w~VzxKyclCsoP`Zv%fT z9XyK;=TX|>JjzJ}@aKH)RRh8Izx<6?{^yFjfP1g;RPC~UIO{BN%;)`aVJ^Mg0fCs z;VH!47oUgk2I5Z3k}B#C-nYh`OFeGrKiDFQ4&Y)34Zcsu5>2BKXT$fPZvngT8|cO> zrDhInfGNP8pwmz}33NHaaT+d`{ZokuhCFul?|K& zWy!maxDQhLqjEZAYYOh-$;1z!+fJrEVx?nhs<@WjF0qyd1ApR7ABet?G5}l3b73H``(LeV5qA$?#G}oyVSgnx@IPv1rD;Gq@QrKnHQ?_P*6+H1jzw`_ zKaP90cl&+&ee{N+0sQnvit;OzjL%FJchRF({w40pF^xw8(1&-4gZRG({0XFEMvC}% zz0@_nypKV*wS~&Jg4c#YXMkU*Gdk)GD^FQugLoQzW#|oMkARM{x9Mx(o`TO&`|(}M zx7OD*ooa>uhC9VEI~6L#hHWq3ujq16>>QdJTV3Ocg<7c+dUa};-A4IKan!hpx;#; z&w{pX)okFu5_f1K{`wijz$Z_tb)4{1oH?Wc{FeVSiG`Gin0T8Hu=7F(eh<9Qme9^r z34eaQgpWKT!Cn0&uqjD=tCOXE1%R|HPZswQ&@nd!cSDlYE*%aZrBs^={(EcfSGeDQ zqv=0`2CM$Vb0y@luHf#D{9_{5e0YMm<{?fn54e*CoQ3jBbvG^{Huey+pO7Nqn z_}_5Xv>IDT+_n1?53Psci%06b>N{b zX}~*Kg4+p6()y}?(>(!2#U zZ36E3Dc~OilEt_A5%?~TfoES#m^#+lgm}??z#p=0=sx`{?6745hh|vE8?jU~fE4^{ zn$#@--V31X0i>b%@J#DBJv_%D(aE85hW&60UMTyGKg61Aa0a)6hCTq$ zfU~Gyf4{_A{l<5v(1VV^F$sO~XW-vo{HsC7nm*FFd4zaZ4gn44Nd4ODfPY<=bNO~p zfc{Hr*MIbx#w5XixDM(@xhee4u-{Dk*_bR`wMjh7hDqJRbUfAlr#w~+VEvr_i6 z?gNo< z;$leT=fNW3e43>u(2;GYKek50I=&9NtWh_^T;;wn1XDDmxl9X=EG+wlFMtE*-X zL42O64znfr@A?@G$FFAG%^V4zq}91y8rI(~?!{@4y-e6SFTnRQ{UCE_j}N?KaHc)A zR>wYZyniuxh5P~^M$wQ4yB>aH`yJIOexl=l7Umw;-Tcw!Drx%c1;}-_qNB0oj}i-- zcR_cbo$~u=vkS3_2jFYKzR>+9(%~r@iF?XtorgGfieKq8oR8l=wGOsEQzpVy>%|8< z)x9KL{97JD+&&>zY#n~e&$P!Hwmu8Hs874!1UlTSe=X6*D(gJNt;_f!@n^&D3GrL& z$HsFkn@ z`Qaawzq8OldFYfsJsl#bvzrf16nEYb*n_wem;Xc>_l$!4?8CL*Nhh4K{HZ|$d*GW5 z7za45v!IRHxce#CQpo!j4439F#=>v>2Kq>MTN5{eb90R|mcQ;m1MQ6K0o32T&opBO z4_!6Z4>axlALxr)C3N(CWt(^L3FqKkoRf2#aeeFBXYv_qoKpQpTivI?dk*fxT6~hw zXaxV$>o>aE1K?rAuo+AJ81OZK3N4~)95g;5v+x~%Gkm^V@ce`8XGH8tBIIu!!ZzDb zKHF`!B=#jX+u7{LppJ+=iNHT`_HWv3QTDglZ1@Zx+H8LI88(}peNua0!oR^89s4nS z4{N4l&(~+Njp1ZntW(1GUEpQsdkg*sT?U;7-Nrs(OVqxY`&6Run_b^WV_z{)+iPv# zS*JA&a67=P)B2vL3VxuzU@a1Z#5DG)kW8mTf95;>#xWdwT6z^|c50Y|@;Cyp06>Ee zfmt;0F7FWPOxjthwxT_U#xWerZ}{!^s-MDlLjcnO$_R{weehMbi+}G})TaCgay@q< zUwM;w0Nzdaz!!KDbvH9{2Oof)VQvk-JrYf(+zNhoaW$QRw7CD;}KdrXH3wf5NzX0VjALhn;)H zUHCBaYsja;hOL~1oPm+MK|ZiLhq-61c7(lqHR?xLH?lSz`K)tMSM?-(`(v0+HOwjZ znhSODfZs{?3HnsQ<13K=yBuq99jzur<@A`3WKK`dy|Dg5tHogs*;2ov*RC{dyAgKC z4os^Wap-a%@Sf+rmvje@FGrsEBIG|&+wneVM~t31E|oK6E)My+PBjq7Rl8T|^&70) z0I;5>Ha{Kvas~2R+Y|!Y8j1XXchsNc6YM!_GcHs4VpSi&dJM)I^_m8iLqJY}d0WGh=^(meyCm!lE@5cMEHt5CN zDi_Wep&lnxIdJBU8UII31^aU3&X~hz4T7qlVC_K>^53WlvDQejcEz`Iq)`XO`0fa@ z0D8(eWfeKdnaKV2$J)rp>G>5^TcF~V%u8r_M3qy~@n8;{c~aL>?)hNQkNh=i2WnAQ z$2u^EaU~B-m1lNRo=`}!(%xUqsGFhKdP8O9FY53c_(-v!1I&uafp0eFsj}KA*L5Vm&M4Yx*8a{a%IN}aM&a0BOAc{}*+7+IO!J}^= z?*-macLvUad3ifxK(72>s2IDk0CSAqqB~Sx%K@Lcc4_C_O2n}m`I9u{e=?AZ=qJ9l z$Qd*5vlKkN0C|)57~4yN%-tbPhnFKCG6A$+(Jm{xyp|(>TDu}){UFc6za8}<$mKb6 zpvUrm3jaURwvLBA65Riw1b1E_ZKW?rXzvBc>GaleY0RS`kK@cqlDfR>p@TJ@(*k*^ znsrq>4%mybw=iba9oGFP4@mIHd&tcozcdf=(7ekKqbWDG$LwRMe++%`Cu!Px0rD@% zAt4XOTnux0%zt^7A}78u8#TBuncp;iHW&9O_(Q)#nSb$Y_`Ts5b8RJm5#Le7oi2wT zid^KPffBCVWX@rIpscjHHb`*a?~oHk%yWHjI zQYBFGFmfOlO5jt571~?GUn$kIFI9Ia^-0CVED2R8+9-frTiw6>g0`H0$K${OJdk&x zwALib0LOG}QU76S+A%`HrL$o3Y?a`lcM{~b757)w^z*d5J#sJ3#kat3Qzo5p|C;)T zb2IMLxcv`^iz7dTd{NYYyyKFc{*Jh}Nn3TkdLM^P%DpsNO?-DXZ)n} zkFEoi{xyDxwRolJz$@a;MNQU*d!V;X8_F1x*vG=Khdbx7m`8Rlx=zL2?UTs&zcpgM zrvBB}H|-B&VinV^D3FH28>OM>W@&RDFn&6vp0V5djZbOy22+!vOK!j%bTd^;us?Jh zhTs?2Ux`hNkB=5#@!b;fev$ZNH-E)(xB7RDRA0WrU;{c4i_#j`=+Yj?d(HmT z2bvxHjn*p2+*ea@RWWSXeTyQ`=-c++s!qcJTh+V%G1TiGH9k0jhc4|;?g1Nq*X?iP zllGo5pKjMDjy2m5`}`&D!BoUNuR(qmF^aIs7hJnX`&+|6;b8h7?W=eH6bm|~Y5&WJ zMIi^8eJijJ`!+wQ^6SCF)3tjWabUfDFaOJe z1Mh~;{--{<$`}0oRpeklgj~6eHKTa=!TzU#1AENZrT@(}X}6-$j-W0%ZU0;R86soO z62u$cMC{=*A zUx`d<*meVSZ~=AvI%5v>#CcBeyCtYk%~o}%k1xXUfIDja<8~v<&naOqp-!Ak4o6SS{$e$ zwvUI64*Q_|oh;1J2erwpJA=N?y#e(IINz{0>RElW)GdW=)>N&&Z!McF&AYA;|2phD z>yPHb7TfZ_z#9LgjJ#cLxHy^|QTXW^YAIZ54 zwbfr6=co9GlSdm%RlL8oy0eYQS^)pf7sWB}V&uG5b2#}}$pZRp0C^I6Bm{l>rRw=N z8~;y+f9ELZko#eOf{u91PE)a99O&MG{QHZDi!Z{R - - - - \ No newline at end of file diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index b5d4500e27..0000000000 --- a/docs/index.md +++ /dev/null @@ -1,138 +0,0 @@ -![UI5 logo](images/UI5_logo_wide.png) - -# UI5 CLI - -An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. - -!!! abstract "Project Rename" - **UI5 Tooling has been renamed to UI5 CLI 🚨** - - Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)** - -!!! tip "New Release" - **UI5 CLI V4 is here 🎉** - - Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** - - And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation. - -[**Get Started**](./pages/GettingStarted.md){: .md-button .md-button--primary .sap-icon-initiative } - -## Main Features - -### 💻 UI5 CLI - -*Also see the [UI5 CLI Documentation](./pages/CLI.md)* - -```sh -# Global -npm install --global @ui5/cli - -# In your project -npm install --save-dev @ui5/cli -``` - -#### ⚙️ Project Setup - -Configure your project for use with UI5 CLI. -*Also see the [Configuration Documentation](./pages/Configuration.md)* - -``` -❯ ui5 init -Wrote ui5.yaml: - -specVersion: "4.0" -metadata: - name: my-app -type: application -``` - -#### 🚚 Dependency Management - -UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager. - -``` -❯ ui5 use SAPUI5@1.117.0 -Updated configuration written to ui5.yaml -This project is now using SAPUI5 version 1.117.0 - -❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3 -Updated configuration written to ui5.yaml -Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies -``` - -#### 🏄 Development Server - -Start a local development server to work on your project. -*Also see the [Server Documentation](./pages/Server.md)* - -``` -❯ ui5 serve -Server started -URL: http://localhost:8080 -``` - -#### 🛠 Build for Production - -Build an optimized version of your project. -*Also see the [Builder Documentation](./pages/Builder.md)* - -``` bash -❯ ui5 build -info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0 -info ProjectBuilder Preparing build for project my-app -info ProjectBuilder Target directory: ./dist -info ProjectBuilder Cleaning target directory... -info Project 1 of 1: ❯ Building application project my-app... -info my-app › Running task escapeNonAsciiCharacters... -info my-app › Running task replaceCopyright... -info my-app › Running task replaceVersion... -info my-app › Running task minify... -info my-app › Running task generateFlexChangesBundle... -info my-app › Running task generateComponentPreload... -info ProjectBuilder Build succeeded in 296 ms -info ProjectBuilder Executing cleanup tasks... -``` - -### 🧪 Node.js API - -Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. -This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project. - -All available APIs are documented in the [UI5 CLI API Reference](https://ui5.github.io/cli/v4/api/index.html). - -=== "ESM" - - ```js linenums="1" - import {graphFromPackageDependencies} from "@ui5/project/graph"; - - async function buildApp(projectPath, destinationPath) { - const graph = await graphFromPackageDependencies({ - cwd: projectPath - }); - await graph.build({ - destPath: destinationPath, - selfContained: true, - excludedTasks: ["transformBootstrapHtml"], - includedDependencies: ["*"] - }); - } - ``` - -=== "CommonJS" - - ```js linenums="1" - async function buildApp(projectPath, destinationPath) { - const {graphFromPackageDependencies} = - await import("@ui5/project/graph"); - const graph = await graphFromPackageDependencies({ - cwd: projectPath - }); - await graph.build({ - destPath: destinationPath, - selfContained: true, - excludedTasks: ["transformBootstrapHtml"], - includedDependencies: ["*"] - }); - } - ``` diff --git a/docs/pages/Benchmarking.md b/docs/pages/Benchmarking.md deleted file mode 100644 index 321ff98497..0000000000 --- a/docs/pages/Benchmarking.md +++ /dev/null @@ -1,163 +0,0 @@ -# Benchmarking UI5 CLI - -For benchmarking UI5 CLI we typically make use of the open source tool [hyperfine](https://github.com/sharkdp/hyperfine). - -In general we only benchmark calls to the UI5 CLI. However, we might add scripted benchmarks for some components in the future. - -The following is a walk-through on how to evaluate the performance impact of an imaginary change in the UI5 Builder project. - -## Setup - -1. Install [hyperfine](https://github.com/sharkdp/hyperfine#installation) -1. Prepare the UI5 CLI projects you want to measure *(optional if your development environment already reflects this)*: - 1. Start in an empty directory - ```sh - mkdir ui5-cli-benchmark && cd ui5-cli-benchmark/ - ``` - 1. Clone [UI5 CLI](https://github.com/SAP/ui5-cli) - ```sh - git clone git@github.com:SAP/ui5-cli.git - ``` - 1. Clone [UI5 Builder](https://github.com/SAP/ui5-builder) (or your fork) - ```sh - git clone git@github.com:SAP/ui5-builder.git - ``` - Make sure you check out the `main` branch, since we'll perform the baseline test first - 1. Install npm dependencies in both directories - ```sh - (cd ui5-cli && npm install) - (cd ui5-builder && npm install) - ``` - 1. Create global npm links for both projects - ```sh - (cd ui5-cli && npm link) - (cd ui5-builder && npm link) - ``` - 1. Link UI5 Builder into UI5 CLI - ```sh - (cd ui5-cli && npm link @ui5/builder) - ``` - 1. Verify your setup - ```sh - ui5 --version - ``` - This should output the version and location of the UI5 CLI you just cloned. - - For example: - ``` - 3.0.0 (from /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs) - ``` - -1. Prepare your test project (we choose the [openui5-sample-app](https://github.com/SAP/openui5-sample-app)) - 1. Clone the project - ```sh - git clone git@github.com:SAP/openui5-sample-app.git - ``` - 1. Navigate into the project - ```sh - cd openui5-sample-app - ``` - 1. Install any required npm dependencies - ```sh - npm install - ``` - Note: We won't link UI5 CLI into this project. Instead, we'll call it directly. - 1. Verify that the previously installed UI5 CLI can be called with the following command: - ```sh - UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version - ``` - On Windows: - ```sh - set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version - ``` - *(Replace the path to ui5.cjs with the one shown in the previous `ui5 --version` output)* - -## Benchmarking - -1. Depending on how reliable you'd like the measurements to be, consider preparing your system: - 1. Connect your computer to a power supply - 1. Make sure no updates or anti-virus scans are taking place - 1. Close all applications. This includes your IDE, since it might start indexing any new files created during the build, thus impacting I/O - 1. Don't interact with your system wile the benchmarking is running - -1. Perform the baseline measurement - 1. In the project, start your first benchmark - ```sh - hyperfine --warmup 1 \ - 'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ - --export-markdown ./baseline.md - ``` - On Windows: - ```sh - hyperfine --warmup 1 \ - 'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ - --export-markdown ./baseline.md - ``` - 1. Your baseline benchmark is now stored in `baseline.md` and should look similar to this: - - | Command | Mean [s] | Min [s] | Max [s] | Relative | - |:---|---:|---:|---:|---:| - | `UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build` | 1.439 ± 0.036 | 1.400 | 1.507 | 1.00 | - -1. Prepare your change - 1. Switch to the branch that contains your change - ```sh - (cd ../ui5-builder && git checkout my-change) - ``` - 1. If your change requires different npm dependencies, reinstall them - ```sh - (cd ../ui5-builder && npm install) - ``` - 1. The link from UI5 CLI is still in place. However, if you have changes in **multiple** UI5 CLI modules, you might need to `npm link` those again - -1. Perform the change measurement - 1. In the project, start your second benchmark - ```sh - hyperfine --warmup 1 \ - 'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ - --export-markdown ./my_change.md - ``` - On Windows: - ```sh - hyperfine --warmup 1 \ - 'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ - --export-markdown ./my_change.md - ``` - 1. Your change's benchmark is now stored in `my_change.md` - -## Compile Results - -1. Merge both measurements into one markdown - 1. In this setup, Hyperfine can't correctly calculate the relative difference between results. The respective column always reads "1". Either remove the "Relative" column or calculate the relative difference yourself: - * Use this formula to calculate the percentage increase based on the *Mean* result: - `(newMean - baselineMean) / baselineMean * 100` - ^^JavaScript function:^^ - `#!js function calcDiff(baseVal, newVal) {return (newVal - baseVal) / baseVal * 100;}` - - * **Example for a performance improvement:** - Baseline of 10 seconds decreased to 7 seconds: - `(7-10)/10*100 = -30` => **-30%** change - - * **Example for a performance deterioration:** - Baseline of 10 seconds increased to 12 seconds: - `(12-10)/10*100 = 20` => **+20%** change - - 1. Change the unit in the Mean/Min/Max column headers to seconds or milliseconds according to your results. - 1. Change the command column to only contain the relevant `ui5 build` command, including any parameters. E.g. `ui5 build --all` - 1. You should end up with a markdown like this: - ```md - ui5-builder Ref | Command | Mean [s] | Min [s] | Max [s] | Relative - |:---|:---|---:|---:|---:|---:| - | main ([`1234567`](https://github.com/SAP/ui5-builder/commit/)) | `ui5 build` | 1.439 ± 0.036 | 1.400 | 1.507 | Baseline | - | feature-duck ([`9101112`](https://github.com/SAP/ui5-builder/commit/)) | `ui5 build` | 1.584 ± 0.074 | 1.477 | 1.680 | **+10%** | - ``` - Rendering like this: - - | ui5-builder Ref | Command | Mean [s] | Min [s] | Max [s] | Relative | - |:---|:---|---:|---:|---:|---:| - | main ([`1234567`](https://github.com/SAP/ui5-builder/commit/)) | `ui5 build` | 1.439 ± 0.036 | 1.400 | 1.507 | Baseline | - | feature-duck ([`9101112`](https://github.com/SAP/ui5-builder/commit/)) | `ui5 build` | 1.584 ± 0.074 | 1.477 | 1.680 | **+10%** | - -1. You can now share these results on GitHub or wherever you might need them. - -**Happy benchmarking! 🏎** diff --git a/docs/pages/Builder.md b/docs/pages/Builder.md deleted file mode 100644 index b007bdac38..0000000000 --- a/docs/pages/Builder.md +++ /dev/null @@ -1,182 +0,0 @@ -# UI5 Builder - -The [UI5 Builder](https://github.com/SAP/ui5-builder) module takes care of building your project. - -Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks". - -For every type there is a set of default tasks. You can disable single tasks using the `--exclude-task` [CLI parameter](./CLI.md#ui5-build), and you can include tasks using the `--include-task` parameter. - -[**API Reference**](https://ui5.github.io/cli/v4/api/index.html){: .md-button .sap-icon-initiative } - -## Tasks -Tasks are specific build steps to be executed during build phase. - -They are responsible for collecting resources which can be modified by a processor. A task configures one or more processors and supplies them with the collected resources. After the respective processor processed the resources, the task is able to continue with its workflow. - -A project can add custom tasks to the build by using the [Custom Tasks Extensibility](./extensibility/CustomTasks.md). - -### Standard Tasks - -All available standard tasks are documented [in the API reference](https://ui5.github.io/cli/v4/api/index.html). Search for `@ui5/builder/tasks/` to filter the API reference for all available tasks. The list below offers the actual order of their execution: - -| Task | Type `application` | Type `library` | Type `theme-library` | -| ------------------------------ | :----------------: | :------------: | :------------------: | -| escapeNonAsciiCharacters | *enabled* | *enabled* | | -| replaceCopyright | *enabled* | *enabled* | *enabled* | -| replaceVersion | *enabled* | *enabled* | *enabled* | -| replaceBuildtime | | *enabled* | | -| generateJsdoc | | *disabled* ^1^ | | -| executeJsdocSdkTransformation | | *disabled* ^1^ | | -| minify | *enabled* | *enabled* | | -| generateFlexChangesBundle | *enabled* | *enabled* | | -| generateLibraryManifest | | *enabled* | | -| enhanceManifest | *enabled* | *enabled* | | -| generateComponentPreload | *enabled* | *disabled* ^2^ | | -| generateLibraryPreload | | *enabled* | | -| generateStandaloneAppBundle | *disabled* ^3^ | | | -| transformBootstrapHtml | *disabled* ^3^ | | | -| generateBundle | *disabled* ^4^ | *disabled* ^4^ | | -| buildThemes | | *enabled* | *enabled* | -| generateThemeDesignerResources | | *disabled* ^5^ | *disabled* ^5^ | -| generateVersionInfo | *disabled* ^1^ | | | -| generateCachebusterInfo | *disabled* | | | -| generateApiIndex | *disabled* ^1^ | | | -| generateResourcesJson | *disabled* | *disabled* | *disabled* | - -*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](./CLI.md#ui5-build). See footnotes where given* - ---- - -^1^ Enabled in `jsdoc` build, which disables most of the other tasks -^2^ Enabled for projects defining a [component preload configuration](./Configuration.md#component-preload-generation) -^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -^4^ Enabled for projects defining a [bundle configuration](./Configuration.md#custom-bundling) -^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped - -### minify - -The `minify` task compresses all JavaScript resources of a project while preserving the original sources as so-called **debug variants**. For example when compressing a resource named `Module.js`, its content will be [minified](https://developer.mozilla.org/en-US/docs/Glossary/Minification) and a new resource `Module-dbg.js` is created and placed next to it. - -The UI5 runtime can be instructed to load those debug variants instead of compressed resources and bundles. This can ease debugging in some cases, since the original sources are then used directly in the browser. For details, refer to the [UI5 framework documentation on debugging](https://ui5.sap.com/#/topic/c9b0f8cca852443f9b8d3bf8ba5626ab%23loioc9b0f8cca852443f9b8d3bf8ba5626ab). - -For each resource it compresses, the `minify` task will also create a [**source map**](https://firefox-source-docs.mozilla.org/devtools-user/debugger/how_to/use_a_source_map/index.html) resource. Browsers can use this to map the content of a compressed JavaScript resource back to the original source file (now contained in the debug variant). All this happens automatically once you open the development tools in the browser and start debugging a project. While the browser still executes the code of the compressed resources, it will also show the debug variants and use the source maps to connect the two. This results in an improved debugging experience, which is almost identical to loading the debug variants directly as described before, only much faster. - -Related to this, the bundling tasks will also incorporate the generated source maps to map the content of the bundles to the individual debug variants of the bundled modules. - -#### Input Source Maps - -!!! info - Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0). - -For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code. - -UI5 CLI's `minify` task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze. - -!!! warning - If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result. - - It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools. - - Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`. - -Expand the block below to view a diagram illustrating the minification process and source map handling. - -??? info "Minification Activity Diagram" - ![minify Task Activity](../images/UI5_CLI/Task_Minify.svg){ loading=lazy } - - -### Generation of Supported Locales - -The `enhanceManifest` task fills the `supportedLocales` property in the `manifest.json` of a UI5 library/application automatically with the available locales determined by the existence of the respective `.properties` translation files. To disable the automatic generation of the `supportedLocales`, set `supportedLocales` to any desired value. For further resource bundle configuration options, see [Supported Locales and Fallback Chain](https://ui5.sap.com/#/topic/ec753bc539d748f689e3ac814e129563). - -#### Requirements - -This feature only becomes active under the following conditions: -- The `_version` property in the `manifest.json` is set to `1.21.0` or higher -- The specified resource bundle is located inside the project and within the namespace defined in the `manifest.json` - -#### Scenario: Application - -```txt -- webapp/i18n/ - - i18n.properties - - i18n_en.properties - - i18n_en_US.properties - - i18n_de.properties - - i18n_de_DE.properties -``` - -In the `manifest.json` the `supportedLocales` property will be enhanced as follows: - -**Source** -```json -"models": { - "i18n": { - "type": "sap.ui.model.resource.ResourceModel", - "settings": { - "bundleName": "my.app.i18n.i18n" - } - } -} -``` - -**Build Result** -```json -"models": { - "i18n": { - "type": "sap.ui.model.resource.ResourceModel", - "settings": { - "bundleName": "my.app.i18n.i18n", - "supportedLocales": [ - "", - "de", - "de_DE", - "en", - "en_US" - ] - } - } -} -``` - -## Processors -Processors work with provided resources. They contain the actual build step logic to apply specific modifications to supplied resources, or to make use of the resources' content to create new resources out of that. - -Processors can be implemented generically. The string replacer is an example for that. -Since string replacement is a common build step, it can be useful in different contexts, e.g. code, version, date, and copyright replacement. A concrete replacement operation could be achieved by passing a custom configuration to the processor. This way, multiple tasks can make use of the same processor to achieve their build step. - -To get a list of all available processors, please visit [the API reference](https://ui5.github.io/cli/v4/api/index.html) and search for `@ui5/builder/processors/`. - -## Legacy Bundle Tooling (lbt) -JavaScript port of the "legacy" Maven/Java based bundle tooling. - - -### JavaScript Files Requiring Top Level Scope -UI5 CLI packages JavaScript files that require "top level scope" as a string, provided your project uses a Specification Version lower than `4.0`. In this case, the code is evaluated using [`eval`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) at runtime. - -This ensures that the script works as expected, e.g. with regards to implicitly used globals. However, this `eval` runtime feature will be discontinued with UI5 2.x because of [security best practices](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) and to comply with stricter CSP settings (i.e. [unsafe-eval](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#unsafe_eval_expressions)). - -If your project defines [Specification Version 4.0](./Configuration.md#specification-version-40) or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI: -> Module myFancyModule requires top level scope and can only be embedded as a string (requires 'eval'), which is not supported with specVersion 4.0 and higher. - -If you see this error message, please adjust your code by applying one of the following options: - -**Option 1**: Use [ui5-tooling-modules](https://www.npmjs.com/package/ui5-tooling-modules) to bundle third-party `npm` packages. It converts files to `sap.ui.define` modules automatically. - -**Option 2**: Wrap the respective files manually in `sap.ui.define` modules as shown below: - - -!!! example - **Before**: - ```js - const myFancyModule = {}; - ``` - - **After**: - ```js - sap.ui.define([], () => { - "use strict"; - const myFancyModule = {}; - return myFancyModule; - }); - ``` diff --git a/docs/pages/CodeAnalysis.md b/docs/pages/CodeAnalysis.md deleted file mode 100644 index 9f7518a6c2..0000000000 --- a/docs/pages/CodeAnalysis.md +++ /dev/null @@ -1,177 +0,0 @@ -# Code Analysis - -During the build process, UI5 CLI executes a static code analysis of your project. In the following sections the term "simple literal" is used for the following language features: - -- string literals -- numeric literals -- Boolean literals -- `null` / `undefined` -- template literals without any expressions -- arrays of the previous (spread operators are ignored) -- object literals with "simple literals" used as keys and values (again, spread operators are ignored) - -## Dependency Analysis - -UI5 CLI extracts dependency information from a project's code as outlined in the following sections. -The APIs described there require the usage of "simple literals" when declaring dependencies. - -### JSModule Analyzer - -The following APIs are analyzed by the JSModule Analyzer: - -- sap.ui.define -- sap.ui.require -- jQuery.sap.declare (deprecated) -- jQuery.sap.require (deprecated) -- sap.ui.requireSync (deprecated) -- sap.ui.preload (restricted) -- sap.ui.require.preload (restricted) - -The [JSModule Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/JSModuleAnalyzer.js) uses the ["Abstract Syntax Tree"](https://en.wikipedia.org/wiki/Abstract_syntax_tree) (AST) of a JavaScript file to decide whether a code block is executed *conditionally* or *unconditionally*. - -The analyzer uses a set of rules to decide whether one of the above APIs is called whenever the module is executed or whether the API is only called under certain conditions. - -For example, top-level code is always executed. Flow-control statements in JavaScript imply that certain blocks of code are only executed under certain conditions (for example, `if` blocks, `else` blocks, ...). Besides these inherent JavaScript rules, further common patterns are known to the analyzer, e.g. immediately invoked function expressions or the factory function of AMD modules. - -Any dependencies found that - according to these rules - are always executed, are collected as eager (or standard) dependencies. Dependencies that are found on a code path that depends on certain conditions are collected as conditional dependencies. - -The bundling implemented by UI5 CLI can either follow only eager dependencies (`resolve`: `true`) or additionally conditional dependencies (`resolveConditional`). For more information, see [Custom Bundling](https://ui5.github.io/cli/v4/pages/Configuration/#custom-bundling). - -When a dependency in one of the mentioned APIs is not a "simple literal" but an expression, the corresponding module is marked as "having dynamic dependencies". This marker is currently not further evaluated by UI5 CLI. - -### Component Analyzer - -The [Component Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/ComponentAnalyzer.js) analyzes JavaScript files named `Component.js` to collect dependency information by searching for a `manifest.json` located in the same folder as the `Component.js`. If one is found, the `sap.ui5` section is evaluated in the following way: - -- Any library dependency is added as a dependency to the `library.js` module of that library. If the library dependency is modeled as 'lazy', the - module dependency will be added as 'conditional'. -- Any component dependency is added as a dependency to a file named `Component.js`. If the dependency is modeled as 'lazy', the module dependency will be added as 'conditional'. -- For each UI5 model for which a type is configured, a module dependency to that type is added. -- For each route that contains a view name, a module dependency to that view is added. - -### Smart Template Analyzer - -The [Smart Template Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/SmartTemplateAnalyzer.js) analyzes a Smart Template app and its underlying template components to collect dependency information. It searches for a `manifest.json` located in the same folder as the `Component.js`. If it is found and if it is valid JSON, an `sap.ui.generic.app` section is searched and evaluated in the following way: - -- For each page configuration, the configured component is added as a dependency to the template app module. -- If the page configuration contains a `templateName`, a dependency to that template view is added to the app. -- Otherwise, the class definition of the component is analyzed to find a default template view name. If found, a dependency to that view is added to the app module. - -The template component is analyzed in the following way: - -- precondition: the template component class is defined in an AMD-style module, using define or sap.ui.define -- precondition: the module `sap/suite/ui/generic/template/lib/TemplateAssembler` is imported -- precondition: a call to `TemplateAssembler.getTemplateComponent` is used to define the component class -- precondition: that call is used in a top-level return statement of the factory function -- precondition: necessary parameters to that call are given as an object literal (no further coding) -- precondition: the settings define a managed property `metadata.properties.templateName` with a defaultValue of type string -The default value of the property represents the template view of the template component. -The manifest of the template app could in theory specify an alternative template in -`component.settings.templateName`. - -### XML Template Analyzer - -The [XML Template Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/XMLTemplateAnalyzer.js) tackles `XMLView` and `XMLFragment`. It parses the XML, collects controls, and adds them as dependency to the ModuleInfo object. -Additionally, some special dependencies are handled: - -- controller of the view -- resource bundle (note: as locale-dependent dependencies can't be modelled yet in the ModuleInfo, only a dependency to the development version (aka raw language) of the bundle will be added) -- component referenced via the ComponentContainer control -- embedded fragments or views - -In an XMLView/XMLFragment, usually three categories of element nodes exist: Controls, aggregations, and non-UI5 nodes (e.g. XHTML or SVG). The third category usually can be identified by its namespace. To distinguish between the first two categories, the analyzer checks whether a resource exists in the project or its dependencies whose name matches the qualified node name. -For example, if the qualified node name is `sap.m.Text`, the analyzer checks whether `sap/m/Text.js` exists. If so, UI5 CLI detects this node as a control, otherwise as an aggregation. - -### XML Composite Analyzer - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless, UI5 CLI will attempt to analyze the declaration of any such controls in a project. - -The [XML Composite Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/XMLCompositeAnalyzer.js) searches for the name of the configured fragment containing the **XMLComposite** control. - -=== "Name of the XMLComposite is equal to fragment name" - - ```javascript hl_lines="4" - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", {} - }); - ``` - -=== "Dedicated fragment name" - - ```javascript hl_lines="5" - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } - }); - ``` - -## Library Initialization - -The [library.js Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/analyzeLibraryJS.js) checks every `library.js` file in the namespace of a library for occurences of a `sap/ui/core/Core#initLibrary` call. If found, the following information will be placed in the generated manifest.json: - -- noLibraryCSS: false when the noLibraryCSS property had been set in the initLibrary info object -- types: string array with the names of the types contained in the library -- controls: string array with the names of the controls defined in the library -- elements: string array with the names of the elements defined in the library -- interfaces: string array with the names of the interfaces defined in the library - -`sap/ui/core/Core#initLibrary` requires the usage of "simple literals" for the parameters passed to this function call. - -Note: Currently only the usage via the global `sap.ui.getCore().initLibrary` is supported by this analyzer. Requiring `sap/ui/core/Core` and then calling `Core.initLibrary` is not recognized by this analyzer. - -## JSDoc - -The UI5 CLI offers a JSDoc build, which is enhanced by UI5-specific JSDoc features. - -An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our [Developer's Guide](https://github.com/SAP/openui5/blob/-/docs/developing.md#building-the-openui5-sdk-demo-kit). - -Currently, the resources needed for a UI5 SDK build are stored in [openui5](https://github.com/SAP/openui5/tree/-/lib/jsdoc) and in [ui5-builder](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc). This double maintenance is needed because these files are not part of the `sap.ui.core` library artefact, so building JSDoc for any library has no access to the needed resources. It's therefore necessary to have these resources also available in the *ui5-builder*. This might change in the future. - -The following artefacts contribute to the JSDoc build: - -- [jsdocGenerator.js](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/jsdocGenerator.js): - Executes the actual JSDoc build. UI5 CLI wrapper for `plugin.cjs`. -- [sdkTransformer.js](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/sdkTransformer.js): - UI5 CLI wrapper for `transformApiJson.cjs`. -- [apiIndexGenerator.js](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/apiIndexGenerator.js): - UI5 CLI wrapper for `createIndexFiles.cjs`. -- [createIndexFiles.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/createIndexFiles.cjs): - Creates API index resources from all `api.json` resources and by interpreting the `sap-ui-version.json` available in the given test resources directory. The resulting index resources (e.g. `api-index.json`, `api-index-deprecated.json`, - `api-index-experimental.json` and `api-index-since.json`) are only to be used in a UI5 SDK. -- [transformApiJson.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/transformApiJson.cjs): - Preprocesses `api.json` files for use in UI5 SDKs. Transforms the `api.json` as created by the JSDoc build into a pre-processed `api.json` file suitable for the SDK. The pre-processing includes formatting of type references, rewriting of links, and other time-consuming calculations. -- [plugin.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/ui5/plugin.cjs): - UI5 plugin for JSDoc3. The plugin adds the following UI5-specific tag definitions to JSDoc3: - - - disclaimer - - experimental - - final - - interface - - implements - - ui5-restricted, and more - - It furthermore listens to the following JSDoc3 events to implement additional functionality: - - - parseBegin: to create short names for all files that are to be parsed - - fileBegin: to write to the log (a kind of progress indicator) - - jsdocCommentFound: to pre-process comments, empty lines are used as paragraph markers, a default visibility is added, and legacy tag combinations used in JSDoc2 are converted to JSDoc3 conventions - - newDoclet - - parseComplete: remove undocumented/ignored/private doclets or duplicate doclets - - Last but not least, it implements an astNodeVisitor to detect UI5-specific "extend" calls and to create documentation for the properties, aggregations, etc. that are created with the "extend" call. - -- [publish.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/ui5/template/publish.cjs): JSDoc3 template for UI5 documentation generation. - - - adds missing namespaces - - determines the export names of exported APIs - - writes out the `api.json` from the collected JSDoc information - - calculates the inheritance hierarchy - - checks for cyclic dependencies - - removes unnecessary whitespace from an HTML document - -- [versionUtil.cjs](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc/lib/ui5/template/utils/versionUtil.cjs): Provides helper methods to determine version-related information. diff --git a/docs/pages/Configuration.md b/docs/pages/Configuration.md deleted file mode 100644 index 451c0446c8..0000000000 --- a/docs/pages/Configuration.md +++ /dev/null @@ -1,876 +0,0 @@ -# Configuration - -A projects UI5 CLI configuration is typically located in a [YAML](https://yaml.org/) file named `ui5.yaml`, located in the root directory. - -!!! info - This document describes the configuration of UI5 CLI-based projects and extensions. It represents **[Specification Version 3.0](#specification-versions)**. - -## Validation / IDE support - -Starting with [Specification Version 2.0](#specification-version-20) the configuration is validated according to a JSON schema. -The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json - -The schema is also part of the [JSON Schema Store Catalog](http://schemastore.org/json/) which is used by the [YAML Language Server](https://github.com/redhat-developer/yaml-language-server). -See the list of [clients](https://github.com/redhat-developer/yaml-language-server/blob/main/README.md#clients) to find extensions for various IDEs and editors. - -## Example - -```yaml -specVersion: "4.0" -type: application|library|theme-library|module -metadata: - name: some.project.name -``` - -## General Configuration - -### Specification Version and -Type -A project must define a specification version (`specVersion`), to which its configuration is compatible to. Also see [Specification Versions](#specification-versions). - -In addition, a project must define a `type`. This can be either `application`, `library`, `theme-library` (since Specification Version 1.1), or `module`. - -The type defines the default path mappings and build tasks. See [UI5 Builder: Types](./Builder.md#types) for details. - -!!! example - - === "application" - - ```yaml - specVersion: "4.0" - type: application - ``` - - === "library" - - ```yaml - specVersion: "4.0" - type: library - ``` - - === "theme-library" - - ```yaml - specVersion: "4.0" - type: theme-library - ``` - - === "module" - - ```yaml - specVersion: "4.0" - type: module - ``` - -### Kind - -The configuration may also contain a `kind` property. This is used to differentiate between projects and extensions. - -This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility//CustomTasks.md#custom-task-extension). - -### Metadata - -!!! example - ```yaml - metadata: - name: my.company.project - copyright: |- - My Project - * (c) Copyright 2009-${currentYear} My Company - * Licensed under the XYZ License, Version n - see LICENSE.txt. - ``` - -#### name - -A project must have a `name`. - -In UI5 CLI, a project is typically identified by the configured `name`. It must be unique and should ideally follow a namespace scheme like `organization.product.project` for UI5 projects or `ui5-task-heavy-boulder` for extension-projects. - -The `name` property of **projects defining Specification Version 3.0 and higher** must satisfy the following conditions: - -* Must be at least 3 characters long -* Must be no longer than 80 characters -* Must contain lowercase characters only -* Must contain alphanumeric characters, dash, underscore and period only - - Exception: The `@` and `/` characters are allowed at certain positions as - explained below -* Must start with an alphabetic character or an `@` character -* If it starts with an `@` character, it must contain exactly one - forward slash `/` - - This is aligned with the npm concept for package scopes, for example `@org/lib.name` - -#### copyright - -A given `copyright` string will be used to fill placeholders like `${copyright}` and `@copyright@` in a project's source code. `|-` is a way to define a multi line string in YAML. Check the [YAML Specification](https://yaml.org/spec/1.2/spec.html#id2794534) for details. -Inside the copyright string, you can use the placeholder `${currentYear}` which will be replaced with the current year. - -#### deprecated - -In case your project is deprecated you may also define a property `deprecated: true`. In projects that have a direct dependency to your project, UI5 CLI will then display a deprecation warning. - -## Resources -### Path Mapping -Depending on the project type, UI5 CLI expects your projects source files to be located in certain directories. - -If your project's sources are located in different directories, you need to configure the path mapping accordingly. Depending on the type of project, there are several different path mappings available. - -Note that all configured paths must be written in POSIX (i.e. using only forward slashes `/` as path segment separators) and relative to the project's root directory. - -#### Available Path Mappings - -=== "Applications" - - `webapp`: Mapped to runtime path `/` (root) - - ```yaml title="Default Configuration" - resources: - configuration: - paths: - webapp: webapp - ``` - -=== "Libraries" - - `src`: Mapped to runtime path `/resources` - - `test`: Mapped to runtime path `/test-resources` - - ```yaml title="Default Configuration" - resources: - configuration: - paths: - src: src - test: test - ``` - -=== "Modules" - Modules can map any virtual paths to any physical path within the project. - - However, it is recommended that modules include their namespace in the virtual path and use the `/resources` prefix (e.g. `/resources/my/library/module-xy/`) to avoid name clashes with other projects. - - ```yaml title="Example Configuration" - resources: - configuration: - paths: - /resources/my/library/module-xy/: lib - /resources/my/library/module-xy-min/: dist - ``` - -!!! example - For an application project with the following directory structure, you need the path mapping configuration given below: - - ``` hl_lines="3 4 5" title="Directory Structure" - my-app/ - \_ ui5.yaml - \_ lib/ - \_ js/ - \_ app/ - ``` - - ```yaml hl_lines="4" title="Path Mapping Configuration" - resources: - configuration: - paths: - webapp: lib/js/app - ``` - - -### Encoding of `*.properties` files - -!!! info - This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) - -!!! example - === "UTF-8" - - ```yaml - resources: - configuration: - propertiesFileSourceEncoding: UTF-8 - ``` - - === "ISO-8859-1" - - ```yaml - resources: - configuration: - propertiesFileSourceEncoding: ISO-8859-1 - ``` - -By default UI5 CLI expects different encodings for `*.properties` i18n files, depending on the project's specification version: - -Specification Version | Default `propertiesFileSourceEncoding` ---- | --- -**2.0+** | `UTF-8` -**0.1, 1.0 or 1.1** | `ISO-8859-1` - -If your project uses a different encoding for `*.properties` files, you need to set the `propertiesFileSourceEncoding` configuration property. - -UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects `*.properties` files to be encoded. Please refer to [RFC 7](https://github.com/UI5/cli/blob/main/rfcs/0007-properties-file-encoding.md) for details. - -## Custom Configuration - -!!! info - This configuration is available since UI5 CLI [`v2.2.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.2.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.1 or higher. - -!!! example - ```yaml - customConfiguration: - myTool: - key: value - myOtherTool: - otherKey: otherValue - ``` - -Custom configuration that is ignored by UI5 CLI. -This can be used to store UI5 specific configuration for third-party tools. - -The "customConfiguration" value must be an object. -For third-party tools it is recommended to follow a namespace-like structure. - -## Framework Configuration - -!!! info - This configuration is available since UI5 CLI [`v2.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.0.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.0 or higher. - -Define your project's framework dependencies. - -### Framework and Version - -In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version: - -=== "OpenUI5" - ```yaml - framework: - name: OpenUI5 - version: 1.82.0 - ``` - -=== "SAPUI5" - ```yaml - framework: - name: SAPUI5 - version: 1.82.0 - ``` - -If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5). - -You can find an overview of the available versions for each framework here: - -- [**OpenUI5** Version Overview](https://openui5.hana.ondemand.com/versionoverview.html) - - *The lowest version supported by UI5 CLI is __1.52.5__* -- [**SAPUI5** Version Overview](http://ui5.sap.com/versionoverview.html) - - *The lowest version supported by UI5 CLI is __1.76.0__* - -!!! info - Projects that use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. - -### Dependencies - -!!! example - === "application" - ```yaml - specVersion: "4.0" - type: application - metadata: - name: my.company.app - framework: - name: OpenUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.table - - name: themelib_sap_fiori_3 - ``` - - === "library" - ```yaml - specVersion: "4.0" - type: library - metadata: - name: my.company.library - framework: - name: SAPUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: themelib_sap_belize - optional: true - - name: themelib_sap_bluecrystal - optional: true - - name: themelib_sap_fiori_3 - optional: true - ``` - - When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library. - -#### Runtime Dependencies - -All libraries required by your project must be listed in the `libraries` section of the framework configuration: - -=== "OpenUI5" - ```yaml hl_lines="4-7" - framework: - name: OpenUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.table - ``` - -=== "SAPUI5" - ```yaml hl_lines="4-7" - framework: - name: SAPUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.comp - ``` - -#### Development Dependencies -Development dependencies are only installed if the project defining them is the current root project. -They are typically only required during the development of the project. - -```yaml hl_lines="3" - libraries: - - name: sap.ushell - development: true -``` - -Note that a development dependency cannot be optional and vice versa. - -#### Optional Dependencies -Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. -You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency. - -```yaml hl_lines="3" - libraries: - - name: themelib_sap_fiori_3 - optional: true -``` - -## Build Configuration -### Exclude Resources - -!!! example - === "application" - ```yaml - builder: - resources: - excludes: - # You can specify paths relative to the configured "webapp" directory - - "index.html" - # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix - - "/resources/my/project/namespace/test/**" - ``` - - === "library or theme-library" - ```yaml - builder: - resources: - excludes: - # For libraries, all paths must be absolute, except for wildcards - - "/resources/some/project/name/test_results/**" - - "/test-resources/**" - - "!/test-resources/some/project/name/demo-app/**" - - "**/*.svg" - ``` - - === "module" - !!! info - For projects of type `module`, this configuration is available since UI5 CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0) - and applies only to projects defining [Specification Version](#specification-versions) 3.1 or higher. - ```yaml - builder: - resources: - excludes: - # For modules, all paths must be absolute, except for wildcards - - "/resources/my/library/module-xy/min/**" - - "!/resources/my/library/module-xy/min/module-xy-bundle.js" - - "**/*.svg" - ``` - -You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks. - -Patterns are applied to the **virtual resource paths** (i.e. the UI5 runtime paths). Exclude patterns are always applied after any includes. - -### Cachebuster - -!!! example - === "time (default)" - ```yaml - builder: - cachebuster: - signatureType: time - ``` - === "hash" - ```yaml - builder: - cachebuster: - signatureType: hash - ``` - -By default, the generated cachebuster info file signatures are based on timestamps (`time`). In setups like CI environments, a mechanism based on file hashes (`hash`) might be more reliable. Also see [PR #241](https://github.com/SAP/ui5-builder/pull/241) for more details. - -### Component Preload Generation - -For projects of type `application` a `Component-preload.js` bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the component. -You can override this default behavior by defining a `componentPreload` configuration. - -For projects of type `library`, no Component Preload is created by default. -However you can define a `componentPreload` configuration to create Component Preload bundles. Those will be created in addition to the `library-preload.js` bundle. - -There are two ways to define the set of components for which preload bundles should be generated. You can either provide `paths` (allowing patterns) or `namespaces`. You can also combine both configuration options. Defining any of them overrides the default preload bundle generation for the root component of `application` projects. - -#### paths - -!!! example - ```yaml - builder: - componentPreload: - paths: - - "my/awesome/app/**/Component.js" - ``` - -The `paths` option takes one or multiple patterns. For every matched file a separate `Component-preload.js` will be generated. Patterns are always applied relative to the project's virtual source directory `/resources/`. - -#### namespaces - -!!! example - ```yaml - builder: - componentPreload: - namespaces: - - "my/awesome/app" - - "my/awesome/app/componentOne" - - "my/awesome/app/componentTwo" - ``` - -The `namespaces` option takes one or multiple component namespaces, which correspond to the directory structures. - -#### excludes - -!!! info - This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.3 or higher. - -!!! example - === "Single Component" - - ```yaml - builder: - componentPreload: - excludes: - - "my/awesome/app/localService/**" - ``` - - === "Multiple Components" - - ```yaml - builder: - componentPreload: - namespaces: - - "my/awesome/app" - - "my/awesome/app/componentOne" - - "my/awesome/app/componentTwo" - excludes: - - "my/awesome/app/**/thirdparty/" - - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js" - ``` - -List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. - -Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the namespace of the component they apply to. - -### Library Preload Generation - -For projects of type `library` a `library-preload.js` bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the library. - -#### excludes - -!!! info - This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.3 or higher. - -!!! example - ```yaml - builder: - libraryPreload: - excludes: - - "my/lib/thirdparty/" - - "!my/lib/thirdparty/NotExcluded.js" - ``` -List of modules declared as glob patterns (resource name patterns) that are excluded from `library-preload.js` bundle. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. - -Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the library's namespace. - -### Custom Tasks - -!!! example - ```yaml - builder: - customTasks: - - name: custom-task-1 - beforeTask: replaceCopyright - configuration: - some-key: some value - - name: custom-task-2 - afterTask: custom-task-1 - configuration: - color: blue - ``` - -You can define custom build tasks that will be executed for the project. Please refer to the [Custom Tasks Documentation](./extensibility/CustomTasks.md) for a detailed explanation and examples of the build extensibility. - -Each `customTasks` entry must define the `name` of the custom task as defined in its `metadata.name` property. - -In addition, the execution order needs to be defined by referencing a [standard task](./Builder.md#tasks) or an already configured custom task using the `afterTask` or `beforeTask` property. - -Optionally, arbitrary `configuration` can be passed to the custom task. - -### JSDoc - -!!! example - ```yaml - builder: - jsdoc: - excludes: - - "some/project/name/thirdparty/**" - ``` - -You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task. - -Patterns are always applied relative to the project's virtual **source** directory `/resources/`. - -These excludes are applied *before* any general builder excludes that have been defined in `builder.resources.excludes`. - -### Include Dependencies - -!!! info - This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.5 or higher. - -!!! example - ```yaml - builder: - settings: - includeDependency: - - shimmed.thirdparty.library - includeDependencyRegExp: - - ^com\.namespace - includeDependencyTree: - - sap.m - ``` - -You can include certain dependencies into the build process using the `includeDependency` builder setting. By using `includeDependencyRegExp`, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using `includeDependencyTree`, a selected dependency including all of its sub-dependencies is used. - -This configuration can be overwritten more precisely with the CLI parameters `--include-dependency`, `--include-dependency-regexp`, `--include-dependency-tree`, `--exclude-dependency`, `--exclude-dependency-regexp` and `--exclude-dependency-tree`. - -### Minification - -For projects of types `application` and `library`, minification is done for all JavaScript files. During the minification step debug variants are created, original resources are minified, and source maps are created. You can exclude the resources of a project from minification using a list of glob patterns. Matching resources won't be minified, and no debug variants or source maps will be created. - -The project's `ui5.yaml` file can contain a list of modules declared as glob patterns (resource name patterns) that are excluded from resource minification. Re-includes have to be marked with a leading exclamation mark `!`; see the example below. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. - -Note that patterns are always applied relative to the project's virtual source directory `/resources/`. - -!!! info - This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.6 or higher. - -!!! example - ```yaml - builder: - minification: - excludes: - - "my/lib/thirdparty/" - - "!my/lib/thirdparty/NotExcluded.js" - ``` - -## Server Configuration - -!!! example - ```yaml - server: - settings: - httpPort: 1337 - httpsPort: 1443 - ``` - -By default, UI5 CLI will serve applications using Port `8080`. When running in HTTP/2 or HTTPS mode, Port `8443` will be used. - -If the default port is already in use, the next highest free port will be used. - -A project can also configure alternative default ports. If the configured port is already in use, an error will be thrown. - -The default and configured server ports can always be overwritten with the CLI parameter `--port`. - -## Extension Configuration - -!!! example - ```yaml - specVersion: "4.0" - type: application - metadata: - name: my.application - --- - specVersion: "4.0" - kind: extension - type: project-shim - metadata: - name: my.application.thirdparty - shims: - configurations: - lodash: - specVersion: "4.0" - type: module - metadata: - name: lodash - resources: - configuration: - paths: - /resources/my/application/thirdparty/: "" - ``` - -Extensions configuration can be added to any projects `ui5.yaml`. For better readability, it should to be located *after* the projects configuration, separated by [three dashes](https://yaml.org/spec/1.2/spec.html#id2760395) "`---`". - -In cases where an extension shall be reused across multiple projects you can make it a module itself and have its configuration in a standalone `ui5.yaml` located inside that module. - -Extensions can be identified by the `kind: extension` configuration. Note that if no `kind` configuration is given, [`project`](#project-configuration) is assumed. - -### Available Extensions -- [Custom Tasks](./extensibility/CustomTasks.md) -- [Custom Server Middleware](./extensibility/CustomServerMiddleware.md) -- [Project Shims](./extensibility/ProjectShims.md) - -## Custom Bundling - -!!! example - ```yaml - builder: - bundles: - - bundleDefinition: - name: "sap-ui-custom.js" - sections: - - mode: raw - filters: - - ui5loader-autoconfig.js - resolve: true - sort: true - bundleOptions: - optimize: true - - bundleDefinition: - name: "app.js" - sections: - - mode: preload - filters: - - some/app/Component.js - resolve: true - sort: true - - mode: provided - filters: - - ui5loader-autoconfig.js - resolve: true - bundleOptions: - optimize: true - ``` - -Custom bundles can be defined in the `ui5.yaml`. Within the `builder/bundles` configuration a list of `bundleDefinitions` can be described. - -### Properties - -**bundles** - -A list of bundle definitions. A `bundleDefinition` contains of the following options: - -- `name`: The module bundle name -- `defaultFileTypes`: List of default file types which should be included in the bundle. Defaults to: `.js`, `.control.xml`, `.fragment.html`, `.fragment.json`, `.fragment.xml`, `.view.html`, `.view.json` and `.view.xml` -- `sections`: A list of module bundle definition sections. Each section specifies an embedding technology (see [API-Reference](https://ui5.github.io/cli/v4/api/module-@ui5_builder_processors_bundlers_moduleBundler.html#~ModuleBundleDefinition)) and lists the resources that should be in- or excluded from the section. - - `mode`: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require) - - `filters`: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. - - `resolve`: Setting resolve to `true` will also include all (transitive) dependencies of the files - - `resolveConditional`: Whether conditional dependencies of modules should be resolved and added to the module set for this section. By default set to `false` - - `declareRawModules`: Whether raw modules should be declared after jQuery.sap.global became available. With the usage of the ui5loader, this flag should be set to 'false'. By default set to `false` - - `renderer`: Whether renderers for controls should be added to the module set. By default set to `false` - - `sort`: By default, modules are sorted by their dependencies. The sorting can be suppressed by setting the option to `false` - - `async` (only available if `mode` equals `require`): Specifies whether the `require` section of the module should use an asynchronous API. When set to `true`, the modules are loaded using `sap.ui.require`. When set to `false`, modules are loaded using `sap.ui.requireSync`, which is not available in UI5 2.x. - - Projects defining [Specification Version](#specification-versions) 4.0 and higher: Defaults to `true` - - Projects defining [Specification Version](#specification-versions) lower than 4.0: Behaves like `false` but can't be configured - -**bundleOptions** - -- `optimize`: If set to `true`, the module bundle gets minified - - Projects defining [Specification Version](#specification-versions) 3.0 and higher: Defaults to `true` - - Projects defining [Specification Version](#specification-versions) lower than 3.0: Defaults to `false` -- `decorateBootstrapModule`: By default set to `false`. If set to `true`, the module will be decorated with an optimization marker -- `addTryCatchRestartWrapper`: By default set to `false`. If set to `true`, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors -- `numberOfParts`: By default set to `1`. The number of parts into which a module bundle should be splitted -- `sourceMap`: By default set to `true`. Adds source map support to the bundle. Available since UI5 CLI `v4.0.0` - -## Specification Versions -A project must define a specification version by setting the `specVersion` property. UI5 CLI uses this information to detect whether the currently installed version is compatible to a project's configuration. - -```yaml -specVersion: "4.0" -[...] -``` - -To use new features, a project might need to update the `specVersion` property. - -For a given Specification Version **MAJOR.MINOR** we will increment: - -1. **MAJOR** when there are breaking changes that might require additional actions by the project maintainer -2. **MINOR** when adding new features that are fully backward compatible - -All changes are documented below. - -### Compatibility Matrix - -Unless otherwise noted in the table below, UI5 CLI modules are backward compatible. - -Version | UI5 CLI Release ---- | --- -**4.0** | v4.0.0+ -**3.2** | v3.8.0+ -**3.1** | v3.5.0+ -**3.0** | v3.0.0+ -**2.6** | v2.14.0+ -**2.5** | v2.12.0+ -**2.4** | v2.11.0+ -**2.3** | v2.10.0+ -**2.2** | v2.4.0+ -**2.1** | v2.2.0+ -**2.0** | v2.0.0+ -**1.1** | v1.13.0+ -**1.0** | v1.0.0+ -**0.1** | v0.0.1+ - -### Specification Version 4.0 - -**Breaking changes:** - -- Removed bundle option [`usePredefineCalls`](#properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. -- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](../pages/Configuration.md#properties) for details. - -Specification Version 4.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v4.0.0 and above. - -Also see [Migrate to v4](../updates/migrate-v4.md#changes-for-projects) for details on these breaking changes. - -### Specification Version 3.2 - -**Features:** - -- Adds a new bundling mode `depCache` for providing a dependencies cache: [`builder.bundles.bundleDefinition.sections.mode=depCache`](#properties) - -Specification Version 3.2 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v3.8.0 and above. - -### Specification Version 3.1 - -**Features:** - -- Adds support for maintaining the [`builder.resources.excludes`](#exclude-resources) configuration for projects of type `module` - -Specification Version 3.1 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v3.5.0 and above. - -### Specification Version 3.0 - -**Breaking changes:** - -- The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [`name`](#name) for details -- [bundleOptions](#custom-bundling) has been modified: - * `debugMode` has been removed - * `optimize` now always defaults to `true` [#685](https://github.com/SAP/ui5-builder/pull/685) - -**Features:** - -- Adds support for `sourceMap` configuration for the application and library [bundleOptions](#properties) - -Specification Version 3.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v3.0.0 and above. - -### Specification Version 2.6 -**Features:** - -- Adds support for `excludes` configuration for the application and library [minification](#excludes_2) - -Specification Version 2.6 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.14.0 and above. - -### Specification Version 2.5 -**Features:** - -- Adds support for the build configuration [`includeDependency`](#include-dependencies) -- Allows [server configuration](#server-configuration) in projects of type `module` - -Specification Version 2.5 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.12.0 and above. - -### Specification Version 2.4 -**Features:** - -- Adds support for `bundleInfo` mode in bundle definitions. - -Specification Version 2.4 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.11.0 and above. - -### Specification Version 2.3 - -**Features:** - -- Adds support for `excludes` configuration of [component](#excludes)- and [library](#excludes_1) preload bundles - -Specification Version 2.3 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.10.0 and above. - -### Specification Version 2.2 - -**Features:** - -- Custom task extensions can make use of the [`TaskUtil` Helper Class](./extensibility/CustomTasks.md#helper-class-taskutil) - -Specification Version 2.2 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.4.0 and above. - -### Specification Version 2.1 - -**Features:** - -- Adds support for the ["customConfiguration"](#custom-configuration) configuration -- Custom middleware extensions can make use of the [`MiddlewareUtil` Helper Class](./extensibility/CustomServerMiddleware.md#helper-class-middlewareutil) - -Specification Version 2.1 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.2.0 and above. - -### Specification Version 2.0 - -**Breaking changes:** - -- Adds and enforces schema validation of the ui5.yaml -- By default the encoding of `*.properties` files is expected to be `UTF-8` (as opposed to `ISO-8859-1` in projects defining specification versions below 2.0) - - A project can still explicitly configure the [encoding of its `*.properties` files](#encoding-of-properties-files) - -**Features:** - -- Adds support for the ["framework"](#framework-configuration) configuration to consume SAPUI5 libraries. - -Specification Version 2.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.0.0 and above. - -### Specification Version 1.1 - -**Features:** - -- Adds support for the `theme-library` type. - -Specification Version 1.1 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v1.13.0 and above. - -### Specification Version 1.0 -First stable release. - -Specification Version 1.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v1.0.0 and above. - -### Specification Version 0.1 -Initial version. - -Specification Version 0.1 projects are compatible with [UI5 CLI](https://github.com/SAP/ui5-cli) v0.0.1 and above. diff --git a/docs/pages/ESSupport.md b/docs/pages/ESSupport.md deleted file mode 100644 index b7ac05687a..0000000000 --- a/docs/pages/ESSupport.md +++ /dev/null @@ -1,580 +0,0 @@ - -# ECMAScript Support - -UI5 CLI offers general support for `ES2023` ECMAScript features. While a `ui5 build` is executed, UI5 CLI analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax. - -| UI5 CLI Version | Supported ECMAScript Version | Note | -|-------------------- |----------------------------- | ---- | -| v3.11+ | ECMAScript 2023 | | -| v3.0+ | ECMAScript 2022 | | -| v2.0+ | ECMAScript 2009/ES5 | Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features | - -The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 CLI check out [Code Analysis](./CodeAnalysis.md). - -## Language Features with Restrictions - -The following sections describe the restrictions grouped by the ECMAScript language feature. - -### JavaScript modules - -In general, UI5 CLI only analyzes **JavaScript** files of type `script`. [JavaScript Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) are not analyzed. - -UI5 CLI and the UI5 Runtime does not support the usage of `export` and `import` of JavaScript Modules. Therefore, `sap.ui.define` has to be used. - -=== "Supported" - - ```javascript - sap.ui.define([ - "ModuleA", - "ModuleB" - ], function(ModuleA, ModuleB) { - return ModuleA.extend("ModuleC", {}); - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="1 2 3" - import ModuleA from "ModuleA"; - import ModuleB from "ModuleB"; - export default class ModuleC extends ModuleA {}; - ``` - -### Template Literal - -[Template Literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) without an expressions can be used in all places where string literals can be used. However, since UI5 CLI will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. `Hello ${planets[2]}`) can't be used in the scenarios described below. - -#### Template Literal in `sap.ui.define` or `sap.ui.require` - -Template Literals with one or more expressions inside a `sap.ui.define` or `sap.ui.require` call are not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - `ModuleA`, - `ModuleB` - ], function(ModuleA, ModuleB) { - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="4" - const i = `B`; - sap.ui.define([ - `ModuleA`, - `Module${i}` - ], function(ModuleA, ModuleB) { - }); - ``` - -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Template Literal in Smart Template Declaration - -When declaring a **Smart Template** using a **Template Literal** with one or more expressions in the name of the **Smart Template** is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - `sap/suite/ui/generic/template/lib/TemplateAssembler` - ], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.Component`, { - metadata: { - properties: { - templateName: { - type: `string`, - defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` - } - }, - manifest: `json` - } - } - ); - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="6" - sap.ui.define([ - `sap/suite/ui/generic/template/lib/TemplateAssembler` - ], function(TemplateAssembler) { - const name = `Component`; - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.${name}`, { - metadata: { - properties: { - templateName: { - type: `string`, - defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` - } - }, - manifest: `json` - } - } - ); - }); - ``` - -#### Template Literal in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. - -Declaring an **XMLComposite** control using a **Template Literal** with one or more expressions in the name, is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - `sap/ui/core/XMLComposite` - ], function(XMLComposite) { - return XMLComposite.extend(`composites.MyComposite`, {} - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="5" - sap.ui.define([ - `sap/ui/core/XMLComposite` - ], function(XMLComposite) { - const name = `MyComposite`; - return XMLComposite.extend(`composites.${name}`, {}); - }); - ``` - -#### Template Literal in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Template Literal** with one or more expressions for the library name. - -=== "Supported" - - ```javascript - sap.ui.getCore().initLibrary({ - name: `my.lib` - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const libraryName = `lib`; - sap.ui.getCore().initLibrary({ - name: `my.${libraryName}` - }); - ``` - -#### Reserved Variable Names in a Template Literal - -While UI5 CLI performs a build placeholders are replaced with a values offered by the build. For example `${version}` is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any **Template Literal** where any expression contains variable with following names: - -- `version` -- `project.version` -- `buildtime` -- `copyright` - -=== "Supported" - - ```javascript - const myVersion = `1.2`; - const transformedVersion `v${myVersion}` - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const version = `1.2`; - const transformedVersion `v${version}` - ``` - -UI5 CLI searches for the exact match of `${version}`, so with adding whitespaces before and after the variable name `${ version }` UI5 CLI won't replace this occurence. This can be enforced by the dedicated ESLint config [template-curly-spacing](https://eslint.org/docs/latest/rules/template-curly-spacing) with option `always`. - -### Spread Element - -A [Spread Element](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) can be used in all places, except the following. - -#### Spread Element in `sap.ui.define` or `sap.ui.require` - -A **Spread Element** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "ModuleA", - "ModuleB" - ], function(ModuleA, ModuleB) { - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const dependencies = ["ModuleA", "ModuleB"]; - sap.ui.define([ - ...dependencies - ], function(ModuleA, ModuleB) { - }); - ``` - -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Spread Element in Smart Template Declaration - -When declaring a **Smart Template**, the usage of a **Spread Element** in the configuration is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" - ], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }, - manifest: "json" - } - } - ); - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="6" - sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" - ], function(TemplateAssembler) { - const myTemplate = { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }; - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - ...myTemplate - } - manifest: "json" - } - } - ); - }); - ``` - -#### Spread Element in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. - -When declaring an **XMLComposite**, the usage of a **Spread Element** in the configuration is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="5" - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - const myXMLComposite = { - fragment: "composites.custom.MyComposite" - }; - return XMLComposite.extend(`composites.MyComposite`, { - ...myXMLComposite - }); - }); - ``` - -#### Spread Element in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Spread Element**. - -=== "Supported" - - ```javascript - sap.ui.getCore().initLibrary({ - name: "my.lib" - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="5" - const mylib = { - name: "my.lib" - }; - sap.ui.getCore().initLibrary({ - ...mylib - }); - ``` - -### Object Expression - -An **Object Expression** can be used in all places except in following places. - -#### Object Expression in `sap.ui.define` or `sap.ui.require` - -An **Object Expression** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "Bar" - ], function(Bar){ - }); - - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const dependency = "Bar"; - sap.ui.define([ - dependency - ], function(Bar){ - }); - ``` - -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Object Expression in Smart Template Declaration - -When declaring a **Smart Template**, the usage of an **Object Expression** in the configuration is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" - ], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }, - manifest: "json" - } - } - ); - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="9" - sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" - ], function(TemplateAssembler) { - const key = "templateName" - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.${name}`, { - metadata: { - properties: { - [key]: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - } - manifest: "json" - } - } - ); - }); - ``` - -#### Object Expression in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. - -When declaring an **XMLComposite**, the usage of an **Object Expression** in the configuration is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="6" - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - const key = "fragment"; - return XMLComposite.extend("composites.MyComposite", { - [key]: "composites.custom.MyComposite" - }); - }); - ``` - -#### Object Expression in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Object Expression**. - -=== "Supported" - - ```javascript - sap.ui.getCore().initLibrary({ - name: "my.lib" - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const key = "name"; - sap.ui.getCore().initLibrary({ - [key]: "my.lib" - }); - ``` - -### Computed Property - -A **Computed Property** can be used in all places except in following places. - -#### Computed Property when using `extend` - -One or more **Computed Property** as a parameter in an UI5 Module `extend` call is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "Bar" - ], function(Bar){ - return Bar.extend("my.Bar" {}); - }); - - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const name = "my"; - sap.ui.define([ - "Bar" - ], function(Bar){ - return Bar.extend(name + ".Bar", {}); - }); - ``` - -#### Computed Properties in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Computed Property**. - -=== "Supported" - - ```javascript - sap.ui.getCore().initLibrary({ - name: "my.lib" - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const name = "my"; - sap.ui.getCore().initLibrary({ - name: name + ".lib" - }); - ``` - -### Class Declaration - -If you want to generate a JSDoc build of your project and using a **Class Declaration** the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration. - -=== "Supported" - - ```javascript - sap.ui.define([ - "Bar" - ], function(Bar){ - /** - * JSDoc block here - */ - class Foo extends Bar { - make () {} - } - - return Foo; - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="7" - sap.ui.define([ - "Bar" - ], function(Bar){ - /** - * JSDoc block here - */ - return class Foo extends Bar { - make () {} - } - }); - ``` - -### Arrow Function Expression - -If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command. - -=== "Supported" - - ```javascript - sap.ui.define([ - "Bar" - ], - /** - * JSDoc block here - */ - (Bar) => Bar.extends("Foo", { - - })); - ``` - -=== "Not Supported" - - ```javascript hl_lines="1 2 3" - /** - * JSDoc block here - */ - sap.ui.define([ - "Bar" - ], (Bar) => Bar.extends("Foo", { - - })); - ``` diff --git a/docs/pages/FAQ.md b/docs/pages/FAQ.md deleted file mode 100644 index 97d4154214..0000000000 --- a/docs/pages/FAQ.md +++ /dev/null @@ -1,28 +0,0 @@ -# FAQ -### How Can I Contribute? -Please check our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md). - -### How Can I Obtain Support? -Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md#report-an-issue) on how to report an issue. - -### What's the Difference Between OpenUI5 and SAPUI5? -The open source project [OpenUI5](https://openui5.org/) provides most of the fundamental framework features. [SAPUI5](https://ui5.sap.com/) enhances this by providing **additional libraries** under a **different license**. - -OpenUI5 is provided under the Apache 2.0 license. The SAPUI5 packages that are consumed in UI5 CLI are provided under the terms of the [SAP Developer License Agreement](https://tools.hana.ondemand.com/developer-license-3.1.txt). - -Note that projects which use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. However, SAPUI5 projects can depend on OpenUI5 projects. - -Please also see the [UI5 SDK documentation "SAPUI5 vs. OpenUI5"](https://ui5.sap.com/#/topic/5982a9734748474aa8d4af9c3d8f31c0). - -### Why package.json? / Why npm? -Currently, UI5 CLI can only resolve dependencies defined in a `package.json` file. This might change in the future by adding Translators for additional dependency management systems. - -To manage your dependencies, you can use almost any `Node.js` package manager that relies on `package.json` files. Popular ones are [npm](https://www.npmjs.com/), [Yarn](https://yarnpkg.com/) and [pnpm](https://pnpm.js.org/). UI5 CLI itself uses [npm](https://www.npmjs.com/). - -UI5 CLI resolves dependencies almost the same way `Node.js` does when executing a `require` / `import` statement. - -### Where are the npm Packages? - -* [OpenUI5 Libraries](https://www.npmjs.com/org/openui5) -* [SAPUI5 Libraries](https://www.npmjs.com/org/sapui5) -* [UI5 CLI Modules](https://www.npmjs.com/org/ui5) diff --git a/docs/pages/FileSystem.md b/docs/pages/FileSystem.md deleted file mode 100644 index 6ddb8ec8f1..0000000000 --- a/docs/pages/FileSystem.md +++ /dev/null @@ -1,43 +0,0 @@ -# UI5 FS - -The [UI5 FS](https://github.com/SAP/ui5-fs) provides a UI5-specific file system abstraction. - -[**API Reference**](https://ui5.github.io/cli/v4/api/){: .md-button .sap-icon-initiative } - -## Overview - -The virtual file system "UI5 FS" offers an abstraction layer from the physical file system. Among other features, it can combine a set of scattered file locations into a well-defined virtual structure. - -### Resource - -A [Resource](https://ui5.github.io/cli/v4/api/@ui5_fs_Resource.html) basically represents a file. Besides providing access to the file content, it also carries metadata like the **virtual path** of the Resource. - -Resources are typically created and stored in [Adapters](#adapters). Once read from a physical file system, they are typically kept in memory for further processing in other modules. - -This ensures a high build performance, as physical read and write access for a high number of resources is kept to a minimum. - -### Adapters - -Adapters abstract access to different resource locations. - -The [Memory Adapter](https://ui5.github.io/cli/v4/api/@ui5_fs_adapters_Memory.html) represents a virtual file system which maintains respective [Resources](#resource) inside a virtual data structure. - -The [File System Adapter](https://ui5.github.io/cli/v4/api/@ui5_fs_adapters_FileSystem.html), on the other hand, has direct access to the physical file system. It maps a "virtual base path" to a given physical path. - -Both adapters provide APIs to retrieve and persist [Resources](#resource), namely - -- to retrieve a single resource by its virtual path use `byPath()`, -- to retrieve many resources based on patterns use `byGlob()`, -- to persist a single resource use `write()`. - - -### Reader Collections - -Reader collections allow grouped access to multiple adapters, which might even be nested in other reader collections. - -They implement the same API for **retrieving** resources as adapters (`byPath` and `byGlob`). Multiple flavors exist: - -* [ReaderCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_ReaderCollection.html): The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections) -* [ReaderCollectionPrioritized](https://ui5.github.io/cli/v4/api/@ui5_fs_ReaderCollectionPrioritized.html): Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another -* [DuplexCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_DuplexCollection.html): Contains a single reader and a single "writer". It therefore also implements the Adapter API for **persisting** resources (`write()`). When retrieving resources, the writer is prioritized over the reader -* [WriterCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_WriterCollection.html): Contains a set of writers and a mapping for each of them. When writing a resource, the writer is chosen based on the resource's virtual path. diff --git a/docs/pages/GettingStarted.md b/docs/pages/GettingStarted.md deleted file mode 100644 index c7187ef4c3..0000000000 --- a/docs/pages/GettingStarted.md +++ /dev/null @@ -1,100 +0,0 @@ -# Getting Started -## Installing the UI5 CLI -### Requirements -- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) -- [npm](https://www.npmjs.com/) version v8.0.0 or higher - -### Installation -```sh -# Global installation to have the command available -npm install --global @ui5/cli - -# Additional local install in your project -npm install --save-dev @ui5/cli - -# Verify installation -ui5 --help -``` - -The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the [UI5 CLI documentation](./CLI.md#local-vs-global-installation) for details. - -## ⚡️ Quick Start: OpenUI5 Sample App -Check out the [OpenUI5 Sample App](https://github.com/SAP/openui5-sample-app) featuring a full blown [How-to](https://github.com/SAP/openui5-sample-app/#openui5-sample-app) to play around with UI5 CLI! - -## Starting a New Project -The easiest way to start a new UI5 project is to use a template generator like [**generator-easy-ui5**](https://github.com/SAP/generator-easy-ui5). - -Choose a template that is designed for the type of project you want to create and the target environment where you want to deploy it to. -Make sure that the template already uses UI5 CLI. A good indicator for that is the presence of a `ui5.yaml` file in the generated project. - -When working with SAP Business Application Studio, there are several templates available to you. Check out the tutorial on creating a basic SAPUI5 application and deploying it to Cloud Foundry from within SAP Business Application Studio: [Create an SAP Fiori App Using SAP Business Application Studio](https://developers.sap.com/tutorials/appstudio-fioriapps-create.html) - -You can find many guides on UI5 development with SAP Business Application Studio in the [Tutorial Navigator](https://developers.sap.com/tutorial-navigator.html?tag=topic:sapui5&tag=products:technology-platform/sap-business-application-studio). - -## Enabling an Existing Project -You can easily check whether or not a project (application or library) can already be used with the UI5 CLI by looking for a `ui5.yaml` file in the project's root directory. -This file (with some exceptions) is required for all projects and their dependencies (e.g. reuse libraries) to use them in the UI5 CLI. - -### Setup -If your project is not set up for use with the UI5 CLI yet, follow these steps: - -1. If your project does not have a `package.json` file, let npm generate it: - ```sh - npm init --yes - ``` - -1. Generate the `ui5.yaml` file: - ```sh - ui5 init - ``` - -1. Define the framework you want to use - - === "OpenUI5" - - ```sh - ui5 use openui5@latest - ``` - - === "SAPUI5" - - ```sh - ui5 use sapui5@latest - ``` - - You can choose between the OpenUI5 and the SAPUI5 framework. - - Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5). - -1. Add required libraries - ```sh - ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 # [...] - ``` - - You can find a documentation of all libraries, including samples and more, in the Demo Kit: - - - [**OpenUI5** Demo Kit](https://openui5.hana.ondemand.com/api) - - [**SAPUI5** Demo Kit](https://ui5.sap.com/#/api) - -1. Start the server and work on your project! 🎉 - ```sh - ui5 serve - ``` - - !!! tip - Use `ui5 serve` to start a local development server and `ui5 build --all` to produce an optimized, static version of your project, which you can then deploy to your production environment. - - Find more information here: - - - [Server](./Server.md) - - [Builder](./Builder.md) - - [CLI](./CLI.md) - -1. If you are using Git or similar version control, commit `package.json` and `ui5.yaml` to your repository. - ```sh - git add package.json ui5.yaml - git commit -m "Enable use with UI5 CLI" - ``` - -**Hooray! You can now use UI5 CLI in your project!** -{: .sap-icon-ui5-after } diff --git a/docs/pages/OpenUI5.md b/docs/pages/OpenUI5.md deleted file mode 100644 index d471e4560d..0000000000 --- a/docs/pages/OpenUI5.md +++ /dev/null @@ -1,69 +0,0 @@ -# Consuming OpenUI5 Libraries - -OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on [Consuming SAPUI5 Libraries](./SAPUI5.md) for a general description of how UI5 CLI can fetch and provide framework dependencies to your project. - -Note that projects using the SAPUI5 framework can depend on projects using the OpenUI5 framework. However, OpenUI5 projects can't depend on SAPUI5 projects. - -Please also refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md#whats-the-difference-between-openui5-and-sapui5). - -!!! info - The minimum OpenUI5 version that can be consumed by UI5 CLI is **1.52.5** - -## Configuration -Your project's `ui5.yaml` provides a configuration section dedicated to framework dependency handling. - -This configuration can be maintained by editing the file, or by using the UI5 CLI: - -!!! example - Using the [UI5 CLI](./CLI.md): - ```sh - ui5 use openui5@latest - ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 - ``` - -**Example ui5.yaml of an application** -```yaml -specVersion: "4.0" -type: application -metadata: - name: some.project.name -framework: - name: OpenUI5 - version: 1.76.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.table - - name: themelib_sap_fiori_3 -``` - -**Example ui5.yaml of a library** -```yaml -specVersion: "4.0" -type: library -metadata: - name: some.library -framework: - name: OpenUI5 - version: 1.76.0 - libraries: - - name: sap.ui.core - - name: themelib_sap_belize - optional: true - - name: themelib_sap_bluecrystal - optional: true - - name: themelib_sap_fiori_3 - optional: true -``` - -Please make sure that your project defines [Specification Version 2.0](./Configuration.md#specification-version-20) or higher. - -For details, please see the corresponding [framework configuration documentation](./Configuration.md#framework-configuration). - -## Linking Framework Dependencies -When working on UI5 applications or libraries that use OpenUI5, you can link a local OpenUI5 repository into that project. This allows you to make changes to the project itself as well as to the OpenUI5 libraries simultaneously and test them immediately. - -A detailed step-by-step guide on how to achieve such a setup with the OpenUI5 Sample App can be found [here](https://github.com/SAP/openui5-sample-app#working-with-local-dependencies). - -## OpenUI5 Framework Development -Please refer to the [OpenUI5 Framework Development Documentation](https://github.com/SAP/openui5/blob/-/docs/developing.md#developing-ui5). diff --git a/docs/pages/Overview.md b/docs/pages/Overview.md deleted file mode 100644 index 78adbe1dfb..0000000000 --- a/docs/pages/Overview.md +++ /dev/null @@ -1,127 +0,0 @@ -# Development Overview -When developing a UI5 project on your local system, you should use the UI5 Server (`ui5 serve`) and not the UI5 Builder (`ui5 build`). Building a project should only be required when deploying it. - -However, you might have good reasons to also use the UI5 Builder during development. In such cases, feel free to let us know! Maybe your use case could be covered by a future enhancement of the UI5 Server. - -## Project Dependencies - -UI5 CLI differentiates between "framework dependencies" and "project dependencies". - -**Framework dependencies** are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options: - -* [Working with **OpenUI5** Framework Dependencies](./OpenUI5.md) -* [Working with **SAPUI5** Framework Dependencies](./SAPUI5.md) - -**Project dependencies** are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: [FAQ: Why package.json? / Why npm?](./FAQ.md#why-packagejson-why-npm). - -## Linking Projects -Would you like to work on an application project and one or more of its dependencies at the same time? We got you covered! - -### UI5 Workspaces -The recommended approach for setting up a development environment where simultaneous work on multiple UI5 projects is required. - -Head over to the [UI5 Workspaces](./Workspace.md) documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project: - -**Example: Your Directory Structure** -``` -my-app/ - \_ node_modules/ - \_ webapp/ - \_ ui5.yaml - \_ package.json -my-reuse-library/ - \_ node_modules/ - \_ src/ - \_ test/ - \_ ui5.yaml - \_ package.json -``` - -In its `package.json`, `my-app` should already define a dependency to `my-reuse-library`. So, after running the `npm install` command, a copy of the `my-reuse-library`-package should be retrieved from the package registry and added to my-app's `node_modules/` directory. - -In the `my-app` directory, create a new file named `ui5-workspace.yaml` with the following content: - -```yaml title="ui5-workspace.yaml" -specVersion: workspace/1.0 -metadata: - name: default -dependencyManagement: - resolutions: - - path: ../my-reuse-library -``` - -That's it! Start a server via `ui5 serve`, and you will see that any changes you make in `my-reuse-library` are immediately visible in `my-app`. - -## Package Managers - -By leaving dependency management up to the tool of your choice (see [FAQ: Why package.json? / Why npm?](./FAQ.md#why-packagejson-why-npm)) you have a variety of other options for linking dependencies into your project. - -Here is an example using the [npm CLI](https://www.npmjs.com/get-npm) in Version 8, an application, and a reuse library project: - -**Example: Your Directory Structure** -``` -my-app/ - \_ node_modules/ - \_ webapp/ - \_ ui5.yaml - \_ package.json -my-reuse-library/ - \_ node_modules/ - \_ src/ - \_ test/ - \_ ui5.yaml - \_ package.json -``` - -In its `package.json`, `my-app` should already define a dependency to `my-reuse-library`. So, after running the `npm install` command, a copy of the "my-reuse-library"-package should be retrieved from the package registry and added to my-app's `node_modules/` directory. - -Now all you need to do is replacing this copy of the `my-reuse-library` package with a link to the `my-reuse-library` project located somewhere on your computer. In this example it is right next to `my-app`, but that doesn't really matter. - -First, in the directory of the `my-reuse-library` project, create a global link: -```sh -npm link -``` - -Then, in the `my-app` directory, use that link to replace the registry package: -```sh -npm link my-reuse-library -``` -_**Note:** "my-reuse-library" is the name defined in the `package.json` and not necessarily the directory or `ui5.yaml` name_ - -That's it. You can check whether the linking worked by executing `ui5 tree` in the `my-app` directory and looking for the path attributes in its output. - -## Static Dependency Definition - -As an alternative to defining your project dependencies in the `package.json`, you can define a static dependency hierarchy for the project in a YAML file. This is typically only advised in special cases where none of the other concepts work. - -To use such a file in UI5 CLI, provide a path to it using the [`--dependency-definition`](./CLI.md#common-options) parameter. Note that all `package.json` dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in `ui5.yaml` will still be used. - -**Example: `projectDependencies.yaml`** - -```yaml -id: my.app -version: "local" -path: "." -dependencies: - - id: my.lib - version: "local" - path: "../my.lib" -``` - -By placing this file in the root directory of the `my.app` application project, you can start a server with a local copy of the `my.lib` dependency, located in the same parent directory, using the command `ui5 serve --dependency-definition ./projectDependencies.yaml`. - -The structure of the dependency definition file follows that of the [`@ui5/project/graph/providers/DependencyTree~TreeNode`](https://ui5.github.io/cli/stable/api/@ui5_project_graph_providers_DependencyTree.html#~TreeNode) type. - -## HTTP/2 Development Webserver -The UI5 CLI contains a web server to serve the project via HTTP/2 protocol. - -```sh -ui5 serve --h2 -``` - -This requires an SSL certificate. You are guided through the automatic generation process. Also see the [UI5 Server documentation](./Server.md#ssl-certificates) - -## Integration in Other Tools -One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other `Node.js`-based tools and frameworks like [Grunt](https://gruntjs.com/) or [Gulp](https://gulpjs.com/). - -All JavaScript APIs available for direct consumption are listed [here](https://ui5.github.io/cli/v4/api/index.html). However, for standard UI5 development, the [UI5 CLI](./CLI.md) should always be the first choice. diff --git a/docs/pages/Privacy.md b/docs/pages/Privacy.md deleted file mode 100644 index e9087b52a0..0000000000 --- a/docs/pages/Privacy.md +++ /dev/null @@ -1,5 +0,0 @@ -# Privacy - -This site is hosted by GitHub Pages. -Please see the -GitHub Privacy Statement for any information how GitHub processes your personal data. diff --git a/docs/pages/Project.md b/docs/pages/Project.md deleted file mode 100644 index 1d2d7260ce..0000000000 --- a/docs/pages/Project.md +++ /dev/null @@ -1,67 +0,0 @@ -# UI5 Project - -The [UI5 Project](https://github.com/SAP/ui5-project) module provides functionality to build a UI5 project. Also see [Development Overview: Project Dependencies](./Overview.md#project-dependencies). - -## Types -Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration. - -Also see [UI5 Project: Configuration](./Configuration.md#general-configuration) - -### application -Projects of type `application` are typically the main or root project. In a projects dependency tree, there should only be one project of type `application`. If multiple are found, those further away from the root are ignored. - -The source directory of an application (typically named `webapp`) is mapped to the virtual root path `/`. - -An applications source directory may or may not contain a `Component.js` file. If it does, it must also contain a `manifest.json` file. If there is a `Component.js` file, an optimized `Component-preload.js` file will be generated during the build. - -### library -UI5 libraries are often referred to as reuse-, custom- or [control libraries](https://github.com/SAP/openui5/blob/-/docs/controllibraries.md). They are a key component in sharing code across multiple projects in UI5. - -A project of type `library` must have a source directory (typically named `src`). It may also feature a "test" directory. These directories are mapped to the virtual directories `/resources` for the sources and `/test-resources` for the test resources. - -These directories should contain a directory structure representing the namespace of the library (e.g. `src/my/first/library`) to prevent name clashes between the resources of different libraries. - -### theme-library -*Available since [Specification Version](./Configuration.md#specification-versions) 1.1* - -UI5 theme libraries provide theming resources for the controls of one or multiple libraries. - -A project of type `theme-library` must have a source directory (typically named `src`). It may also feature a "test" directory. These directories are mapped to the virtual directories `/resources` for the sources and `/test-resources` for the test resources. - -The source directory must contain a directory structure representing the namespaces of the libraries it provides theme resources for. For example, a theme library named `my_custom_theme`, providing resources for a library named `my.library` should have these resources in a directory path `my/library/themes/my_custom_theme/`. - -### module -The `module` type is meant for usage with non-UI5 resources like third-party libraries. Their path mapping can be configured freely. During a build, their resources are copied without modifications. - - -## Build Output Style - -The _Output Style_ offers you control over your project's build output folder. Namespaces like `sap.m` or `sap.ui.core` can be streamlined, producing a more concise and flat output. For example, a resource like `/resources/sap/m/RangeSlider.js` will be transformed into `./RangeSlider.js`. And vice versa, applications that are built by default with `Flat` output, can leverage any namespaces they might have. - -In the table below you can find the available combinations of project type & output style. - -| Project Type / Requested Output Style | Resulting Style | -|---|---| -| **application** | | -| `Default` | Root project is written `Flat`-style. ^1^ | -| `Flat` | Same as `Default`. | -| `Namespace` | Root project is written `Namespace`-style (resources are prefixed with the project's namespace). ^1^ | -| **library** | | -| `Default` | Root project is written `Namespace`-style. ^1^ | -| `Flat` | Root project is written `Flat`-style (without its namespace, logging warnings for resources outside of it). ^1^ | -| `Namespace` | Same as `Default`. | -| **theme-library** | | -| `Default` | Root project is written in the style of the sources (multiple namespaces). ^1^ | -| `Flat` | **Unsupported** ^2^ | -| `Namespace` | **Unsupported** ^2^ | -| **module** | | -| `Default` | Root project is written with the [configured paths](https://ui5.github.io/cli/stable/pages/Configuration/#available-path-mappings). ^1^ | -| `Flat` | **Unsupported** ^3^ | -| `Namespace` | **Unsupported** ^3^ | - -^1^ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their `Default` output style. -^2^ Theme libraries in most cases have more than one namespace. -^3^ Modules have explicit path mappings configured and no namespace concept. - - -[**API Reference**](https://ui5.github.io/cli/v4/api/@ui5_project_build_ProjectBuilder.html){: .md-button .sap-icon-initiative } diff --git a/docs/pages/SAPUI5.md b/docs/pages/SAPUI5.md deleted file mode 100644 index a2b89a062a..0000000000 --- a/docs/pages/SAPUI5.md +++ /dev/null @@ -1,78 +0,0 @@ -# Consuming SAPUI5 Libraries - -!!! info - Make sure you have installed the UI5 CLI in Version 2.0 or later: `npm install --global @ui5/cli` - - The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.** - For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy). - -## Overview - -SAPUI5 libraries are hosted on the public npm registry at `registry.npmjs.org`. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide. - -!!! note - For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-and-sapui5-the-next-step/) - -## Usage -Since Version 2.0 of the UI5 CLI, it will automatically download all required framework dependencies of a project that have been listed in the corresponding `ui5.yaml` file. They will be cached in a `.ui5` directory located in the user's home directory. This happens transparently whenever you execute the `ui5 serve` or `ui5 build` commands. - -All non-framework dependencies, such as reuse libraries or UI5 CLI extensions, still need to be maintained as npm dependencies in the projects `package.json`. At the same time, framework dependencies listed in the `ui5.yaml` should not be listed in the `package.json` as they will be ignored by the UI5 CLI. - -## Configuration - -Your project's `ui5.yaml` provides a configuration section dedicated to framework dependency handling. - -This configuration can be maintained by editing the file, or by using the UI5 CLI: - -!!! example - Using the [UI5 CLI](./CLI.md): - ```sh - ui5 use sapui5@latest - ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3 - ui5 add -D sap.ushell - ``` - -**Example ui5.yaml of an application** -```yaml -specVersion: "4.0" -type: application -metadata: - name: some.project.name -framework: - name: SAPUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.comp - - name: sap.ushell - development: true - - name: themelib_sap_fiori_3 -``` - -**Example ui5.yaml of a library** -```yaml -specVersion: "4.0" -type: library -metadata: - name: some.library -framework: - name: SAPUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: themelib_sap_belize - optional: true - - name: themelib_sap_bluecrystal - optional: true - - name: themelib_sap_fiori_3 - optional: true -``` - -Please make sure that your project defines [Specification Version 2.0](./Configuration.md#specification-version-20) or higher. - -For details please refer to the [framework configuration documentation](././Configuration.md#framework-configuratio). - -## Differences Between OpenUI5 and SAPUI5 - -Please refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5) diff --git a/docs/pages/Server.md b/docs/pages/Server.md deleted file mode 100644 index 7d8f6a06df..0000000000 --- a/docs/pages/Server.md +++ /dev/null @@ -1,77 +0,0 @@ -# UI5 Server - -The [UI5 Server](https://github.com/SAP/ui5-server) module provides server capabilities for local development of UI5 projects. - -[**API Reference**](https://ui5.github.io/cli/v4/api/module-@ui5_server.html){: .md-button .sap-icon-initiative } - -## Standard Middleware - -All available standard middleware are listed below in the order of their execution. - -A project can also add custom middleware to the server by using the [Custom Server Middleware Extensibility](./extensibility/CustomServerMiddleware.md). - -| Middleware | Description | -| ---- | ---- | -| `csp` | See chapter [csp](#csp) | -| `compression` | Standard [Express compression middleware](http://expressjs.com/en/resources/middleware/compression.html) | -| `cors` | Standard [Express cors middleware](http://expressjs.com/en/resources/middleware/cors.html) | -| `discovery` | See chapter [discovery](#discovery) | -| `serveResources` | See chapter [serveResources](#serveresources) | -| `testRunner` | See chapter [testRunner](#testrunner) | -| `serveThemes` | See chapter [serveThemes](#servethemes) | -| `versionInfo` | See chapter [versionInfo](#versioninfo) | -| `nonReadRequests` | See chapter [nonReadRequests](#nonreadrequests) | -| `serveIndex` | See chapter [serveIndex](#serveindex) | - -### csp -The Content Security Policy ([CSP](https://www.w3.org/TR/CSP/)) middleware is active by default. - -The header `content-security-policy` can be set by adding URL parameter `sap-ui-xx-csp-policy` to the request with the policy name as value. - -To set the policy to report-only, append `:report-only` or `:ro` to the policy name. -E.g. `/index.html?sap-ui-xx-csp-policy=sap-target-level-1:report-only` - -#### sendSAPTargetCSP parameter -The default CSP policies can be modified using parameter `sendSAPTargetCSP` (`--sap-csp-policies` when using the CLI). -With `sendSAPTargetCSP` set to `true` the policies `sap-target-level-1` and `sap-target-level-3` policies are activated and send as report-only. - -#### Serve CSP Reports -Serving of CSP reports can be activated with parameter `serveCSPReports` (`--serve-csp-reports` when using the CLI). -With `serveCSPReports` set to `true`, the CSP reports are collected and can be downloaded from the server path `/.ui5/csp/csp-reports.json`. - -### discovery - -This middleware lists project files with URLs under several `/discovery` endpoints. This is exclusively used by the OpenUI5 test suite application. - -### serveResources -This middleware resolves requests using the [ui5-fs](https://github.com/SAP/ui5-fs)-file system abstraction. - -The following file content transformations are executed: - -- Escaping non-ASCII characters in `.properties` translation files based on a project's [configuration](./Configuration.md#encoding-of-properties-files) -- Enhancing the `manifest.json` with supported locales determined by available `.properties` [translation files](./Builder.md#generation-of-supported-locales) - -### testRunner -Serves a static version of the UI5 QUnit TestRunner at `/test-resources/sap/ui/qunit/testrunner.html`. - -### serveThemes -Compiles CSS files for themes on-the-fly from the source `*.less` files. - -Changes made to these `*.less` files while the server is running will automatically lead to the re-compilation of the relevant CSS files when requested again. - -### versionInfo -Generates and serves the version info file `/resources/sap-ui-version.json`, which is required for several framework functionalities. - -### nonReadRequests -Answers all non-read requests (POST, PUT, DELETE, etc.) that have not been answered by any other middleware with the 404 "Not Found" status code . This signals the client that these operations are not supported by the server. - -### serveIndex -In case a directory has been requested, this middleware renders an HTML with a list of the directory's content. - -## SSL Certificates -When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 CLI parameter `--h2`, you will be prompted for the automatic generation of a local SSL certificate if necessary. - -Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under `.ui5/server` in your user's home directory. - -!!! tip - If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete". diff --git a/docs/pages/Troubleshooting.md b/docs/pages/Troubleshooting.md deleted file mode 100644 index 681e778c18..0000000000 --- a/docs/pages/Troubleshooting.md +++ /dev/null @@ -1,88 +0,0 @@ -# Troubleshooting -## UI5 Server -### Chrome Redirects HTTP URLs to HTTPS (`ERR_SSL_PROTOCOL_ERROR`) -An HTTPS server or proxy that was previously running on a domain (e.g. `localhost`), might have set an HSTS header, enforcing Chrome to always use HTTPS for this domain. See https://www.chromium.org/hsts. This makes it impossible to connect to an HTTP-only server running on the same domain. - -#### Resolution -You need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. `localhost`) and pressing "delete". - -## Issues Not Listed Here -Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md#report-an-issue) on how to report an issue. - -## UI5 Project -### `~/.ui5` Taking too Much Disk Space - -There are possibly many versions of UI5 framework dependencies installed on your system, taking a large amount of disk space. - -#### Resolution - -Remove the `.ui5/framework/` directory from your user's home directory: - -```sh -rm -rf ~/.ui5/framework/ -``` - -Any missing framework dependencies will be downloaded again during the next UI5 CLI invocation. - -## Environment Variables -### Changing the Log Level - -In CI environments or in a combination with other tools, the usage of [UI5 CLI's `--log-level`](https://ui5.github.io/cli/stable/pages/CLI/#common-options) command parameter might be inconvenient and even impossible. - -#### Resolution - -Replace UI5 CLI's `--log-level` option with the `UI5_LOG_LVL` environment variable. - -Example: - -`UI5_LOG_LVL=silly ui5 build` - -On Windows: - -`set UI5_LOG_LVL=silly ui5 build` - -Cross Environment via [cross-env](https://www.npmjs.com/package/cross-env): - -`cross-env UI5_LOG_LVL=silly ui5 build` - -UI5 + Karma: - -`cross-env UI5_LOG_LVL=verbose npm run karma` - - -!!! warning - The combination of the `UI5_LOG_LVL` environment variable with the `--log-level` CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the `UI5_LOG_LVL` environment variable. - -### Changing UI5 CLI's Data Directory - -UI5 CLI's data directory is by default at `~/.ui5`. It's the place where the framework artifacts are stored. -In some cases and environments this is not a convenient location and the user needs to provide a better one. - -The path to it can either be provided via environment variable or permanently set in the configuration. - -!!! info - Paths are resolved relative to the current root project path (i.e. where the package.json is located). - -#### Environment variable `UI5_DATA_DIR` - -Unix: -```sh -UI5_DATA_DIR=/my/custom/location/.ui5 ui5 build -``` - -Windows: -```sh -set UI5_DATA_DIR="C:\\my\\custom\\location\\.ui5" ui5 build -``` - -#### Configuration `ui5DataDir` - -Configure a custom directory: -```sh -ui5 config set ui5DataDir /my/custom/location/.ui5 -``` - -Unset the configuration to switch back to the default directory: -```sh -ui5 config set ui5DataDir -``` diff --git a/docs/pages/Workspace.md b/docs/pages/Workspace.md deleted file mode 100644 index effc25e1dd..0000000000 --- a/docs/pages/Workspace.md +++ /dev/null @@ -1,143 +0,0 @@ -# UI5 Workspaces - -!!! info - **UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)** - -!!! example - ```yaml title="ui5-workspace.yaml" - specVersion: workspace/1.0 - metadata: - name: default - dependencyManagement: - resolutions: - - path: ../heavy.library - ``` - -## General Concept - -UI5 Workspaces can be used to create a personalized local development environment for a UI5 project. They allow to use UI5 dependencies from local directories without the need to use the link features of package managers like npm. "UI5 dependencies" generally refers to projects that have a `ui5.yaml`. - -Workspaces are typically configured in a `ui5-workspace.yaml` file, located next to the project's `ui5.yaml`. The file can contain one or many workspace configurations, each separated by [three dashes](https://yaml.org/spec/1.2.2/#22-structures). For example: - -!!! example - ```yaml title="ui5-workspace.yaml" - specVersion: workspace/1.0 - metadata: - name: default - dependencyManagement: - resolutions: - - path: ../heavy.library - --- - specVersion: workspace/1.0 - metadata: - name: extended - dependencyManagement: - resolutions: - - path: ../heavy.library - - path: ../light.library - - path: ../test.library - ``` - -If a workspace configuration named `default` exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter `--workspace`. - -Workspaces can only be used in the project that is currently being worked on, i.e. the current root project. Workspace configurations of dependencies are ignored. The workspace file, however, does not necessarily have to be located within the project. You can reference any workspace configuration file via the UI5 CLI parameter `--workspace-config`. - -This concept has been discussed in an RFC: [RFC 0006 Local Dependency Resolution](https://github.com/UI5/cli/blob/main/rfcs/0006-local-dependency-resolution.md) - -## Configuration -A UI5 Workspace configuration must define a specification version (`specVersion`) compatible with its configuration. For more information, see [Workspace Specification Versions](#workspace-specification-versions). - -```yaml -specVersion: "workspace/1.0" -``` - -### Metadata - -!!! example - ```yaml - specVersion: workspace/1.0 - metadata: - name: dolphin - ``` - -#### name - -A workspace must have a `name`. This allows to easily switch between individual workspace configurations. - -If a workspace is named `default`, **it will be used automatically**, unless a different workspace is selected using the `--workspace` CLI parameter. - -The `name` property must satisfy the following conditions. They are identical to [project names](./Configuration.md#name): - -* Must be at least 3 characters long -* Must be no longer than 80 characters -* Must contain lowercase characters only -* Must contain alphanumeric characters, dash, underscore and period only - - Exception: The `@` and `/` characters are allowed at certain positions as - explained below -* Must start with an alphabetic character or an `@` character -* If it starts with an `@` character, it must contain exactly one - forward slash `/` - - This is aligned with the npm concept for package scopes, for example `@org/lib.name` - -## Dependency Management - -UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project. - -!!! example - ```yaml - specVersion: workspace/1.0 - metadata: - name: dolphin - dependencyManagement: - resolutions: - - path: ../light.library - - path: ../heavy.library - - path: ../test.library - ``` - -### Resolutions - -```yaml -dependencyManagement: - resolutions: - - path: ../test.library -``` - -Resolution paths will be used by UI5 CLI to look for project dependencies. Any dependencies found via these paths will be used over the ones found with the regular dependency resolution mechanism. This includes UI5 CLI extensions. - -Paths must point to a directory containing a `package.json`. UI5 CLI will attempt to find a UI5 project here. However, if the `package.json` contains a [`workspaces`](https://docs.npmjs.com/cli/v8/using-npm/workspaces), or equivalently, `ui5.workspaces` configuration (which overrules the first), UI5 CLI will resolve the workspace first and attempt to find UI5 projects in the configured "npm workspaces". This is commonly used in mono-repos. An example can be found in the [OpenUI5 repository](https://github.com/SAP/openui5/blob/b4267488e5d3546de4cd9577ccac4208482d71e0/package.json#L130-L132). - -Paths must be written in POSIX (i.e. using only forward slashes `/` as path segment separators) and must be **relative to the workspace configuration file**. Absolute paths, or paths relative to the home directory (`~`), are not allowed. This is to ensure that workspace configuration files are easy to share and to reduce the chance of them exposing sensitive information like user names or large directory hierarchies. Symbolic links are followed. - -Note that this configuration only affects the resolution of dependencies which have already been found during the regular dependency resolution process of a project. For example, if a workspace resolution path resolves to a project that would otherwise not be part of the dependency tree of the current root project, it will not be added to the dependency tree. Also, transitive dependencies of resolved projects are not being followed. - -## Workspace Specification Versions -A workspace configuration must define a Specification Version by setting the `specVersion` property. UI5 CLI uses this information to detect whether the currently installed version is compatible with a workspace's configuration. - -```yaml -specVersion: "workspace/1.0" -[...] -``` - -To use new features, a workspace configuration might need to update the `specVersion` property. - -For a given Specification Version "workspace/**MAJOR.MINOR**"" we will increment: - -1. **MAJOR** when there are breaking changes that might require additional actions by the project's maintainer -2. **MINOR** when adding new features that are fully backward-compatible - -All changes are documented below. - -### Compatibility Matrix - -Unless otherwise noted in the table below, UI5 CLI modules are backward-compatible. - -Version | UI5 CLI Release ---- | --- -**`workspace/1.0`** | v3.0.0+ - -### Specification Version `workspace/1.0` - -Initial version. - -Specification Version `workspace/1.0` configurations are compatible with [UI5 CLI](https://github.com/SAP/ui5-cli) v3.0.0 and above. diff --git a/docs/pages/extensibility/CustomServerMiddleware.md b/docs/pages/extensibility/CustomServerMiddleware.md deleted file mode 100644 index 7a164ca4d8..0000000000 --- a/docs/pages/extensibility/CustomServerMiddleware.md +++ /dev/null @@ -1,256 +0,0 @@ -# Custom UI5 Server Middleware - -The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal [express](https://expressjs.com/) server of the UI5 Server module. - -The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by `ui5-middleware-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-middleware-). - -Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. - -## Configuration - -In a projects `ui5.yaml` file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored. - -A middleware may be executed before or after any other middleware. This can either be a [standard middleware](../Server.md#standard-middleware) or another custom middleware. - -### Example: Basic configuration - -```yaml -specVersion: "4.0" -type: application -metadata: - name: my.application -server: - customMiddleware: - - name: myCustomMiddleware - mountPath: /myapp - afterMiddleware: compression - configuration: - debug: true -``` - -In the above example the middleware `compression` is already included as a standard middleware by the UI5 Server. When serving the application `my.application`, the server will call the custom middleware `myCustomMiddleware` after `compression`. - -There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below). - -An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the `app.use` call (see [express API reference](https://expressjs.com/en/4x/api.html#app.use)). - -### Execution order - -Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined *before* that reference. - -## Custom Middleware Extension - -A custom middleware extension consists of a `ui5.yaml` and a [custom middleware implementation](#custom-middleware-implementation). It can be a standalone module or part of an existing UI5 project. - -### Example: ui5.yaml - -```yaml -specVersion: "4.0" -kind: extension -type: server-middleware -metadata: - name: markdownHandler -middleware: - path: lib/middleware/markdownHandler.js -``` - -Custom middleware extensions can be **standalone modules** which are handled as dependencies. - -Alternatively you can implement a custom middleware extension as **part of your UI5 project**. -In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. - -The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup. - -### Example: Custom Middleware Extension defined in UI5 project - -```yaml -# Project configuration for the above example -specVersion: "4.0" -kind: project -type: application -metadata: - name: my.application -server: - customMiddleware: - - name: markdownHandler - beforeMiddleware: serveResources ---- -# Custom middleware extension as part of your project -specVersion: "4.0" -kind: extension -type: server-middleware -metadata: - name: markdownHandler -middleware: - path: lib/middleware/markdownHandler.js -``` - -## Custom Middleware Implementation - -A custom middleware implementation needs to return a function with the following signature: - -=== "ESM" - - ```js linenums="1" - /** - * Custom UI5 Server middleware API - * - * @param {object} parameters Parameters - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom middleware. - * This parameter is only provided to custom middleware - * extensions defining Specification Version 3.0 and later. - * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil - * Specification version-dependent interface to a - * MiddlewareUtil instance. See the corresponding API reference for details: - * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html - * @param {object} parameters.options Options - * @param {string} parameters.options.configuration - * Custom middleware configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.middlewareName - * Name of the custom middleware. - * This parameter is only provided to custom middleware extensions - * defining Specification Version 3.0 and later - * @param {object} parameters.resources Readers for accessing resources - * @param {module:@ui5/fs.AbstractReader} parameters.resources.all - * Reader to access resources of the root project and its dependencies - * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject - * Reader to access resources of the root project - * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies - * Reader to access resources of the project's dependencies. - * @returns {function} Middleware function to use - */ - export default function({log, middlewareUtil, options, resources}) { - return async function (req, res, next) { - // [...] - } - }; - ``` - -=== "CommonJS" - - ```js linenums="1" - /** - * Custom UI5 Server middleware API - * - * @param {object} parameters Parameters - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom middleware. - * This parameter is only provided to custom middleware - * extensions defining Specification Version 3.0 and later. - * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil - * Specification version-dependent interface to a - * MiddlewareUtil instance. See the corresponding API reference for details: - * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html - * @param {object} parameters.options Options - * @param {string} parameters.options.configuration - * Custom middleware configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.middlewareName - * Name of the custom middleware. - * This parameter is only provided to custom middleware extensions - * defining Specification Version 3.0 and later - * @param {object} parameters.resources Readers for accessing resources - * @param {module:@ui5/fs.AbstractReader} parameters.resources.all - * Reader to access resources of the root project and its dependencies - * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject - * Reader to access resources of the root project - * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies - * Reader to access resources of the project's dependencies. - * @returns {function} Middleware function to use - */ - module.exports = function({log, middlewareUtil, options, resources}) { - return async function (req, res, next) { - // [...] - } - }; - ``` - -### Example: lib/middleware/markdownHandler.(m)js - -=== "ESM" - - ```js linenums="1" - import MarkdownIt from "markdown-it"; - - export default async function({log, middlewareUtil, options, resources}) { - const md = new MarkdownIt(); - return function (req, res, next) { - if (!req.path || !req.path.endsWith(".html")) { - // Do not handle non-HTML requests - next(); - return; - } - // Try to read a corresponding markdown file - resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { - if (!resource) { - // No file found, hand over to next middleware - next(); - return; - } - log.info(`Rendering markdown for ${resource.getPath()}`); - const markdown = await resource.getBuffer(); - // Generate HTML from markdown string - const html = md.render(markdown.toString()); - res.type('.html'); - res.end(html); - }).catch((err) => { - next(err); - }); - } - }; - ``` - Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm) - -=== "CommonJS" - - ```js linenums="1" - module.exports = async function({log, middlewareUtil, options, resources}) { - const MarkdownIt = require("markdown-it"); - const md = new MarkdownIt(); - return function (req, res, next) { - if (!req.path || !req.path.endsWith(".html")) { - // Do not handle non-HTML requests - next(); - return; - } - // Try to read a corresponding markdown file - resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { - if (!resource) { - // No file found, hand over to next middleware - next(); - return; - } - log.info(`Rendering markdown for ${resource.getPath()}`); - const markdown = await resource.getBuffer(); - // Generate HTML from markdown string - const html = md.render(markdown.toString()); - res.type('.html'); - res.end(html); - }).catch((err) => { - next(err); - }); - } - }; - ``` - Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3) - -## Helper Class `MiddlewareUtil` - -Custom middleware defining [Specification Version](../Configuration.md#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance. - -In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html). - -## Integration with `karma-ui5` - -!!! Warning - The Karma project has been [deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes) as of 2023 - -[`karma-ui5`](https://github.com/SAP/karma-ui5) is a plugin for the popular [Karma test runner](https://karma-runner.github.io/). Based on your [configuration](https://github.com/SAP/karma-ui5#url), it can fetch resources from a dedicated server or start an internal server using parts of UI5 CLI. - -In the latter case, any custom middleware configured in the default `ui5.yaml` of the project will be used automatically. - -However, since Karma uses the [`connect`](https://github.com/senchalabs/connect) framework, as opposed to UI5 CLI's [`express`](https://github.com/expressjs/express), custom middleware might not always work as expected. Compared to `connect`, the `express` framework provides a more versatile API to middleware. - -Therefore, if you plan to use custom middleware in an integrated scenario with `karma-ui5`, you must **restrict the middleware to using the [`connect`](https://github.com/senchalabs/connect) API only** to ensure compatibility. - -Alternatively, you can start a server with the usual `ui5 serve` command and [configure the corresponding URL](https://github.com/SAP/karma-ui5#url) for use by `karma-ui5`. diff --git a/docs/pages/extensibility/CustomTasks.md b/docs/pages/extensibility/CustomTasks.md deleted file mode 100644 index b83693c096..0000000000 --- a/docs/pages/extensibility/CustomTasks.md +++ /dev/null @@ -1,476 +0,0 @@ -# Custom UI5 Builder Tasks - -The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the [standard tasks](../Builder.md#standard-tasks), custom tasks can be created. - -The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by `ui5-task-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-task-). - -Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. - -## Configuration - -You can configure your build process with additional build task. These custom tasks are defined in the project [configuration](../Configuration.md). - -To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a [standard task](../Builder.md#standard-tasks) or another custom task. -Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position. - -In the below example, when building the library `my.library` the custom `babel` task will be executed before the standard task `generateComponentPreload`. -Another custom task called `render-markdown-files` is then executed immediately after the standard task `minify`. - -### Example: Basic configuration - -```yaml -# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. -specVersion: "4.0" -type: library -metadata: - name: my.library -builder: - customTasks: - - name: babel - beforeTask: generateComponentPreload - - name: render-markdown-files - afterTask: minify - configuration: - markdownStyle: - firstH1IsTitle: true -``` - -### Example: Connect multiple custom tasks - -You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined *before* you reference it via `beforeTask` or `afterTask`. - -```yaml -# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'. -specVersion: "4.0" -type: library -metadata: - name: my.library -builder: - customTasks: - - name: my-custom-task-1 - beforeTask: generateComponentPreload - - name: my-custom-task-2 - afterTask: my-custom-task-1 -``` - -## Custom Task Extension - -A custom task extension consists of a `ui5.yaml` and a [task implementation](#task-implementation). It can be a standalone module or part of an existing UI5 project. - -### Example: ui5.yaml - -```yaml -specVersion: "4.0" -kind: extension -type: task -metadata: - name: render-markdown-files -task: - path: lib/tasks/renderMarkdownFiles.js -``` - -Task extensions can be **standalone modules** which are handled as dependencies. - -Alternatively you can implement a task extension as **part of your UI5 project**. -In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. - -The task extension will then be automatically collected and processed during the processing of the project. - -### Example: Custom Task Extension defined in UI5 project - -```yaml -# Project configuration for the above example -specVersion: "4.0" -kind: project -type: library -metadata: - name: my.library -builder: - customTasks: - - name: render-markdown-files - afterTask: minify - configuration: - markdownStyle: - firstH1IsTitle: true ---- -# Task extension as part of your project -specVersion: "4.0" -kind: extension -type: task -metadata: - name: render-markdown-files -task: - path: lib/tasks/renderMarkdownFiles.js -``` - -## Task Implementation - -A custom task implementation needs to return a function with the following signature: - -=== "ESM" - - ```js linenums="1" - /** - * Custom task API - * - * @param {object} parameters - * - * @param {module:@ui5/fs.AbstractReader} parameters.dependencies - * Reader to access resources of the project's dependencies - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom task. - * This parameter is only available to custom task extensions - * defining Specification Version 3.0 and later. - * @param {object} parameters.options Options - * @param {string} parameters.options.projectName - * Name of the project currently being built - * @param {string} parameters.options.projectNamespace - * Namespace of the project currently being built - * @param {string} parameters.options.configuration - * Custom task configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.taskName - * Name of the custom task. - * This parameter is only provided to custom task extensions - * defining Specification Version 3.0 and later. - * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil - * Specification Version-dependent interface to a TaskUtil instance. - * See the corresponding API reference for details: - * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html - * @param {module:@ui5/fs.DuplexCollection} parameters.workspace - * Reader/Writer to access and modify resources of the - * project currently being built - * @returns {Promise} - * Promise resolving once the task has finished - */ - export default async function({dependencies, log, options, taskUtil, workspace}) { - // [...] - }; - ``` - -=== "CommonJS" - - ```js linenums="1" - /** - * Custom task API - * - * @param {object} parameters - * - * @param {module:@ui5/fs.AbstractReader} parameters.dependencies - * Reader to access resources of the project's dependencies - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom task. - * This parameter is only available to custom task extensions - * defining Specification Version 3.0 and later. - * @param {object} parameters.options Options - * @param {string} parameters.options.projectName - * Name of the project currently being built - * @param {string} parameters.options.projectNamespace - * Namespace of the project currently being built - * @param {string} parameters.options.configuration - * Custom task configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.taskName - * Name of the custom task. - * This parameter is only provided to custom task extensions - * defining Specification Version 3.0 and later. - * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil - * Specification Version-dependent interface to a TaskUtil instance. - * See the corresponding API reference for details: - * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html - * @param {module:@ui5/fs.DuplexCollection} parameters.workspace - * Reader/Writer to access and modify resources of the - * project currently being built - * @returns {Promise} - * Promise resolving once the task has finished - */ - module.exports = async function({dependencies, log, options, taskUtil, workspace}) { - // [...] - }; - ``` - -### Required Dependencies - -!!! info - This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0) - -Custom tasks can export an optional callback function `determineRequiredDependencies` to control which dependency-resources are made available through the `dependencies`-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 CLI might be able to build a project faster. - -Before executing a task, UI5 CLI will ensure that all required dependencies have been built. - -If this callback is not provided, UI5 CLI will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension: - -* **Specification Version 3.0 and later:** If no callback is provided, UI5 CLI assumes that no dependencies are required. In this case, the `dependencies` parameter will be omitted. -* **Specification Versions before 3.0:** If no callback is provided, UI5 CLI assumes that all dependencies are required. - - -*For more details, see also [RFC 0012 UI5 CLI Extension API v3](https://github.com/UI5/cli/blob/v3/rfcs/0012-UI5-Tooling-Extension-API-3.md#3-tasks-requiring-dependencies)* - -=== "ESM" - - ```js linenums="1" - /** - * Callback function to define the list of required dependencies - * - * @param {object} parameters - * @param {Set} parameters.availableDependencies - * Set containing the names of all direct dependencies of - * the project currently being built. - * @param {function} parameters.getDependencies - * Identical to TaskUtil#getDependencies - * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Creates a list of names of all direct dependencies - * of a given project. - * @param {function} parameters.getProject - * Identical to TaskUtil#getProject - * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Retrieves a Project-instance for a given project name. - * @param {object} parameters.options - * Identical to the options given to the standard task function. - * @returns {Promise} - * Promise resolving with a Set containing all dependencies - * that should be made available to the task. - * UI5 CLI will ensure that those dependencies have been - * built before executing the task. - */ - export async function determineRequiredDependencies({availableDependencies, getDependencies, getProject, options}) { - // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } - - // Reduce list of required dependencies: Do not require any UI5 framework projects - availableDependencies.forEach((depName) => { - if (getProject(depName).isFrameworkProject()) { - availableDependencies.delete(depName) - } - }); - // => Only resources of project "my.lib" will be available to the task - return availableDependencies; - } - ``` - -=== "CommonJS" - - ```js linenums="1" - /** - * Callback function to define the list of required dependencies - * - * @param {object} parameters - * @param {Set} parameters.availableDependencies - * Set containing the names of all direct dependencies of - * the project currently being built. - * @param {function} parameters.getDependencies - * Identical to TaskUtil#getDependencies - * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Creates a list of names of all direct dependencies - * of a given project. - * @param {function} parameters.getProject - * Identical to TaskUtil#getProject - * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Retrieves a Project-instance for a given project name. - * @param {object} parameters.options - * Identical to the options given to the standard task function. - * @returns {Promise} - * Promise resolving with a Set containing all dependencies - * that should be made available to the task. - * UI5 CLI will ensure that those dependencies have been - * built before executing the task. - */ - module.exports.determineRequiredDependencies = async function({availableDependencies, getDependencies, getProject, options}) { - // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } - - // Reduce list of required dependencies: Do not require any UI5 framework projects - availableDependencies.forEach((depName) => { - if (getProject(depName).isFrameworkProject()) { - availableDependencies.delete(depName) - } - }); - // => Only resources of project "my.lib" will be available to the task - return availableDependencies; - } - ``` - -### Examples - -The following code snippets show examples for custom task implementations. - -### Example: lib/tasks/renderMarkdownFiles.js - -This example is making use of the `resourceFactory` [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) -API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build -result by writing them into the provided `workspace`. - -=== "ESM" - - ```js linenums="1" - import path from "node:path"; - import renderMarkdown from "./renderMarkdown.js"; - - /* - * Render all .md (Markdown) files in the project to HTML - */ - export default async function({dependencies, log, options, taskUtil, workspace}) { - const {createResource} = taskUtil.resourceFactory; - const textResources = await workspace.byGlob("**/*.md"); - await Promise.all(textResources.map(async (resource) => { - const markdownResourcePath = resource.getPath(); - - log.info(`Rendering markdown file ${markdownResourcePath}...`); - const htmlString = await renderMarkdown(await resource.getString(), options.configuration); - - // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here - const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; - const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); - - const markdownResource = createResource({ - path: newResourcePath, - string: htmlString - }); - await workspace.write(markdownResource); - })); - }; - ``` - -=== "CommonJS" - - ```js linenums="1" - const path = require("node:path"); - const renderMarkdown = require("./renderMarkdown.js"); - - /* - * Render all .md (Markdown) files in the project to HTML - */ - module.exports = async function({dependencies, log, options, taskUtil, workspace}) { - const {createResource} = taskUtil.resourceFactory; - const textResources = await workspace.byGlob("**/*.md"); - await Promise.all(textResources.map(async (resource) => { - const markdownResourcePath = resource.getPath(); - - log.info(`Rendering markdown file ${markdownResourcePath}...`); - const htmlString = await renderMarkdown(await resource.getString(), options.configuration); - - // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here - const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; - const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); - - const markdownResource = createResource({ - path: newResourcePath, - string: htmlString - }); - await workspace.write(markdownResource); - })); - }; - ``` - -!!! warning - Depending on your project setup, UI5 CLI tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used. - - Tasks should ideally use the reader/writer APIs provided by UI5 CLI for working with project resources. - -### Example: lib/tasks/compileLicenseSummary.js - -This example is making use of multiple [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) -APIs to retrieve additional information about the project currently being built (`taskUtil.getProject()`) and its direct dependencies -(`taskUtil.getDependencies()`). Project configuration files like `package.json` can be accessed directly using `project.getRootReader()`. - -=== "ESM" - - ```js linenums="1" - import path from "node:path"; - - /* - * Compile a list of all licenses of the project's dependencies - * and write it to "dependency-license-summary.json" - */ - export default async function({dependencies, log, options, taskUtil, workspace}) { - const {createResource} = taskUtil.resourceFactory; - const licenses = new Map(); - const projectsVisited = new Set(); - - async function processProject(project) { - return Promise.all(taskUtil.getDependencies().map(async (projectName) => { - if (projectsVisited.has(projectName)) { - return; - } - projectsVisited.add(projectName); - const project = taskUtil.getProject(projectName); - const pkgResource = await project.getRootReader().byPath("/package.json"); - if (pkgResource) { - const pkg = JSON.parse(await pkgResource.getString()) - - // Add project to list of licenses - if (licenses.has(pkg.license)) { - licenses.get(pkg.license).push(project.getName()); - } else { - // License not yet in map. Define it - licenses.set(pkg.license, [project.getName()]); - } - - } else { - log.info(`Could not find package.json file in project ${project.getName()}`); - } - return processProject(project); - })); - } - // Start processing dependencies of the root project - await processProject(taskUtil.getProject()); - - const summaryResource = createResource({ - path: "/dependency-license-summary.json", - string: JSON.stringify(Object.fromEntries(licenses), null, "\t") - }); - await workspace.write(summaryResource); - }; - ``` - -=== "CommonJS" - - ```js linenums="1" - const path = require("node:path"); - - /* - * Compile a list of all licenses of the project's dependencies - * and write it to "dependency-license-summary.json" - */ - module.exports = async function({dependencies, log, options, taskUtil, workspace}) { - const {createResource} = taskUtil.resourceFactory; - const licenses = new Map(); - const projectsVisited = new Set(); - - async function processProject(project) { - return Promise.all(taskUtil.getDependencies().map(async (projectName) => { - if (projectsVisited.has(projectName)) { - return; - } - projectsVisited.add(projectName); - const project = taskUtil.getProject(projectName); - const pkgResource = await project.getRootReader().byPath("/package.json"); - if (pkgResource) { - const pkg = JSON.parse(await pkgResource.getString()) - - // Add project to list of licenses - if (licenses.has(pkg.license)) { - licenses.get(pkg.license).push(project.getName()); - } else { - // License not yet in map. Define it - licenses.set(pkg.license, [project.getName()]); - } - - } else { - log.info(`Could not find package.json file in project ${project.getName()}`); - } - return processProject(project); - })); - } - // Start processing dependencies of the root project - await processProject(taskUtil.getProject()); - - const summaryResource = createResource({ - path: "/dependency-license-summary.json", - string: JSON.stringify(Object.fromEntries(licenses), null, "\t") - }); - await workspace.write(summaryResource); - }; - ``` - -## Helper Class `TaskUtil` - -Custom tasks defining [Specification Version](../Configuration.md#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance. - -In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). diff --git a/docs/pages/extensibility/ProjectShims.md b/docs/pages/extensibility/ProjectShims.md deleted file mode 100644 index bdda5bd2cb..0000000000 --- a/docs/pages/extensibility/ProjectShims.md +++ /dev/null @@ -1,183 +0,0 @@ -### Project Shims -A project shim extension can be used to define or extend a project configuration of a module. The most popular use case is probably to add UI5 project configuration to a third party module that otherwise could not be used with the UI5 CLI. - -Also see [RFC 0002 Project Shims](https://github.com/UI5/cli/blob/main/rfcs/0002-project-shims.md). - -#### Structure -```yaml -specVersion: "4.0" -kind: extension -type: project-shim -metadata: - name: -shims: - configurations: - : - specVersion: "4.0" - type: - metadata: - name: - : - specVersion: "4.0" - type: - metadata: - name: - dependencies: - : - - - - - - - collections: - : - modules: - : - : - : -``` - -"module name" refers to the name of the module as identified by the used translator. E.g. when using the npm translator, the name declared in the modules `package.json` is used here. In most cases, the module name also becomes the internal ID of the project. - -#### Properties -##### configurations (optional) -Used to add configuration to any module. - -Map of module names. The values represent the configuration that should be applied to the module. - -**Note:** Configuration is applied to the module using [`Object.assign()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign). This means that existing configuration properties will be overwritten. - -##### dependencies (optional) -Used to add dependencies to any module. - -Map of module names. The value is an array of module names that this module depends on. Note that the other modules need to be part of the dependency tree of the root project (not as direct children, just somewhere). - -##### collections (optional) -Used when a dependency contains multiple modules. Also referred to as a [Monorepo](https://en.wikipedia.org/wiki/Monorepo). - -Map of module names. The values are objects with collection-specific configuration: -- `modules`: Map of project IDs and their relative file system paths inside the collection module. The project ID does not have to match the actual module name (as for instance defined in the modules `package.json`). UI5 Project will use it in place of a module name. - -#### Example A: -An application "my-application" defines a npm dependency to [lodash](https://lodash.com/) in its `package.json` and configures it by using a project-shim extension added to its `ui5.yaml`. - -**ui5.yaml** -```yaml -specVersion: "4.0" -type: application -metadata: - name: my.application ---- # Everything below this line could also be put into the ui5.yaml of a standalone extension module -specVersion: "4.0" -kind: extension -type: project-shim -metadata: - name: my.application.thirdparty -shims: - configurations: - lodash: # name as defined in package.json - specVersion: "4.0" - type: module # Use module type - metadata: - name: lodash - resources: - configuration: - paths: - /resources/my/application/thirdparty/: "" # map root directory of lodash module -``` - -#### Example B: -An application "application.a" depends on a library "legacy.library.a" which does not contain a `ui5.yaml` or `package.json` yet (nor do its dependencies). - -##### Structure of the legacy library directories (two repositories) -``` -legacy-libs/ - \_ src/ - \_ library.a/ - \_ src/ - \_ test/ - \_ library.b/ - \_ src/ - \_ test/ -legacy-library-x/ - \_ src/ - \_ test/ -``` - -##### Dependencies between the legacy libraries -``` -legacy.library.a depends on legacy.library.b -legacy.library.a depends on legacy.library.x - -legacy.library.b depends on legacy.library.x -``` - -##### application.a -**Directory structure** -``` -application-a/ - \_ node_modules/ - \_ legacy-libs/ - \_ legacy-library-x/ - \_ webapp/ - \_ ui5.yaml - \_ package.json -``` - -**package.json (extract)** -[napa](https://github.com/shama/napa) can install git repositories that are lacking a `package.json` with npm. Within `ui5-project`, the npm translator already detects dependencies defined in the `napa` section of a `package.json` and tries to resolve them. - -```json -{ - "scripts": { - "install": "napa" - }, - "napa": { - "legacy-libs": "", - "legacy-library-x": "" - } -} - -``` - -**ui5.yaml** -The shim defined in the application configures the legacy libraries and defines their dependencies. This shim might as well be a standalone module that is added to the applications dependencies. That would be the typical reuse scenario for shims. - -```yaml -specVersion: "4.0" -type: application -metadata: - name: application.a ----- -specVersion: "4.0" -kind: extension -type: project-shim -metadata: - name: legacy-lib-shims -shims: - configurations: - legacy-library-a: - specVersion: "4.0" - type: library - metadata: - name: legacy.library.a - legacy-library-b: - specVersion: "4.0" - type: library - metadata: - name: legacy.library.b - legacy-library-x: - specVersion: "4.0" - type: library - metadata: - name: legacy.library.x - dependencies: - legacy-library-a: - - legacy-library-b - - legacy-library-x - legacy-library-b: - - legacy-library-x - collections: - legacy-libs: - modules: - legacy-library-a: src/library.a - legacy-library-b: src/library.b -``` diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css deleted file mode 100644 index cbc02d2937..0000000000 --- a/docs/stylesheets/extra.css +++ /dev/null @@ -1,199 +0,0 @@ -@font-face { - font-family: "SAP-icons"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/SAP-icons.woff2") format("woff2"), local("SAP-icons"); - font-weight: normal; - font-style: normal; -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 400; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular.woff2") format("woff2"), local("72"); -} -@font-face { - font-family: "72full"; - font-style: normal; - font-weight: 400; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 700; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold.woff2") format("woff2"), local("72-Bold"); -} -@font-face { - font-family: "72full"; - font-style: normal; - font-weight: 700; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 300; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light.woff2") format("woff2"), local("72-Light"); -} -@font-face { - font-family: "72full"; - font-style: normal; - font-weight: 300; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-Bold"; - font-style: normal; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold.woff2") format("woff2"), local("72-Bold"); -} -@font-face { - font-family: "72-Boldfull"; - font-style: normal; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-Light"; - font-style: normal; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light.woff2") format("woff2"), local("72-Light"); -} -@font-face { - font-family: "72-Lightfull"; - font-style: normal; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Mono"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular.woff2") format("woff2"), local("72Mono"); -} -@font-face { - font-family: "72Monofull"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Mono-Bold"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold.woff2") format("woff2"), local("72Mono-Bold"); -} -@font-face { - font-family: "72Mono-Boldfull"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Black"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff2") format("woff2"); -} -@font-face { - font-family: "72Blackfull"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-SemiboldDuplex"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex.woff2") format("woff2"); -} -@font-face { - font-family: "72-SemiboldDuplexfull"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 400; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 700; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 300; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-Bold"; - font-style: normal; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-Light"; - font-style: normal; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Mono"; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Mono-Bold"; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Black"; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-SemiboldDuplex"; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex-full.woff2") format("woff2"); -} - -html, body, h1, h2, h3, h4, h5, h6, p { - font-family: "72-Regular", "72", "72full", Arial, Helvetica, sans-serif; -} - -.sap-icon-initiative::before { - font-family: SAP-icons; - content: "\e161"; - margin-right: 0.5em; -} - -.sap-icon-accept::before { - font-family: SAP-icons; - content: "\e05b"; -} - -.sap-icon-ui5-after::after { - font-family: SAP-icons; - content: "\e21b"; - margin-left: 0.5em; - color: var(--md-primary-fg-color); -} - -.ui5-footer-item { - flex-grow: 0; - color: var(--md-footer-fg-color--lighter); - font-size: .64rem; - margin: auto 0.6rem; - padding: 0.4rem 0; -} - -.md-copyright { - flex-grow: 1; -} diff --git a/docs/updates/migrate-v1.md b/docs/updates/migrate-v1.md deleted file mode 100644 index 4b2489f316..0000000000 --- a/docs/updates/migrate-v1.md +++ /dev/null @@ -1,64 +0,0 @@ -# Migrate to v1 - -v1.0.0 is the first stable release of the UI5 CLI. There are only a few notable changes to the 0.x alpha version. - -## Breaking changes - -**ui5-builder: Add transformation of apps index.html in self-contained build ([SAP/ui5-builder#137](https://github.com/SAP/ui5-builder/pull/137))** - -When running a self-contained build on an application project, the -index.html will be transformed by adopting the UI5 bootstrap script tag -to load the custom bundle file instead. - -**ui5-project: normalizer: Rename optional parameter "translator" ([SAP/ui5-project#96](https://github.com/SAP/ui5-project/pull/96))** - -Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName" - -**ui5-fs: Remove top-level access to adapters ([SAP/ui5-fs#69](https://github.com/SAP/ui5-fs/pull/69))** - -Adapters "AbstractAdapter", "FileSystem" and "Memory" used to be accessible via the top-level export of index.js -Example: -```js -require("@ui5/project").FileSystem -``` - -This is no longer possible. Adapters are now grouped in the top-level object "adapters" and can be accessed from there -Example: -```js -require("@ui5/project").adapters.FileSystem -``` - -## How to upgrade - -### Global installation - -To upgrade your global installation, just run the installation command again, which will upgrade to the latest version. - -``` -npm install --global @ui5/cli -``` - -**Note:** Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see [Local vs. Global installation](https://github.com/SAP/ui5-cli#local-vs-global-installation)). - -### Local installation - -To upgrade the CLI installation within a project you need to run the following command. - -``` -npm install @ui5/cli@^1 -``` - -### ui5.yaml - -#### `specVersion: "1.0"` - -We have introduced the [specification version `1.0`](../pages/Configuration.md#specification-version-10). -New features will only be available for projects with specVersion `1.0` or newer. -The specVersion `0.1` will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects. - -```yaml -specVersion: "1.0" -metadata: - name: -type: -``` diff --git a/docs/updates/migrate-v2.md b/docs/updates/migrate-v2.md deleted file mode 100644 index fcfa286f0b..0000000000 --- a/docs/updates/migrate-v2.md +++ /dev/null @@ -1,68 +0,0 @@ -# Migrate to v2 - -v2.0.0 of the UI5 CLI was released on April 1, 2020. As a major feature, it introduces the easy consumption of SAPUI5 libraries in UI5 projects. - -## Breaking changes -**All UI5 CLI Modules: Require Node.js >= 10** - -Support for older Node.js releases has been dropped. - -**UI5 Builder: Make namespace mandatory for application and library projects ([SAP/ui5-builder#430](https://github.com/SAP/ui5-builder/pull/430))** - -The UI5 CLI must be able to determine an application- or library project's namespace. Otherwise an error is thrown. - -Ideally the namespace should be defined in the `sap.app/id` field of the [`manifest.json`](https://ui5.sap.com/#/topic/be0cf40f61184b358b5faedaec98b2da) - -In case of libraries, additional fallbacks are in place: - -1. The `name` attribute defined in the `.library` file -2. The path of the `library.js` file - -**UI5 Builder: LibraryFormatter: Ignore manifest.json of nested apps ([SAP/ui5-builder#392](https://github.com/SAP/ui5-builder/pull/392))** - -If a library contains both a manifest.json and a .library file, they must be located in the same directory. Otherwise the manifest.json is ignored. In cases where the manifest.json is located at a higher level or in a different directory at the same level as the .library file, an exception is thrown. - -**UI5 Server: serveResources middleware: Expect `*.properties` files in UTF-8 by default ([SAP/ui5-server#303](https://github.com/SAP/ui5-server/pull/303))** - -For projects of types **other** than `application` or `library`, the UI5 Server now expects `*.properties` files to be UTF-8 encoded as opposed to `ISO-8859-1` before. - -_**Note:** This change does not affect most projects as `*.properties` files are typically only located in applications or libraries, for which their project specific [configuration](../pages/Configuration.md#encoding-of-properties-files) is used._ - -**UI5 FS: Remove deprecated parameter useNamespaces ([SAP/ui5-fs#223](https://github.com/SAP/ui5-fs/pull/223))** - -Remove the deprecated parameter `useNamespaces` from method [`resourceFactory.createCollectionsForTree`](https://ui5.github.io/cli/v2/api/module-@ui5_fs.resourceFactory.html#.createCollectionsForTree). Use the parameter `getVirtualBasePathPrefix` instead. - -## How to upgrade - -### Global installation - -To upgrade your global installation, just run the installation command again, which will upgrade to the latest version. - -``` -npm install --global @ui5/cli -``` - -**Note:** Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see [Local vs. Global installation](https://github.com/SAP/ui5-cli#local-vs-global-installation)). - -### Local installation - -To upgrade the CLI installation within a project, you need to run the following command: - -``` -npm install --save-dev @ui5/cli@^2 -``` - -### ui5.yaml - -#### `specVersion: "2.0"` - -We have introduced the [specification version `2.0`](../pages/Configuration.md#specification-version-10). -New features will only be available for projects with specVersion `2.0` or newer. -Most projects defining specVersion `0.1` or `1.0` can still be used. - -```yaml -specVersion: "2.0" -metadata: - name: -type: -``` diff --git a/docs/updates/migrate-v3.md b/docs/updates/migrate-v3.md deleted file mode 100644 index ff4295b56e..0000000000 --- a/docs/updates/migrate-v3.md +++ /dev/null @@ -1,224 +0,0 @@ -# Migrate to v3 - -!!! warning "Superseded" - **UI5 CLI 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4.md).** - - Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 CLI 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)** - -## Node.js and npm Version Support - -**This release requires Node.js versions v16.18.0, v18.12.0 or higher as well as npm v8 or higher.** -Support for older Node.js and npm releases has been dropped and will cause an error to be shown. - -## Specification Versions Support - -Going forward, **only projects with Specification Versions 2.0 and higher are supported.** - -In case a legacy specification version is detected, **an automatic migration is attempted.** -This means your old projects might still work. Unless they have non-standard configuration in their ui5.yaml. - -## Changes for Projects - -!!! info - ✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** - -For projects defining the latest **Specification Versions 3.0 and higher**, some changes apply: - -* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration.md#name) for details - -See also [Configuration: Specification Version 3.0](../pages/Configuration.md#specification-version-30). - -## Changes for Extensions - -!!! info - ✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** - -For extensions defining the latest **Specification Versions 3.0 and higher**, some changes and improvements apply: - -* **Breaking Change:** Custom Tasks need to request access to dependency resources - * By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name `determineRequiredDependencies`. In this function it can define the scope of dependency-access. Please refer to the [Custom Task: Required Dependencies](../pages/extensibility/CustomTasks.md#required-dependencies) documentation for details -* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration.md#name) for details -* **Features:** Enhanced TaskUtil and MiddlewareUtil API - * For example providing access to a [project's root directory](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#~ProjectInterface), or [dependencies](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#getDependencies) - * See also [Custom Tasks](../pages/extensibility/CustomTasks.md) and [Custom Server Middleware](../pages/extensibility/CustomServerMiddleware.md) - -## Changes to Dependency Configuration - -!!! info - ✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 CLI v3. - - Configuration like the following is not needed anymore: - - ```diff title="package.json" - { - [...] - - "ui5": { - - "dependencies": [ - - "my-package" - - ] - - } - [...] - } - ``` - - `dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104). - If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed. - - Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`. - -## Changes to Module API - -The `normalizer` and `projectTree` modules have been removed. The `builder` API has been moved from @ui5/builder to @ui5/project. - -The JSON based, internal representation of a project dependency tree has been replaced with a graph. This is the result of a major refactoring of @ui5/project which lead to a series of API changes. - -Also the @ui5/server API has been changed. Instead of a `tree`, it now only accepts a `graph` instance as the first parameter. - -### Migrate Your Code - -The UI5 CLI-related modules such as @ui5/builder, etc. have been transformed to ES Modules ("ESM"). Therefore, they no longer use a CommonJS export and cannot be included via `require`. -If your code is in CommonJS format, it needs to use dynamic imports or be converted to [ES Modules](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c). - - -**Old: @ui5/project v2** - -```js -const {normalizer} = require("@ui5/project"); -const {builder} = require("@ui5/builder"); - -const tree = await normalizer.generateProjectTree({cwd: "."}); - -await builder.build({ - tree, - destPath: "./dist", - buildDependencies: true, -}); -``` - -**New: @ui5/project v3** - -=== "ESM" - - ```js - import {graphFromPackageDependencies} from "@ui5/project/graph"; - - let graph = await graphFromPackageDependencies({cwd: "."}); - - await graph.build({ - destPath: "./dist", - includedDependencies: ["*"], // Parameter "buildDependencies" has been removed - }); - ``` - -=== "CommonJS" - - ```js - // Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function - async function buildProject() { - const {graphFromPackageDependencies} = await import("@ui5/project/graph"); - - let graph = await graphFromPackageDependencies({cwd: "."}); - - await graph.build({ - destPath: "./dist", - includedDependencies: ["*"], // Parameter "buildDependencies" has been removed - }); - } - ``` - -## Changes to @ui5/cli - -* The CLI option `--translator` has been removed. For static dependency resolution, use the new option `--dependency-definition` to provide a file with static dependency information. -* The `ui5 build dev` command has been removed. Use `ui5 build --exclude-task=* --include-task=replaceCopyright replaceVersion replaceBuildtime buildThemes` instead. - -## JSDoc Processor Fails When JSDoc Reports an Error - -The `jsdocGenerator` processor and the corresponding `generateJsdoc` task will now throw an error when JSDoc reports an error (exit code != 0). This will also fail the build when running `ui5 build jsdoc`. - -## Always Building Required Dependencies - -If any of a project's build tasks requires access to resources of the project's dependencies, UI5 CLI v3 will now **always build that dependency upfront**. - -This ensures that tasks always access processed resources and never the raw sources of a dependency. Resulting in better reproducibility of build results and resolving common issues. - -Especially for projects of type `library`, where standard tasks like [`buildThemes`](https://github.com/SAP/ui5-project/blob/b40e3f569e0f01c6dd8e72141c7ba43449812d01/lib/build/definitions/library.js#L139) always require dependency access, UI5 CLI will now always build all dependencies. - -In the future, a caching mechanism should help and improve build times with this new behavior. - -!!! info - The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result. - - Please also refer to the [`ui5 build` documentation](../pages/CLI.md#ui5-build). - -## Removal of Standard Tasks and Processors - -The following tasks have been removed: - -* createDebugFiles -* generateManifestBundle -* uglify - -The following processors have been removed: - -* debugFileCreator -* manifestBundler -* resourceCopier -* uglifier - -**Task Migration** - -| UI5 CLI v2 | UI5 CLI v3 | Note | -| --------------------------- | --------------------------- | ------------------------- | -| createDebugFiles
uglify | minify | The minify task is executed earlier, before the bundling process takes place. Any existing `beforeTask` or `afterTask` configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the `generateResourcesJson` task for subscription before or after the last standard task. By default, `generateResourcesJson` is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order. | -| generateVersionInfo | generateVersionInfo | The task is no longer executed by default for application projects. It can be re-enabled by using the `--include-task` parameter. | -| generateManifestBundle | *None* | This task was only needed for the HTML5 repository in Cloud Foundry. Meanwhile, the HTML5 repository implemented its own mechanism, so the task is no longer needed | - -**Updated list of standard tasks:** - -| Task | Type `application` | Type `library` | Type `theme-library` | -| ------------------------- | :----------------: | :------------: | :------------------: | -| escapeNonAsciiCharacters | *enabled* | *enabled* | | -| replaceCopyright | *enabled* | *enabled* | *enabled* | -| replaceVersion | *enabled* | *enabled* | *enabled* | -| replaceBuildtime | | *enabled* | | -| generateJsdoc | | *disabled* ^1^ | | -| executeJsdocSdkTransformation | | *disabled* ^1^ | | -| **ADDED:** minify | *enabled* | *enabled* | | -| generateFlexChangesBundle | *enabled* | *enabled* | | -| **REMOVED:** ~~generateManifestBundle~~ | *~~disabled~~* | *~~disabled~~* | | -| generateLibraryManifest | | *enabled* | | -| generateComponentPreload | *enabled* | *disabled* ^2^ | | -| generateLibraryPreload | | *enabled* | | -| generateStandaloneAppBundle | *disabled* ^3^ | | | -| transformBootstrapHtml | *disabled* ^3^ | | | -| generateBundle | *disabled* ^4^ | *disabled* ^4^ | | -| buildThemes | | *enabled* | *enabled* | -| generateThemeDesignerResources | | *disabled* ^5^ | *disabled* ^5^ | -| **REMOVED:** ~~createDebugFiles~~ | *~~enabled~~* | *~~enabled~~* | | -| **REMOVED:** ~~uglify~~ | *~~enabled~~* | *~~enabled~~* | | -| generateVersionInfo | **disabled** | | | -| generateCachebusterInfo | *disabled* | | | -| generateApiIndex | *disabled* ^1^ | | | -| generateResourcesJson | *disabled* | *disabled* | *disabled* | - -*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](../pages/CLI.md#ui5-build). See footnotes where given* - ---- - -^1^ Enabled in `jsdoc` build, which disables most of the other tasks -^2^ Enabled for projects defining a [component preload configuration](../pages/Configuration.md#component-preload-generation) -^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -^4^ Enabled for projects defining a [bundle configuration](../pages/Configuration.md#custom-bundling) -^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped - -## Removal of Standard Middleware - -The following middleware has been removed from the [standard middlewares list](../../pages/Server/#standard-middleware): - -* connectUi5Proxy - -**Middleware Migration** - -| UI5 CLI v2 | UI5 CLI v3 | Note | -| --------------------------- | --------------------------- | ------------------------- | -| connectUi5Proxy | *None* | More sophisticated proxy solutions for ui5-server are now available in the form of [custom middleware extensions from the UI5-community](https://bestofui5.org/#/packages?tokens=proxy:tag). Make sure to refactor any custom middleware that attaches to `beforeMiddleware` or `afterMiddleware` of `connectUi5Proxy` to reference some other middleware. | diff --git a/docs/updates/migrate-v4.md b/docs/updates/migrate-v4.md deleted file mode 100644 index e074569a76..0000000000 --- a/docs/updates/migrate-v4.md +++ /dev/null @@ -1,137 +0,0 @@ -# Migrate to v4 - -!!! tip "New Release" - **UI5 CLI 4.0 has been released on July 24, 2024 🎉** - - Install the latest version in your projects via: `npm i --save-dev @ui5/cli@latest` - And update your global install via `npm i --global @ui5/cli@latest` - - And find the announcement blog post here: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** - -## UI5 2.x Compatibility - -*Also see the blog post [SAP Community: Introducing OpenUI5 2.x](https://community.sap.com/t5/open-source-blogs/introducing-openui5-2-x/ba-p/13580633)* - -UI5 CLI 4.0 is required for building UI5 2.x projects. The UI5 2.x framework libraries define Specification Version 4.0 and therefore can't be built using older UI5 CLI versions. - -For applications and libraries running with UI5 2.x, the use of Specification Version 4.0 is not enforced. It is highly recommended, however, since only then UI5 CLI will ensure UI5 2.x compatibility of the generated bundles. - -## Node.js and npm Version Support - -This release requires **Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)** as well as npm v8 or higher. -Support for older Node.js releases has been dropped; their use will cause an error. - -## Specification Versions Support - -As with UI5 CLI 3.x, all projects with Specification Versions 2.0 and higher are supported. - -If a legacy specification version is detected, an automatic migration is attempted. -Old projects might therefore still work, unless they have a non-standard configuration in their ui5.yaml. - -## Changes for Projects - -!!! success "No changes for Specification Versions 2.x and 3.x" - Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 CLI v4** - - The following does not apply to them. - -For projects defining the latest **Specification Version 4.0 or higher**, the following changes apply: - -* **Breaking Change:** Bundling of JavaScript modules requiring "top level scope" as a string is terminated. - - In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will **omit affected module from the bundle and log an error message instead.** - - For more details, see [Builder: JavaScript Files Requiring Top Level Scope](../pages/Builder.md#javascript-files-requiring-top-level-scope). - -* **Breaking Change:** New `async` option for the `require` sections of bundle definitions. - - This option defaults to `true` for Specification Version 4.0 and higher, **which can influence the loading behavior of your project**. Require sections are now expressed using `sap.ui.require` instead of `sap.ui.requireSync`. The latter is not available in UI5 2.x. - - Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles. - - See [Configuration: `bundleDefinition.sections`](../pages/Configuration.md#properties) for more on the new `async` option. - -* **Breaking Change:** Removal of the `usePredefineCalls` [bundle option](../pages/Configuration.md#properties). UI5 CLI v4 will _always_ use `sap.ui.predefine` calls in bundles, making this option obsolete. - - **We do not expect any negative impact** on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration. - -You can find a summary of the above at [Configuration: Specification Version 4.0](../pages/Configuration.md#specification-version-40). - -## Migrate Your Code - -When using the Node.js API of UI5 CLI, or when integrating it into other tools, the following changes might be relevant to you: - -### Changes to @ui5/cli - -Occurrences of `console.log` in the code base are replaced with `process.stderr`. -Аny scripts that capture the output from `console.log` need to be adjusted to rely on `process.stderr`. - -### Changes to @ui5/fs - -Non-public `DuplexCollection#byGlobSource` API has been removed. - -### Changes to @ui5/builder - -- **Bundling**: The `usePredefineCalls` option has been removed. Bundling now enforces the use of `sap.ui.predefine` instead of function wrappers. - -- **Task API**: The `namespace` option has been renamed to `projectNamespace`. For more information, check the documentation for [CustomTasks API](../pages/extensibility/CustomTasks.md#task-implementation) - -- **New Option**: Added a new `async` option for `builder.bundles.bundleDefinition.section`. - -!!! example - ```yaml - builder: - bundles: - - bundleDefinition: - name: "app.js" - sections: - - mode: require - filters: - - some/app/Component.js - resolve: true - sort: true - async: true - ``` - -### Changes to @ui5/project - -- **Default Workspace Name**: The default `workspaceName` is now `"default"` for API usage. - -!!! example - ```js - import {graphFromPackageDependencies} from "@ui5/project/graph"; - - graphFromPackageDependencies({ - /* workspaceName: "default" */ - }); - ``` - -- **Directory Naming**: The `ui5HomeDir` has been renamed to `ui5DataDir` in APIs. - -!!! example - ```js - import Resolver from "@ui5/project/ui5Framework/Openui5Resolver"; - - await Resolver.resolveVersion("1.120.15", { - ui5DataDir: "~/.ui5", - cwd: process.cwd() - }); - ``` - -- **Dependencies**: The `@ui5/builder` is now an optional dependency to the `@ui5/project` - -Consumers of the Node.js API that make use of the `ProjectGraph#build` method need to declare a dependency to `@ui5/builder` in their respective `package.json`. The package manager should ensure that the version fulfills the range specified in the `package.json` of `@ui5/project`. - -## Troubleshooting - -### App Stops Working With UI5 1.71 - -This might be caused by a mismatch of your project's manifest version and your UI5 version. - -UI5 CLI v4 enhances the manifest.json with information about the `supportedLocales` (also see [Builder: Generation of Supported Locales](../pages/Builder.md#generation-of-supported-locales)). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message `TypeError: invalid input` and a failure to process the manifest file. - -UI5 CLI uses the manifest's `_version` property to decide whether the `supportedLocales` can be generated. For UI5 1.71, only versions up to `1.17.0` are supported. See [UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json)](https://sdk.openui5.org/#/topic/be0cf40f61184b358b5faedaec98b2da) for a mapping per manifest version. - -To resolve this issue, adjust the manifest version according to the UI5 version you are using. - -*This issue was first raised here: [UI5 CLI #988](https://github.com/UI5/cli/issues/988)* diff --git a/docs/Guidelines.md b/packages/documentation/docs/Guidelines.md similarity index 100% rename from docs/Guidelines.md rename to packages/documentation/docs/Guidelines.md diff --git a/packages/documentation/docs/index.md b/packages/documentation/docs/index.md index 556605af16..b5d4500e27 100644 --- a/packages/documentation/docs/index.md +++ b/packages/documentation/docs/index.md @@ -5,14 +5,14 @@ An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. !!! abstract "Project Rename" - **UI5 Tooling has been renamed to UI5 CLI 🚨** + **UI5 Tooling has been renamed to UI5 CLI 🚨** - Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)** + Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)** !!! tip "New Release" - **UI5 CLI V4 is here 🎉** + **UI5 CLI V4 is here 🎉** - Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** + Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation. diff --git a/docs/indexJsdoc.md b/packages/documentation/docs/indexJsdoc.md similarity index 100% rename from docs/indexJsdoc.md rename to packages/documentation/docs/indexJsdoc.md diff --git a/packages/documentation/docs/pages/Benchmarking.md b/packages/documentation/docs/pages/Benchmarking.md index 236812f882..321ff98497 100644 --- a/packages/documentation/docs/pages/Benchmarking.md +++ b/packages/documentation/docs/pages/Benchmarking.md @@ -102,11 +102,11 @@ The following is a walk-through on how to evaluate the performance impact of an 1. Prepare your change 1. Switch to the branch that contains your change ```sh - (cd ../pages/ui5-builder && git checkout my-change) + (cd ../ui5-builder && git checkout my-change) ``` 1. If your change requires different npm dependencies, reinstall them ```sh - (cd ../pages/ui5-builder && npm install) + (cd ../ui5-builder && npm install) ``` 1. The link from UI5 CLI is still in place. However, if you have changes in **multiple** UI5 CLI modules, you might need to `npm link` those again diff --git a/packages/documentation/docs/pages/Builder.md b/packages/documentation/docs/pages/Builder.md index e3dfdd0840..b007bdac38 100644 --- a/packages/documentation/docs/pages/Builder.md +++ b/packages/documentation/docs/pages/Builder.md @@ -4,20 +4,16 @@ The [UI5 Builder](https://github.com/SAP/ui5-builder) module takes care of build Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks". -For every type there is a set of default tasks. You can disable single tasks using the `--exclude-task` [CLI parameter](./CLI#ui5-build), and you can include tasks using the `--include-task` parameter. +For every type there is a set of default tasks. You can disable single tasks using the `--exclude-task` [CLI parameter](./CLI.md#ui5-build), and you can include tasks using the `--include-task` parameter. -

+[**API Reference**](https://ui5.github.io/cli/v4/api/index.html){: .md-button .sap-icon-initiative } ## Tasks Tasks are specific build steps to be executed during build phase. They are responsible for collecting resources which can be modified by a processor. A task configures one or more processors and supplies them with the collected resources. After the respective processor processed the resources, the task is able to continue with its workflow. -A project can add custom tasks to the build by using the [Custom Tasks Extensibility](./extensibility/CustomTasks). +A project can add custom tasks to the build by using the [Custom Tasks Extensibility](./extensibility/CustomTasks.md). ### Standard Tasks @@ -47,14 +43,14 @@ All available standard tasks are documented [in the API reference](https://ui5.g | generateApiIndex | *disabled* ^1^ | | | | generateResourcesJson | *disabled* | *disabled* | *disabled* | -*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](./CLI#ui5-build). See footnotes where given* +*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](./CLI.md#ui5-build). See footnotes where given* --- ^1^ Enabled in `jsdoc` build, which disables most of the other tasks -^2^ Enabled for projects defining a [component preload configuration](./Configuration#component-preload-generation) +^2^ Enabled for projects defining a [component preload configuration](./Configuration.md#component-preload-generation) ^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -^4^ Enabled for projects defining a [bundle configuration](./Configuration#custom-bundling) +^4^ Enabled for projects defining a [bundle configuration](./Configuration.md#custom-bundling) ^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped ### minify @@ -69,28 +65,24 @@ Related to this, the bundling tasks will also incorporate the generated source m #### Input Source Maps -::: info Info -Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0). - -::: +!!! info + Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0). For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code. UI5 CLI's `minify` task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze. -::: warning Warning -If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result. - -It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools. +!!! warning + If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result. -Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`. + It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools. -::: + Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`. Expand the block below to view a diagram illustrating the minification process and source map handling. -??? info "Minification Activity Diagram - ![minify Task Activity](../images/UI5_CLI/Task_Minify.svg) +??? info "Minification Activity Diagram" + ![minify Task Activity](../images/UI5_CLI/Task_Minify.svg){ loading=lazy } ### Generation of Supported Locales @@ -122,7 +114,7 @@ In the `manifest.json` the `supportedLocales` property will be enhanced as follo "i18n": { "type": "sap.ui.model.resource.ResourceModel", "settings": { - "bundleName": "my.app.i18n.i18n + "bundleName": "my.app.i18n.i18n" } } } @@ -140,7 +132,7 @@ In the `manifest.json` the `supportedLocales` property will be enhanced as follo "de", "de_DE", "en", - "en_US + "en_US" ] } } @@ -164,7 +156,7 @@ UI5 CLI packages JavaScript files that require "top level scope" as a string, pr This ensures that the script works as expected, e.g. with regards to implicitly used globals. However, this `eval` runtime feature will be discontinued with UI5 2.x because of [security best practices](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) and to comply with stricter CSP settings (i.e. [unsafe-eval](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#unsafe_eval_expressions)). -If your project defines [Specification Version 4.0](./Configuration#specification-version-40) or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI: +If your project defines [Specification Version 4.0](./Configuration.md#specification-version-40) or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI: > Module myFancyModule requires top level scope and can only be embedded as a string (requires 'eval'), which is not supported with specVersion 4.0 and higher. If you see this error message, please adjust your code by applying one of the following options: @@ -174,19 +166,17 @@ If you see this error message, please adjust your code by applying one of the fo **Option 2**: Wrap the respective files manually in `sap.ui.define` modules as shown below: -::: details Example -**Before**: -```js -const myFancyModule = {}; -``` - -**After**: -```js -sap.ui.define([], () => { - "use strict"; +!!! example + **Before**: + ```js const myFancyModule = {}; - return myFancyModule; -}); -``` - -::: \ No newline at end of file + ``` + + **After**: + ```js + sap.ui.define([], () => { + "use strict"; + const myFancyModule = {}; + return myFancyModule; + }); + ``` diff --git a/packages/documentation/docs/pages/CLI.md b/packages/documentation/docs/pages/CLI.md deleted file mode 100644 index d74e02a07f..0000000000 --- a/packages/documentation/docs/pages/CLI.md +++ /dev/null @@ -1,397 +0,0 @@ ---- -layout: doc ---- - -# UI5 CLI -## Requirements -- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) -- [npm](https://www.npmjs.com/) version v8.0.0 or higher - -## Installation - -Install the CLI using the npm package manager: - -```sh -npm install --global @ui5/cli - -# Verify installation -ui5 --help -``` - -## Usage/Syntax - -` - ui5 [options] -` - -The CLI automatically checks for updates using [update-notifier](https://github.com/yeoman/update-notifier). While this is skipped in CI environments, you might also opt-out manually by following the steps described [here](https://github.com/yeoman/update-notifier/blob/-/readme.md#user-settings). - -## Common options - -These options you can use with each command. - -| Option | Description | Details | -| --- | --- | --- | -| -h, --help | Show help | [boolean] | -| -v, --version | Show version number | [boolean] | -| -c, --config | Path to project configuration file in YAML format | [string] | -| --dependency-definition | Path to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies. | [string] | -| --workspace-config | Path to workspace configuration file in YAML format | [string] | -| -w, --workspace | Name of the workspace configuration to use | [string] [default: "default"] | -| --loglevel, --log-level | Set the logging level | [string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"] | -| --verbose | Enable verbose logging. | [boolean] [default: false] | -| --perf | Enable performance measurements and related logging. | [boolean] [default: false] | -| --silent | Disable all log output. | [boolean] [default: false] | - -## Examples - -Execute command using a static dependency tree instead of resolving node package dependencies -``` -ui5 --dependency-definition /path/to/projectDependencies.yaml -``` -Execute command using a project configuration from custom path -``` -ui5 --config /path/to/ui5.yaml -``` -Execute command using the 'dolphin' workspace of a ui5-workspace.yaml -``` -ui5 --workspace dolphin -``` -Execute command with the maximum log output -``` -ui5 --log-level silly -``` - -## Commands - -### ui5 add - -**Description** - -Add SAPUI5/OpenUI5 framework libraries to the project configuration. - -**Usage** - -` -ui5 add [--development] [--optional] -` - - -**Options** - -| Option | Description | Details | -| --- | --- | --- | -| -D, --development, --dev | Add as development dependency | [boolean] [default: false] | -| -O, --optional | Add as optional dependency | [boolean] [default: false] | - -**Positionals** - -| Positional | Description | Details | -| --- | --- | --- | -| framework-libraries | Framework library names | [array] [required] [default: []] | - -**Examples** - -Add the framework libraries sap.ui.core and sap.m as dependencies -``` -ui5 add sap.ui.core sap.m -``` -Add the framework library sap.ui.support as development dependency -``` -ui5 add -D sap.ui.support -``` -Add the framework library themelib_sap_fiori_3 as optional dependency -``` -ui5 add --optional themelib_sap_fiori_3 -``` -### ui5 build - -**Description** - -Build project in current directory - -**Usage** - -` -ui5 build -` - -**Child Commands** - -| Command | Description | -| --- | --- | -| ui5 build jsdoc | Build JSDoc resources | -| ui5 build preload | (default) Build project and create preload bundles | -| ui5 build self-contained | Build project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies | - -**Options** - -| Option | Description | Details | -| --- | --- | --- | -| -a, --include-all-dependencies, --all | Include all dependencies in the build result. This is equivalent to '--include-dependency "*"' | [boolean] [default: false] | -| --include-dependency | A list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | -| --include-dependency-regexp | A list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'. | [array] | -| --include-dependency-tree | A list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'. | [array] | -| --exclude-dependency | A list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | -| --exclude-dependency-regexp | A list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'. | [array] | -| --exclude-dependency-tree | A list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list. | [array] | -| --dest | Path of build destination | [string] [default: "./dist"] | -| --clean-dest | If present, clean the destination directory before building | [boolean] [default: false] | -| --create-build-manifest | Store build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds | [boolean] [default: false] | -| --include-task | A list of tasks to be added to the default execution set. This option takes precedence over any excludes. | [array] | -| --exclude-task | A list of tasks to be excluded from the default task execution set | [array] | -| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | -| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | -| --experimental-css-variables | Generate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes | [boolean] [default: false] | -| --output-style | Processes build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style. | [string] [choices: "Default", "Flat", "Namespace"] [default: "Default"] | - - -**Examples** - -Preload build for project without dependencies -``` -ui5 build -``` -Self-contained build for project -``` -ui5 build self-contained -``` -Build project but only apply the minify- and generateComponentPreload tasks -``` -ui5 build --exclude-task=* --include-task=minify generateComponentPreload -``` -Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task -``` -ui5 build --include-task=minify --exclude-task=generateComponentPreload -``` -Preload build with experimental CSS variables artifacts -``` -ui5 build --experimental-css-variables -``` -### ui5 config - -**Description** - -Get and set UI5 CLI configuration options - -**Usage** - -` -ui5 config -` - -**Child Commands** - -| Command | Description | -| --- | --- | -| ui5 config set [value] | Set the value for a given configuration option. Clear an existing configuration by omitting the value | -| ui5 config get | Get the value for a given configuration option | -| ui5 config list | Display the current configuration | - - - -**Examples** - -Set a value for the ui5DataDir configuration -``` -ui5 config set ui5DataDir /path/to/.ui5 -``` -Unset the current value of the ui5DataDir configuration -``` -ui5 config set ui5DataDir -``` -### ui5 init - -**Description** - -Initialize the UI5 CLI configuration for an application or library project. - -**Usage** - -` -ui5 init -` - - - - -### ui5 remove - -**Description** - -Remove SAPUI5/OpenUI5 framework libraries from the project configuration. - -**Usage** - -` -ui5 remove -` - - - -**Positionals** - -| Positional | Description | Details | -| --- | --- | --- | -| framework-libraries | Framework library names | [array] [required] [default: []] | - -**Examples** - -Remove the framework libraries sap.ui.core and sap.m as dependencies -``` -ui5 remove sap.ui.core sap.m -``` -### ui5 serve - -**Description** - -Start a web server for the current project - -**Usage** - -` -ui5 serve -` - - -**Options** - -| Option | Description | Details | -| --- | --- | --- | -| -p, --port | Port to bind on (default for HTTP: 8080, HTTP/2: 8443) | [number] | -| -o, --open | Open web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL | [string] | -| --h2 | Shortcut for enabling the HTTP/2 protocol for the web server | [boolean] [default: false] | -| --simple-index | Use a simplified view for the server directory listing | [boolean] [default: false] | -| --accept-remote-connections | Accept remote connections. By default the server only accepts connections from localhost | [boolean] [default: false] | -| --key | Path to the private key | [string] [default: "~/.ui5/server/server.key"] | -| --cert | Path to the certificate | [string] [default: "~/.ui5/server/server.crt"] | -| --sap-csp-policies | Always send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode | [boolean] [default: false] | -| --serve-csp-reports | Collects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json' | [boolean] [default: false] | -| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | -| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | - - -**Examples** - -Start a web server for the current project -``` -ui5 serve -``` -Enable the HTTP/2 protocol for the web server (requires SSL certificate) -``` -ui5 serve --h2 -``` -Use the project configuration from a custom path -``` -ui5 serve --config /path/to/ui5.yaml -``` -Use a static dependency definition file -``` -ui5 serve --dependency-definition /path/to/projectDependencies.yaml -``` -Listen to port 1337 and launch default browser with `http://localhost:1337/test/QUnit.html` -``` -ui5 serve --port 1337 --open tests/QUnit.html -``` -### ui5 tree - -**Description** - -Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account. - -**Usage** - -` -ui5 tree -` - - -**Options** - -| Option | Description | Details | -| --- | --- | --- | -| --flat | Output a flat list of all dependencies instead of a tree hierarchy | [boolean] [default: false] | -| --level | Limit the number of levels shown in the tree hierarchy | [number] | -| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | -| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | -| | | | - - -### ui5 use - -**Description** - -Initialize or update the project's framework configuration. - -**Usage** - -` -ui5 use -` - - - -**Positionals** - -| Positional | Description | Details | -| --- | --- | --- | -| framework-info | Framework name, version or both (name@version).
Name can be "SAPUI5" or "OpenUI5" (case-insensitive).
Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry.
For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT". | [string] [required] | - -**Examples** - -Use SAPUI5 in the latest available version -``` -ui5 use sapui5@latest -``` -Use OpenUI5 in the latest available 1.76 patch version -``` -ui5 use openui5@1.76 -``` -Use the latest available version of the configured framework -``` -ui5 use latest -``` -Use OpenUI5 in the latest available version -``` -ui5 use openui5 -``` -### ui5 versions - -**Description** - -Shows the versions of all UI5 CLI modules - -**Usage** - -` -ui5 versions -` - - - - - -## Local vs. Global Installation -In general, we recommend a global installation of the UI5 CLI (`npm install --global @ui5/cli`). - -However, it makes sense to add the UI5 CLI as a [devDependency](https://docs.npmjs.com/files/package.json#devdependencies) (`npm install --save-dev @ui5/cli`) to a project's `package.json`. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version. - -In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because [npm scripts](https://docs.npmjs.com/misc/scripts) defined in your `package.json` will also always invoke the local installation. - -This behavior can be disabled by setting the environment variable `UI5_CLI_NO_LOCAL`. - -**Example** -You have a project located in the directory `/my-application`. - -You have installed the UI5 CLI globally. In addition, the project's `package.json` defines a `devDependency` to `@ui5/cli` and a start script `"ui5 serve"`. This means there are at least two installations of `@ui5/cli` on your system. Their versions might not match. - -This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project. - -| Current Working Directory | Command | Global UI5 CLI | Local UI5 CLI | -| ------------------------- | ------------------------------- | :-----------------------------: | :----------------------------: | -| `/` | `ui5 --version` | enabled | -| `/my-application` | `ui5 --version` | | enabled | -| `/my-application` | `ui5 serve` | | enabled | -| `/my-application` | `UI5_CLI_NO_LOCAL=X ui5 serve` | enabled | -| `/my-application` | `npm start` | | enabled | -| `/my-application` | `UI5_CLI_NO_LOCAL=X npm start` | | enabled | diff --git a/packages/documentation/docs/pages/CodeAnalysis.md b/packages/documentation/docs/pages/CodeAnalysis.md index 5111e8792e..9f7518a6c2 100644 --- a/packages/documentation/docs/pages/CodeAnalysis.md +++ b/packages/documentation/docs/pages/CodeAnalysis.md @@ -88,24 +88,24 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless, The [XML Composite Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/XMLCompositeAnalyzer.js) searches for the name of the configured fragment containing the **XMLComposite** control. -#### Name of the XMLComposite is equal to fragment name +=== "Name of the XMLComposite is equal to fragment name" - ```javascript + ```javascript hl_lines="4" sap.ui.define([ - "sap/ui/core/XMLComposite + "sap/ui/core/XMLComposite" ], function(XMLComposite) { return XMLComposite.extend("composites.MyComposite", {} }); ``` -#### Dedicated fragment name +=== "Dedicated fragment name" - ```javascript + ```javascript hl_lines="5" sap.ui.define([ - "sap/ui/core/XMLComposite + "sap/ui/core/XMLComposite" ], function(XMLComposite) { return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite + fragment: "composites.custom.MyComposite" } }); ``` @@ -128,7 +128,7 @@ Note: Currently only the usage via the global `sap.ui.getCore().initLibrary` is The UI5 CLI offers a JSDoc build, which is enhanced by UI5-specific JSDoc features. -An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our [Developer's Guide](https://github.com/SAP/openui5/blob/-/docs/developing#building-the-openui5-sdk-demo-kit). +An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our [Developer's Guide](https://github.com/SAP/openui5/blob/-/docs/developing.md#building-the-openui5-sdk-demo-kit). Currently, the resources needed for a UI5 SDK build are stored in [openui5](https://github.com/SAP/openui5/tree/-/lib/jsdoc) and in [ui5-builder](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc). This double maintenance is needed because these files are not part of the `sap.ui.core` library artefact, so building JSDoc for any library has no access to the needed resources. It's therefore necessary to have these resources also available in the *ui5-builder*. This might change in the future. diff --git a/packages/documentation/docs/pages/Configuration.md b/packages/documentation/docs/pages/Configuration.md index ebdd6afafe..451c0446c8 100644 --- a/packages/documentation/docs/pages/Configuration.md +++ b/packages/documentation/docs/pages/Configuration.md @@ -2,10 +2,8 @@ A projects UI5 CLI configuration is typically located in a [YAML](https://yaml.org/) file named `ui5.yaml`, located in the root directory. -::: info Info -This document describes the configuration of UI5 CLI-based projects and extensions. It represents **[Specification Version 3.0](#specification-versions)**. - -::: +!!! info + This document describes the configuration of UI5 CLI-based projects and extensions. It represents **[Specification Version 3.0](#specification-versions)**. ## Validation / IDE support @@ -13,12 +11,12 @@ Starting with [Specification Version 2.0](#specification-version-20) the configu The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json The schema is also part of the [JSON Schema Store Catalog](http://schemastore.org/json/) which is used by the [YAML Language Server](https://github.com/redhat-developer/yaml-language-server). -See the list of [clients](https://github.com/redhat-developer/yaml-language-server/blob/main/README#clients) to find extensions for various IDEs and editors. +See the list of [clients](https://github.com/redhat-developer/yaml-language-server/blob/main/README.md#clients) to find extensions for various IDEs and editors. ## Example ```yaml -specVersion: "4.0 +specVersion: "4.0" type: application|library|theme-library|module metadata: name: some.project.name @@ -31,59 +29,55 @@ A project must define a specification version (`specVersion`), to which its conf In addition, a project must define a `type`. This can be either `application`, `library`, `theme-library` (since Specification Version 1.1), or `module`. -The type defines the default path mappings and build tasks. See [UI5 Builder: Types](./Builder#types) for details. - -::: details Example +The type defines the default path mappings and build tasks. See [UI5 Builder: Types](./Builder.md#types) for details. -#### application +!!! example - ```yaml - specVersion: "4.0 - type: application - ``` + === "application" -#### library + ```yaml + specVersion: "4.0" + type: application + ``` - ```yaml - specVersion: "4.0 - type: library - ``` + === "library" -#### theme-library + ```yaml + specVersion: "4.0" + type: library + ``` - ```yaml - specVersion: "4.0 - type: theme-library - ``` + === "theme-library" -#### module + ```yaml + specVersion: "4.0" + type: theme-library + ``` - ```yaml - specVersion: "4.0 - type: module - ``` + === "module" -::: + ```yaml + specVersion: "4.0" + type: module + ``` ### Kind The configuration may also contain a `kind` property. This is used to differentiate between projects and extensions. -This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility//CustomTasks#custom-task-extension). +This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility//CustomTasks.md#custom-task-extension). ### Metadata -::: details Example -```yaml -metadata: - name: my.company.project - copyright: |- - My Project - * (c) Copyright 2009-${currentYear} My Company - * Licensed under the XYZ License, Version n - see LICENSE.txt. -``` - -::: +!!! example + ```yaml + metadata: + name: my.company.project + copyright: |- + My Project + * (c) Copyright 2009-${currentYear} My Company + * Licensed under the XYZ License, Version n - see LICENSE.txt. + ``` #### name @@ -123,21 +117,21 @@ Note that all configured paths must be written in POSIX (i.e. using only forward #### Available Path Mappings -#### Applications +=== "Applications" - `webapp`: Mapped to runtime path `/` (root) - ```yaml + ```yaml title="Default Configuration" resources: configuration: paths: webapp: webapp ``` -#### Libraries +=== "Libraries" - `src`: Mapped to runtime path `/resources` - `test`: Mapped to runtime path `/test-resources` - ```yaml + ```yaml title="Default Configuration" resources: configuration: paths: @@ -145,12 +139,12 @@ Note that all configured paths must be written in POSIX (i.e. using only forward test: test ``` -#### Modules +=== "Modules" Modules can map any virtual paths to any physical path within the project. However, it is recommended that modules include their namespace in the virtual path and use the `/resources` prefix (e.g. `/resources/my/library/module-xy/`) to avoid name clashes with other projects. - ```yaml + ```yaml title="Example Configuration" resources: configuration: paths: @@ -158,50 +152,46 @@ Note that all configured paths must be written in POSIX (i.e. using only forward /resources/my/library/module-xy-min/: dist ``` -::: details Example -For an application project with the following directory structure, you need the path mapping configuration given below: +!!! example + For an application project with the following directory structure, you need the path mapping configuration given below: -``` -my-app/ -\_ ui5.yaml -\_ lib/ - \_ js/ - \_ app/ -``` - -```yaml -resources: - configuration: - paths: - webapp: lib/js/app -``` + ``` hl_lines="3 4 5" title="Directory Structure" + my-app/ + \_ ui5.yaml + \_ lib/ + \_ js/ + \_ app/ + ``` + ```yaml hl_lines="4" title="Path Mapping Configuration" + resources: + configuration: + paths: + webapp: lib/js/app + ``` -::: ### Encoding of `*.properties` files -::: info Info -This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) - -::: details Example -#### UTF-8 +!!! info + This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) - ```yaml - resources: - configuration: - propertiesFileSourceEncoding: UTF-8 - ``` +!!! example + === "UTF-8" -#### ISO-8859-1 + ```yaml + resources: + configuration: + propertiesFileSourceEncoding: UTF-8 + ``` - ```yaml - resources: - configuration: - propertiesFileSourceEncoding: ISO-8859-1 - ``` + === "ISO-8859-1" -::: + ```yaml + resources: + configuration: + propertiesFileSourceEncoding: ISO-8859-1 + ``` By default UI5 CLI expects different encodings for `*.properties` i18n files, depending on the project's specification version: @@ -212,25 +202,23 @@ Specification Version | Default `propertiesFileSourceEncoding` If your project uses a different encoding for `*.properties` files, you need to set the `propertiesFileSourceEncoding` configuration property. -UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects `*.properties` files to be encoded. Please refer to [RFC 7](https://github.com/UI5/cli/blob/main/rfcs/0007-properties-file-encoding) for details. +UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects `*.properties` files to be encoded. Please refer to [RFC 7](https://github.com/UI5/cli/blob/main/rfcs/0007-properties-file-encoding.md) for details. ## Custom Configuration -::: info Info -This configuration is available since UI5 CLI [`v2.2.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.2.0) -and applies only to projects defining [Specification Version](#specification-versions) -2.1 or higher. +!!! info + This configuration is available since UI5 CLI [`v2.2.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.2.0) + and applies only to projects defining [Specification Version](#specification-versions) + 2.1 or higher. -::: details Example -```yaml -customConfiguration: - myTool: - key: value - myOtherTool: - otherKey: otherValue -``` - -::: +!!! example + ```yaml + customConfiguration: + myTool: + key: value + myOtherTool: + otherKey: otherValue + ``` Custom configuration that is ignored by UI5 CLI. This can be used to store UI5 specific configuration for third-party tools. @@ -240,12 +228,10 @@ For third-party tools it is recommended to follow a namespace-like structure. ## Framework Configuration -::: info Info -This configuration is available since UI5 CLI [`v2.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.0.0) -and applies only to projects defining [Specification Version](#specification-versions) -2.0 or higher. - -::: +!!! info + This configuration is available since UI5 CLI [`v2.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.0.0) + and applies only to projects defining [Specification Version](#specification-versions) + 2.0 or higher. Define your project's framework dependencies. @@ -253,21 +239,21 @@ Define your project's framework dependencies. In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version: -#### OpenUI5 +=== "OpenUI5" ```yaml framework: name: OpenUI5 version: 1.82.0 ``` -#### SAPUI5 +=== "SAPUI5" ```yaml framework: name: SAPUI5 version: 1.82.0 ``` -If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5). +If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5). You can find an overview of the available versions for each framework here: @@ -276,60 +262,56 @@ You can find an overview of the available versions for each framework here: - [**SAPUI5** Version Overview](http://ui5.sap.com/versionoverview.html) - *The lowest version supported by UI5 CLI is __1.76.0__* -::: info Info -Projects that use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. - -::: +!!! info + Projects that use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. ### Dependencies -::: details Example -#### application - ```yaml - specVersion: "4.0 - type: application - metadata: - name: my.company.app - framework: - name: OpenUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.table - - name: themelib_sap_fiori_3 - ``` - -#### library - ```yaml - specVersion: "4.0 - type: library - metadata: - name: my.company.library - framework: - name: SAPUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: themelib_sap_belize - optional: true - - name: themelib_sap_bluecrystal - optional: true - - name: themelib_sap_fiori_3 - optional: true - ``` - - When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library. - -::: +!!! example + === "application" + ```yaml + specVersion: "4.0" + type: application + metadata: + name: my.company.app + framework: + name: OpenUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.table + - name: themelib_sap_fiori_3 + ``` + + === "library" + ```yaml + specVersion: "4.0" + type: library + metadata: + name: my.company.library + framework: + name: SAPUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: themelib_sap_belize + optional: true + - name: themelib_sap_bluecrystal + optional: true + - name: themelib_sap_fiori_3 + optional: true + ``` + + When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library. #### Runtime Dependencies All libraries required by your project must be listed in the `libraries` section of the framework configuration: -#### OpenUI5 - ```yaml +=== "OpenUI5" + ```yaml hl_lines="4-7" framework: name: OpenUI5 version: 1.82.0 @@ -339,8 +321,8 @@ All libraries required by your project must be listed in the `libraries` section - name: sap.ui.table ``` -#### SAPUI5 - ```yaml +=== "SAPUI5" + ```yaml hl_lines="4-7" framework: name: SAPUI5 version: 1.82.0 @@ -354,7 +336,7 @@ All libraries required by your project must be listed in the `libraries` section Development dependencies are only installed if the project defining them is the current root project. They are typically only required during the development of the project. -```yaml +```yaml hl_lines="3" libraries: - name: sap.ushell development: true @@ -366,7 +348,7 @@ Note that a development dependency cannot be optional and vice versa. Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency. -```yaml +```yaml hl_lines="3" libraries: - name: themelib_sap_fiori_3 optional: true @@ -375,45 +357,43 @@ You can choose which theme library to use by the application that is consuming t ## Build Configuration ### Exclude Resources -::: details Example -#### application - ```yaml - builder: - resources: - excludes: - # You can specify paths relative to the configured "webapp" directory - - "index.html - # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix - - "/resources/my/project/namespace/test/** - ``` - -#### library or theme-library - ```yaml - builder: - resources: - excludes: - # For libraries, all paths must be absolute, except for wildcards - - "/resources/some/project/name/test_results/** - - "/test-resources/** - - "!/test-resources/some/project/name/demo-app/** - - "**/*.svg - ``` - -#### module - !!! info - For projects of type `module`, this configuration is available since UI5 CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0) - and applies only to projects defining [Specification Version](#specification-versions) 3.1 or higher. - ```yaml - builder: - resources: - excludes: - # For modules, all paths must be absolute, except for wildcards - - "/resources/my/library/module-xy/min/** - - "!/resources/my/library/module-xy/min/module-xy-bundle.js - - "**/*.svg - ``` - -::: +!!! example + === "application" + ```yaml + builder: + resources: + excludes: + # You can specify paths relative to the configured "webapp" directory + - "index.html" + # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix + - "/resources/my/project/namespace/test/**" + ``` + + === "library or theme-library" + ```yaml + builder: + resources: + excludes: + # For libraries, all paths must be absolute, except for wildcards + - "/resources/some/project/name/test_results/**" + - "/test-resources/**" + - "!/test-resources/some/project/name/demo-app/**" + - "**/*.svg" + ``` + + === "module" + !!! info + For projects of type `module`, this configuration is available since UI5 CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0) + and applies only to projects defining [Specification Version](#specification-versions) 3.1 or higher. + ```yaml + builder: + resources: + excludes: + # For modules, all paths must be absolute, except for wildcards + - "/resources/my/library/module-xy/min/**" + - "!/resources/my/library/module-xy/min/module-xy-bundle.js" + - "**/*.svg" + ``` You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks. @@ -421,21 +401,19 @@ Patterns are applied to the **virtual resource paths** (i.e. the UI5 runtime pat ### Cachebuster -::: details Example -#### time (default) - ```yaml - builder: - cachebuster: - signatureType: time - ``` -#### hash - ```yaml - builder: - cachebuster: - signatureType: hash - ``` - -::: +!!! example + === "time (default)" + ```yaml + builder: + cachebuster: + signatureType: time + ``` + === "hash" + ```yaml + builder: + cachebuster: + signatureType: hash + ``` By default, the generated cachebuster info file signatures are based on timestamps (`time`). In setups like CI environments, a mechanism based on file hashes (`hash`) might be more reliable. Also see [PR #241](https://github.com/SAP/ui5-builder/pull/241) for more details. @@ -451,66 +429,60 @@ There are two ways to define the set of components for which preload bundles sho #### paths -::: details Example -```yaml -builder: - componentPreload: - paths: - - "my/awesome/app/**/Component.js -``` - -::: - -The `paths` option takes one or multiple patterns. For every matched file a separate `Component-preload.js` will be generated. Patterns are always applied relative to the project's virtual source directory `/resources/`. - -#### namespaces - -::: details Example -```yaml -builder: - componentPreload: - namespaces: - - "my/awesome/app - - "my/awesome/app/componentOne - - "my/awesome/app/componentTwo -``` - -::: - -The `namespaces` option takes one or multiple component namespaces, which correspond to the directory structures. - -#### excludes - -::: info Info -This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) -and applies only to projects defining [Specification Version](#specification-versions) -2.3 or higher. - -::: details Example -#### Single Component - +!!! example ```yaml builder: componentPreload: - excludes: - - "my/awesome/app/localService/** + paths: + - "my/awesome/app/**/Component.js" ``` -#### Multiple Components +The `paths` option takes one or multiple patterns. For every matched file a separate `Component-preload.js` will be generated. Patterns are always applied relative to the project's virtual source directory `/resources/`. + +#### namespaces +!!! example ```yaml builder: componentPreload: namespaces: - - "my/awesome/app - - "my/awesome/app/componentOne - - "my/awesome/app/componentTwo - excludes: - - "my/awesome/app/**/thirdparty/ - - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js + - "my/awesome/app" + - "my/awesome/app/componentOne" + - "my/awesome/app/componentTwo" ``` -::: +The `namespaces` option takes one or multiple component namespaces, which correspond to the directory structures. + +#### excludes + +!!! info + This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) + and applies only to projects defining [Specification Version](#specification-versions) + 2.3 or higher. + +!!! example + === "Single Component" + + ```yaml + builder: + componentPreload: + excludes: + - "my/awesome/app/localService/**" + ``` + + === "Multiple Components" + + ```yaml + builder: + componentPreload: + namespaces: + - "my/awesome/app" + - "my/awesome/app/componentOne" + - "my/awesome/app/componentTwo" + excludes: + - "my/awesome/app/**/thirdparty/" + - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js" + ``` List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. @@ -522,62 +494,56 @@ For projects of type `library` a `library-preload.js` bundle is generated by def #### excludes -::: info Info -This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) -and applies only to projects defining [Specification Version](#specification-versions) -2.3 or higher. - -::: details Example -```yaml -builder: - libraryPreload: - excludes: - - "my/lib/thirdparty/ - - "!my/lib/thirdparty/NotExcluded.js -``` -::: +!!! info + This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) + and applies only to projects defining [Specification Version](#specification-versions) + 2.3 or higher. +!!! example + ```yaml + builder: + libraryPreload: + excludes: + - "my/lib/thirdparty/" + - "!my/lib/thirdparty/NotExcluded.js" + ``` List of modules declared as glob patterns (resource name patterns) that are excluded from `library-preload.js` bundle. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the library's namespace. ### Custom Tasks -::: details Example -```yaml -builder: - customTasks: - - name: custom-task-1 - beforeTask: replaceCopyright - configuration: - some-key: some value - - name: custom-task-2 - afterTask: custom-task-1 - configuration: - color: blue -``` - -::: +!!! example + ```yaml + builder: + customTasks: + - name: custom-task-1 + beforeTask: replaceCopyright + configuration: + some-key: some value + - name: custom-task-2 + afterTask: custom-task-1 + configuration: + color: blue + ``` -You can define custom build tasks that will be executed for the project. Please refer to the [Custom Tasks Documentation](./extensibility/CustomTasks) for a detailed explanation and examples of the build extensibility. +You can define custom build tasks that will be executed for the project. Please refer to the [Custom Tasks Documentation](./extensibility/CustomTasks.md) for a detailed explanation and examples of the build extensibility. Each `customTasks` entry must define the `name` of the custom task as defined in its `metadata.name` property. -In addition, the execution order needs to be defined by referencing a [standard task](./Builder#tasks) or an already configured custom task using the `afterTask` or `beforeTask` property. +In addition, the execution order needs to be defined by referencing a [standard task](./Builder.md#tasks) or an already configured custom task using the `afterTask` or `beforeTask` property. Optionally, arbitrary `configuration` can be passed to the custom task. ### JSDoc -::: details Example -```yaml -builder: - jsdoc: - excludes: - - "some/project/name/thirdparty/** -``` - -::: +!!! example + ```yaml + builder: + jsdoc: + excludes: + - "some/project/name/thirdparty/**" + ``` You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task. @@ -587,24 +553,22 @@ These excludes are applied *before* any general builder excludes that have been ### Include Dependencies -::: info Info -This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0) -and applies only to projects defining [Specification Version](#specification-versions) -2.5 or higher. - -::: details Example -```yaml -builder: - settings: - includeDependency: - - shimmed.thirdparty.library - includeDependencyRegExp: - - ^com\.namespace - includeDependencyTree: - - sap.m -``` +!!! info + This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0) + and applies only to projects defining [Specification Version](#specification-versions) + 2.5 or higher. -::: +!!! example + ```yaml + builder: + settings: + includeDependency: + - shimmed.thirdparty.library + includeDependencyRegExp: + - ^com\.namespace + includeDependencyTree: + - sap.m + ``` You can include certain dependencies into the build process using the `includeDependency` builder setting. By using `includeDependencyRegExp`, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using `includeDependencyTree`, a selected dependency including all of its sub-dependencies is used. @@ -618,33 +582,29 @@ The project's `ui5.yaml` file can contain a list of modules declared as glob pat Note that patterns are always applied relative to the project's virtual source directory `/resources/`. -::: info Info -This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0) -and applies only to projects defining [Specification Version](#specification-versions) -2.6 or higher. +!!! info + This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0) + and applies only to projects defining [Specification Version](#specification-versions) + 2.6 or higher. -::: details Example -```yaml -builder: - minification: - excludes: - - "my/lib/thirdparty/ - - "!my/lib/thirdparty/NotExcluded.js -``` - -::: +!!! example + ```yaml + builder: + minification: + excludes: + - "my/lib/thirdparty/" + - "!my/lib/thirdparty/NotExcluded.js" + ``` ## Server Configuration -::: details Example -```yaml -server: - settings: - httpPort: 1337 - httpsPort: 1443 -``` - -::: +!!! example + ```yaml + server: + settings: + httpPort: 1337 + httpsPort: 1443 + ``` By default, UI5 CLI will serve applications using Port `8080`. When running in HTTP/2 or HTTPS mode, Port `8443` will be used. @@ -656,32 +616,30 @@ The default and configured server ports can always be overwritten with the CLI p ## Extension Configuration -::: details Example -```yaml -specVersion: "4.0 -type: application -metadata: - name: my.application ---- -specVersion: "4.0 -kind: extension -type: project-shim -metadata: - name: my.application.thirdparty -shims: - configurations: - lodash: - specVersion: "4.0 - type: module - metadata: - name: lodash - resources: - configuration: - paths: - /resources/my/application/thirdparty/: " -``` - -::: +!!! example + ```yaml + specVersion: "4.0" + type: application + metadata: + name: my.application + --- + specVersion: "4.0" + kind: extension + type: project-shim + metadata: + name: my.application.thirdparty + shims: + configurations: + lodash: + specVersion: "4.0" + type: module + metadata: + name: lodash + resources: + configuration: + paths: + /resources/my/application/thirdparty/: "" + ``` Extensions configuration can be added to any projects `ui5.yaml`. For better readability, it should to be located *after* the projects configuration, separated by [three dashes](https://yaml.org/spec/1.2/spec.html#id2760395) "`---`". @@ -690,43 +648,41 @@ In cases where an extension shall be reused across multiple projects you can mak Extensions can be identified by the `kind: extension` configuration. Note that if no `kind` configuration is given, [`project`](#project-configuration) is assumed. ### Available Extensions -- [Custom Tasks](./extensibility/CustomTasks) -- [Custom Server Middleware](./extensibility/CustomServerMiddleware) -- [Project Shims](./extensibility/ProjectShims) +- [Custom Tasks](./extensibility/CustomTasks.md) +- [Custom Server Middleware](./extensibility/CustomServerMiddleware.md) +- [Project Shims](./extensibility/ProjectShims.md) ## Custom Bundling -::: details Example -```yaml -builder: - bundles: - - bundleDefinition: - name: "sap-ui-custom.js - sections: - - mode: raw - filters: - - ui5loader-autoconfig.js - resolve: true - sort: true - bundleOptions: - optimize: true - - bundleDefinition: - name: "app.js - sections: - - mode: preload - filters: - - some/app/Component.js - resolve: true - sort: true - - mode: provided - filters: - - ui5loader-autoconfig.js - resolve: true - bundleOptions: - optimize: true -``` - -::: +!!! example + ```yaml + builder: + bundles: + - bundleDefinition: + name: "sap-ui-custom.js" + sections: + - mode: raw + filters: + - ui5loader-autoconfig.js + resolve: true + sort: true + bundleOptions: + optimize: true + - bundleDefinition: + name: "app.js" + sections: + - mode: preload + filters: + - some/app/Component.js + resolve: true + sort: true + - mode: provided + filters: + - ui5loader-autoconfig.js + resolve: true + bundleOptions: + optimize: true + ``` Custom bundles can be defined in the `ui5.yaml`. Within the `builder/bundles` configuration a list of `bundleDefinitions` can be described. @@ -764,7 +720,7 @@ A list of bundle definitions. A `bundleDefinition` contains of the following opt A project must define a specification version by setting the `specVersion` property. UI5 CLI uses this information to detect whether the currently installed version is compatible to a project's configuration. ```yaml -specVersion: "4.0 +specVersion: "4.0" [...] ``` @@ -803,11 +759,11 @@ Version | UI5 CLI Release **Breaking changes:** - Removed bundle option [`usePredefineCalls`](#properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. -- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](./Configuration#properties) for details. +- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](../pages/Configuration.md#properties) for details. Specification Version 4.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v4.0.0 and above. -Also see [Migrate to v4](../updates/migrate-v4#changes-for-projects) for details on these breaking changes. +Also see [Migrate to v4](../updates/migrate-v4.md#changes-for-projects) for details on these breaking changes. ### Specification Version 3.2 @@ -874,7 +830,7 @@ Specification Version 2.3 projects are supported by [UI5 CLI](https://github.com **Features:** -- Custom task extensions can make use of the [`TaskUtil` Helper Class](./extensibility/CustomTasks#helper-class-taskutil) +- Custom task extensions can make use of the [`TaskUtil` Helper Class](./extensibility/CustomTasks.md#helper-class-taskutil) Specification Version 2.2 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.4.0 and above. @@ -883,7 +839,7 @@ Specification Version 2.2 projects are supported by [UI5 CLI](https://github.com **Features:** - Adds support for the ["customConfiguration"](#custom-configuration) configuration -- Custom middleware extensions can make use of the [`MiddlewareUtil` Helper Class](./extensibility/CustomServerMiddleware#helper-class-middlewareutil) +- Custom middleware extensions can make use of the [`MiddlewareUtil` Helper Class](./extensibility/CustomServerMiddleware.md#helper-class-middlewareutil) Specification Version 2.1 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.2.0 and above. diff --git a/packages/documentation/docs/pages/ESSupport.md b/packages/documentation/docs/pages/ESSupport.md index a85798e723..b7ac05687a 100644 --- a/packages/documentation/docs/pages/ESSupport.md +++ b/packages/documentation/docs/pages/ESSupport.md @@ -9,7 +9,7 @@ UI5 CLI offers general support for `ES2023` ECMAScript features. While a `ui5 bu | v3.0+ | ECMAScript 2022 | | | v2.0+ | ECMAScript 2009/ES5 | Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features | -The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 CLI check out [Code Analysis](./CodeAnalysis). +The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 CLI check out [Code Analysis](./CodeAnalysis.md). ## Language Features with Restrictions @@ -21,20 +21,20 @@ In general, UI5 CLI only analyzes **JavaScript** files of type `script`. [JavaSc UI5 CLI and the UI5 Runtime does not support the usage of `export` and `import` of JavaScript Modules. Therefore, `sap.ui.define` has to be used. -#### Supported +=== "Supported" ```javascript sap.ui.define([ "ModuleA", - "ModuleB + "ModuleB" ], function(ModuleA, ModuleB) { return ModuleA.extend("ModuleC", {}); }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="1 2 3" import ModuleA from "ModuleA"; import ModuleB from "ModuleB"; export default class ModuleC extends ModuleA {}; @@ -48,7 +48,7 @@ UI5 CLI and the UI5 Runtime does not support the usage of `export` and `import` Template Literals with one or more expressions inside a `sap.ui.define` or `sap.ui.require` call are not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ @@ -58,9 +58,9 @@ Template Literals with one or more expressions inside a `sap.ui.define` or `sap. }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="4" const i = `B`; sap.ui.define([ `ModuleA`, @@ -75,7 +75,7 @@ The same rule applies also for the usage of deprecated or no longer recommended When declaring a **Smart Template** using a **Template Literal** with one or more expressions in the name of the **Smart Template** is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ @@ -97,9 +97,9 @@ When declaring a **Smart Template** using a **Template Literal** with one or mor }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="6" sap.ui.define([ `sap/suite/ui/generic/template/lib/TemplateAssembler` ], function(TemplateAssembler) { @@ -126,7 +126,7 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless Declaring an **XMLComposite** control using a **Template Literal** with one or more expressions in the name, is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ @@ -136,9 +136,9 @@ Declaring an **XMLComposite** control using a **Template Literal** with one or m }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="5" sap.ui.define([ `sap/ui/core/XMLComposite` ], function(XMLComposite) { @@ -151,7 +151,7 @@ Declaring an **XMLComposite** control using a **Template Literal** with one or m A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Template Literal** with one or more expressions for the library name. -#### Supported +=== "Supported" ```javascript sap.ui.getCore().initLibrary({ @@ -159,9 +159,9 @@ A library is typically initialized via an accompanying `library.js`. Within that }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="3" const libraryName = `lib`; sap.ui.getCore().initLibrary({ name: `my.${libraryName}` @@ -177,16 +177,16 @@ While UI5 CLI performs a build placeholders are replaced with a values offered b - `buildtime` - `copyright` -#### Supported +=== "Supported" ```javascript const myVersion = `1.2`; const transformedVersion `v${myVersion}` ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="3" const version = `1.2`; const transformedVersion `v${version}` ``` @@ -201,19 +201,19 @@ A [Spread Element](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer A **Spread Element** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ "ModuleA", - "ModuleB + "ModuleB" ], function(ModuleA, ModuleB) { }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="3" const dependencies = ["ModuleA", "ModuleB"]; sap.ui.define([ ...dependencies @@ -227,11 +227,11 @@ The same rule applies also for the usage of deprecated or no longer recommended When declaring a **Smart Template**, the usage of a **Spread Element** in the configuration is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler + "sap/suite/ui/generic/template/lib/TemplateAssembler" ], function(TemplateAssembler) { return TemplateAssembler.getTemplateComponent(getMethods, "sap.suite.ui.generic.templates.Page.Component", { @@ -239,26 +239,26 @@ When declaring a **Smart Template**, the usage of a **Spread Element** in the co properties: { templateName: { type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" } }, - manifest: "json + manifest: "json" } } ); }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="6" sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler + "sap/suite/ui/generic/template/lib/TemplateAssembler" ], function(TemplateAssembler) { const myTemplate = { templateName: { type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" } }; return TemplateAssembler.getTemplateComponent(getMethods, @@ -267,7 +267,7 @@ When declaring a **Smart Template**, the usage of a **Spread Element** in the co properties: { ...myTemplate } - manifest: "json + manifest: "json" } } ); @@ -280,26 +280,26 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless When declaring an **XMLComposite**, the usage of a **Spread Element** in the configuration is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ - "sap/ui/core/XMLComposite + "sap/ui/core/XMLComposite" ], function(XMLComposite) { return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite + fragment: "composites.custom.MyComposite" } }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="5" sap.ui.define([ - "sap/ui/core/XMLComposite + "sap/ui/core/XMLComposite" ], function(XMLComposite) { const myXMLComposite = { - fragment: "composites.custom.MyComposite + fragment: "composites.custom.MyComposite" }; return XMLComposite.extend(`composites.MyComposite`, { ...myXMLComposite @@ -311,19 +311,19 @@ When declaring an **XMLComposite**, the usage of a **Spread Element** in the con A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Spread Element**. -#### Supported +=== "Supported" ```javascript sap.ui.getCore().initLibrary({ - name: "my.lib + name: "my.lib" }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="5" const mylib = { - name: "my.lib + name: "my.lib" }; sap.ui.getCore().initLibrary({ ...mylib @@ -338,19 +338,19 @@ An **Object Expression** can be used in all places except in following places. An **Object Expression** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ - "Bar + "Bar" ], function(Bar){ }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="3" const dependency = "Bar"; sap.ui.define([ dependency @@ -364,11 +364,11 @@ The same rule applies also for the usage of deprecated or no longer recommended When declaring a **Smart Template**, the usage of an **Object Expression** in the configuration is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler + "sap/suite/ui/generic/template/lib/TemplateAssembler" ], function(TemplateAssembler) { return TemplateAssembler.getTemplateComponent(getMethods, "sap.suite.ui.generic.templates.Page.Component", { @@ -376,33 +376,33 @@ When declaring a **Smart Template**, the usage of an **Object Expression** in th properties: { templateName: { type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" } }, - manifest: "json + manifest: "json" } } ); }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="9" sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler + "sap/suite/ui/generic/template/lib/TemplateAssembler" ], function(TemplateAssembler) { - const key = "templateName + const key = "templateName" return TemplateAssembler.getTemplateComponent(getMethods, `sap.suite.ui.generic.templates.Page.${name}`, { metadata: { properties: { [key]: { type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" } } - manifest: "json + manifest: "json" } } ); @@ -415,27 +415,27 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless When declaring an **XMLComposite**, the usage of an **Object Expression** in the configuration is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ - "sap/ui/core/XMLComposite + "sap/ui/core/XMLComposite" ], function(XMLComposite) { return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite + fragment: "composites.custom.MyComposite" } }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="6" sap.ui.define([ - "sap/ui/core/XMLComposite + "sap/ui/core/XMLComposite" ], function(XMLComposite) { const key = "fragment"; return XMLComposite.extend("composites.MyComposite", { - [key]: "composites.custom.MyComposite + [key]: "composites.custom.MyComposite" }); }); ``` @@ -444,20 +444,20 @@ When declaring an **XMLComposite**, the usage of an **Object Expression** in the A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Object Expression**. -#### Supported +=== "Supported" ```javascript sap.ui.getCore().initLibrary({ - name: "my.lib + name: "my.lib" }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="3" const key = "name"; sap.ui.getCore().initLibrary({ - [key]: "my.lib + [key]: "my.lib" }); ``` @@ -469,23 +469,23 @@ A **Computed Property** can be used in all places except in following places. One or more **Computed Property** as a parameter in an UI5 Module `extend` call is not supported. -#### Supported +=== "Supported" ```javascript sap.ui.define([ - "Bar + "Bar" ], function(Bar){ return Bar.extend("my.Bar" {}); }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="3" const name = "my"; sap.ui.define([ - "Bar + "Bar" ], function(Bar){ return Bar.extend(name + ".Bar", {}); }); @@ -495,20 +495,20 @@ One or more **Computed Property** as a parameter in an UI5 Module `extend` call A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Computed Property**. -#### Supported +=== "Supported" ```javascript sap.ui.getCore().initLibrary({ - name: "my.lib + name: "my.lib" }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="3" const name = "my"; sap.ui.getCore().initLibrary({ - name: name + ".lib + name: name + ".lib" }); ``` @@ -516,11 +516,11 @@ A library is typically initialized via an accompanying `library.js`. Within that If you want to generate a JSDoc build of your project and using a **Class Declaration** the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration. -#### Supported +=== "Supported" ```javascript sap.ui.define([ - "Bar + "Bar" ], function(Bar){ /** * JSDoc block here @@ -533,11 +533,11 @@ If you want to generate a JSDoc build of your project and using a **Class Declar }); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="7" sap.ui.define([ - "Bar + "Bar" ], function(Bar){ /** * JSDoc block here @@ -552,11 +552,11 @@ If you want to generate a JSDoc build of your project and using a **Class Declar If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command. -#### Supported +=== "Supported" ```javascript sap.ui.define([ - "Bar + "Bar" ], /** * JSDoc block here @@ -566,14 +566,14 @@ If you want to generate a JSDoc build of your project and use an **Arrow Functio })); ``` -#### Not Supported +=== "Not Supported" - ```javascript + ```javascript hl_lines="1 2 3" /** * JSDoc block here */ sap.ui.define([ - "Bar + "Bar" ], (Bar) => Bar.extends("Foo", { })); diff --git a/packages/documentation/docs/pages/FAQ.md b/packages/documentation/docs/pages/FAQ.md index 0e87511488..97d4154214 100644 --- a/packages/documentation/docs/pages/FAQ.md +++ b/packages/documentation/docs/pages/FAQ.md @@ -1,9 +1,9 @@ # FAQ ### How Can I Contribute? -Please check our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING). +Please check our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md). ### How Can I Obtain Support? -Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. +Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md#report-an-issue) on how to report an issue. ### What's the Difference Between OpenUI5 and SAPUI5? The open source project [OpenUI5](https://openui5.org/) provides most of the fundamental framework features. [SAPUI5](https://ui5.sap.com/) enhances this by providing **additional libraries** under a **different license**. diff --git a/packages/documentation/docs/pages/FileSystem.md b/packages/documentation/docs/pages/FileSystem.md index fa4a2f4f4b..6ddb8ec8f1 100644 --- a/packages/documentation/docs/pages/FileSystem.md +++ b/packages/documentation/docs/pages/FileSystem.md @@ -2,11 +2,7 @@ The [UI5 FS](https://github.com/SAP/ui5-fs) provides a UI5-specific file system abstraction. - +[**API Reference**](https://ui5.github.io/cli/v4/api/){: .md-button .sap-icon-initiative } ## Overview diff --git a/packages/documentation/docs/pages/GettingStarted.md b/packages/documentation/docs/pages/GettingStarted.md index 203fe30ef9..c7187ef4c3 100644 --- a/packages/documentation/docs/pages/GettingStarted.md +++ b/packages/documentation/docs/pages/GettingStarted.md @@ -16,7 +16,7 @@ npm install --save-dev @ui5/cli ui5 --help ``` -The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the [UI5 CLI documentation](./CLI#local-vs-global-installation) for details. +The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the [UI5 CLI documentation](./CLI.md#local-vs-global-installation) for details. ## ⚡️ Quick Start: OpenUI5 Sample App Check out the [OpenUI5 Sample App](https://github.com/SAP/openui5-sample-app) featuring a full blown [How-to](https://github.com/SAP/openui5-sample-app/#openui5-sample-app) to play around with UI5 CLI! @@ -50,13 +50,13 @@ If your project is not set up for use with the UI5 CLI yet, follow these steps: 1. Define the framework you want to use - === "OpenUI5 + === "OpenUI5" ```sh ui5 use openui5@latest ``` - === "SAPUI5 + === "SAPUI5" ```sh ui5 use sapui5@latest @@ -64,7 +64,7 @@ If your project is not set up for use with the UI5 CLI yet, follow these steps: You can choose between the OpenUI5 and the SAPUI5 framework. - Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5). + Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5). 1. Add required libraries ```sh @@ -86,14 +86,15 @@ If your project is not set up for use with the UI5 CLI yet, follow these steps: Find more information here: - - [Server](./Server) - - [Builder](./Builder) - - [CLI](./CLI) + - [Server](./Server.md) + - [Builder](./Builder.md) + - [CLI](./CLI.md) 1. If you are using Git or similar version control, commit `package.json` and `ui5.yaml` to your repository. ```sh git add package.json ui5.yaml - git commit -m "Enable use with UI5 CLI + git commit -m "Enable use with UI5 CLI" ``` -**🎉 Hooray! You can now use UI5 CLI in your project! 🎉** +**Hooray! You can now use UI5 CLI in your project!** +{: .sap-icon-ui5-after } diff --git a/packages/documentation/docs/pages/Guidelines.md b/packages/documentation/docs/pages/Guidelines.md deleted file mode 100644 index 9739695c09..0000000000 --- a/packages/documentation/docs/pages/Guidelines.md +++ /dev/null @@ -1,60 +0,0 @@ -# Development Conventions and Guidelines -## JavaScript Coding Guidelines -We enforce code style rules using [ESLint](https://eslint.org). Execute `npm run lint` to check your code for style issues. -You may also find an ESLint integration for your favorite IDE [here](https://eslint.org/docs/user-guide/integrations). - -## Testing -Unit testing is based on the [ava](https://github.com/avajs/ava) test-framework. You can run all tests using `npm test` (this is what our CI will do for all pull requests). - -During development, you might want to use `npm run unit` or `npm run unit-watch` (re-runs tests automatically after file changes) to quickly execute all unit tests and see whether your change just broke one of them. 😉 - -## Git Guidelines -### No Merge Commits -Please use [rebase instead of merge](https://www.atlassian.com/git/tutorials/merging-vs-rebasing) to update a branch to the latest main. This helps keeping a clean commit history in the project. - -### Commit Message Style -#### Commit Summary -The commit summary is the first line of the commit message. - -- It should be **50-70 characters** long. -- It must be **prefixed** by `[FIX]`, `[FEATURE]` or `[INTERNAL]` accordingly, followed by the name of the component or module which was the main subject of the change. - + Use `[FIX]` for bugfixes. - + Use `[FEATURE]` for new features / enhancements. - + Use `[BREAKING]` for breaking / incompatible changes. - _**Note:** The commit body of a breaking change should also include a paragraph starting with `BREAKING CHANGE:`. - This paragraph will be highlighted in the changelog._ - + Use `[DEPENDENCY]` for dependency updates that should be mentioned in the changelog. - + Use `[INTERNAL]` for all other changes (e.g. refactorings, documentation, etc.). These changes will not be listed in the changelog. - + Exceptions are changes created by automated processes like releases or dependency updates -- It must not contain `[` or `]` anywhere but in the prefix. -- It shall be written in **imperative present tense** (as recommended by [Git](https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project)) - + Examples: Instead of *"Adding tests for"* or *"I added tests for"* use *"Add tests for"* or *"Add feature xy"*. - -#### Commit Body -After the commit summary there should be an empty line followed by the commit body. - -- Describe the intention and reasoning of the change -- If a change fixes an issue reported on GitHub, add the following line to the commit message: - + `Fixes: #` (e.g. `Fixes: #42`) -- Breaking changes should include a paragraph starting with `BREAKING CHANGE:`. This paragraph will be highlighted in the changelog. - -#### Example -``` -[FIX] npm translator: Correct handling of devDependencies - -- devDevependencies should only be included in certain cases -- Was caused by a refactoring - -Fixes: #42 -Fixes: #45 -``` - -## Work on Release Branches -Major releases are typically prepared on dedicated branches like `next`. - -There are some things to be aware of when working on these branches. - -### Implementing Changes in Multiple Code Lines -While working on a new major release (e.g. `5.0.0`), any fixes or new features implemented on the **current** (main) code line (e.g. 4.x) should be cherry-picked as `[INTERNAL]` to the dedicated (pre-)release branch (typically `next`). This is to prevent changes declared as `[FEATURE]` or `[FIX]` from appearing in the changelog twice, which can be confusing since the new major version has not yet been released and should naturally contain any fixes or features released in any of the preceding releases. Listing them twice might confuse users. Note that our changelog is generated based on all tags of the repository, independent of the currently checked out branch (also see [git-chglog/issues/123](https://github.com/git-chglog/git-chglog/issues/123)). - -However, once a new major release becomes **current** (i.e. "main", not a pre-release), any changes applied to multiple code lines should be cherry picked with the original prefix, so that they appear for multiple versions in the changelog. diff --git a/packages/documentation/docs/pages/OpenUI5.md b/packages/documentation/docs/pages/OpenUI5.md index 6458f1e766..d471e4560d 100644 --- a/packages/documentation/docs/pages/OpenUI5.md +++ b/packages/documentation/docs/pages/OpenUI5.md @@ -1,33 +1,29 @@ # Consuming OpenUI5 Libraries -OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on [Consuming SAPUI5 Libraries](./SAPUI5) for a general description of how UI5 CLI can fetch and provide framework dependencies to your project. +OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on [Consuming SAPUI5 Libraries](./SAPUI5.md) for a general description of how UI5 CLI can fetch and provide framework dependencies to your project. Note that projects using the SAPUI5 framework can depend on projects using the OpenUI5 framework. However, OpenUI5 projects can't depend on SAPUI5 projects. -Please also refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ#whats-the-difference-between-openui5-and-sapui5). +Please also refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md#whats-the-difference-between-openui5-and-sapui5). -::: info Info -The minimum OpenUI5 version that can be consumed by UI5 CLI is **1.52.5** - -::: +!!! info + The minimum OpenUI5 version that can be consumed by UI5 CLI is **1.52.5** ## Configuration Your project's `ui5.yaml` provides a configuration section dedicated to framework dependency handling. This configuration can be maintained by editing the file, or by using the UI5 CLI: -::: details Example - Using the [UI5 CLI](./CLI): - ```sh - ui5 use openui5@latest - ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 - ``` - -::: +!!! example + Using the [UI5 CLI](./CLI.md): + ```sh + ui5 use openui5@latest + ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 + ``` **Example ui5.yaml of an application** ```yaml -specVersion: "4.0 +specVersion: "4.0" type: application metadata: name: some.project.name @@ -43,7 +39,7 @@ framework: **Example ui5.yaml of a library** ```yaml -specVersion: "4.0 +specVersion: "4.0" type: library metadata: name: some.library @@ -60,9 +56,9 @@ framework: optional: true ``` -Please make sure that your project defines [Specification Version 2.0](./Configuration#specification-version-20) or higher. +Please make sure that your project defines [Specification Version 2.0](./Configuration.md#specification-version-20) or higher. -For details, please see the corresponding [framework configuration documentation](./Configuration#framework-configuration). +For details, please see the corresponding [framework configuration documentation](./Configuration.md#framework-configuration). ## Linking Framework Dependencies When working on UI5 applications or libraries that use OpenUI5, you can link a local OpenUI5 repository into that project. This allows you to make changes to the project itself as well as to the OpenUI5 libraries simultaneously and test them immediately. @@ -70,4 +66,4 @@ When working on UI5 applications or libraries that use OpenUI5, you can link a l A detailed step-by-step guide on how to achieve such a setup with the OpenUI5 Sample App can be found [here](https://github.com/SAP/openui5-sample-app#working-with-local-dependencies). ## OpenUI5 Framework Development -Please refer to the [OpenUI5 Framework Development Documentation](https://github.com/SAP/openui5/blob/-/docs/developing#developing-ui5). +Please refer to the [OpenUI5 Framework Development Documentation](https://github.com/SAP/openui5/blob/-/docs/developing.md#developing-ui5). diff --git a/packages/documentation/docs/pages/Overview.md b/packages/documentation/docs/pages/Overview.md index b448cfd179..78adbe1dfb 100644 --- a/packages/documentation/docs/pages/Overview.md +++ b/packages/documentation/docs/pages/Overview.md @@ -9,10 +9,10 @@ UI5 CLI differentiates between "framework dependencies" and "project dependencie **Framework dependencies** are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options: -* [Working with **OpenUI5** Framework Dependencies](./OpenUI5) -* [Working with **SAPUI5** Framework Dependencies](./SAPUI5) +* [Working with **OpenUI5** Framework Dependencies](./OpenUI5.md) +* [Working with **SAPUI5** Framework Dependencies](./SAPUI5.md) -**Project dependencies** are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: [FAQ: Why package.json? / Why npm?](./FAQ#why-packagejson-why-npm). +**Project dependencies** are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: [FAQ: Why package.json? / Why npm?](./FAQ.md#why-packagejson-why-npm). ## Linking Projects Would you like to work on an application project and one or more of its dependencies at the same time? We got you covered! @@ -20,7 +20,7 @@ Would you like to work on an application project and one or more of its dependen ### UI5 Workspaces The recommended approach for setting up a development environment where simultaneous work on multiple UI5 projects is required. -Head over to the [UI5 Workspaces](./Workspace) documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project: +Head over to the [UI5 Workspaces](./Workspace.md) documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project: **Example: Your Directory Structure** ``` @@ -41,20 +41,20 @@ In its `package.json`, `my-app` should already define a dependency to `my-reuse- In the `my-app` directory, create a new file named `ui5-workspace.yaml` with the following content: -```yaml +```yaml title="ui5-workspace.yaml" specVersion: workspace/1.0 metadata: name: default dependencyManagement: resolutions: - - path: ../pages/my-reuse-library + - path: ../my-reuse-library ``` That's it! Start a server via `ui5 serve`, and you will see that any changes you make in `my-reuse-library` are immediately visible in `my-app`. ## Package Managers -By leaving dependency management up to the tool of your choice (see [FAQ: Why package.json? / Why npm?](./FAQ#why-packagejson-why-npm)) you have a variety of other options for linking dependencies into your project. +By leaving dependency management up to the tool of your choice (see [FAQ: Why package.json? / Why npm?](./FAQ.md#why-packagejson-why-npm)) you have a variety of other options for linking dependencies into your project. Here is an example using the [npm CLI](https://www.npmjs.com/get-npm) in Version 8, an application, and a reuse library project: @@ -94,18 +94,18 @@ That's it. You can check whether the linking worked by executing `ui5 tree` in t As an alternative to defining your project dependencies in the `package.json`, you can define a static dependency hierarchy for the project in a YAML file. This is typically only advised in special cases where none of the other concepts work. -To use such a file in UI5 CLI, provide a path to it using the [`--dependency-definition`](./CLI#common-options) parameter. Note that all `package.json` dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in `ui5.yaml` will still be used. +To use such a file in UI5 CLI, provide a path to it using the [`--dependency-definition`](./CLI.md#common-options) parameter. Note that all `package.json` dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in `ui5.yaml` will still be used. **Example: `projectDependencies.yaml`** ```yaml id: my.app -version: "local -path: ". +version: "local" +path: "." dependencies: - id: my.lib - version: "local - path: "../pages/my.lib + version: "local" + path: "../my.lib" ``` By placing this file in the root directory of the `my.app` application project, you can start a server with a local copy of the `my.lib` dependency, located in the same parent directory, using the command `ui5 serve --dependency-definition ./projectDependencies.yaml`. @@ -119,9 +119,9 @@ The UI5 CLI contains a web server to serve the project via HTTP/2 protocol. ui5 serve --h2 ``` -This requires an SSL certificate. You are guided through the automatic generation process. Also see the [UI5 Server documentation](./Server#ssl-certificates) +This requires an SSL certificate. You are guided through the automatic generation process. Also see the [UI5 Server documentation](./Server.md#ssl-certificates) ## Integration in Other Tools One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other `Node.js`-based tools and frameworks like [Grunt](https://gruntjs.com/) or [Gulp](https://gulpjs.com/). -All JavaScript APIs available for direct consumption are listed [here](https://ui5.github.io/cli/v4/api/index.html). However, for standard UI5 development, the [UI5 CLI](./CLI) should always be the first choice. +All JavaScript APIs available for direct consumption are listed [here](https://ui5.github.io/cli/v4/api/index.html). However, for standard UI5 development, the [UI5 CLI](./CLI.md) should always be the first choice. diff --git a/packages/documentation/docs/pages/Project.md b/packages/documentation/docs/pages/Project.md index 76dc14c039..1d2d7260ce 100644 --- a/packages/documentation/docs/pages/Project.md +++ b/packages/documentation/docs/pages/Project.md @@ -1,11 +1,11 @@ # UI5 Project -The [UI5 Project](https://github.com/SAP/ui5-project) module provides functionality to build a UI5 project. Also see [Development Overview: Project Dependencies](./Overview#project-dependencies). +The [UI5 Project](https://github.com/SAP/ui5-project) module provides functionality to build a UI5 project. Also see [Development Overview: Project Dependencies](./Overview.md#project-dependencies). ## Types Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration. -Also see [UI5 Project: Configuration](./Configuration#general-configuration) +Also see [UI5 Project: Configuration](./Configuration.md#general-configuration) ### application Projects of type `application` are typically the main or root project. In a projects dependency tree, there should only be one project of type `application`. If multiple are found, those further away from the root are ignored. @@ -15,14 +15,14 @@ The source directory of an application (typically named `webapp`) is mapped to t An applications source directory may or may not contain a `Component.js` file. If it does, it must also contain a `manifest.json` file. If there is a `Component.js` file, an optimized `Component-preload.js` file will be generated during the build. ### library -UI5 libraries are often referred to as reuse-, custom- or [control libraries](https://github.com/SAP/openui5/blob/-/docs/controllibraries). They are a key component in sharing code across multiple projects in UI5. +UI5 libraries are often referred to as reuse-, custom- or [control libraries](https://github.com/SAP/openui5/blob/-/docs/controllibraries.md). They are a key component in sharing code across multiple projects in UI5. A project of type `library` must have a source directory (typically named `src`). It may also feature a "test" directory. These directories are mapped to the virtual directories `/resources` for the sources and `/test-resources` for the test resources. These directories should contain a directory structure representing the namespace of the library (e.g. `src/my/first/library`) to prevent name clashes between the resources of different libraries. ### theme-library -*Available since [Specification Version](./Configuration#specification-versions) 1.1* +*Available since [Specification Version](./Configuration.md#specification-versions) 1.1* UI5 theme libraries provide theming resources for the controls of one or multiple libraries. @@ -64,8 +64,4 @@ In the table below you can find the available combinations of project type & out ^3^ Modules have explicit path mappings configured and no namespace concept. - +[**API Reference**](https://ui5.github.io/cli/v4/api/@ui5_project_build_ProjectBuilder.html){: .md-button .sap-icon-initiative } diff --git a/packages/documentation/docs/pages/SAPUI5.md b/packages/documentation/docs/pages/SAPUI5.md index f55a3ef197..a2b89a062a 100644 --- a/packages/documentation/docs/pages/SAPUI5.md +++ b/packages/documentation/docs/pages/SAPUI5.md @@ -1,21 +1,17 @@ # Consuming SAPUI5 Libraries -::: info Info -Make sure you have installed the UI5 CLI in Version 2.0 or later: `npm install --global @ui5/cli` +!!! info + Make sure you have installed the UI5 CLI in Version 2.0 or later: `npm install --global @ui5/cli` -The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.** -For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy). - -::: + The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.** + For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy). ## Overview SAPUI5 libraries are hosted on the public npm registry at `registry.npmjs.org`. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide. -::: info Note -For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-and-sapui5-the-next-step/) - -::: +!!! note + For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-and-sapui5-the-next-step/) ## Usage Since Version 2.0 of the UI5 CLI, it will automatically download all required framework dependencies of a project that have been listed in the corresponding `ui5.yaml` file. They will be cached in a `.ui5` directory located in the user's home directory. This happens transparently whenever you execute the `ui5 serve` or `ui5 build` commands. @@ -28,19 +24,17 @@ Your project's `ui5.yaml` provides a configuration section dedicated to framewor This configuration can be maintained by editing the file, or by using the UI5 CLI: -::: details Example - Using the [UI5 CLI](./CLI): - ```sh - ui5 use sapui5@latest - ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3 - ui5 add -D sap.ushell - ``` - -::: +!!! example + Using the [UI5 CLI](./CLI.md): + ```sh + ui5 use sapui5@latest + ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3 + ui5 add -D sap.ushell + ``` **Example ui5.yaml of an application** ```yaml -specVersion: "4.0 +specVersion: "4.0" type: application metadata: name: some.project.name @@ -58,7 +52,7 @@ framework: **Example ui5.yaml of a library** ```yaml -specVersion: "4.0 +specVersion: "4.0" type: library metadata: name: some.library @@ -75,10 +69,10 @@ framework: optional: true ``` -Please make sure that your project defines [Specification Version 2.0](./Configuration#specification-version-20) or higher. +Please make sure that your project defines [Specification Version 2.0](./Configuration.md#specification-version-20) or higher. -For details please refer to the [framework configuration documentation](././Configuration#framework-configuratio). +For details please refer to the [framework configuration documentation](././Configuration.md#framework-configuratio). ## Differences Between OpenUI5 and SAPUI5 -Please refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5) +Please refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5) diff --git a/packages/documentation/docs/pages/Server.md b/packages/documentation/docs/pages/Server.md index f998d80c9d..7d8f6a06df 100644 --- a/packages/documentation/docs/pages/Server.md +++ b/packages/documentation/docs/pages/Server.md @@ -2,17 +2,13 @@ The [UI5 Server](https://github.com/SAP/ui5-server) module provides server capabilities for local development of UI5 projects. - +[**API Reference**](https://ui5.github.io/cli/v4/api/module-@ui5_server.html){: .md-button .sap-icon-initiative } ## Standard Middleware All available standard middleware are listed below in the order of their execution. -A project can also add custom middleware to the server by using the [Custom Server Middleware Extensibility](./extensibility/CustomServerMiddleware). +A project can also add custom middleware to the server by using the [Custom Server Middleware Extensibility](./extensibility/CustomServerMiddleware.md). | Middleware | Description | | ---- | ---- | @@ -52,8 +48,8 @@ This middleware resolves requests using the [ui5-fs](https://github.com/SAP/ui5- The following file content transformations are executed: -- Escaping non-ASCII characters in `.properties` translation files based on a project's [configuration](./Configuration#encoding-of-properties-files) -- Enhancing the `manifest.json` with supported locales determined by available `.properties` [translation files](./Builder#generation-of-supported-locales) +- Escaping non-ASCII characters in `.properties` translation files based on a project's [configuration](./Configuration.md#encoding-of-properties-files) +- Enhancing the `manifest.json` with supported locales determined by available `.properties` [translation files](./Builder.md#generation-of-supported-locales) ### testRunner Serves a static version of the UI5 QUnit TestRunner at `/test-resources/sap/ui/qunit/testrunner.html`. @@ -77,7 +73,5 @@ When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under `.ui5/server` in your user's home directory. -::: tip Tip -If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete". - -::: \ No newline at end of file +!!! tip + If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete". diff --git a/packages/documentation/docs/pages/Troubleshooting.md b/packages/documentation/docs/pages/Troubleshooting.md index 64a7a9528a..681e778c18 100644 --- a/packages/documentation/docs/pages/Troubleshooting.md +++ b/packages/documentation/docs/pages/Troubleshooting.md @@ -7,7 +7,7 @@ An HTTPS server or proxy that was previously running on a domain (e.g. `localhos You need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. `localhost`) and pressing "delete". ## Issues Not Listed Here -Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. +Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md#report-an-issue) on how to report an issue. ## UI5 Project ### `~/.ui5` Taking too Much Disk Space @@ -50,10 +50,8 @@ UI5 + Karma: `cross-env UI5_LOG_LVL=verbose npm run karma` -::: warning Warning -The combination of the `UI5_LOG_LVL` environment variable with the `--log-level` CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the `UI5_LOG_LVL` environment variable. - -::: +!!! warning + The combination of the `UI5_LOG_LVL` environment variable with the `--log-level` CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the `UI5_LOG_LVL` environment variable. ### Changing UI5 CLI's Data Directory @@ -62,10 +60,8 @@ In some cases and environments this is not a convenient location and the user ne The path to it can either be provided via environment variable or permanently set in the configuration. -::: info Info -Paths are resolved relative to the current root project path (i.e. where the package.json is located). - -::: +!!! info + Paths are resolved relative to the current root project path (i.e. where the package.json is located). #### Environment variable `UI5_DATA_DIR` diff --git a/packages/documentation/docs/pages/Workspace.md b/packages/documentation/docs/pages/Workspace.md index 7620251325..effc25e1dd 100644 --- a/packages/documentation/docs/pages/Workspace.md +++ b/packages/documentation/docs/pages/Workspace.md @@ -1,19 +1,17 @@ # UI5 Workspaces -::: info Info -**UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)** - -::: details Example -```yaml -specVersion: workspace/1.0 -metadata: - name: default -dependencyManagement: +!!! info + **UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)** + +!!! example + ```yaml title="ui5-workspace.yaml" + specVersion: workspace/1.0 + metadata: + name: default + dependencyManagement: resolutions: - - path: ../pages/heavy.library -``` - -::: + - path: ../heavy.library + ``` ## General Concept @@ -21,50 +19,46 @@ UI5 Workspaces can be used to create a personalized local development environmen Workspaces are typically configured in a `ui5-workspace.yaml` file, located next to the project's `ui5.yaml`. The file can contain one or many workspace configurations, each separated by [three dashes](https://yaml.org/spec/1.2.2/#22-structures). For example: -::: details Example -```yaml -specVersion: workspace/1.0 -metadata: - name: default -dependencyManagement: +!!! example + ```yaml title="ui5-workspace.yaml" + specVersion: workspace/1.0 + metadata: + name: default + dependencyManagement: resolutions: - - path: ../pages/heavy.library ---- -specVersion: workspace/1.0 -metadata: - name: extended -dependencyManagement: + - path: ../heavy.library + --- + specVersion: workspace/1.0 + metadata: + name: extended + dependencyManagement: resolutions: - - path: ../pages/heavy.library - - path: ../pages/light.library - - path: ../pages/test.library -``` - -::: + - path: ../heavy.library + - path: ../light.library + - path: ../test.library + ``` If a workspace configuration named `default` exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter `--workspace`. Workspaces can only be used in the project that is currently being worked on, i.e. the current root project. Workspace configurations of dependencies are ignored. The workspace file, however, does not necessarily have to be located within the project. You can reference any workspace configuration file via the UI5 CLI parameter `--workspace-config`. -This concept has been discussed in an RFC: [RFC 0006 Local Dependency Resolution](https://github.com/UI5/cli/blob/main/rfcs/0006-local-dependency-resolution) +This concept has been discussed in an RFC: [RFC 0006 Local Dependency Resolution](https://github.com/UI5/cli/blob/main/rfcs/0006-local-dependency-resolution.md) ## Configuration A UI5 Workspace configuration must define a specification version (`specVersion`) compatible with its configuration. For more information, see [Workspace Specification Versions](#workspace-specification-versions). ```yaml -specVersion: "workspace/1.0 +specVersion: "workspace/1.0" ``` ### Metadata -::: details Example -```yaml -specVersion: workspace/1.0 -metadata: - name: dolphin -``` - -::: +!!! example + ```yaml + specVersion: workspace/1.0 + metadata: + name: dolphin + ``` #### name @@ -72,7 +66,7 @@ A workspace must have a `name`. This allows to easily switch between individual If a workspace is named `default`, **it will be used automatically**, unless a different workspace is selected using the `--workspace` CLI parameter. -The `name` property must satisfy the following conditions. They are identical to [project names](./Configuration#name): +The `name` property must satisfy the following conditions. They are identical to [project names](./Configuration.md#name): * Must be at least 3 characters long * Must be no longer than 80 characters @@ -89,26 +83,24 @@ The `name` property must satisfy the following conditions. They are identical to UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project. -::: details Example -```yaml -specVersion: workspace/1.0 -metadata: - name: dolphin -dependencyManagement: +!!! example + ```yaml + specVersion: workspace/1.0 + metadata: + name: dolphin + dependencyManagement: resolutions: - - path: ../pages/light.library - - path: ../pages/heavy.library - - path: ../pages/test.library -``` - -::: + - path: ../light.library + - path: ../heavy.library + - path: ../test.library + ``` ### Resolutions ```yaml dependencyManagement: resolutions: - - path: ../pages/test.library + - path: ../test.library ``` Resolution paths will be used by UI5 CLI to look for project dependencies. Any dependencies found via these paths will be used over the ones found with the regular dependency resolution mechanism. This includes UI5 CLI extensions. @@ -123,7 +115,7 @@ Note that this configuration only affects the resolution of dependencies which h A workspace configuration must define a Specification Version by setting the `specVersion` property. UI5 CLI uses this information to detect whether the currently installed version is compatible with a workspace's configuration. ```yaml -specVersion: "workspace/1.0 +specVersion: "workspace/1.0" [...] ``` diff --git a/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md b/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md index 9a50c20267..7a164ca4d8 100644 --- a/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md +++ b/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md @@ -10,12 +10,12 @@ Please note that custom middleware packages from third parties can not only modi In a projects `ui5.yaml` file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored. -A middleware may be executed before or after any other middleware. This can either be a [standard middleware](../Server#standard-middleware) or another custom middleware. +A middleware may be executed before or after any other middleware. This can either be a [standard middleware](../Server.md#standard-middleware) or another custom middleware. ### Example: Basic configuration ```yaml -specVersion: "4.0 +specVersion: "4.0" type: application metadata: name: my.application @@ -45,7 +45,7 @@ A custom middleware extension consists of a `ui5.yaml` and a [custom middleware ### Example: ui5.yaml ```yaml -specVersion: "4.0 +specVersion: "4.0" kind: extension type: server-middleware metadata: @@ -65,7 +65,7 @@ The UI5 Server will detect the custom middleware configuration of the project an ```yaml # Project configuration for the above example -specVersion: "4.0 +specVersion: "4.0" kind: project type: application metadata: @@ -76,7 +76,7 @@ server: beforeMiddleware: serveResources --- # Custom middleware extension as part of your project -specVersion: "4.0 +specVersion: "4.0" kind: extension type: server-middleware metadata: @@ -89,9 +89,9 @@ middleware: A custom middleware implementation needs to return a function with the following signature: -#### ESM +=== "ESM" - ```js linenums="1 + ```js linenums="1" /** * Custom UI5 Server middleware API * @@ -127,9 +127,9 @@ A custom middleware implementation needs to return a function with the following }; ``` -#### CommonJS +=== "CommonJS" - ```js linenums="1 + ```js linenums="1" /** * Custom UI5 Server middleware API * @@ -167,9 +167,9 @@ A custom middleware implementation needs to return a function with the following ### Example: lib/middleware/markdownHandler.(m)js -#### ESM +=== "ESM" - ```js linenums="1 + ```js linenums="1" import MarkdownIt from "markdown-it"; export default async function({log, middlewareUtil, options, resources}) { @@ -201,9 +201,9 @@ A custom middleware implementation needs to return a function with the following ``` Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm) -#### CommonJS +=== "CommonJS" - ```js linenums="1 + ```js linenums="1" module.exports = async function({log, middlewareUtil, options, resources}) { const MarkdownIt = require("markdown-it"); const md = new MarkdownIt(); @@ -236,7 +236,7 @@ A custom middleware implementation needs to return a function with the following ## Helper Class `MiddlewareUtil` -Custom middleware defining [Specification Version](../Configuration#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance. +Custom middleware defining [Specification Version](../Configuration.md#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance. In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html). diff --git a/packages/documentation/docs/pages/extensibility/CustomTasks.md b/packages/documentation/docs/pages/extensibility/CustomTasks.md index 9f81222a19..f033760476 100644 --- a/packages/documentation/docs/pages/extensibility/CustomTasks.md +++ b/packages/documentation/docs/pages/extensibility/CustomTasks.md @@ -1,6 +1,6 @@ # Custom UI5 Builder Tasks -The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the [standard tasks](../Builder#standard-tasks), custom tasks can be created. +The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the [standard tasks](../Builder.md#standard-tasks), custom tasks can be created. The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by `ui5-task-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-task-). @@ -8,9 +8,9 @@ Please note that custom tasks from third parties can not only modify your projec ## Configuration -You can configure your build process with additional build task. These custom tasks are defined in the project [configuration](../Configuration). +You can configure your build process with additional build task. These custom tasks are defined in the project [configuration](../Configuration.md). -To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a [standard task](../Builder#standard-tasks) or another custom task. +To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a [standard task](../Builder.md#standard-tasks) or another custom task. Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position. In the below example, when building the library `my.library` the custom `babel` task will be executed before the standard task `generateComponentPreload`. @@ -20,7 +20,7 @@ Another custom task called `render-markdown-files` is then executed immediately ```yaml # In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. -specVersion: "4.0 +specVersion: "4.0" type: library metadata: name: my.library @@ -41,7 +41,7 @@ You can also connect multiple custom tasks with each other. The order in the con ```yaml # In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'. -specVersion: "4.0 +specVersion: "4.0" type: library metadata: name: my.library @@ -60,7 +60,7 @@ A custom task extension consists of a `ui5.yaml` and a [task implementation](#ta ### Example: ui5.yaml ```yaml -specVersion: "4.0 +specVersion: "4.0" kind: extension type: task metadata: @@ -80,7 +80,7 @@ The task extension will then be automatically collected and processed during the ```yaml # Project configuration for the above example -specVersion: "4.0 +specVersion: "4.0" kind: project type: library metadata: @@ -94,7 +94,7 @@ builder: firstH1IsTitle: true --- # Task extension as part of your project -specVersion: "4.0 +specVersion: "4.0" kind: extension type: task metadata: @@ -107,9 +107,9 @@ task: A custom task implementation needs to return a function with the following signature: -#### ESM +=== "ESM" - ```js linenums="1 + ```js linenums="1" /** * Custom task API * @@ -147,9 +147,9 @@ A custom task implementation needs to return a function with the following signa }; ``` -#### CommonJS +=== "CommonJS" - ```js linenums="1 + ```js linenums="1" /** * Custom task API * @@ -189,10 +189,8 @@ A custom task implementation needs to return a function with the following signa ### Required Dependencies -::: info Info -This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0) - -::: +!!! info + This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0) Custom tasks can export an optional callback function `determineRequiredDependencies` to control which dependency-resources are made available through the `dependencies`-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 CLI might be able to build a project faster. @@ -204,11 +202,11 @@ If this callback is not provided, UI5 CLI will make an assumption as to whether * **Specification Versions before 3.0:** If no callback is provided, UI5 CLI assumes that all dependencies are required. -*For more details, see also [RFC 0012 UI5 CLI Extension API v3](https://github.com/UI5/cli/blob/rfc-ui5-tooling-extension-api-v3/rfcs/0012-UI5-Tooling-Extension-API-3#3-tasks-requiring-dependencies)* +*For more details, see also [RFC 0012 UI5 CLI Extension API v3](https://github.com/UI5/cli/blob/rfc-ui5-tooling-extension-api-v3/rfcs/0012-UI5-Tooling-Extension-API-3.md#3-tasks-requiring-dependencies)* -#### ESM +=== "ESM" - ```js linenums="1 + ```js linenums="1" /** * Callback function to define the list of required dependencies * @@ -247,9 +245,9 @@ If this callback is not provided, UI5 CLI will make an assumption as to whether } ``` -#### CommonJS +=== "CommonJS" - ```js linenums="1 + ```js linenums="1" /** * Callback function to define the list of required dependencies * @@ -298,9 +296,9 @@ This example is making use of the `resourceFactory` [TaskUtil](https://ui5.githu API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build result by writing them into the provided `workspace`. -#### ESM +=== "ESM" - ```js linenums="1 + ```js linenums="1" import path from "node:path"; import renderMarkdown from "./renderMarkdown.js"; @@ -329,9 +327,9 @@ result by writing them into the provided `workspace`. }; ``` -#### CommonJS +=== "CommonJS" - ```js linenums="1 + ```js linenums="1" const path = require("node:path"); const renderMarkdown = require("./renderMarkdown.js"); @@ -360,12 +358,10 @@ result by writing them into the provided `workspace`. }; ``` -::: warning Warning -Depending on your project setup, UI5 CLI tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used. - -Tasks should ideally use the reader/writer APIs provided by UI5 CLI for working with project resources. +!!! warning + Depending on your project setup, UI5 CLI tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used. -::: + Tasks should ideally use the reader/writer APIs provided by UI5 CLI for working with project resources. ### Example: lib/tasks/compileLicenseSummary.js @@ -373,14 +369,14 @@ This example is making use of multiple [TaskUtil](https://ui5.github.io/cli/v4/a APIs to retrieve additional information about the project currently being built (`taskUtil.getProject()`) and its direct dependencies (`taskUtil.getDependencies()`). Project configuration files like `package.json` can be accessed directly using `project.getRootReader()`. -#### ESM +=== "ESM" - ```js linenums="1 + ```js linenums="1" import path from "node:path"; /* * Compile a list of all licenses of the project's dependencies - * and write it to "dependency-license-summary.json + * and write it to "dependency-license-summary.json" */ export default async function({dependencies, log, options, taskUtil, workspace}) { const {createResource} = taskUtil.resourceFactory; @@ -394,7 +390,7 @@ APIs to retrieve additional information about the project currently being built } projectsVisited.add(projectName); const project = taskUtil.getProject(projectName); - const pkgResource = await project.getRootReader().byPath(../package.json"); + const pkgResource = await project.getRootReader().byPath("/package.json"); if (pkgResource) { const pkg = JSON.parse(await pkgResource.getString()) @@ -423,14 +419,14 @@ APIs to retrieve additional information about the project currently being built }; ``` -#### CommonJS +=== "CommonJS" - ```js linenums="1 + ```js linenums="1" const path = require("node:path"); /* * Compile a list of all licenses of the project's dependencies - * and write it to "dependency-license-summary.json + * and write it to "dependency-license-summary.json" */ module.exports = async function({dependencies, log, options, taskUtil, workspace}) { const {createResource} = taskUtil.resourceFactory; @@ -444,7 +440,7 @@ APIs to retrieve additional information about the project currently being built } projectsVisited.add(projectName); const project = taskUtil.getProject(projectName); - const pkgResource = await project.getRootReader().byPath(../package.json"); + const pkgResource = await project.getRootReader().byPath("/package.json"); if (pkgResource) { const pkg = JSON.parse(await pkgResource.getString()) @@ -475,6 +471,6 @@ APIs to retrieve additional information about the project currently being built ## Helper Class `TaskUtil` -Custom tasks defining [Specification Version](../Configuration#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance. +Custom tasks defining [Specification Version](../Configuration.md#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance. In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). diff --git a/packages/documentation/docs/pages/extensibility/ProjectShims.md b/packages/documentation/docs/pages/extensibility/ProjectShims.md index bd3b180bab..bdda5bd2cb 100644 --- a/packages/documentation/docs/pages/extensibility/ProjectShims.md +++ b/packages/documentation/docs/pages/extensibility/ProjectShims.md @@ -1,11 +1,11 @@ ### Project Shims A project shim extension can be used to define or extend a project configuration of a module. The most popular use case is probably to add UI5 project configuration to a third party module that otherwise could not be used with the UI5 CLI. -Also see [RFC 0002 Project Shims](https://github.com/UI5/cli/blob/main/rfcs/0002-project-shims). +Also see [RFC 0002 Project Shims](https://github.com/UI5/cli/blob/main/rfcs/0002-project-shims.md). #### Structure ```yaml -specVersion: "4.0 +specVersion: "4.0" kind: extension type: project-shim metadata: @@ -13,12 +13,12 @@ metadata: shims: configurations: : - specVersion: "4.0 + specVersion: "4.0" type: metadata: name: : - specVersion: "4.0 + specVersion: "4.0" type: metadata: name: @@ -61,12 +61,12 @@ An application "my-application" defines a npm dependency to [lodash](https://lod **ui5.yaml** ```yaml -specVersion: "4.0 +specVersion: "4.0" type: application metadata: name: my.application --- # Everything below this line could also be put into the ui5.yaml of a standalone extension module -specVersion: "4.0 +specVersion: "4.0" kind: extension type: project-shim metadata: @@ -74,7 +74,7 @@ metadata: shims: configurations: lodash: # name as defined in package.json - specVersion: "4.0 + specVersion: "4.0" type: module # Use module type metadata: name: lodash @@ -128,11 +128,11 @@ application-a/ ```json { "scripts": { - "install": "napa + "install": "napa" }, "napa": { "legacy-libs": "", - "legacy-library-x": " + "legacy-library-x": "" } } @@ -142,12 +142,12 @@ application-a/ The shim defined in the application configures the legacy libraries and defines their dependencies. This shim might as well be a standalone module that is added to the applications dependencies. That would be the typical reuse scenario for shims. ```yaml -specVersion: "4.0 +specVersion: "4.0" type: application metadata: name: application.a ---- -specVersion: "4.0 +specVersion: "4.0" kind: extension type: project-shim metadata: @@ -155,17 +155,17 @@ metadata: shims: configurations: legacy-library-a: - specVersion: "4.0 + specVersion: "4.0" type: library metadata: name: legacy.library.a legacy-library-b: - specVersion: "4.0 + specVersion: "4.0" type: library metadata: name: legacy.library.b legacy-library-x: - specVersion: "4.0 + specVersion: "4.0" type: library metadata: name: legacy.library.x diff --git a/packages/documentation/docs/pages/index.md b/packages/documentation/docs/pages/index.md deleted file mode 100644 index 4074abce8f..0000000000 --- a/packages/documentation/docs/pages/index.md +++ /dev/null @@ -1,144 +0,0 @@ -![UI5 logo](../images/UI5_logo_wide.png) - -# UI5 CLI - -An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. - -::: warning Project Rename -**UI5 Tooling has been renamed to UI5 CLI 🚨** - -Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)** -::: - -::: tip New Release -**UI5 CLI V4 is here 🎉** - -Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** - -And checkout the **[Migrate to v4](../updates/migrate-v4)** documentation. -::: - - - -## Main Features - -### 💻 UI5 CLI - -*Also see the [UI5 CLI Documentation](./CLI)* - -```sh -# Global -npm install --global @ui5/cli - -# In your project -npm install --save-dev @ui5/cli -``` - -#### ⚙️ Project Setup - -Configure your project for use with UI5 CLI. -*Also see the [Configuration Documentation](./Configuration)* - -``` -❯ ui5 init -Wrote ui5.yaml: - -specVersion: "4.0 -metadata: - name: my-app -type: application -``` - -#### 🚚 Dependency Management - -UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager. - -``` -❯ ui5 use SAPUI5@1.117.0 -Updated configuration written to ui5.yaml -This project is now using SAPUI5 version 1.117.0 - -❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3 -Updated configuration written to ui5.yaml -Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies -``` - -#### 🏄 Development Server - -Start a local development server to work on your project. -*Also see the [Server Documentation](./Server)* - -``` -❯ ui5 serve -Server started -URL: http://localhost:8080 -``` - -#### 🛠 Build for Production - -Build an optimized version of your project. -*Also see the [Builder Documentation](./Builder)* - -``` bash -❯ ui5 build -info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0 -info ProjectBuilder Preparing build for project my-app -info ProjectBuilder Target directory: ./dist -info ProjectBuilder Cleaning target directory... -info Project 1 of 1: ❯ Building application project my-app... -info my-app › Running task escapeNonAsciiCharacters... -info my-app › Running task replaceCopyright... -info my-app › Running task replaceVersion... -info my-app › Running task minify... -info my-app › Running task generateFlexChangesBundle... -info my-app › Running task generateComponentPreload... -info ProjectBuilder Build succeeded in 296 ms -info ProjectBuilder Executing cleanup tasks... -``` - -### 🧪 Node.js API - -Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. -This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project. - -All available APIs are documented in the [UI5 CLI API Reference](https://ui5.github.io/cli/v4/api/index.html). - -#### ESM - - ```js linenums="1 - import {graphFromPackageDependencies} from "@ui5/project/graph"; - - async function buildApp(projectPath, destinationPath) { - const graph = await graphFromPackageDependencies({ - cwd: projectPath - }); - await graph.build({ - destPath: destinationPath, - selfContained: true, - excludedTasks: ["transformBootstrapHtml"], - includedDependencies: ["*"] - }); - } - ``` - -#### CommonJS - - ```js linenums="1 - async function buildApp(projectPath, destinationPath) { - const {graphFromPackageDependencies} = - await import("@ui5/project/graph"); - const graph = await graphFromPackageDependencies({ - cwd: projectPath - }); - await graph.build({ - destPath: destinationPath, - selfContained: true, - excludedTasks: ["transformBootstrapHtml"], - includedDependencies: ["*"] - }); - } - ``` diff --git a/packages/documentation/docs/pages/indexJsdoc.md b/packages/documentation/docs/pages/indexJsdoc.md deleted file mode 100644 index e05da464ef..0000000000 --- a/packages/documentation/docs/pages/indexJsdoc.md +++ /dev/null @@ -1,7 +0,0 @@ -# UI5 CLI API Reference - -## Support -Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. Or chat with us in the [`#tooling`](https://openui5.slack.com/archives/C0A7QFN6B) channel of the [OpenUI5 Community Slack](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com) - -## License -This project is licensed under the Apache Software License, Version 2.0 except as noted otherwise in the [LICENSE](https://github.com/UI5/cli/blob/main/LICENSE.txt) file. diff --git a/packages/documentation/docs/public/TripPinClassDiagram.jpg b/packages/documentation/docs/public/TripPinClassDiagram.jpg deleted file mode 100644 index 44dfb5669c203a175f19df3cd026a1d6dca001a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45518 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

S>HQY|?q#lil2pSyF7z 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è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ˬO>6_PT8h${?nqeT;@I7;Ip!VP@b zFf|g~(3V(2VMKrc5G{oN03im_imZk_#uktvcr&oS3iyQ>@dXq|49#6&X(gKSKuxTih{$&!vM(E_pLzl#{!;)p74#L47h98C1lX*rZc0 z3EiEsZpTZ!uV=^Q9K#e@)bJ_hxdH2nh_Yp;Lz6|-ejZDeWx{0}?41_C3!v-De!i%{ zhu#;)gRr5;0s{8dADCJK(Gikow0!~;St5|e-5{%YYbSJs2-&`6q`+Y;yLAXiHUTLo z->n)bLBP2H#1qH~CiyM=#y0swqz(!7fD3`)eiKL_q8lR-0YTd`7JFdi1~@lh0!b3k zS)3rv86F7^K#MF8541eNdqLD2M2&49AQQ+Qn6M9w0D(On5dQ{{Qy_d$$}Ety6vP$5 zyiL@=b15JM`y---Xg%=T(N+pP3MQwZonmOe1d@V+JWG(}hJJ8JQp(To95|#iGMJ5{*k)>9njHjvwzpG@!5uN%`xV}COOTHG-1>dAC^i*Y?UF& z#d%OK7}HQb_=@6cW9x97QlKsSe%Cuq%Ea|5kAD9_an!*3Qa`6KX-II74a@2>JXjWg>hyB z>^t=HYeBL*w#0WkOve5BFzb&u_RrFH1%jPiP*_q?DrYTiV3~MAP5hn(Hq}DTuIv0> zZDym-NS*80FA4^V4s3p2oLGn>K2sHg-+o=J!IsO0gZDmf4wq;*&1Qv21$&Dpr zWrWr1$vdyVPq8_(rYIT}=yAJ=W2__CrR9fS`!|+Mwt3@_R|bRtOiGK?03%urBXr+? z40`+n{RTlA;fveEi$?;w+29AEdOw`}XyHP18_+#y@j8vpMu3zOky#+k!0iQ`@u1HD z)MOxu5@t{!Neh5ah88@B0t#gm8O>-@3nC19?bcuLE6}$9{AWP8TA|Y3`XE`5h;S)k z`6CBF5rXCS;JnCzXpw;5F%EV_3PTG#(K~?RHpH2~9fS*haXXNe8l#EDHbVpIIpixw z*#R{BO^W$XMgGsE;b+qQ`y^6zC`cwzD_+u>dQe?bM#NJIhrR7Ou*-@X-tQ$O26owf zv|W~pa}OAD4oCOCA>1|Gi{n>n`z6?THZ7GYp>r&c+}-Cl0W%(?{Hh-1w9PV8O~s6Z4C-!Ov0iKzzMh54?zDP+u?DD zY+(cuEn3LV&>jQ>77;E)X>O^gWN@;Z7N#Du%<YC{E6ueBbY^U;>sO!El$*Yv5`=Yz(+E>?zt=~^)&SY|`bk^hgQq+>~F(N>{ zoU8OMcuy=z%l!4z&g#AsW5DkzHT6lK{5N0KzkZ^>gQ+heL4@9wEs?@3ZRs22)naTW zunD?I(Ex)Hsqaz+JTpK*pa=qW37s6s2g4G9gw^~cL@+}Txzd(kA>y?q8yM-VLC7cI zdB6L?&`V(DA)0Bs6d{%SKS>pkTNY5ujYu-QHp246z?1ty9ns`+OMIc0g13U`Pbe>N z=O3bixI)ol^lLU@gx>Xs21aD}H~#$7z2Q3<|MA>^XK8w!`NQs+%Vq3iRTCx*x=0Wxt_by0DRG2>ZCJd=Umn)h!Hlc6xAIjGD!?rS|e!*OTOA`qNY-dH^1z`KA zg5&Eai3G*w790tW7`Je~)&ys{VO3)Div}i+L#`nZkKt$yb}vuT0;4>2%7>#O(LSK0*5MKx8zCDgsa-ie3VJQqAKJ(V!!J%9*&TVjLW)K2Mb@O?=~1G8cK&NUjams?UnTc=@bdh0 zc)K$QtG~o5)P{MDI0P6OPrM`*o1oQiniiLBl$*~$ic@&_o>N~dC6rfV z#XlK}Sqe#n2ipwyoIN1w42;#jR?0Waa)bTJ5&2&=dmNp(8)$i{r9cm3k+I-0{VbH6 zvJ!3~`G4&{ZsycfY#o13^nZ6r+tsi*CB)GGo!e!_h6<05+r=h?x|i^W|LtgFA@^%z zp;$FTi98U?1pl<$j(O&;nqe8Y_hMJ472x@)TI?oHZr)ELAIBl|P)til7Q3odX+Lm# zs6R?y_lPO=xRhFo#Qfax88<`Y8Xv`yr`4(EB#{ryF zC7H~e2X^n;wpLKGEw$uoV2bjUk%J2HgZ2E;64jwLLIHj(y$%P6mBArbZ_9yIvN~MU z@!-58q~Ty2IGx~GaDn=5r?c$_`|JmseY`+7R?zdZ>V?FC-FRer9LR0``iI1Ea5Dey zuiknn^Yz%(6QOwEk?kf)R@zT@E{+59%<`C}#I(TE=8#ctJ|-LF$&@;Q#VmCW{SFdw z!)Q=o!@n~^_FG`<7y(7<_A3STLy`Qv^yl5oR6^J3Ro@yn*e{aX957)EswTH2?VkKY z2>$`*f0HHb@W(sPe^t9$;Z~#TFmNZOq=pFl0u4DHT5pnJC8Si5pX#J8Ry5XVxyFz> z&7%>*8T4zK)7kt~*dwbUz`h4{!uiqlgo#PFRGecw%}O2^d-30sI-#z7&$`=Ql%(6@ z?of}wo9eL#b#LB(5Khy(CitG%iIV=ELl)jWg^Wvr>R>*mrB(aYE?e0_W6;1(9mPU{ zBF00Ur@y}JU;JGF(#^?<3yBEAj;LTu$Exq{HcT`HngD;-bvx+C$XZ?`;uidp32rkt zei$DAPHyS~`FWo|Ez-a5I{I1k|F8F>;8P>RkVpKVf1rgW)$zqAwm^?+kyO$Ts=~Hw zsJQgT7s_%xCs2g<4T?eAn%&*w{!A!E$Dj+wZ5u7`R$5D@?P93scwgsF>EP{4f9L%g z2+!iG!>VRnYl+r*?mAp{vb~wMaaHMeP^|Nq;K1K?usNU;-*L&5a4h2D{&rCCuhaqd z&y7WY>DIu&F&Myq+KG%+A)!sbUHE=7TmG&a@QHrtCiD*^w^nG&UO4&qve|Cwv1}oh zg(JCf1cj48Fx-;w=MPQUy!|j{OUFRBD3w#X!K%k$Cqg|ZU$fW{t?E#bH!RiC=OMld z=KGtk*QB|{F~d1+(>c&e?$11)&gSw_DiOJ{`?Zha_`#h?O z%fal5cj%U0#E)}aS@_GY=+R$4+5Y%OVsV+5qjKy~JegHeTJ8EN#P zclJnGp=|yRiu$|mB{!+9pHeE9(`BJ`9tI)X``=KVwDVY524RCuxVk+yr5)G$^c?m& zoCT=hv>E1jxbFC1(@y=#HS^Mbn+whZQg6PYW`n2Jr#e{muCYy&*~COxaZW$hYIYFr zUcKMfQFi8+Sl`foJkmzSA8Smp&0?ISa#@4-rK<1rKnzuuq7RibWvz3%&c%J{g>OGz zDhajU99qPV7A&2zX0TGd!&mV>yk?SJmHu80bxXn3IQvU+Z4-P^PpE88COmxBlFfOr zsV(O8jydnI!O22hGI~#5w7Jwt4PQG$ry(S#K5Dn$fFbG_>E}}&n_uRtSE*V$=Ix)V z@}ZbM<|J&mZA?+BzHD7Kv$sE;Ov06Te+Kr?H)y2Q`=|!7Q?Du zBwrXpc|KXjPntPurW}3x$y!vVgR!0AMU_IrsN$q>Mp3kun!(hm-U2q2Yf*eGS?5mw zO&G1)_xAGme?-l}d?9!Dxa_gOOyThN;!xqg@c;jw>i_du$d{Ehq_;C`+VT%fYIA`P zSx}`R5BokDuY0CAff;z$=+-R1p%SQ)X8G*Ng03ZSgRa|zI&+_vwFX$ep<=r$KUI17 zpj-p5(qeyh`b?CdYY?U{i533*d6>sj;SH%36pb6dlyrh6lfzjtZP+;??XV|}!I>et z+d2;?TeJPxB+Teu`6Or@GhHs7h#6?dn(7#fCBCknY291V@hs)aJt^vg?HpE5XK`|u z;z-T_y*0eaFcq;%eEYIpa(!L{^Q*vsLzg40X~8VPVl-yXir!Cca;%=Q=I2$ENqMQf zYd@QCLQ+_4fedT19U3@JOF?^0KRc|(p-2OlLsdLf6+XXT4?6IE5wwkw$kOQ!x10Zy zcF<3H;`iRi@7PfP<7185@1Eg&`I_kIWsdACsou=Nxv4Bc6^d1cL>j^o&ls@Yr}yGK z2eTV5t&(&lp{~;IpSzSaB)I>q;gcR5-xAvwi^}U#^Er-zq%55$T9nDq-JF&1FWeZM z5vX2_0S&(>{XQ{YGB`8qks{j>w=;Ds7jrAzfWsU{AD9^C6@TZRby(*DqqAt(UXior zLGGUyvI&;EtEH`)q(~wfQ!0cH49TTg^Xlh$H6N4gvt5cwp6j@4(v?qAcCBthaejR& zCMwInQ{mM_`rNXFMeP?Zi`COTsZm#`J_NrIUEN&BGVtLL7BVC_)!Ut3`0PlEQGBsr zRn%t{Ghv!ds38!0axh3*bN3^t{E*@>z>YD#x(@O+&unD$-~Og?+@{h@oc_7{y4 zjGJ0>Up5Cy7kAJ&aj2!qOHDty>1D||Did##?RUuE|LM(MN2wNBHrXcAXSq-1rq0HQ z@K$rVPt3B%%w@I6rEx~C=M&Y7_R?)!9x=#1xNkvI7gL9iw>JryzEw;<- zub9sNwQ;;fxIjnnt;o^N@!!t2Q9JJV=-qBtrE_i33EhsOW1Z=HMlYzRr`uL!uQCd# zch#4lF_EIClx`Z?Jbt{`cP0d@G-TL)P~pJ3bu!n@Q%yowYCAS31=F&RL_gun9@|Jh zTz0aO==r34LV-<>)-YA)@rhOHFm8(IflA&;T<^PABxG!Hi`w{9=`{^H$}BSye3e7> zqn>c~OdSZ%>InmVeGyMl{LxdOHWh>000Q4aMLVyixEC)eJzKe}#sOO4CjMsxx7qh2c z((YL^_b#ZoEFU1Sw?|^}R=XX;O*-x+x`qic@~4I$mpbQfad4PA?LSL&&Eu&@iD=KK zPtO;cSmP%IbOut0eC}Pkccx)))zNF91cgP@^78@7f@Y8WiyRTd(iBfdvleEqb?>4{cX*1aZGiz11`a~ZU)6xf36Z&C7dpEjkU1vbXOGqBO> z)kv~Sv{HKC6Sl8PMx~nZu9V{AIFdx`rl%y?%NZ{nV;mZ)X&>&|81~vD5IcKxLAY|S z7_GMi%6Ui7H`MTzXW;R9ta4iXy%eBqy0%v;(|yk!E-2ZVr-C0WkMuZX`ucNaTq35d z9GIu=cMk>rfwIFlJhI*vbqeR<_&rz#4(WX}1~s^Q-kr{UR~zyY7X09`2i0o&UO$q& ze3fqg{MSp7#$*McVe_eUNsNZZRojZGqca6qtR3;+oeK*cj2$+t`-aMjN*W4h zXe6IL-!uVdZ0E3%BDkinuwHgATKAbBuT0eEX*aBQ6Fj#H%FSp#60LmQu;g<-+pAtq z{OZ7$kE@y$zQy^0!4GQET%GM4zoC4&T67=PUQ0@6e*7f?Ym_m?4A?I|NFGFJXN!m15DLdK} zoZwHM?l*@L^6|`X1tq833z>fr87xx2cCq9* zJL83l*i_HZ_}R@T$B)D_I56TlpWM$LS^Ak{TDr(*ubb|DU5?|DSLJvf(-sR|B05L1Y2*at8ywdVtnl@RftX0o-GWtr|u8f+#0F}1*cKTj0H$}h_H8Ip+*==`54%olWkR(@6 z&c5OpuDM_3V$3mN3VYEr`fc%LVGe{Tsf-L|rU7osV`}yBo4d5W_RcW1*iR74=c;bL zW?az-ASbRnS)V>{F*H>WEYX%AxPLHs?VLObIq~!S^a`ELXHx8@#=`TD=~atGd1C_f zs~Bn@?>(J5j(ScWnkT=`GM*A9VJ&c#{iN3P%)OmuM^z`?tXxJzA4T^}RPDX#Y?A5a zFY%AgLp)x8O6MsY+9N)0Nx0%)@o969;qGs!=EFzVX1<|nJ-M8e%&T0aPX*`I09TcN zOJT8ZYbU$4{Vqc3y<~J{J5Wk^M2ywFmjdmaZH-Yua-{;Lo1fMgo6V2VZdMht;Jn`C z`G$I>sQ~(Ef;K{rHRC4-Xj>f~Fy2?qm-D-0bNWp+&Kw`sXyrC_*OfS7K-0=+8Dn$o zHRrHH?;FY>NxL9VU77-eCNDofWxtEIbHo(Hk_FW7Bh!}$jrGKs62Pmrc8~V%HB+~TZDO(hN%;Jk@X5mqK@|0jI7zz-DVzCwZ1CX?S1NyHh;UXXKpmU z=u2Vd8{DhZX~GY`p>nhwDyY6B&UcT!9HiH`uC!~(2+sYC*Ac&S1ly@jzK&3oYM%a1 z@>25`HnXsVxyftfZ)JwUSbTV#Dz(w>GPA? z-3b~7D3bnyDDk_C`s7oRXVEyio{Ju|02y3Q}TU7>AC^VHWw@|sALzm zMp=!2HKUa1m3^Ztmu7QhpV&Js_p>fkzJ6pKk*BYEKh=NGXW4sGV9xi>;PaK{1-cEZ zA>{!9l7r;N&E8(@QBG=``(5mx$kgb>myWBy^st^hcx@x?^RoHZ%x7s_V^WJ*TyLhb zXItNy5c0J~=cQbAa}T>exFI4xy7|fW8eMsR*Ocms(=oHtyuk+pgsgzi5w?_%nTR%+H;3NGsPXlkchn$z@d z9ieG*TC+)6-w+40uHZQdgEYkfk$1qX5moYd|H6O-oE)n(qh4r_zO9HgbBU;J z^h^een6Y;ySy~BQFFH1T_mbpVP7nz&gP-S4m3y;nU~w z#3%9OMk0*JNMC-y8pt{s_D1sVCx^4=o={^=S|_yHH$A~R^}+e&6;TkK>&jlGV7uSx z!g#MpXiuw9{y?ln(Y1h`wX>O0b{f{*DGGca8}`+usi-r*Jxr#4_dk3^|J}pnkg8BH zrEy|1uKn+gR&hu3%g(e7x2mz4m*~!@wy9W~98uuaxL4ZLG#Gk>e~DQtA=^V)AI~DA zU0=b{i2KXhkz>y&B4eXQP>U+o$ter|(XX|y(G?H9c_@tE+T;EDL7&HU+ZBz%v+0ex zPb`crst5fE*oZy152F8j_4lvt;GgV_E#Ex=Ir1lQPF8EWclqQ-ba8y6>*)N_;t0#F zowLWZIOCno?7$q6hbsakny2lxPL)eLPqi1vL z{&GFsX5UaT7q3V)FJ%Xnrg$fDg$qr5oH~=Wp@6TI=(8w$Cvd!)d_aiFUqeDewS8}h z-lwB8jOl_YU!^{uU_Sj`cKW?sp56UR2^+1Npam_KYJy~Jul*YDeH6>{?2I*r>P;t) zk29OcV;3C^rdC&WuSrHgW7~x1_3^G6>&wK1O0|jh^v>&(l~0(KLLNP#n7`emJFz4{ z(LO|vbp#Adw0c8A#D>An(X<}1ooSFrr{1L zqPKm>^CJH?`{r*?4w#_p7W9azPB^@{}Kibs(LXG}qzZMke z6R+vSHWUO8tA4HTV{;dI){YfReVHSG+M;p#N_qlQ)WQr-wT2Lral9e_@EyKc!F6Ha zJFOEOY{K4X$hzp7l`FcscQbY~{gb602mgsy5K#<4M-<5>f0=ys;{~D>8Pp)yY+KV< z{(i#TUp3IR#lnAee_O%>46t9vPXA&g^T$j1^GpB#79O_Ih@=6luG0gxq%-UCEov_J zdp%h_WnhkP&fxo9+T(-fk-GyLpP3Tx0gYBga}1M!zz7UB;kqLZQ2AD-M@J~Y%gAmeX(?Zu-Dp6nVS&Br}= z2{|;;O;d5<+X!hT`kny^X_qS0eRr<2U={p7*2~AD6rtAY51eqbX_fHllJPK{_@JhhwT2jof#^ZiLJRMMrBeO3OpPM zJ?P)E$K^$c<5JTSp@}uQl`#LJE`NDYr$(`o%-y3nG#1!dKYqGZ@3O0Ed4AC3PPN3G zd~Q8_yEab?7pyRY=)oqucb4xiInWdfoVi=F!YJCl7R9w+Fo)QQe@gA0om*LN^OqAV z!>h#AeO;-bU_c``x3DcsW1ybg|M>LDSQXc(CunEy9}OkUL)Zq~zwig6)DCEd7g=RF z+K~~|pqN*}u8b+Qf1>SL(4{;V<<94M?+FMs&j+vW>iLFxzwix3Wn`hY zzc{?uzqWOhvTCkYfGD`$^GMUS88~;Pvbbr~!#Ce%2d4LnUD|<9f2e=O zA>j%~3#1k5cCHr1r`!9gxJaan1M4ak3b0Ht63dn~`q<0_>uH%U^*r(Oee*OESXOC0 zlTmJ8ZJs>!)tD;OGygJmZg=P($j5&>`|JC=+`6YjzkHYK)){N;{OaZ9Uiij$neK9V z2#INDenZVvFm8HX^H|#OsEwo|S0PeWEDe>gakJs@i)TuIxru7VD?@Cy$FxsU8q!4` z(mWTC>EMs)mvp({lbuTYFk-T#qQE-As+jxXjm|?KuY79DLTPQe0g}=t!*$fyIp+s- z%54lo?#dlT^A}N&^1f_V1=Q4 zz6aOr;?CGLpW4A?homb<)m`P@$+aJ~v?Hq*nl`dsm`}#@mqqEky>Hmc5YgZ!*)4F! zZwFoAA-=Q_IqJ`ucVFF;?5CvI2dIVpS%7+KasdVGb<* zyVo4=KEfNo5URyHA$wHp{-DHrl_TdQ!J7r^y)~y_Mzgkw~XYHHN$8 zlyZGN`Tf)#G!mA2FFp)E4cC3JB+GPIf@5s7=@f}eq)z>aoTJg_f;|Hk8olw!J?;k5 zW7fpJ`Pa3FSPCVA8f&DB0*m)E9&8f7(XCQA<`7TS%6~rKLqI8Gu~T+}G5>Be>F%A4 zZX4`|HN~pBP8x5-8IMFMQ>49Mv^=rFHr)HrpCPtFUS@?FgfacNYzo0NwdQN*@(;Pa zxaKK1_4=cK-?9VMK3ASYWjDpA1x3du6bA#l4Q5~6bRzIL8hv^%KkpOcy0O>^RT<;Q zMTuQ+hyEY#-a4!eZ`&3P&_Z!3?nMg}TCBL0;suIBuwq4mTkrra?(XgqDDG0+-QC?? z)0^LZ=be4tzGt6z?mh3_`+fJndjG2Il1@KYD3nSzMs*6-+5G9wQ11N~=WeIk^IUyA2HZ94zzU=aW=>hW zoe)poY`a*iSs3;`$(Re_iAGsSU>;IyYKbF+JI>L0DnY zrPB*w6)1Zi>?P*AF7%>;_obcnA8u`)Q9+-f$XyFoB;Xs3I$@gR;nbz&>J+(6vWW6u z-A-=gW-ENtxi-z-$4}D35{!?nrmNRRh0ohmhgqo}D2}YRo{dxjQFg9+rEpwc__oVnP=8j>- zylqCB=KDj`FjF0Au&`lRsy1IzvjCkQh3>bdEJ-wvmgWn)nMU;S4F8JF#~^qoJ-Dbz zhW^=1Uc`;HO=M`t5fk^iVLO;_hL+TSkj-J(%0u7}AkuI5*`8{o=!u8nH0?d(0|`Gk zV5@DW%yGJ2734W@-++RFqS#Z{%>4&I+f#A{7eI*P=Rn!48@=+Y)Z-Gavpy-lTBshTTas3V(OB7;-2PpBu7gSE*XaG@|AZZUvL75nMYJ49JCG^24Yty z;jJuPfk{}eDC6cq>hY{O+Vji$WGn_XVlOc7C`6!m@wJ~NbahkHOV$nt$d@?TruO11IFjn~$7{Q5O7{t4UW?f+ieGpn9iAH^CgpT8n;4r@H07 zIsPp23ffks!eaxu;IG2^yYd5L$^_+Xs^4YSQcB>wy=5r@$%A3ai2{=2{$Ym)r|Yp< zgC@L&v>mc=uNy_0RKBt#Zq|XxxqV^UKY-FnSTy9Q+5=8=(JFYRgJT+q*W=6hk)5OZ z&-8>1sPd`Igw^*-Ck-%~edc*}#=g4KFpz>)p)T3orkdrKXal)j>g81-gn09eT*ajq zXu|wG;>9=Ep4#Id0FjoirjB-gLPcI!aVzwh9xWAuu{s?4olV zT^&hTNIQmxRExosT*i~5lF|YXzEfNOc6sjL$;Kuk#O2Zh@5ubB8^V(WENQf?Ls3qULhs#L?C$#A>_15AvDGM zIb%yrdV%M?OHAi1|4PN{+#n40b|e9e%lfmICQst^3CFdyi+zDoZPqSy(IR;!n9Ct? z_e7&toHeUx%jSfC0OokPXNX82$Ygh?+%&|@xe}DksS8kO*JjtQe0Pb?+vLvoX6-J0$ABfk->@RmYYznpzi7poe3pfJ<_eTXxNlg`e6Yzxb7cVIp1nKa zj-ORn?b*MH*?YB08rG zL0HNtM)mIj$4E%~qxlAjrz3$CZne>qG%%AHw zeHFBB?-C``BSq~XE)U0b>1r#&Q?0a|8nogJFR90pzj{-X9p{}yKje~NBlIiAiB5WU z8GUN<7s1R&eHrZuEa==dS1QtN?HV?RF&bPYx+t=3+V$MWLmVVp{^V4^jKmRk%M;-3 zks%=u*^R5qE;tYTQQpXPbGD&6nor|s@%B9}1pTS#_wvUFG$3&K%k&w=eBILRuhK5t z6d95$xYz+$^F6hOTy;MV{&d&;5(N+vtHBEEwCzdccZB{B7 zWgYFDO1A$JL2eRsdWmJ0c0Ua#KfY90DqDdh?Ov%N?0FG{9C_hJUko6yE(TaSy%VFx zp3HOL7cMB>bKY@*=7AVHsW?8)IV|y5sOT)da0Ihyx(urPP(o69v$h=cdJwJu3QoS5 z$;$|;hFY5)T?_H4Z3%q+h1DQ@*O$dON70lz8pL+wgsE}NZ^4WAb_H$o{nb;6RW+F> zPfsnb)NplfUvRI0^oz|)#5iGHOTIc|jmk5jt(gt&ro>}8dz`Wj;pR}KbHt7BGc(Xw=H^iR95UG8_?Ba@LGuu9ywbN0!cPtx2av)F0~##~*vHq5C+?9fgbLwGc(! zLuBo(KfVH5FH2uV+%sy3T#x7if;8U~-u)%Gu*x)s6Cj(msjvHHQ8!^O}6 z<}UKYfeYsd;2zhTjDXpC*w*SmaZU~N*@D^YGTKw5pFBMz|6_R}Yql&6y__|z5c3~^ z?@l&u2aaAoGNZzEi0tz%M=|VU+UgD z%9(>rg6Kx06(O-IN=mozhN*rLYu!ooBE-lXMqM>QTb*`7ts}wGr=>w%0Y7cCHOdWt z0MThEk2!FuOfpj)8z_z|S{+uyuWPDZIc}iEHXkCg6o#x-65poQdKZI1B+8|9j8;&9 zTJKez*-$=@rFWp%kb@F#nXIZ^BA4O_X`;mlb$b?0DuI2d3x;4Wlc;{D#|jwx0h3^4 z)BVkoaC-g9vbz6$A4gX(*%tK)$|OAYPH55JnTjOJ%#o;O$akbEI?o)ym(m=*d1yb` zknNu@h%<``M$6_kSA=H12v=NJz9W3KdA6iX1Gs1+;@w({6p2%f`V4-?Z8J-m1HT?*^~C=H;G7!zePW=yms047C5_dF)%}uNj@F-bX!^?#@t@Xv|MtRv zQ1rEH!xP!;7=$&}UF2*?J-KMXAwV6bmhsfA7jebpfxZ2Zrkn8OvIu{g8>SkMLE5n# zyG0!P;|^^B@|vUIEGO*T<|#Z`@wpPt{PvIO{z*l;FG?P@Z46lySCQI;%!Gdwo9c6d4gC_g6_kHW6*auyDCIXRS7jx?CYNNW@$HsgkyePu4hULnd41HX z6|8Pwe;HZ;o~00xZ4mk#Rg}A*?3IEJ`QAgw_p2-59og7cjLxW!Y4YmVDXxUbX4`0u zF`PNxhw*0D`1Y%~^j$O2Z(<}UKjf6Bdu-G3P~^_7V2MjCh(xRAeb1-`cVUn!K~RAO z?a#zQhpT(VJqdn={on8{I`dm4clP?(T5NNkzGeFOi1oJvhWs0)Ltn+c8i&q8Zbia_ z#*nb_-ozN;CkXwsg<(oa#uA?ZH+J*Xnde^p*$~F@a6Nm)75d~=xBX3>>F4Tmti&Pl z_qbk+)({#@)$QSz^sTG2*JDZ%@9y;$6FhK9+Gd?7fTC_`4cA5)TOz;|IbV5!_3fcO zv_XEZq!WaDsr_NR=Oz5F38#$Cdd=r~p*-?7<~Bm>ip}HL31`=(HfXvB@otJwa#v#Z z(R{2t$@mrf5gj2~ShuDs*)G0=Ky||H31bqoT;gv+p4|>J>cFn__W`Ogav!4_x_;~6 zxKPJDsDw8K11+VBbR|VX#1>t z?#uS4ir&m`@}`WHT)|Vj9(f3$Z zI%)2HQFB4U6K?slthN@+gIll?C5bHLm7$}a@DsZJqtiKEIbwz3R=Ct{_uh*@UQ=eN zA_t@n9Kxi}`Cz=hY3C2zcB~=P$1P($mYmbKHK9P(0AFT*jI~*W5!0Vkhb=}B%mEL0 z)WN9CWF||a-r|mH?w6X*w!J)EO&RRsmV;&P6gkPsURT;)ki^}S>NaSY05<9VE!cO( zEU$LSww!_e?m^wOi#W$h?h8G#@lvUKR1}OMRcPNn*z3qOWa92pF?`c-QAd!kHyJ>3 z3z%*r6~{R%J)r$cJO9h*%A6`|%*<#q zUE05H@#>Y3cvLctyVr~~3B0}`80re~JZDyNE*@ZdFI3J z%v@2v$gfHG$`mfN8177vWM#goi3$7kQDtTqG||DsSY%c)c+Y(KZdK8jH`G?1vk}Ea z$0O-T5vq5V*39nmeT)tiq~dUX8+2V9U4^eZE*u11068Dimu(yKx~vxe0bG|PoB;zp zREouk7fAyUq%u9wXwAhFDK>>wvSym)jB>x!o>VH@F5N4IOXYjAL`|@jx2-cwy=Sdn z_q3((NB6tvIRZZzW>a3d2FFLl?pKczX|AlW=AI3kbEdwHwN*680Ct_fAU&!56_Z6w z?^jv*u2?~cIsV2FB#)J$Gy82^zP>(KM)2a(Q7>_?&NC?K&f6FyPdCK=MtwyHi-?Q< zaYPAfen|>$<^5ILV3t#t?kKrntOHQ2gMtnSoi{sY3A5>OpiO}KwQqJRj05HM;wyED z8H@1|S+!7rtASE=HQ<6Is%@&?l~6y0bq)VW}LGgK2T6rl+Byn?6Zy=PI&f>nIu;> z>u2lh>i}2x2P)-kW;jGg`Cga?r##NM6WD-Co) zA{{0D7_n57KrkF<5&W@tRqKevYa}&9_rzH+d72v z)13tU6LsPL2Nl_W-k~O0NDnHosH97{*-;NQP`J^-Zl4KbaY9eGDcZXsgmG3+Zg@jW zQ+OC|`1<*F`AQyUpJKJKA5EWz`GEr(uxbKb8tC?Y8bLyUV;IMp?xMD*t_2lHh%2N6C) z*rz7s9`@)9o?;Ipvfx>WVTj^A(=3%ZoL}F~FY=-llEm!=mxSwLJ_>oQ9BOCCUYLZN zf$iryjV3RLza54=Cv29WpLciI&*Uc&MXZ=dm#C?_)$}vV#P9oS)AaFHY6YV5aBp9~$|gKjqlqNG33>+@Y13 z=JR=k#2yueI(%AX0|P|pXG)5}`~@HTTYfBb1o~{LYBN|=<5{w3&i{_cALZheg!ClI zS1H5_4{f**QNG}>RBX(AY9g0E48hBGlZ)eu4Oj z$CR|EiS8$7sON?hUjg@bT=3^cwki-5m~Rr)1_q$=7`SpZEs&nw*x3vaui=iIZr)Eq977Pyc3egX! zpF7upO3l@w0GF+BL%Luwe?5^n-Ma{zSK0!RnP0ji)30X046X?60+}Gh!*IQ$f6gZqE^85vYbZ?PIOr2E><9ST#o^U|c?@0KiA`vEzWQQci^-mBFnF=;lfx1jw2e4b*{ zIL7TS=uZo&KS2@1V-MYgs-Lx175)K$kHTbpTw+^8<{inJN&>XXct8G1FBD+vRf3aqSx!^=|uRJ+z{A>M}=9gMg zc|EKrl4$W!!5K!Wu(%ZWtV2EWTF@|$nk#j{j@gJL%3}fb*un|gu5OOFt5senau$t@ z9r40QZff{a`dwkOP%(wRbnx*Q-Oo5%erw7&rf|*B*tI&5c04yKo|WW|=E#<-R_taWU6k5By@^2` z*fu+n0zQK{O&ESRs;sT9zhnrCZ9FmvWkQK&pK0JHZEo-*7$m^Ayff8?b+?&D$^Cx2 zNKGM?MG&T#=i6)ZjuNZBk^hGt!OJ=>KI+%76V7`LT;;f0GVs#k?6tN)m?Q~Th$eK? z`$R*!gUE81k)pm-mZrf8`J@zVQ({I*TNx|_6t}XY@=6pso1>-dsh1^JJ3+0etj60~DW+>BVPfPJml=*nM<4YMvGT9f4-+#pjc zyH=M0Yu!+GKk5rfmZ<#c?I9eGsBI}-bEx_F9sSjAefN0SlvG7yJe@+Qu8 zB3sYxk83h{IMvvF-lK4cUTi@-HA2*r1-bY^Q%aP3y6W8WA+F#wGpdjFg^fytexAub zf9!(VgKj%P@R?fUhZAN40s@2n<)uR>OsNjAgJcdtW*CRI`2=mrzL!OBiR2*ab|55o-8gdO5Vn_Gv4h78=huwz`2!_EW_j7X8zUpIKDVhkb{3WZPaCCI!G|Z?zzB%c%W47`EvH!;i?+e_q z&Dr2hrs|X?yvfhbRw90mAU@@J6{WNWL{;ojYdde@)L9all50|D{`Y7uK3pk9%15|X ze1im3b}hC78Ul)WLGDY(+bJE+8W{`D7bFF&4KzB(>Z3YF5&By!fw_O%tou)(63v5% z@0N_0pABxGLhDD^r?6#r-YQkqFQPF8UI`qVc08n&e%03{(mZQ_5&3PC!q0V^k-{2X z!l=^eOt@#B*1DJKuo0#P-=bbQUk*KJOZOM76Pz%QdlTrwWy3=4KW_dilMP}s`A(nH z01>Ybo&;9c*Ly}uQNNpGL^>-bkeN%8e4tQhDw)&0%Ta8p%kXTb=V|RB?u>S!6=I3c z!?vppiD|4Da~V{I7p&fXuSgk|2rw6rUE4}ubDI^Bk$BVavDB#+IFdo+YciQz-#tm| zL)mj6Lz`;Yz^vj6FWt;48y-2kF_h=&-hm&<)DnODRP#{drut$VU6*kb%ca;xG*zsa z6Tyhb3Zhv+4dnIrJ0|aV_i_;H`PCOrw z+_|n&j6)}b$<^mNheTkU+P&PQB<&Z*uT}Q~8sLgbxuoSZa40uaKzZ`mu%iA_kB_6% zhz(h&y-czo%E19u=pC5wVJD)@TxlK@YLLW!d4WJ1)*hY_W_z_DzeJc!TbH3VUM)na z&59?PZjM0quoe~8wTW_8MiUcuOX@sL!Q=NNW@Q3mODSdo$vF7;IPVtHPVVart7xbj zLn+1=#j$@>@5`?)$d8CEqCc&95yPCiCh8K03v0S+&xxm?tjfd)i(A=#FZn6c9-l#k zscOE!w4EHgbs^p8hlA~S2>?gf!0?eI-$TSmJ-<%v9QXu&C<3`kPSIQPO4D@;%%nel zSU|$!40WWe>HfM2wqrE;28UKiz>|c*bKG+bl<7j0xlA=uV{9|h^Dr_ikF~3M?$oOH z$5q431&g06Q7l=~O$NLU|6950gcGcJj-SxD#qU>{II~EpT&LHtd#I@@VSnJOa4>Xo zV)Mka!D|@vHR;%zmRRtZc9EAlVy0e}Pwm9_WJUnfp^MamU*twI5H&Qc^o|-~$)TTd zrs0KT)HJRfCpiFFhKqN3IZVLPDcQNIKy0ny>fZX}GKVyxrBSp)xLt4)oQTJH)Hvg# zc2L`X0a+1h^$nuCeYMBvYue;VdNS|0Z*8b7OYWyJ`qJL+8Ppp5b}h)zkC1olFP9uD zS!IubA-t+a!7CRPwdjsrtI&_lzLB)P6XfBgGHV#;=`AJW=Ir^#X6moC@2ttlsxP*2 zD|!2P`-M}%P&bF$D?|7$>^38{39M$>w1^*XfQ*8s^2AZhTKUxnPB zF9D-}r$_)uc*<{I?WbPfl;y{IE-n^spVB1_xukU7YJejTl2v}T1W+;YE{7)yabB0D zN2`Oytq+Da-djCsmwm3~i5~+l##0*k^7WPv$vm;t737`JqCHBPdC)V&eM>hAgew9u zd-)jCg+R`+Eyo?gCp}VrrDa^t$mpQ@r-sPd?IkRZu4{7j78Nj_I-k6VbX!2rEHE_E zswT#Ho~N9zhj#>2QWVjctUpsn-m;VO_u0j8&dtBibpJQJhTvd0xBTy%C1mTiTq&qI z)Z)0}_cGb00I<4<+pfUKuO^@e_(jC1&Yy2xKmH@V=G&Wo6e{3J(Q19TxcJ#l=EJY) z>wR&B0v1X!z9R)*fHPv_!|U1(i^tT0uxj^bwbC%Zwv=s~)yv{d-d<%PmXd7YqlPGr zi5|tkY6GY_oZZx}B?6 zntUgXkUAES%+3b6r+noaVD~6*r1IS#XP${BI%@0C-ja;o4N7OIPi$)Qb|v6SlSqp8 z2~sMq-)o4;E-Zm3dWe2<6;-EE4K_xYbVU<6_3<9@kvmdBt*3eHm1_$yH&!uLR}ViO zD%N2|XWs|7l@Z%5Js376Czc4rE>8!y8T{OD`(`pEtPv|!%dTEDxU!^l>&#msNA=pp zDYtIY!2f1E#r}kL`-$U~NMhMcnANvSJ}6$VUV@61xK@K%%$=1{%=V~)C> zMeTo>b@)^{g>eX_oZ0-$|CQ{`9Io_1uA@kr*+fE1J?lr_khg-`*`F+}SglSnU))NN~y%FcWwmM8CoDda$4sss*NYn>mV zt#080vtp(5A9He-w0aK0nAh0%`0|t*w6}07ZFcX;!2vP)Rbv|swn)vi__K3=hdrS99vya&uP?4N@`$j2vsb|$>%ua&cN;m_XE6)`JJ(_es zy?S>XS9z5C4Mr9uGSKAarnhmy_v|he_w+LZ!6k8p%h*@Jzl z<%qWn%?;sFU&pz11+-(-&;9@s7}GL7qEH*Bx7bCcyX`a{$jRfZG^IkKHd+i%sA_&q zvW{(sa(t`Xl3_gTcE+Cx-|!6A=xG#!<;SxaAf)uOwz1`qEQaTr<~gZKEa-H$H4SLA zgl$jm2D2x)B&nJf(Uhw8JFu`zTr4bO+586To+K13NkFh;PuaG~ei(mqd#y{a?WUDH8b8(7Mnv{lzUev&Igi{#ms zRHNNihP|na$yO&eF|@&r4j}-I<;5+B)szbS1~2hP+~JDEIbWH(`)J5l$%`oZ4ii^) z_}IHYB-h9{9dyOjqW$G1{!fAOzw*LA2U$4W+9&5n6zaH4jD8JXbt-k|5xyq=&9}){ zRu=dOt(ko)#nb6$e0E|wxY1wW*X>S!_E&AU5nm`%t$~Aa@PyI1UYrHjoZ}%lO!Fvi z$-v%KkWy+r`Pib|vm2fwt`B3Y{5t0zUOuo1|7@^pt)CWz!iz%N;*1YZ7~Gnw;wvZK zZ=83J^U_7tErb;F|UfNn|MFj>tG>|%t}ly(*mhS`LbJH z^VhMHXKUNF`|A>;cxRM$9v@{_ynpr_EOd+0A4leUCMB5B(a5Ymv#l>jOi4Jt^=mAB z1IrG2ykE40jwCu57QBFIjfd2}iifCrH56&fpimo=> zy*x_-Q@cBi6=h}l!bh%Ow@Vws84kr~96hb&#YI0SGX=4d;jpJmQ%6OmCzdS)J{I>; zHdgu0Tq)un;&eJW;al+bBxk-(x^Lm5D7L@@_vAEUb$D_)M zBsd}#z0fD+pDbXeR%KDPAkWTDS9~6+GuL}fvi6I*MH;$`aeR||F5_Z{V$;T z|Nn#^|7q-TrX)Z6eA{I0^mXRu`Liws46bT{5}}jBBC=OOJd|pwT1vND)&#-@4;qy~ z;NrY?UQ4MAzVrtI$-n%!6a${vjk2koD4oWsxQ6&4jRI&(xgY*-KJmY*NB@V4TYs-Z z{X1&*{{z$`|Hn&z{xf67;dhJwf`|UzMzqeoUDIaSc&Z9Q&HH(4$nJ{%f|Kn2y2hc+0GPWUcw@OSgZ!KMMryr6Sl# z942jh%>JKJ8imiUWR_+_p7`GrF*AKpU*Jgn_p{FaJwQr5?Y{@-x5us9N{5I-VbCT^>cSJy_d7 zBT(Z%o!uzo!TlTnd~_2C7QEksUAiKrqu=cHwMUF3;{7v#`wzG__!9&5OYNrl@&Nu| z08>_MG!mkeQZm5l?>EvnZzN>^Zpi?ks2Ir$++$I6>7indE`$>^1oOXUEB{Ymehhrn z2TrW7M=*xWh z4~P#J0>MAwR1{qX?p@6Kh8iQrM-*MDpG)bpNwlhTuf}(Pm!o%dl$NeI6GpBvjtf`& zUwXm+%b@YUj}?U*=_GZo9K8&k{tNBL!v5ZL`CJvH-zB3E-}W22z_lV&^5LK3xuY31 zBuOv|s3#Go{$7*#>5a+=aN_a?mJ?j3EVF%wvb7bG|L{(QCY~<`Pn@PNAcv_> zBn%+@4~ICivW({g$$pF|I=mO%ZxT*C6vLnWUfsxBgj7^GxwI^6{0F?TjU|TP{%q2kh%o#vV+rm8R@ zV*^;dw!WbWR|bL|e?d{G{j7&@s6|@vyk!FlxKU76$FOGN=t^Oj<1SO$ z>KJ9hrB3*skBSdFkUY#4D^zoQ)vEEG`Z~C3q}K-fd*pRVI{iSWan$)M1;GB|gNn_{ zulU)w7Nn{-(v|Tt2G-#L!EFU5&75xZ+xT!gLOZNlPF@U@1zZ$Q-&kOp(d>}vAMsK; zRJYNLKm&S9W3*FwRd46~$||;uP?*HA*x^YgQGSPqE!B6#oF4QC@Fv9OHsXSdI?71z zmz;Y*GS5#IUPQXJa>@)pu`;-n!Ep0HB(f;zOUs5&5-R|<4vVuY*CPmDvptGSWGAzdikq z4a!RmJbhl=E)fXZ72N1EZPHYYgTZ=MHpE(`{oL@pR+z8qOI?wuTpv@d*v!B07 zZL91%UuwGqOBX~AY;b^M(mI3T6m9zAw-8eqccH5&>89+cAn~aS3r~*SBiNfb&8O(T zK8Uagkfxl12US2$~D&f53AQBU1Ox7LI+y#fwI zQFe3!okv!=;r=;vRd@GfR+1!NQnbAna#h7W@$I_UV0B-1-Iw?)I zC+OlP7PxY(EgHLiZ+(r5%Deb`bRrszTx!y9YDcj<59Hi6MUZlv zX^wKTGDI-Gkf7G#{IH-w!k5keqb9I7U{F=o-+b>s0*6h z0iaY~qbg&5kGpmV;E@kW{yHP?8V;mk(IwP^`gL7)+r0Lid~*nFT$>ykgB~uGz23t0 zsiO)k@U*0>ZU`zgkD0SFM{BmZ)m20;*Ij|1c*E!LrIFQ-U;A=q(;@tnYoW4lkqW0R zDR0PV=%jPP-!(O~lcSYye1!a(D;$m2U_A7RI8@Ll!x!-nCiRcvj-|2P=VH8@tkInq zc+y?wkz?dNPhqjaoOl6?)UldC3emc(zM0xb;`H(!JvCLw~J8fO!9OlJ4F z1*?91mg%K)b*NTYHRU_E% zR>DupKH3Zlxf?O#I(cROZzgj|HQQF2(2Z=o>Y;GqMU)U^6;919l9?|*tdFnbw5+~u z_T5l*QbIhTzWvM9)ohO%K56qnJ{-ekbZuIBf`^=7D~c^7zndXLFglSUPcgyvMel6P zzLJ^91vXr`cbITx!FZx%XTK*%M3D|^xX4gFBGc4FglUiVFN?M-BL zWhEPdgd34x9F-iAB-d-%E&-o@z?pCyll}57#fh<*9(L74)}vQt|GPpSE5Tm41PmXf z-M#Ja|LEX*K(?Q8-p#N)aiT2kC`?-y>rYq*vQ`khr0Nqc_yv87higDetCm*FAC!|0iCr4Ud zu)kp8lR1o7b5^YG;(SET)85RYtH6FGqfq=Z)Cq^CQ)9cct>G13RQf zko+m+nMq2sZWm@eC_}#ulZZdZtV`lj`t9&;oKKPU^}D$PNo-l@dJWZrThlkw(H;n4 z9>urB?c7q$kS=HYj-d)2lIhy#R0dEglb zerwuzl1&o!fqLFzj`PhxyB@2C+r!UJihcAsdM1a@hUiQ)OH$n3of!9D%QjG24EJ}H ztw5^oZ_JGG*28*^d}2b4>Zk@{oivz%0%UGp6)&%bZMFwrc7!J8>p~-dInNm-iX{tr z%VY!>s3-%h(FKR{uF+R>b#`S7i!1UL`5){|4=zOzvqVGcZ#9*g{H#JdP-Ct|~{*T;YHaGk8sfGm*~52a&=GeP7U zzP$Zd!B`9r7*Eqia9E2mlz7=k}hJA6Dcs=9;y;=%WWj2E z!y;hT72mPFZ5!1k`dcIn^UxR_RQcCEiZ#VjDmD zSrXap>oT0v>)us2YLoY&?)6D5VwJ==ABFUOa)1)wnJirJCkSs(%$p@|$N8qW1sTb; z5+%#XrMRckAq|;pAnGSXW4XfNVd^I1f(_2m)B6D@z!Ydpyiu9XYNU&&mBE{r9Md)l z!lRVrkLfSvO`2_2+}@=Rl*AKC79z9O=G#2@aWH zUXO6BjMkhIScBr_5fPz2$mh1Zx{ku-K)A*)bKPJ@S>&39*0NV204@aX)?`}A_4D?6x+D1G-C%JzUSE#Eha$+F$*wC zKd8>=c_V_{I^K5NdvBg|#aHZ*O{nw#LyG_R?DiiEK3MMEBIlQRaAH6^%rK_gm@e5e ztb?_E$&(-A2WKkczG(A@dmHacz^@q}_@3cd=&5~{JJuJ|SqnY59C1Zpp+uoN0_WN`mq|M>RSHe#f~RyW-`;Ny9DD4Dxq;s?NhXK!SrHZMrA@Fz#yOldy^uY%(xvj(Jw45Qjauz(r^7aJm zmo+uRi&CA5uWePdyeLTPCt~N&v6+&BI8K)o+&9uniKbR3YsfrhU(+{yQ(YhTCsC{~ z=2y>vAeY;@yI6UreHcWwX=We6-uyJD=%Bts&`=wVDtr{I3gc#FC@WQV{@}sHi7s=* z03TOx{zk|BHHKkm_oM~s1WA+WcZKiEEX@ohkR6B%0;Ng@_a5~dyF96 zzlXcGG2V0I&fM1 z29^fAx|H%02@@;SI&Aby(bmD_qQ$Y#yZGS#Ju%!jt6GM(+Mh3wgZZr?KOPDf_jmdV z5<^YPcs z?$bt9vt<6vL9dz^EL%R>=&|4l9&y1{_n60yW~&EZ=lX5PgJ@eik0eA6m2;bE$We%s;Amh}Md-s848L*C zlkHP0ji2tz>9p-?d-8YDy?&*qxD>iq@u2OhaEif;-uhOD1DEU@GxbKE8VUtWfqou@ z3eKY!Mo3GS6BSRNkbdW~g!;#cp|l~UwYd%+&^?bBPTs{Y@Tjmt7esr}Ii>uBHx~-d zX-dp^M7?b@BdjIloS9e>tZk@kszF7$h}4`-WuELhGsR#tevSc%<1kgyRWBTyipn8T zco~gbgU98+g_=%l8vU7YekMzw{oD)(DJn^aC)rjaY~Ragh_WlGtebQ?n%>F5MA;$D zt0NJpkUr%1w<-5CmGdOfd67W)#1AAeyfSB)(8a9%sR>}ZHF~I}SWwIrzIi2bk2nuU zNqU%SGJ45gyq`3+BnoBD58$8!?~$p+AHW6IzJ3@(vG`rp7YRNSW$7z&c&7SUm}ehm zqPV8lwnZ8M*QP<9?L{8B|II^w_dbU^qVjvp*&N@)E<(cD&#vfX%}G|7Sne=_JSUSp zJquYjbw0K@mruJVe*jIX%HhX9=4qhe37Ind{U+No@4gUQCRV(ltRGfAr$}o}xzT=n zHG?|ytv>YIhu_CAx5<#^Qike=$qB4jgwdsl3YU%rgAUyurPiE3fT^1I!J9NaWL;E3 zrNx_nrH5~uWJkaAvGmH1Yjn4oOvN{PAhC(dN{vAt4m{asmCgy457x7Txq~?u(-p6u z_GAvUX^)me6RX7<>>c#Y)|;+06Kd0Y!vf=AF-?# zlmVdA&48msdxO&7$4BpAdhN`}xoXJG)5P(vb|Z;x)M}hvHsTBn{ls1RUTiTlsddL^ zRYn4o9`IG&G6GZOeVN!%hgFl?nA*=i(cy?89@R7^znwx!=DqOVOb03arXjUz>_Lg! zW)phVt#f4=Xc@%HmepJ<7Xn@;3&%9PlR{j%Hrk=D7ZA?a#jguausdc5^Zc}@r8#Wh zDGZE8DLP`V3p6ml637*csRM6`!QwdFhzOj&nMgTqh@~-( zTLC$+<~pbhkui0m75aXjHl!!3jl>movc*yy8}laPZK4TDLY|#UTniWHhhK0Kawse+ zsTyZoCd(WewD?;9^J(j%fZ3P%0SmU2rnMOjFre;#uBuj=*S zp>+hEZ|%B?)Tg${#~=GZ zo_*X&Q!T`MJr&b24AuUNlGwQAAmPbZwU3I)tqRMJmpwwDNN@rS=kwO_r7dK62?ABE zHfPHYuWJ)Gg5hbRB`FVFLx1lW5Di`*0&DkiD#LKz$839}SQ-YIy=^Lqs?D`yV|098c-C!X9s(_(lXKEjko-j{UQ2 z3bkEthGfHuaeWKMX1t;bRu-05mUL5W**-XTC?Gi;Ugxehd1c*{qHf5U8(`a5IdN|7 zaDA!tSz0?|ra~?bW0nLM56ufVqvcnB5uTLvPb*nG_;?|M*hl)ljSM?c-76l^rAk$e zSh-mGcJoP|zSJ6XL7jOH#0jxlA*ySO=2;-5$W3g`5makogh_^J>{W}ew`JV_gt53n zq997snZKfWwdj*w`82b2hdd8zi}IIS^9XYauhg|YZp=vi^bt2Tq%Ms@4&oIuSC}GCxOvdJZAsSc(i{mJ;HQWm2~D+ zBVim@BzXfzcOf-H=TMR!>_{_n3xvfs2U1EQQYpqZ5R_(J}%}eKnM(in#Nb{ zSL0022e#7H#uG#@EF3uVy^G41#kl>wk+OEJlvM;koM301DJnq~8ph;Qshg(eSUh>D zKtlYjsB{?T#W_}4@rS0^HMpz5eU4oVy-{YiHy?Zu6Q{1cY2N2KP{7jNQO;A$o!YBY zw(sYdBUx78Zi6TdVieiH7Ou0&5+f+8; z?&+(T_?x}A;61KcWlZ($Q$Z4nt~Sq`6XD#CoDXUdc)uy?{J-FY(wPuQZGK*`hokW; zhM2Z%ctz?DfD&Hvx$cKVX7|Db;R2h(Xn3JSLnJ6^@(xFDMa;l*mgs#A%8p`YsUki} zcvfESC(a~PB?f20z8<@;HF05-!P{}?V3wqk0chTQftV8(2Zx;1hs-qX|@+~93 zMYYlHe~}E&DH1CXBcDVzj_SZnJcZ{`zn;WiM7p?jtgMyrO9ysQVk1Y?X8$;<9h`KD zULahuvL0@=WyF07SfaeP0ZQ;wEF6=4W<;7q3XVVGE)u+*8PoEtlo9=5_N_B@H=l)& zY!52P^8Io#BzleJvuG!IDulU+MS#Zeq^$oBV4dzK^B`;3k@IormvN8g+v0^Lkg_=u zrUOANj^%wMo{qblvUNAT{b+ES@!w-vk%j&R?Qhr?WF&Svx2?TIvq%|0Fg<~it zil*j$5Kultz719!1bWG~6FK4hZjt-HwfCI?O|9A5K?GEqA|M?EM0zh$0w~g@_t2!* z(2H~g5v3Oa>Ae#W351SHQ#u4t2t}lZE)Y8SZO`0$=giDGbI;r}Gk4~G{tL+_d*|J2 zueIK_p66M4hx{yU&liG;Q`L75>NnY&vv(M(hJsc+btG@?oIWo?9Hn2k7fy3Zb>K;1 zc>FGpwM+Y2mz%?FQ_!KiDqgPbH_#rH^I=9_?3)Q+XA;AEsA$*(V&LKzDZp#bz}6Is zWtxohZJ&Jhedww_9RW$UY(m8JO*fY@pxS~Q^|(p|vT;5wWQL7Of&trK(^2&6;V8-3 zOb;Nm^_O>MBN|7zqN?9y&L2r#hd8|oc>E%4N21ve+I^^*xcGo+OF#0#sM+X7)HX-i zQ;u+Ki2x3Pw{1IkjzNRg=l4p>nK@R68#qe|)Ho~1u39}`XKyX_BuvicJh;5X7~2rF zc{``Xsgv0z=$-Oq8Fu}dmijf`$i-t!$)t*PfM}Yy1BbH3wRe2CLgwr4pjAy)ams}^ zDj6FQiU4(?z9+3`JLNRk>>J3ZEw#+PqsZ1?WY}&T>dxQ97{?oIlMS;uM4U_W13jI# zf!r1iMcaPeOx@9`t6ooLV-CCQ;eEJI*A==aVx_jJJi(|>+GlG6p)1BKz8z6Mw}lZyoOuVW8AyGe?cEbJ?R?dL^^L^M zn@w^FAfv`AO#uyb+YZwdkZj&ER!PB(zH|btF085dJ!N+pinIFk!XLrs_)JpY2>1_d)2rsRwoSm|V_9ekYi?di^kBQv-h_f|8 zKmWPV3>si>__4enU@!t|3RO~P31yWjED25by}av$1L+KVZLO4bK3pDa-3JE*tg!_x zWM>zjj}~jmh2wbjM;bd(_m<4nA?iJxUOzb^oxj6UJUq%BYfTE0NRkL(O{lSbu^I7^ zYMpOd5$X(e_hb$V`k?YQpsZ>?u(W8#Xs{4|T~>U{w%~K~j-5 z?UBVxxacg=YzF-UZ86~-gu78Y*UP%5XR$(ZL|gvIX(MAt>lNST{u1MYSF=j5A6&Rl z_=F*`-F*jeuw~sq9cO{*yR1$(#-3@Lh2(G&s1jj|XpBSGZz~6J8*I|YlPV`h~=N<{woXVyH9c`!wGMQ&3cF80eg872<-Tt`E*DiG8Tz*`fzw4{m`%9GqO3m@m|YhHk1qt|+=FD7fh z<9qw2-_E|A+D=57m0F_c^iFB^yF300`Ey>{+w0uxWO_c#d)TfOa2r!lX6izmE4nRh zB)|4qNRxHySLTa?aR4UqLYB2cDoy|+yg&8aK$+OWzXnI~mU zXD-%ogi9jn>E!-6uWRU2)OjFWoI#IgRSy!-_4K1axti@8n%ft5F|?~si@kBSLKm`T zZj#Ut23y!o@v~+{6H!f#pBNV=C(^#{)9t0&z)OsBk*p1eJw!LM_nzmx_DMw#1w9y3 zhGZ0Uo@8_$Hp@HpE&<9u7a#B^e4rz1soB!2)p>>%xo6}Ps1?M`&b%HG(R9<;dK&It z`fPDWe*3f2TC9;SbI=Zh6i};6PSP3~zhplRRBj1H{S}>nN*xf3r7w&yTIr#{0=j!} z({*v}N#S(Q_n4mD`)8;Kv1HE8+?HD9NH1VN32rH8dfR=@ye@wECGkkQAs@$d@z6|O z+`B);M*QP(kyyEf_7o)WhELc`w65BvFhOa|t;Y0?8=CzH=a-$;8S_G9%oT)FZDsaSlU&z!{M)!( z4{EYUN;IHOw44r*wM$&&-r)ge@R$B0R;Fc=))*-3Pg7}8((upux& zeqbcGddGEMS*s0(4MNp^A1 z67#5-)TQk`PA+mT2pea*_Uz%+iBn&lD`Hb(`jh7qb@e)8VIjSY1bBFq6_AIvruIl< z75uKqE7I;%JobYHfS<0eo9xe6ztxCLTGkj9!8<({dM-_M-Tr`NmF>}m(%3N7H@><7 z_|m@VHU_Wx&kE4x`%%l{^@CMP9XW&?0ph)cP7=8rj8@zLq7JlnWijTC&1=0dJsf4r#7{AIDwLd!@56QF3ePKV z*ODjKtvTbl5JP$k&89|PjRg)mLY*EOM!LC?X31J3u_4R)QIM9}urgFZwogrh14~lK zzK|nEKjFQ>tf9|#X%8^T+DgkeWav|XlT>xT9Zo{`^-`Voy+QYGp;*OL+^qESvzY0P z;$SswnvL6q)>_!MYdts9E>$GlDY#cw_6e1-u(wog=TvcdV*17&OaZ;cVouV{(9U+} z8whM4CYg+_N~=i?RjJ(AxR9&Ts_z&G=HO2lqANV%QeJO-k&>l)cG7D6sY})OOVQA& z6fk8s(sJTTc9so2pk4NSKi9T`dQ~&JxPDY-va4U9x8a)He8%$ED#M{>uvwmLq{pl% zg-?cmH+ltJdK((hE;}q8H7SbMZLGQ@g}gG~b%^K=8>1AR#WrK^ zhOpbK7+vT6JXDz%Whh)OU=Vs&wXnmQi;Q_%0y^=BajK2Rc`}@V#OS@<8nJL7k7ONk@(XyNA)zI~~m`8Dl`(wY9)sy8;dF^T>b za|4nmYpBPa(UG9w`1APKtsL-!4IU*!++;fzzsS_qQ&?9(FpMgIlg|43BVUEh#pHI4 zd7&mn+X`YW4wYdo)wZl9(bRDr{MvA)V&>(9AecR}HJPloA-f3ReAPFn z4D3oGSx%u{GtHjMFk5xFF7?>dU>#B-+GO<`XkdD|gj#ssiEmb74|at-;tj@IVD`au zB}?J5g=L^=3ZlxyJv&HgDA&%<6AxBtWwNrtwS{tYni*M$62-5-b3j(EXp5_o74vl# zA9d2*RIl;m*1fU-90#pW1c!pNw+-q?B{pW{OID^0ze6Y@*+&j<<5NZ|o zTJ}~wnlA({%v&0xYwZLpB$Ulf7M+~=g8d?1&h=0?i5o$b%)hyp+=9#tSwcs5$h!@c zhcT2V_1xNHtJVR~i&L&(Rx4t%xivc?KgP%?*aFdM|~m4V%cjdNTDk^YV%Q)xN8 zaEpT%BA%C=Xm*zVFuBz^9iG_aG*b)~(6gK3wE2Y2wrFc^+(n!fhC)%%Eq=>cwYm3( z_30|-{#1PC*A>^XAm=@V_r_qGq%WNA(%!|8Sto@oOA6B7W!hmJU(y%Ds)+*&q^+<$ zR(pVi?)5seOkGb*wqEV3)NrYe@KBEQdv1jkBCl0UcbBsu5?B>5)J_I&ya2p~OK_Jn zR$$PTuP*^Xc`B|OEtyO#K)RBM8e~HIhE6hvyWh7U$~mzqglYmFePCp-;FX=VPu7wn%k)nj4~4WD z!_+U7yuq#&3l^wVVRN2g%g@}{G?Qvdl5@q-uF0hURuqxOxoa#dTwEeF^kh?^!|aA+ zF|C7r8dBXiHSKgfve2m06Cmddj4?aiuEQIzn6ex9)~YxlM>9X;#V7c>S86}6+DVLW zkZyd_xO?liq}ia6*O^qNqX$}d`h!A_$JCmI=5C|x;*npF(eklw*sa2iQD-eFZDbIf zYNC0I=lu)C1NSCW6kG|f8ivM`1VwyKOMNkS4ZyGu84)6kC zU~YXk?C=m|~}WOaOAIOA|j92MqY7%6~W6a2J!+RUn( z*gG(Xj`|9D@e>zScuNjZKa%j4_yuEk@@LCZ+BK!{@_H_^XB#65pYNxs35}X%JBj#x zDaZ}c6~I9GJjtFXTZcR{^l)PxARd9Uc>)Q~U`x8@FQiYuo z{%8;VsWA_S2$x9S6+$}GSj{EOi=Ny0YP`<_~fZsgppDxHmd0|A+X-%qgW|d_t??3audW%La{=9E=vF`bR|LdmUV|T+n ztfaz~>Q8+K`~wFfs=QW#vr1#dE&`Q;ZBh`#sQ*T*5_D&O8SJ+_1Gj}Z66;t9XpfK_ z+isd?ZdB&YS*bqSV}zr99!C;|GtJ1mmzsj-o-GM+)ZWE(0p>D9mn#dp>*t6_b~hA# z6R)%k=q9TvmPd_Fx#1KxeCN_?@u*IjF8)iEJk#DA6O}@#Ca7GEs|4~z>*E`| z0?zQ4n;wsg@0~wzK-i(0C{7)e633zsNfmkD&1!DWD;(D$t zlL1j;0eOaop|w8D7>iZ=e!?lv+a`ou47>%~yRt4LXz!hga8cV)C(}2Ux*H%%yJIRt z;@TscXY*;ISu;yK4eXwD9o{f16SD>L?mQK)QTNr9E$>B| zJjY8p$8logV?sc5JCjj4fo^0DX4b4%H91XfqGu&MfQS(D83Wi@fWV0=tJc6ybLquY zRFmYi?Dv3xS60JjKQ1*1@tZtq)!iZ5Xy_vHwXPg_Wwdmva-lFe-D#G;q9?pgj?WOG z>va%lI>|)5Shu(kMGpyrDn^Wlv-8^wITgjO_m`{eOMC;Bu?obhOe`Vn2+AC}VzT$I zQ=CZlrw6ok!T#XmujQH)u#9t=>(ruOb>U;7n}k}VNr{rK*lraYCQ|W}P06XMxv%M= z!QMDUoqqVv)%xwwwxAbH-WHUn?481!%oR3h$U|g)y$nwpOI*VdU)27p!@UGuqZYjJ zC8`x~;mY|3qcf8?M0e77=K@nHl)dt7kda3QyOpR|bw24@_hnlaecQ_wE)<*cMX#EvD|fk-BMXn>XP{veA) z=S028+6H8gOBkNAH)+K|Yffn7-O&=9jf*U9rgFhO|HH-S)JIM|(vCKEm`+6*y`k&X@(RclxU&=*7$U z96Y^E!F(~bh4O|NqGW~^#EH&}an!y~iI$f@)QL7gcjqEV6}+=JY=&G&Mac9hm4^^Z z%zuU1JL|bXI4Im!QV?ESIQwNgMUv8tSFkX5B*qtSmr&}7NoD7D7X{=yy~*#J$e2e- zjn~?>7=Hph=&VemesoJ^Ij3;P!|s|pn70Gc`>-AnoZNd{+!TT-$c+!O9#-6PstT+2 zXT-*D?aKHK<)(88c{XTqCHk{BY>I+l4(gcid6W0CJW6oQK~2ggPJ44A^AiO+Z8Y!v zKtx@sr{hN5H<117G*sZA&=sdH*KGT&L_M6`7yHS{lJqBBCtHYUmqGaPwu?Xn(n?RW zGWSK)Rk^!)dS=v28Ifu=5y-v(YXe78%lnpC3VV`mO2a@o#7}Y8f3TWmeVIC)KG{`9 z@1pLuFaJu@vo}5lDN`;|h0we*hWqMe`5>%d96)3OQYRB+Lw1&tjI^uD*qDa0>R~-}fEt7OFK1_ZE%1or5oNoY*LOo>@@FbE?LTKm zUGf*_e+OM2V@aN3!zZ7@LTCA4k04fjAIm>Lc0Nt3Q@NdnyIwbCa~mm%@l6MUlcOct zSEA8!LDqlE;lovakK40SBef;iBB~>;?@}C=w@#E(PF|w2yVFJroxM|XOii4Mbn2oP zY~AeIY^R%fcZDq|_XjaBh%<0Qs+9=A*A@$dpU6dqx^oGs#6QliRh+$ho!73 z0%pgT6N8lws*zzadL7T5OYOac_g|L}bmXr;bZG@DG9KiOo=FAKw`v=i5W3g^gh(gz z6SyMsQY4N2Gu|>@yqsb!oE!~lQj9Wi+a;Av1$t*=)16#Hvy$ABo@PcAA;k<{?~1iA zI(OFzMAWLBpdtXh4~1dZxo@ELDtHh|C40jOoxKJb{q7b!gyRCz2B-s2%>~-iQ8w6Q zLWI-PA-a63&t08eIUB9>#!Cg9Z2Qc*0^}U*6M(e0C@`h4GRrDy$!C*AG(mS>>h2_* zZSR%O%X!%ZT8%BvEfdnD_FnS7r^~ln9M$2U=$gVvu@XycyS`wYVcc0G3j{ZGrYQU( z#tY!smro^k)tp^j19zrm8N9qyFX4q@OI(>Q`e|z+unC`q+t(pxyk=`cgrNiLC(98- z1>b{AwU&0x`4Dokc2}ZJfL?fN{vyDzFwARL{n?MX+(a>e%We;yo_@|jF&X%nET)ue zwZB<-BYvZ+FWYFmA79pzSkLPhJi}Y}%X`Xe&pK{2b|jz(tS*`<2dD;hA?zNfm!dBR zSm9K-T_PdZHBIpbSW@2WcB=zsV8*Q%28lZ~7n|Qw!5%t!lLXoU`C7QxKe~1P^ z>o^VJ2GqqnI2W}%Bl!BB_+`gV#{ujL@CXgPH6}X0BiTz-!-%rLdLaFZE_J}cH&&g0 zY1mBcCXykpE1X`GI>sGS3n#rq(`#Hht55YDbx?~Hndfunx zV#I^}HRsaGFMmhDiNuV2_M%i$hBK;rS^644(i64tzL+O~vnoBn7CiYA|5cH!8TpjA zV+(FoSLyoGF@OHEeop0ja3SMsvkeK;O^LauY@o@X$Z+oRj3w4`SEeu1Q2m@gYC7T( zIc>iD;q|jR$=xh6yoQ`B?1eAcL-aF1cq}ar?K5Q6!`e#HSzFD0l3OSFh}}ZhPfMqw zpY2#so-o`P$#N$m$~HhUDKju>#iNp(DTD$xr~fe8A{v)W`{9*@|5hXY=a>Dru@nC~ z6Y)tfzXJA5FnNCRBeTfCvEdh{}7$_m`sx(6g@x8y`b+Tczndd&0cO3dJmZUtv z_CR4y60^FC5-$V2D(eNMUuG2+Of}VQQnv{F#OzbYQZTp+dUbK{!`grR{inPCKgt{Z z<6r$cY~(ld`Tv@g{cX4F?|;gF!h_6(KK4I;67_0B=WepK#Fd(S({9_EPS@)nF6J+B zjB2gis;^mzsoN5&?Gs^?YQDO|KB`NOxTZ7--h2PqDxW#(#Ou74$KeH{S{JpE{pkiF z&3mqPv$z;F)$p&S0BdhSyBTN}XP>HQk4GM_UWK%+<(hv~dJb14%lhlW`XVi`iABja+!mpJha!Le~H@CA!oZz03E|^@Cb7F0qnu z^rz(4)y8|5m0pFcUM^H?p~{j~wBn9+@JPIS3+*|81qwaZ#O5F9^6O2!sQi@P&l@YS zHWykZi(BLBN~*f8GK#fJ95fJCmvb=Wu)!`0a^dhFF zFxA0_AY>JaFZkZcy)H5P&}`oqPLNv*|PD3 z`2)ozd?(65lWdsUTy{giH;_>`CeLZeQR6T^)45pD)l6uzF)X|+t2knK1h5msw&Uyt z*7Vnnmsb0x#ol5rPqI#{mu>a}T*{&C5-I1T>Nn4#&KWCb*34JcUmEhN zij?~sXLew+w@y;>$lOHb)CJ+qks|F^7rWoC0YtN)oy(&^Q&Pv5%Tn51wGP)UjZtUG zbGf@DD)mQk3sg_zZU}COsYv%QdTLP&g4dMabrX8YAK+nfPq{)4D`dWbF6}Lmvq|u< z$EFEM#5x|296n4e6IK+BTAqzp%kjK)3Kq}B{X&*bxl@xM3GWw5KPORlbF=b4!4%%; zt0b1wc-r&DuigIn$&doWez(zhH9T#tL*yRiBq*G7)y1{*s<)mQ7j68t?UMwHn4Rfm zjYJBGu}mS45{v@COA%02Y^QI^pvfBLy1QaIVK*{81FpR9#=yL}5gIWGwD{vI*Upe< zY_iivxAFzJ;ok6C0c8olxAaZ4E-G40<{yy)B#Lo6fwkJ%0+D-{?K~VFC5xnJA!39$ zHz+_vr)g6!Q1}??B&QihCQgCJ=Rrxgnk?EH<3G&WRap*q?d10X@Rojlg>rJ&o>r!4 z9-oxH-s@BIp{FG=dC8&O;Y-)5GTkp~woOOJn%ak&*obuiSkDV*eD}Pmb$Qm};bL4- zngn8I3J0CsuMObQ5(BD=#vK^6V$}?Q%O?rk=n-z@tTDuYz7#RZa#AES4trGasvdE- z~b2{*dr&NFP#$J(Nh4MMI&K7a6>K8AXp zc6#VCRrsSJ|85kxyx=v0>i)3`@-**@u;O!!6z?GVNJpgnf$qr41d^p1(U7S4s*aEA z^WAH2eD zc>7tKjzC=y^%P_|a91k0X#9B$L@{4kc?^mXbid^BXn>aHVZ;FPjVXmadp@Y^GTk>2 z*R^pGQn;P>pHqf@sW|dKe(wV0zZ6UUd{}X5$tw9V6p`)L!R-Q~p!sC7pfeatSUYTpsvn9_kNpWlBZH5Gd_HhP$X8G7jmM3|!f@j{29$;lM? zYf3uTDURgC7xpTuu9Y|ta_L)As$W~{6ggGZ;F;T{s-vp#9=Q`U`!x&)!xk&VtgbRKPR<;Kye z>kNPb6;Joli!(Lk>a5w6IlLM`XpYjKwL5l#G4~UplL};?WU##*G=29XGv7sNr`lQ# zVD2c=0?^>0sJR)616F`udE-01l5c+LgQM@lcTn&`wf+79mAi={GZN>H?XcVDWAozL zh#pZJ;gFk5!d92u+y^yKEe~3$V@t#5pqh3Tys9aQ0zIw*7kWamLlox$bJBVwa(>qx z00y-O-GoSmU2GK&={}dIl{s(V0mkCQp2k4J&)iIbPBT3=Fqf7$yOUlNo!l_QRqIiRzY$yQVdj4W$WSwqbZVnVetVFDo>WC{G=~^sbI5nkj*h|V+b3=C_ z0r%0ue#IH~xom*)8qaw!dvSpl+pP^672-oht{Jj~nekQss8`Vfi{C)aep=1!IgbLT zg0ajyPENZrlAb+iDgulw36brnDi8ut=8ma)w%_CXl{0SV%|AweD5#By12YddxbmY= z9|S^lg*c_xf(6u9vv;llqcSRazJYSmQpFj+R53@*e=)SU&`$^(?TsGL;0J=k zb79!+ai592muHuRv<^I3#G0lw7YdX`RKGy=!1{;^l^&;!(>sykec$T~BQkilMduH#oAja}bb8KCN!% zrco<4*Sw_eB_seMz2{g?A2v3o~RV$nYeq9aftHVc~g4ZWSnr}{v}OC zD{O9c!s;_s2dQ_l&ij;%_t`w60*9!#uCM7pxmhsP0EiHRc->&A6X6gUBCzDloZ zEeQ9ckayylOCmP--oiIfa3QTlpQ!D+?kLZf)-ia(b7nW@4hc=}aTC3gQp{r1qi{vD zSl(7*BoqC3#&>3onN;YKgFPg(E}aU#m^wAbbT`>zor7PRzH9h-V6ypP%EEv&1v zabS{NPSo0vqDS(9@PTlG;(^58BvtO$V6}BzsU9LIc=dy*E#w;GS$ zjA4!!;dlrIKU&)`@I8E_r7{{LWB9(+W(Wh!ITdW#)K%G{11Q&PI=0(m>sorlP97r1QNqMd2~15>k{#OEqNi#t7H@gS zPGxKumc$)g+4imJ&s>kRlxMsrNM;+GYE-u%wKXjc2FWUOB2fgJgCL@XF+3e->fDD! zDF0ZCe%7@hoqDdo(PXZ(EuWp#+6UVrFPZK_2* z0{WrZC1`-n^P|}w38B}G#+aF<@zt@#J2L!Gf&lh{w9JiyZ5BlFI}4l1L^(IoqDcSww%l{*jD7l7k?Bj%Gh@V50(`A0>6u1ml zS1h&~H@P}~t<#l(kxe~>_%P68yrAWZH>6|uFik=xV3CoG7e`8Tc?myDzQv#cNVmq3 z=PiTh{r4q5Vm`S~P^E|^wG@U-Pi;l(U$_=Nn24gQjs3y{u5IDFdF^_Fx^iZE%hy9q zNY9%+J+9(s4@nrOA;yyh;rPtMb87SIrjrhceP`$$MCxnu$sR|@%D-q`c(aDk53_Qam?gfKT z|H|^=mG~(guIriPgFtZE0Y(dvc*`EM5&Tm9=wIu-e*zpY=)ve@r)BgPgWSZen`NYL zCZN`rZh9aqo)9v;b#s%o(6pa(+Y<{@VveomON zCAYN{WmmBtuD`K?5wHuo)d|0A?%sF*YecT1T@F~KcHD8!LZ~wBx#*@E_USppqMNIdQnuglV_d_|{ zE@68K69qJ^8SFLc+f7UXXAXG!)d{FvgQ6R{A;77tZ}rXEHY7uv{JXfKmMKfnx6Bak zIos>bWUz%1CQc|lfgDzs1I_F-wFY#V_Xz=%f>gysBA1qS!a`|`T8+Dik5e;X@itku z+IzW$K!%tZnSF;#^Uq>*6fS0)B!w$jKg}$o29CK`bC<36rck!LGPbw3Fug$t1#_%w z%~iorf`x@~Frg8*=?I3YIF&4qq>~kZiItI_hW2Ic+uAhPam`)L?Yc^rgu~Dfq&(VI z6V?4;SE3Vp%Ywd8J$JQ&*2!pOtF2};>Rc~1i6i<`na7)2sLy_Yf{BmctIoR3Zli-! zdl+*?#p6}G_6iBH0z~9h6b~V#(=4PfmxF`Bw<%q*!T|N)Rt++Vvh^$1F|kr-4&fc4 zpxe61C+`PeUYcktRz2LW=pm_lMwh>s*q6G{CBo+zDA>caIXR8BYC7sE+|m>=clF(H z2{vKY(V!C0WCfs;BdueB6AK>}e7yNA4$7v32zqVU4hX>K~|7vN$>R5dq*e)CCH)_0EY1l z(N!+_Q#mJAOxe?UZHZo3M|HBntDk=Jt`l!a3$NO4wSDL8dM%v-`E!y9KK{t2{hbo<5lN=kG zif@eMB${y~3v8BPlXN*&Ml0um;dH6{(M=a(1+3j;flUx(tO(=%5dNuuRIsY9-HtxH zW_=TunL7O#^95eg*3v(!i%iM+D4QTGuin#sk?u>Tf;E+`cXDnX5@W}Ju!yIYqjw$} zU*u&)r&)@5*4&R85e)Z;IWrntr7HtymV{TnOe|1Y7vF;O10!DXu+jZaBRj?QP5TID#%XkQoIXz<5YufcHE59K3NOW(*Fy3xl!&s=#>phFPqQ51O zRBG>Ja$Uo$B+Erza_B2@7y&7UF$aS z9skKfn&ORR_9G2)rV)MjQoCH^Ba##KsJy&o!TjAPQYtZneY?UoOQ@)YMC8|U0HE~T zR(*JHcD+d$vD-Y=5CC8UP5}ti-1rjo>5ICAnVQ}u7%G_qK`k!#`rPePw!Ero z3j8i`2dMr5J>$V)FYFLx!Bt*2%<#t12CuqY@Vhv^j56}N8nU&!tq)H;-ATj-h1Ns2 z=)6o$%jdX1tfg?>+*zoQDYO0!ZDTfMEbmzV*MA|vwD|_I6{_)>F^y+U++6lXm~h+! z90*-mSHOANK}s?L-S}w7tvUwi zq(8mB;+>*YZBGSHM1>|qQfSU<0dSImQFvi%%(!6Oy}BJd5VsqiQ*FMyiBs-KC#{9r zIkH-K#yKgOu*qpNYl6%-QIEC&(7}wfDU)*?f(6`xp`BTQ5wO4 zJI7d4A1m{iZA+=j7^84Bg1?Jl2S(@Vuhg9zXPAo8OTc=i0C6{^k>9I^{kK;&e;p+D zOLyzv@4X-T*?;Kc{to@@KkDQDk6%gSJOh!afv$i!;M>cO7aLIS6}V5YzYliV!0gdi zjQ~%K-~A!y+R}YU_p`@GOHO1#bjy=15i>K?`sDbw39ND7XE6cLgx(>45sN%I0*p!QP{nKppXRb?DmiKRe^#0ZVxnz?cZqlj*t&a zhNYXhgf^2#6!cl@n6d{dRHG3+tCR{12c#Wbe=oR&p3dALuCcuzxATD^gigA9kYS%T zydiJS0$&N(h5E(gMBN(v$~UL(n>g8$(AD)(wa(Cw6)5+;KKKs__j9`K%;YF?J3dz* zfCfh4lD!!-Yf?KjQvdExshj__XX*Qi)}*iGbE)aPIVkuqj1DOlHGvQ~g=r?3DZlXl z(j%4+1F=Wdg7vUx;=T)p|G~a4I`WS08^!v9Vq#vr`PWa~ezS4Jz(HmFqZlJ%U+Lfa z2>j-71te!AvV!q6T^)X2B`X(JS2^+eDWqf~3RTy2fo>Nd=z*j^^#kCv+N@3ZH@<=3 zLFm|XFaT32BQ*|-1e6A)zALW*&EqwlE8OoozkxRBk1YUM>mW>7*bOuDZ=n6yGrn)2 z?zZExdy%iIgHGhnUjn0(XV2_&Wk2b+odHek2SH!A&TG~4);Uej0St7J)Zqb8k0{ab zBL8s#e{}_5ZC4)AtAEAj>d2Y=WRv>R?fkv?nQwqEuyO+M**bf~bGzaRiCqy{-4(E6 zH}=%WhLtpy>|BFLs2CR2HxPA}!C*Pvo^e_V>p3=#jCsoVr%3UhGR_XJn} ze=*{JuNyg?Rg@`x2}H|g`#03uB+Y+gS?zE5&R^VQtVr<9(W-U0V>@N38IaHo& zCQs)P+D;rCgNCzaZv{O%@i_jNJ9L5dO0G5t1Tc61!fO8_wf;|Y{_(+oC4oPdcJesp&)he+m~DG|5xzKKKb1}v5X zPm%c;nA;K9rdqoO$HGa<1jKV76Vh>SDcnB~n@|;FSxte)LaTX(#Rcc!Z);yhG#Z1Zd;|rik#L={d|81_<&suE% zF!;%jbNu}|dVlXV{p}+O|J&c9UAMn$Y;>yyuEse+!^rT#Vx9E@JI494zi*XvN(nZ+gE8`JhFU)v}Vu*Y1@?0pw&-tn^%4 zF|WsV`vGF0)RP?%o|~B4rxD0Muc`dzs_6e>rTxb>gZ>Yd*Z< zTw!X=g~tghAmNtVz@Ei2-D>OE;}}UwC|0}3$ueTd9Z1a7+D%ADPvs@KEOs_t%xyB$ zGoBD@txG8#^gg;-`h2K|5FkS|7Gvif59-++rx^NtGG;`=TkQIH^ZVr*@-R<+j zFZgXts-Z6Qfx2@{bj!z{RXL8FP(jrF+Umy)kHr{?cN4dyDNM+=P15H^4Ww^~d^)P6 z@z~cu9eq^(k*fW@la3$X_unQ{zdb4cTN<}NJFVyW^=;borq`=mo`sK>edr}Z&*J?2 z09k&l0koLPe$Au0M$e{xwzZfDu;L0%08W7&ITcshBzk;})S`5CAV6``7CU1*CD_pe zoT7(v+Umaf?1)KfJ#=>JJn7Sq81o~>{54q^Y9djuk0k@q1wLP>n z4dO{F4a)9>N2n!5PbMk6!u2euIY_MvvQ_e_tH?8h}SG^`H%w2)Rv^?U1ui(cYOl>~{>+hd?U}cmIywy+^ zpaJ133T+0GZp&rPEgDSWm!G-|#9Tjni(315q>guUj_2vfG|>D6*_uhfO73_8niGIr z(Ei$9m44187%Zm-q3oxxNnt^uE&GN(?8jE;?}Zos?dki^Qt}@s|DSKQf3=RS(=YI# zWvq%EsfO@ba_Su-*7U{Nw7rn&C;z0C-oO^cjp0i1ZjX;YsgHfN88A2(0h&L(wY{^e zJKBKY>Q8p<{GnlS9MpYeO?p}U9dW?Ubw$d(V-Wr z=T#&>Z%1Mq_cxFhdi@UUPy0|m`k=qsU;FXFzlo_FMZCD60J2O2DeduG_7|ydneeH? zLm*b`=AYA_ZEePW1PW+X;msnYk0RE9r{Tap$VXuNIYzRzJ?-E`T-lFWyRIhe=2M^t zN^v2WPl9KTP^3K`FU75G^BBlf|g^?C0KK?{o8iGv-W^9x0)W!19Uwg`}pyFKi2Pu jz5IASe)xkQ{`5!u_z^FE5o2IQ>%aAs@vXG8J=>~Mu z264+rBIu@;5<7vFsv#fXi8cwS(6K@wA5cL?fH5jU5(iKTUycb)o1~8K{>S!nULMcy zD@M~KoZOuE-o59Z-?@J8zI)HTVJwLyvzap)WG377b;cfLjAdp<&(j!d!?iR>%Fjz- zY$FO}p$t^mA|$#V{!ERC`+x7Z!2hBJs(-~Moi0dTaJs67l2Z|^T* zRR@-{rOgGVJ4igi>CTN(%ZjcF$G&^PUz5k4s9M5!RW9?LDlp|In4O>5l(M#~+}_bu zVdsGg#}kS4!TVE|4E8f&e)s@iHZ&KS+7jqPtG~=vKp@1Nc5vU?+aQ?Z$dn)q45=y(wii*srVcQ@+2<@qIl$cwc5?z}BIWpI7CvBD|0Pqr-=D zUFEhnwXlczE9{?e?~IXJeL&m)Q8PQe)0VLQW3J@ITKQYHj$I6{ey#jeE>LM-sfB;f zVm28(pXuZ$ANHNzXj%>*3Y8L-p)rCU_GsDe8#~h{s`&tpcMP!8`{2)Nbqo1;SFJI? zPw%vCLLG9lI*-i)`+x!dOM7$KSh+gou6??9(pd0cHsC`L&kaq>?)q>{)4+Yy06Tv_ zkNxbf3RNxyDjm-n;76b8sFkZ4W1Iy>*wObikneJJDqZ88C4s-eh!24Z+mQAO_m>zK z8{i+negB9Or&8YSvI%p*KVZOz_V#x&M+}$y8 z-aPgo*p2j;-FtGGYJaBY7xjtY?>6AWXE(i8V&8`3*PU|Nay2%s`50%ugzv$xH~A~= zB|eY!x9!E261}OdIPGz*d}`%*V^$7t$S%>H8l6kqiY!n1JQl7uwR`f!Z-Bp(AD{XaDL!OIOR5aW=7zo@0J=stx>Iiayk551DJ}svq|$_#5N-(C)UZ z&{LmWS$qd86!;tHS&`Gzdacc4eH8oyGCrI?S;9tWttVbN+#4g%pPrZTVSv|9H#|2L z+e3f4<1T);`6+Rk;T-e&?5AY-w-2XIv97NqeIod~1s~eo)*5ksB96hoSL8!CKk6Lz z+*HhkIl}5Fe;Cw|#wxh&6_j-|SoYwMs%i%j1&yP)iOt0Sk^7mW7XbbT02Xhyx>}4zifmzY((o{1C&_E67@q(Mr4^T}hmyW`ZCT<|0Y9qt^u~l&_`wpfA)Xwb#os@Jl@4 zfDDoZUy$_ji9aGaad5asc1XU;@e8?*^CKkdIDR3oa{P*g!F+AR((iM5Y^99Y4&V%@G!>l&n}T;I)| z*0=oS_78{Fs_hIhd|{os=fnmRG3eTtbnY)B-V*H{`H?oOky6-~GZMaEKe>3E^Y%_ zqlQh@eH~a2TqV|%JI1~k+J7Q#_o3(5&v)57d5oZs=WV@$&qDiOMBA&5ziEsP`xn(2 zZ0pE=&0_Xd*#1I;{T~RtYO<@+@k4d{_8z}?(iHe!3fqe7eCP}JsM(a}cU9W=sIS}E z-^ILX9p--rm6LhBw0^a7#IrYGE$5(0dhL?iJP)?j;=)0nCvBFRO(7ra7_%^6LtIyJ z?JR`Y<6P3g{INVb2adbm*Ws}o5$acyuzN(sHm&KE3iY&YP0N7&&(#>Pminxq6HlVv z=QP;vk;Yx&U%r}s)>-MW#EmI$H2BvgZ)2Ab!p!L)?3=t7?fgjxYu6RV7n#W zJifiyyg=A(-1TjIL#emB8>lZc^Ps}C`C{B@vl!+9JQ>5VJ9)2*l zeY|O%X$R&Jt#av;H%9L8SK8*uAqew?{ma+^=*rE@`)-w`{}bcCkLCIdjP;%u#+oNy zHSLnlW!j1!*cBT)mfIGI8N9hH6}s01eax3GU_NwRs0054bscl=mY9Bp{hHrvMieaa z!5rgtK{qP<53OR4ohe|mDRq>Lp9|eDMfx1^gUzHZH%>-R{s?r3 zzSm^lr|2)%hx^RI_xAwa>$3?D<3u;=5RDP7z1SZ!MeqT78A!bn{URa%(~|M&(D#e# z7&4xc89({?;c4lDK1rY3yeg*eHV>J{Q9kn*YM60Cp9%|q!L^c#`lu6JM@ z`aPw!b?jr9iM@B \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/PlantUML.svg b/packages/documentation/docs/public/icons/logo/PlantUML.svg deleted file mode 100644 index 96535d4553..0000000000 --- a/packages/documentation/docs/public/icons/logo/PlantUML.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/PostCSS.svg b/packages/documentation/docs/public/icons/logo/PostCSS.svg deleted file mode 100644 index baf9b1e760..0000000000 --- a/packages/documentation/docs/public/icons/logo/PostCSS.svg +++ /dev/null @@ -1 +0,0 @@ -postcss-logo-symbol diff --git a/packages/documentation/docs/public/icons/logo/Rollup.svg b/packages/documentation/docs/public/icons/logo/Rollup.svg deleted file mode 100644 index 20bb5dfe63..0000000000 --- a/packages/documentation/docs/public/icons/logo/Rollup.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/TailwindCSS.svg b/packages/documentation/docs/public/icons/logo/TailwindCSS.svg deleted file mode 100644 index e0e971530c..0000000000 --- a/packages/documentation/docs/public/icons/logo/TailwindCSS.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg b/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg deleted file mode 100644 index 3c9fa5d366..0000000000 --- a/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/TypeScript.svg b/packages/documentation/docs/public/icons/logo/TypeScript.svg deleted file mode 100644 index a46d53d49f..0000000000 --- a/packages/documentation/docs/public/icons/logo/TypeScript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/UI5.svg b/packages/documentation/docs/public/icons/logo/UI5.svg deleted file mode 100644 index c54ff84762..0000000000 --- a/packages/documentation/docs/public/icons/logo/UI5.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/documentation/docs/public/icons/logo/VitePress.svg b/packages/documentation/docs/public/icons/logo/VitePress.svg deleted file mode 100644 index ed6438ade1..0000000000 --- a/packages/documentation/docs/public/icons/logo/VitePress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/Vitejs.svg b/packages/documentation/docs/public/icons/logo/Vitejs.svg deleted file mode 100644 index de4aeddc12..0000000000 --- a/packages/documentation/docs/public/icons/logo/Vitejs.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/packages/documentation/docs/public/icons/logo/Vuejs.svg b/packages/documentation/docs/public/icons/logo/Vuejs.svg deleted file mode 100644 index a6c05382d6..0000000000 --- a/packages/documentation/docs/public/icons/logo/Vuejs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/Web-Components.svg b/packages/documentation/docs/public/icons/logo/Web-Components.svg deleted file mode 100644 index a1e3ce54c3..0000000000 --- a/packages/documentation/docs/public/icons/logo/Web-Components.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg b/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg deleted file mode 100644 index 8faebaf4da..0000000000 --- a/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano-wm.svg b/packages/documentation/docs/public/icons/logo/cssnano-wm.svg deleted file mode 100644 index e0a266aa49..0000000000 --- a/packages/documentation/docs/public/icons/logo/cssnano-wm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano.svg b/packages/documentation/docs/public/icons/logo/cssnano.svg deleted file mode 100644 index 58bfe27f2d..0000000000 --- a/packages/documentation/docs/public/icons/logo/cssnano.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/packages/documentation/docs/public/icons/logo/markdown.svg b/packages/documentation/docs/public/icons/logo/markdown.svg deleted file mode 100644 index efaefee739..0000000000 --- a/packages/documentation/docs/public/icons/logo/markdown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg b/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg deleted file mode 100644 index 260b75880f..0000000000 --- a/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B.svg b/packages/documentation/docs/public/icons/ui5/B.svg deleted file mode 100644 index b5c1033309..0000000000 --- a/packages/documentation/docs/public/icons/ui5/B.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg deleted file mode 100644 index 0b66b01e83..0000000000 --- a/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg deleted file mode 100644 index 00be266e41..0000000000 --- a/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg b/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg deleted file mode 100644 index 690ee70443..0000000000 --- a/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg b/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg deleted file mode 100644 index fd78b9bc78..0000000000 --- a/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O.svg b/packages/documentation/docs/public/icons/ui5/O.svg deleted file mode 100644 index 122eacd4ab..0000000000 --- a/packages/documentation/docs/public/icons/ui5/O.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg deleted file mode 100644 index 633e548432..0000000000 --- a/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg deleted file mode 100644 index d272c1a348..0000000000 --- a/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg b/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg deleted file mode 100644 index b0659ccbbb..0000000000 --- a/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg b/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg deleted file mode 100644 index 79304ca259..0000000000 --- a/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/UI5.svg b/packages/documentation/docs/public/icons/ui5/UI5.svg deleted file mode 100644 index c54ff84762..0000000000 --- a/packages/documentation/docs/public/icons/ui5/UI5.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/documentation/docs/public/learn-more.svg b/packages/documentation/docs/public/learn-more.svg deleted file mode 100644 index 22a412cd6e..0000000000 --- a/packages/documentation/docs/public/learn-more.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/documentation/docs/public/tailwind-css-vsc-color-completion.png b/packages/documentation/docs/public/tailwind-css-vsc-color-completion.png deleted file mode 100644 index 889123407f2c11558d9eb9c58b047ff7bb48ffc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13680 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 z 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 diff --git a/packages/documentation/docs/updates/migrate-v1.md b/packages/documentation/docs/updates/migrate-v1.md index a35c3af8cc..4b2489f316 100644 --- a/packages/documentation/docs/updates/migrate-v1.md +++ b/packages/documentation/docs/updates/migrate-v1.md @@ -12,7 +12,7 @@ to load the custom bundle file instead. **ui5-project: normalizer: Rename optional parameter "translator" ([SAP/ui5-project#96](https://github.com/SAP/ui5-project/pull/96))** -Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName +Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName" **ui5-fs: Remove top-level access to adapters ([SAP/ui5-fs#69](https://github.com/SAP/ui5-fs/pull/69))** @@ -52,12 +52,12 @@ npm install @ui5/cli@^1 #### `specVersion: "1.0"` -We have introduced the [specification version `1.0`](../pages/Configuration#specification-version-10). +We have introduced the [specification version `1.0`](../pages/Configuration.md#specification-version-10). New features will only be available for projects with specVersion `1.0` or newer. The specVersion `0.1` will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects. ```yaml -specVersion: "1.0 +specVersion: "1.0" metadata: name: type: diff --git a/packages/documentation/docs/updates/migrate-v2.md b/packages/documentation/docs/updates/migrate-v2.md index decbc4cce0..fcfa286f0b 100644 --- a/packages/documentation/docs/updates/migrate-v2.md +++ b/packages/documentation/docs/updates/migrate-v2.md @@ -26,7 +26,7 @@ If a library contains both a manifest.json and a .library file, they must be loc For projects of types **other** than `application` or `library`, the UI5 Server now expects `*.properties` files to be UTF-8 encoded as opposed to `ISO-8859-1` before. -_**Note:** This change does not affect most projects as `*.properties` files are typically only located in applications or libraries, for which their project specific [configuration](../pages/Configuration#encoding-of-properties-files) is used._ +_**Note:** This change does not affect most projects as `*.properties` files are typically only located in applications or libraries, for which their project specific [configuration](../pages/Configuration.md#encoding-of-properties-files) is used._ **UI5 FS: Remove deprecated parameter useNamespaces ([SAP/ui5-fs#223](https://github.com/SAP/ui5-fs/pull/223))** @@ -56,12 +56,12 @@ npm install --save-dev @ui5/cli@^2 #### `specVersion: "2.0"` -We have introduced the [specification version `2.0`](../pages/Configuration#specification-version-10). +We have introduced the [specification version `2.0`](../pages/Configuration.md#specification-version-10). New features will only be available for projects with specVersion `2.0` or newer. Most projects defining specVersion `0.1` or `1.0` can still be used. ```yaml -specVersion: "2.0 +specVersion: "2.0" metadata: name: type: diff --git a/packages/documentation/docs/updates/migrate-v3.md b/packages/documentation/docs/updates/migrate-v3.md index 70acb97dba..ff4295b56e 100644 --- a/packages/documentation/docs/updates/migrate-v3.md +++ b/packages/documentation/docs/updates/migrate-v3.md @@ -1,11 +1,9 @@ # Migrate to v3 -::: warning Superseded -**UI5 CLI 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4).** +!!! warning "Superseded" + **UI5 CLI 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4.md).** -Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 CLI 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)** - -::: + Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 CLI 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)** ## Node.js and npm Version Support @@ -21,58 +19,52 @@ This means your old projects might still work. Unless they have non-standard con ## Changes for Projects -::: info Info -✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** - -::: +!!! info + ✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** For projects defining the latest **Specification Versions 3.0 and higher**, some changes apply: -* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration#name) for details +* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration.md#name) for details -See also [Configuration: Specification Version 3.0](../pages/Configuration#specification-version-30). +See also [Configuration: Specification Version 3.0](../pages/Configuration.md#specification-version-30). ## Changes for Extensions -::: info Info -✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** - -::: +!!! info + ✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** For extensions defining the latest **Specification Versions 3.0 and higher**, some changes and improvements apply: * **Breaking Change:** Custom Tasks need to request access to dependency resources - * By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name `determineRequiredDependencies`. In this function it can define the scope of dependency-access. Please refer to the [Custom Task: Required Dependencies](../pages/extensibility/CustomTasks#required-dependencies) documentation for details -* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration#name) for details + * By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name `determineRequiredDependencies`. In this function it can define the scope of dependency-access. Please refer to the [Custom Task: Required Dependencies](../pages/extensibility/CustomTasks.md#required-dependencies) documentation for details +* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration.md#name) for details * **Features:** Enhanced TaskUtil and MiddlewareUtil API * For example providing access to a [project's root directory](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#~ProjectInterface), or [dependencies](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#getDependencies) - * See also [Custom Tasks](../pages/extensibility/CustomTasks) and [Custom Server Middleware](../pages/extensibility/CustomServerMiddleware) + * See also [Custom Tasks](../pages/extensibility/CustomTasks.md) and [Custom Server Middleware](../pages/extensibility/CustomServerMiddleware.md) ## Changes to Dependency Configuration -::: info Info -✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 CLI v3. - -Configuration like the following is not needed anymore: - -```diff -{ - [...] -- "ui5": { -- "dependencies": [ -- "my-package -- ] -- } - [...] -} -``` +!!! info + ✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 CLI v3. -`dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104). -If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed. + Configuration like the following is not needed anymore: -Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`. + ```diff title="package.json" + { + [...] + - "ui5": { + - "dependencies": [ + - "my-package" + - ] + - } + [...] + } + ``` -::: + `dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104). + If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed. + + Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`. ## Changes to Module API @@ -105,7 +97,7 @@ await builder.build({ **New: @ui5/project v3** -#### ESM +=== "ESM" ```js import {graphFromPackageDependencies} from "@ui5/project/graph"; @@ -118,7 +110,7 @@ await builder.build({ }); ``` -#### CommonJS +=== "CommonJS" ```js // Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function @@ -153,12 +145,10 @@ Especially for projects of type `library`, where standard tasks like [`buildThem In the future, a caching mechanism should help and improve build times with this new behavior. -::: info Info -The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result. - -Please also refer to the [`ui5 build` documentation](../pages/CLI#ui5-build). +!!! info + The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result. -::: + Please also refer to the [`ui5 build` documentation](../pages/CLI.md#ui5-build). ## Removal of Standard Tasks and Processors @@ -211,19 +201,19 @@ The following processors have been removed: | generateApiIndex | *disabled* ^1^ | | | | generateResourcesJson | *disabled* | *disabled* | *disabled* | -*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](../pages/CLI#ui5-build). See footnotes where given* +*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](../pages/CLI.md#ui5-build). See footnotes where given* --- ^1^ Enabled in `jsdoc` build, which disables most of the other tasks -^2^ Enabled for projects defining a [component preload configuration](../pages/Configuration#component-preload-generation) +^2^ Enabled for projects defining a [component preload configuration](../pages/Configuration.md#component-preload-generation) ^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -^4^ Enabled for projects defining a [bundle configuration](../pages/Configuration#custom-bundling) +^4^ Enabled for projects defining a [bundle configuration](../pages/Configuration.md#custom-bundling) ^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped ## Removal of Standard Middleware -The following middleware has been removed from the [standard middlewares list](../pages/Server#standard-middleware): +The following middleware has been removed from the [standard middlewares list](../../pages/Server/#standard-middleware): * connectUi5Proxy diff --git a/packages/documentation/docs/updates/migrate-v4.md b/packages/documentation/docs/updates/migrate-v4.md index 0b3742aa27..e074569a76 100644 --- a/packages/documentation/docs/updates/migrate-v4.md +++ b/packages/documentation/docs/updates/migrate-v4.md @@ -1,14 +1,12 @@ # Migrate to v4 -::: tip New Release -**UI5 CLI 4.0 has been released on July 24, 2024 🎉** +!!! tip "New Release" + **UI5 CLI 4.0 has been released on July 24, 2024 🎉** -Install the latest version in your projects via: `npm i --save-dev @ui5/cli@latest` -And update your global install via `npm i --global @ui5/cli@latest` + Install the latest version in your projects via: `npm i --save-dev @ui5/cli@latest` + And update your global install via `npm i --global @ui5/cli@latest` -And find the announcement blog post here: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** - -::: + And find the announcement blog post here: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** ## UI5 2.x Compatibility @@ -32,12 +30,10 @@ Old projects might therefore still work, unless they have a non-standard configu ## Changes for Projects -::: tip No changes for Specification Versions 2.x and 3.x -Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 CLI v4** - -The following does not apply to them. +!!! success "No changes for Specification Versions 2.x and 3.x" + Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 CLI v4** -::: + The following does not apply to them. For projects defining the latest **Specification Version 4.0 or higher**, the following changes apply: @@ -45,7 +41,7 @@ For projects defining the latest **Specification Version 4.0 or higher**, the fo In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will **omit affected module from the bundle and log an error message instead.** - For more details, see [Builder: JavaScript Files Requiring Top Level Scope](../pages/Builder#javascript-files-requiring-top-level-scope). + For more details, see [Builder: JavaScript Files Requiring Top Level Scope](../pages/Builder.md#javascript-files-requiring-top-level-scope). * **Breaking Change:** New `async` option for the `require` sections of bundle definitions. @@ -53,13 +49,13 @@ For projects defining the latest **Specification Version 4.0 or higher**, the fo Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles. - See [Configuration: `bundleDefinition.sections`](../pages/Configuration#properties) for more on the new `async` option. + See [Configuration: `bundleDefinition.sections`](../pages/Configuration.md#properties) for more on the new `async` option. -* **Breaking Change:** Removal of the `usePredefineCalls` [bundle option](../pages/Configuration#properties). UI5 CLI v4 will _always_ use `sap.ui.predefine` calls in bundles, making this option obsolete. +* **Breaking Change:** Removal of the `usePredefineCalls` [bundle option](../pages/Configuration.md#properties). UI5 CLI v4 will _always_ use `sap.ui.predefine` calls in bundles, making this option obsolete. **We do not expect any negative impact** on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration. -You can find a summary of the above at [Configuration: Specification Version 4.0](../pages/Configuration#specification-version-40). +You can find a summary of the above at [Configuration: Specification Version 4.0](../pages/Configuration.md#specification-version-40). ## Migrate Your Code @@ -78,55 +74,49 @@ Non-public `DuplexCollection#byGlobSource` API has been removed. - **Bundling**: The `usePredefineCalls` option has been removed. Bundling now enforces the use of `sap.ui.predefine` instead of function wrappers. -- **Task API**: The `namespace` option has been renamed to `projectNamespace`. For more information, check the documentation for [CustomTasks API](../pages/extensibility/CustomTasks#task-implementation) +- **Task API**: The `namespace` option has been renamed to `projectNamespace`. For more information, check the documentation for [CustomTasks API](../pages/extensibility/CustomTasks.md#task-implementation) - **New Option**: Added a new `async` option for `builder.bundles.bundleDefinition.section`. -::: details Example -```yaml -builder: - bundles: - - bundleDefinition: - name: "app.js - sections: - - mode: require - filters: - - some/app/Component.js - resolve: true - sort: true - async: true -``` - -::: +!!! example + ```yaml + builder: + bundles: + - bundleDefinition: + name: "app.js" + sections: + - mode: require + filters: + - some/app/Component.js + resolve: true + sort: true + async: true + ``` ### Changes to @ui5/project - **Default Workspace Name**: The default `workspaceName` is now `"default"` for API usage. -::: details Example -```js -import {graphFromPackageDependencies} from "@ui5/project/graph"; +!!! example + ```js + import {graphFromPackageDependencies} from "@ui5/project/graph"; -graphFromPackageDependencies({ - /* workspaceName: "default" */ -}); -``` - -::: + graphFromPackageDependencies({ + /* workspaceName: "default" */ + }); + ``` - **Directory Naming**: The `ui5HomeDir` has been renamed to `ui5DataDir` in APIs. -::: details Example -```js -import Resolver from "@ui5/project/ui5Framework/Openui5Resolver"; - -await Resolver.resolveVersion("1.120.15", { - ui5DataDir: "~/.ui5", - cwd: process.cwd() -}); -``` +!!! example + ```js + import Resolver from "@ui5/project/ui5Framework/Openui5Resolver"; -::: + await Resolver.resolveVersion("1.120.15", { + ui5DataDir: "~/.ui5", + cwd: process.cwd() + }); + ``` - **Dependencies**: The `@ui5/builder` is now an optional dependency to the `@ui5/project` @@ -138,7 +128,7 @@ Consumers of the Node.js API that make use of the `ProjectGraph#build` method ne This might be caused by a mismatch of your project's manifest version and your UI5 version. -UI5 CLI v4 enhances the manifest.json with information about the `supportedLocales` (also see [Builder: Generation of Supported Locales](../pages/Builder#generation-of-supported-locales)). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message `TypeError: invalid input` and a failure to process the manifest file. +UI5 CLI v4 enhances the manifest.json with information about the `supportedLocales` (also see [Builder: Generation of Supported Locales](../pages/Builder.md#generation-of-supported-locales)). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message `TypeError: invalid input` and a failure to process the manifest file. UI5 CLI uses the manifest's `_version` property to decide whether the `supportedLocales` can be generated. For UI5 1.71, only versions up to `1.17.0` are supported. See [UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json)](https://sdk.openui5.org/#/topic/be0cf40f61184b358b5faedaec98b2da) for a mapping per manifest version. From 079082df4732bee20c38757347fb05da931d02b2 Mon Sep 17 00:00:00 2001 From: d3xter666 Date: Thu, 2 Oct 2025 10:43:49 +0300 Subject: [PATCH 3/5] fix: Adjust paths --- jsdoc.json | 2 +- packages/documentation/docs/pages/CLI.md | 393 +++++++++++++++++++++++ scripts/generateCliDoc.js | 2 +- 3 files changed, 395 insertions(+), 2 deletions(-) create mode 100644 packages/documentation/docs/pages/CLI.md diff --git a/jsdoc.json b/jsdoc.json index ee0aac5f57..124be7ba83 100644 --- a/jsdoc.json +++ b/jsdoc.json @@ -3,7 +3,7 @@ "allowUnknownTags": false }, "source": { - "include": ["docs/indexJsdoc.md"], + "include": ["packages/documentation/docs/indexJsdoc.md"], "exclude": [ "node_modules/@ui5/builder/lib/lbt/utils/JSTokenizer.js", "node_modules/@ui5/builder/lib/processors/jsdoc/lib/ui5/plugin.js", diff --git a/packages/documentation/docs/pages/CLI.md b/packages/documentation/docs/pages/CLI.md new file mode 100644 index 0000000000..1ab4eef208 --- /dev/null +++ b/packages/documentation/docs/pages/CLI.md @@ -0,0 +1,393 @@ +# UI5 CLI +## Requirements +- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) +- [npm](https://www.npmjs.com/) version v8.0.0 or higher + +## Installation + +Install the CLI using the npm package manager: + +```sh +npm install --global @ui5/cli + +# Verify installation +ui5 --help +``` + +## Usage/Syntax + +` + ui5 [options] +` + +The CLI automatically checks for updates using [update-notifier](https://github.com/yeoman/update-notifier). While this is skipped in CI environments, you might also opt-out manually by following the steps described [here](https://github.com/yeoman/update-notifier/blob/-/readme.md#user-settings). + +## Common options + +These options you can use with each command. + +| Option | Description | Details | +| --- | --- | --- | +| -h, --help | Show help | [boolean] | +| -v, --version | Show version number | [boolean] | +| -c, --config | Path to project configuration file in YAML format | [string] | +| --dependency-definition | Path to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies. | [string] | +| --workspace-config | Path to workspace configuration file in YAML format | [string] | +| -w, --workspace | Name of the workspace configuration to use | [string] [default: "default"] | +| --loglevel, --log-level | Set the logging level | [string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"] | +| --verbose | Enable verbose logging. | [boolean] [default: false] | +| --perf | Enable performance measurements and related logging. | [boolean] [default: false] | +| --silent | Disable all log output. | [boolean] [default: false] | + +## Examples + +Execute command using a static dependency tree instead of resolving node package dependencies +``` +ui5 --dependency-definition /path/to/projectDependencies.yaml +``` +Execute command using a project configuration from custom path +``` +ui5 --config /path/to/ui5.yaml +``` +Execute command using the 'dolphin' workspace of a ui5-workspace.yaml +``` +ui5 --workspace dolphin +``` +Execute command with the maximum log output +``` +ui5 --log-level silly +``` + +## Commands + +### ui5 add + +**Description** + +Add SAPUI5/OpenUI5 framework libraries to the project configuration. + +**Usage** + +` +ui5 add [--development] [--optional] +` + + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| -D, --development, --dev | Add as development dependency | [boolean] [default: false] | +| -O, --optional | Add as optional dependency | [boolean] [default: false] | + +**Positionals** + +| Positional | Description | Details | +| --- | --- | --- | +| framework-libraries | Framework library names | [array] [required] [default: []] | + +**Examples** + +Add the framework libraries sap.ui.core and sap.m as dependencies +``` +ui5 add sap.ui.core sap.m +``` +Add the framework library sap.ui.support as development dependency +``` +ui5 add -D sap.ui.support +``` +Add the framework library themelib_sap_fiori_3 as optional dependency +``` +ui5 add --optional themelib_sap_fiori_3 +``` +### ui5 build + +**Description** + +Build project in current directory + +**Usage** + +` +ui5 build +` + +**Child Commands** + +| Command | Description | +| --- | --- | +| ui5 build jsdoc | Build JSDoc resources | +| ui5 build preload | (default) Build project and create preload bundles | +| ui5 build self-contained | Build project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies | + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| -a, --include-all-dependencies, --all | Include all dependencies in the build result. This is equivalent to '--include-dependency "*"' | [boolean] [default: false] | +| --include-dependency | A list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | +| --include-dependency-regexp | A list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'. | [array] | +| --include-dependency-tree | A list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'. | [array] | +| --exclude-dependency | A list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | +| --exclude-dependency-regexp | A list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'. | [array] | +| --exclude-dependency-tree | A list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list. | [array] | +| --dest | Path of build destination | [string] [default: "./dist"] | +| --clean-dest | If present, clean the destination directory before building | [boolean] [default: false] | +| --create-build-manifest | Store build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds | [boolean] [default: false] | +| --include-task | A list of tasks to be added to the default execution set. This option takes precedence over any excludes. | [array] | +| --exclude-task | A list of tasks to be excluded from the default task execution set | [array] | +| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | +| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | +| --experimental-css-variables | Generate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes | [boolean] [default: false] | +| --output-style | Processes build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style. | [string] [choices: "Default", "Flat", "Namespace"] [default: "Default"] | + + +**Examples** + +Preload build for project without dependencies +``` +ui5 build +``` +Self-contained build for project +``` +ui5 build self-contained +``` +Build project but only apply the minify- and generateComponentPreload tasks +``` +ui5 build --exclude-task=* --include-task=minify generateComponentPreload +``` +Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task +``` +ui5 build --include-task=minify --exclude-task=generateComponentPreload +``` +Preload build with experimental CSS variables artifacts +``` +ui5 build --experimental-css-variables +``` +### ui5 config + +**Description** + +Get and set UI5 CLI configuration options + +**Usage** + +` +ui5 config +` + +**Child Commands** + +| Command | Description | +| --- | --- | +| ui5 config set