From a55ff3dba6186ea62bee57d9c7d6fd65c61a771a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 4 Jan 2026 22:37:57 +0000 Subject: [PATCH 01/16] chore(release): publish - project: devtools 0.0.2-next.2 - project: webpack5 5.0.31-next.2 - project: core 9.0.12-next.0 - project: vite 1.0.4-next.2 --- packages/core/package.json | 2 +- packages/devtools/package.json | 4 ++-- packages/vite/package.json | 2 +- packages/webpack5/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 3a953feb21..0501ba6d81 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/core", - "version": "9.0.11", + "version": "9.0.12-next.0", "description": "A JavaScript library providing an easy to use api for interacting with iOS and Android platform APIs.", "type": "module", "main": "index", diff --git a/packages/devtools/package.json b/packages/devtools/package.json index 80f5456749..c475070360 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/devtools", - "version": "0.0.2-next.1", + "version": "0.0.2-next.2", "private": true, "files": [ "./dist/" @@ -10,6 +10,6 @@ "prepack": "tsc || echo ok" }, "devDependencies": { - "@nativescript/core": "9.0.11-next.2" + "@nativescript/core": "9.0.12-next.0" } } diff --git a/packages/vite/package.json b/packages/vite/package.json index bd76644c3f..f7e035e0ed 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/vite", - "version": "1.0.4-next.1", + "version": "1.0.4-next.2", "description": "Vite for NativeScript", "main": "./index.js", "module": "./index.js", diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 2c6507b128..62aac70267 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.31-next.1", + "version": "5.0.31-next.2", "private": false, "main": "dist/index.js", "files": [ From 62c06f101140550c7a752e8eeb50d1b734f25a4d Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Mon, 5 Jan 2026 12:29:36 -0300 Subject: [PATCH 02/16] fix(webpack): ts-patch transform (#11041) --- .../src/transformers/NativeClass/index.ts | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/packages/webpack5/src/transformers/NativeClass/index.ts b/packages/webpack5/src/transformers/NativeClass/index.ts index 3610190a35..e3f36114f4 100644 --- a/packages/webpack5/src/transformers/NativeClass/index.ts +++ b/packages/webpack5/src/transformers/NativeClass/index.ts @@ -19,7 +19,7 @@ export default function (context: ts.TransformationContext, ...args) { return (sourceFile: ts.SourceFile) => { if (sourceFile.isDeclarationFile) return sourceFile; let mutated = false; - + // Minimal mutable shape type MutableNode = ts.Node & { flags?: ts.NodeFlags; @@ -182,8 +182,8 @@ export default function (context: ts.TransformationContext, ...args) { } function visitNode(node: ts.Node): ts.Node { - // Do not traverse synthesized helper trees; leave them intact - if (((node as MutableNode).flags ?? 0) & ts.NodeFlags.Synthesized ) { + // Do not traverse synthesized helper trees; leave them intact + if (((node as MutableNode).flags ?? 0) & ts.NodeFlags.Synthesized) { return node; } if (ts.isSourceFile(node)) { @@ -223,7 +223,9 @@ export default function (context: ts.TransformationContext, ...args) { } const result: ts.Statement[] = []; for (const statement of statements) { - if (((statement as MutableNode).flags ?? 0) & ts.NodeFlags.Synthesized) { + if ( + ((statement as MutableNode).flags ?? 0) & ts.NodeFlags.Synthesized + ) { result.push(statement); continue; } @@ -282,22 +284,6 @@ export default function (context: ts.TransformationContext, ...args) { } return [changed ? factory.createNodeArray(result) : statements, changed]; } - - - // we detect ts-patch - if (args.length) { - const statements= ts.visitNodes(sourceFile.statements, visitNode) as unknown as ts.Statement[]; - if (!mutated) { - return sourceFile; - } - const updatedSource = factory.updateSourceFile(sourceFile, statements as unknown as ts.Statement[]); - // Do NOT clear or rebind the entire SourceFile here. Doing so can break TS's - // import usage analysis and lead to import elision. The factory/update API - // preserves parents/bindings for original nodes (like imports). We only - // synthesize/bind the newly inserted class replacement statements. - return updatedSource; - } - const updated = ts.visitNode(sourceFile, visitNode) as ts.SourceFile; if (!mutated) return sourceFile; return updated; @@ -339,4 +325,4 @@ function setSynthesizedRangeRecursive(node: ts.Node): void { function setOriginalRecursive(node: ts.Node, original: ts.Node): void { ts.setOriginalNode(node, original); ts.forEachChild(node, (child) => setOriginalRecursive(child, original)); -} \ No newline at end of file +} From f88d3f7f01eae23efffd659dc3afea600b7ac5cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:30:46 +0000 Subject: [PATCH 03/16] ci: build --- nx.json | 2 +- packages/core/package.json | 2 +- packages/devtools/package.json | 4 ++-- packages/vite/package.json | 11 ++++++++++- packages/webpack5/package.json | 14 +++++++++++--- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/nx.json b/nx.json index 89545862b9..43061bbfe3 100644 --- a/nx.json +++ b/nx.json @@ -123,7 +123,7 @@ "useInferencePlugins": false, "defaultBase": "master", "release": { - "projects": ["packages/*", "!packages/ui-mobile-base", "!packages/types-minimal", "!packages/winter-tc"], + "projects": ["packages/*", "!packages/ui-mobile-base", "!packages/types-minimal", "!packages/winter-tc", "!packages/types", "!packages/types-ios", "!packages/types-android"], "projectsRelationship": "independent", "changelog": { "workspaceChangelog": false, diff --git a/packages/core/package.json b/packages/core/package.json index 0501ba6d81..2ac9c3a08c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/core", - "version": "9.0.12-next.0", + "version": "9.0.12-next.1", "description": "A JavaScript library providing an easy to use api for interacting with iOS and Android platform APIs.", "type": "module", "main": "index", diff --git a/packages/devtools/package.json b/packages/devtools/package.json index c475070360..dc5f35adfc 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/devtools", - "version": "0.0.2-next.2", + "version": "0.0.2-next.3", "private": true, "files": [ "./dist/" @@ -10,6 +10,6 @@ "prepack": "tsc || echo ok" }, "devDependencies": { - "@nativescript/core": "9.0.12-next.0" + "@nativescript/core": "9.0.12-next.1" } } diff --git a/packages/vite/package.json b/packages/vite/package.json index f7e035e0ed..09a1231801 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/vite", - "version": "1.0.4-next.2", + "version": "1.0.6-next.0", "description": "Vite for NativeScript", "main": "./index.js", "module": "./index.js", @@ -39,5 +39,14 @@ "devDependencies": { "@types/node": "^24.9.1", "vitest": "^3.2.4" + }, + "homepage": "https://docs.nativescript.org/configuration/vite", + "repository": { + "type": "git", + "url": "https://github.com/NativeScript/NativeScript" + }, + "author": { + "name": "NativeScript", + "email": "oss@nativescript.org" } } diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 62aac70267..b9514ad10f 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.31-next.2", + "version": "5.0.30-next.0", "private": false, "main": "dist/index.js", "files": [ @@ -12,8 +12,7 @@ "license": "Apache-2.0", "scripts": { "test": "jest", - "copy-stubs": "mkdirp dist/stubs && cp -R src/stubs/* dist/stubs", - "prepack": "npm run test && npm run build && npm run copy-stubs && chmod +x dist/bin/index.js" + "copy-stubs": "mkdirp dist/stubs && cp -R src/stubs/* dist/stubs" }, "dependencies": { "@babel/core": "^7.0.0", @@ -79,5 +78,14 @@ "nativescript-vue-template-compiler": { "optional": true } + }, + "homepage": "https://docs.nativescript.org/configuration/webpack", + "repository": { + "type": "git", + "url": "https://github.com/NativeScript/NativeScript" + }, + "author": { + "name": "NativeScript", + "email": "oss@nativescript.org" } } From df9cbde1c9fd6d9cc3af08f1a6e8c2808b94ce6c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 01:18:37 +0000 Subject: [PATCH 04/16] chore(release): publish - project: devtools 0.0.2-next.4 - project: webpack5 5.0.30-next.1 - project: core 9.0.12-next.2 - project: vite 1.0.6-next.1 --- packages/core/package.json | 2 +- packages/devtools/package.json | 4 ++-- packages/vite/package.json | 2 +- packages/webpack5/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 2ac9c3a08c..b853ee7123 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/core", - "version": "9.0.12-next.1", + "version": "9.0.12-next.2", "description": "A JavaScript library providing an easy to use api for interacting with iOS and Android platform APIs.", "type": "module", "main": "index", diff --git a/packages/devtools/package.json b/packages/devtools/package.json index dc5f35adfc..2fc13e6fb8 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/devtools", - "version": "0.0.2-next.3", + "version": "0.0.2-next.4", "private": true, "files": [ "./dist/" @@ -10,6 +10,6 @@ "prepack": "tsc || echo ok" }, "devDependencies": { - "@nativescript/core": "9.0.12-next.1" + "@nativescript/core": "9.0.12-next.2" } } diff --git a/packages/vite/package.json b/packages/vite/package.json index 09a1231801..0b1843baa4 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/vite", - "version": "1.0.6-next.0", + "version": "1.0.6-next.1", "description": "Vite for NativeScript", "main": "./index.js", "module": "./index.js", diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index b9514ad10f..35c45e54bb 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.30-next.0", + "version": "5.0.30-next.1", "private": false, "main": "dist/index.js", "files": [ From 6c10989d367394eac793033f69246b175d00b728 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 5 Jan 2026 17:46:21 -0800 Subject: [PATCH 05/16] release(webpack): 5.0.30 --- packages/webpack5/CHANGELOG.md | 10 ++++++++++ packages/webpack5/package.json | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/webpack5/CHANGELOG.md b/packages/webpack5/CHANGELOG.md index a2442a47ca..ef17990ac6 100644 --- a/packages/webpack5/CHANGELOG.md +++ b/packages/webpack5/CHANGELOG.md @@ -1,3 +1,13 @@ +## 5.0.30 (2026-01-06) + +### 🩹 Fixes + +- **webpack:** ts-patch transform ([#11041](https://github.com/NativeScript/NativeScript/pull/11041)) + +### ❤️ Thank You + +- Eduardo Speroni @edusperoni + ## 5.0.29 (2025-12-19) ### 🩹 Fixes diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 35c45e54bb..e96b979b04 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.30-next.1", + "version": "5.0.30", "private": false, "main": "dist/index.js", "files": [ From 0338d2b788deb1a86818b3cd2f47431342d0f07d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 01:49:07 +0000 Subject: [PATCH 06/16] chore(release): publish - project: webpack5 5.0.31-next.0 --- packages/webpack5/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index e96b979b04..12448d572a 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.30", + "version": "5.0.31-next.0", "private": false, "main": "dist/index.js", "files": [ From 2c2026b31b0d3a70e6e5982c19260b7119875a3f Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 5 Jan 2026 19:06:22 -0800 Subject: [PATCH 07/16] chore: workflow next affected --- .github/workflows/secure_nx_release.yml | 76 ++++++++++++-- packages/vite/README.md | 28 ++++- packages/webpack5/README.md | 130 ++++++++++++++++++------ packages/webpack5/package.json | 14 ++- packages/webpack5/project.json | 10 ++ 5 files changed, 213 insertions(+), 45 deletions(-) diff --git a/.github/workflows/secure_nx_release.yml b/.github/workflows/secure_nx_release.yml index 8fedd6f361..35b7fe5e8f 100644 --- a/.github/workflows/secure_nx_release.yml +++ b/.github/workflows/secure_nx_release.yml @@ -251,8 +251,8 @@ jobs: fi # PUBLISH: OIDC trusted publishing (default). Avoid any lingering token auth. - - name: nx release publish (OIDC) - if: ${{ steps.ctx.outputs.mode != 'tag' && steps.ctx.outputs.dry_run != 'true' && vars.USE_NPM_TOKEN != 'true' && (steps.ctx.outputs.mode != 'main' || steps.affected.outputs.count != '0') }} + - name: nx release publish (OIDC, main) + if: ${{ steps.ctx.outputs.mode == 'main' && steps.affected.outputs.count != '0' && vars.USE_NPM_TOKEN != 'true' }} shell: bash env: NPM_CONFIG_PROVENANCE: true @@ -266,11 +266,39 @@ jobs: fi npx nx release publish \ + --projects "${{ steps.affected.outputs.projects }}" \ + --tag "${{ steps.ctx.outputs.dist_tag }}" \ + --access public \ + --verbose + + - name: nx release publish (OIDC, dispatch) + if: ${{ steps.ctx.outputs.mode == 'dispatch' && steps.ctx.outputs.dry_run != 'true' && vars.USE_NPM_TOKEN != 'true' }} + shell: bash + env: + NPM_CONFIG_PROVENANCE: true + NODE_AUTH_TOKEN: "" + run: | + set -euo pipefail + unset NODE_AUTH_TOKEN + rm -f ~/.npmrc || true + if [[ -n "${NPM_CONFIG_USERCONFIG:-}" ]]; then + rm -f "$NPM_CONFIG_USERCONFIG" || true + fi + + scope="${{ steps.ctx.outputs.scope }}" + if [[ -n "$scope" ]]; then + projects_arg="--projects $scope" + else + projects_arg="" + fi + + npx nx release publish \ + $projects_arg \ --tag "${{ steps.ctx.outputs.dist_tag }}" \ --access public \ --verbose - - name: nx release publish (OIDC, dry-run) + - name: nx release publish (OIDC, dispatch dry-run) if: ${{ steps.ctx.outputs.mode == 'dispatch' && inputs.dry-run && vars.USE_NPM_TOKEN != 'true' }} shell: bash env: @@ -284,28 +312,60 @@ jobs: rm -f "$NPM_CONFIG_USERCONFIG" || true fi + scope="${{ steps.ctx.outputs.scope }}" + if [[ -n "$scope" ]]; then + projects_arg="--projects $scope" + else + projects_arg="" + fi + npx nx release publish \ + $projects_arg \ --tag "${{ steps.ctx.outputs.dist_tag }}" \ --access public \ --verbose \ --dry-run # PUBLISH: token fallback (only when explicitly enabled via repo/environment variable USE_NPM_TOKEN=true). - - name: nx release publish (token) - if: ${{ steps.ctx.outputs.mode != 'tag' && steps.ctx.outputs.dry_run != 'true' && vars.USE_NPM_TOKEN == 'true' && (steps.ctx.outputs.mode != 'main' || steps.affected.outputs.count != '0') }} + - name: nx release publish (token, main) + if: ${{ steps.ctx.outputs.mode == 'main' && steps.affected.outputs.count != '0' && vars.USE_NPM_TOKEN == 'true' }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + NPM_CONFIG_PROVENANCE: true + run: | + npx nx release publish --projects "${{ steps.affected.outputs.projects }}" --tag "${{ steps.ctx.outputs.dist_tag }}" --access public --verbose + + - name: nx release publish (token, dispatch) + if: ${{ steps.ctx.outputs.mode == 'dispatch' && steps.ctx.outputs.dry_run != 'true' && vars.USE_NPM_TOKEN == 'true' }} + shell: bash env: NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} NPM_CONFIG_PROVENANCE: true run: | - npx nx release publish --tag "${{ steps.ctx.outputs.dist_tag }}" --access public --verbose + set -euo pipefail + scope="${{ steps.ctx.outputs.scope }}" + if [[ -n "$scope" ]]; then + projects_arg="--projects $scope" + else + projects_arg="" + fi + npx nx release publish $projects_arg --tag "${{ steps.ctx.outputs.dist_tag }}" --access public --verbose - - name: nx release publish (token, dry-run) + - name: nx release publish (token, dispatch dry-run) if: ${{ steps.ctx.outputs.mode == 'dispatch' && inputs.dry-run && vars.USE_NPM_TOKEN == 'true' }} + shell: bash env: NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} NPM_CONFIG_PROVENANCE: true run: | - npx nx release publish --tag "${{ steps.ctx.outputs.dist_tag }}" --access public --verbose --dry-run + set -euo pipefail + scope="${{ steps.ctx.outputs.scope }}" + if [[ -n "$scope" ]]; then + projects_arg="--projects $scope" + else + projects_arg="" + fi + npx nx release publish $projects_arg --tag "${{ steps.ctx.outputs.dist_tag }}" --access public --verbose --dry-run # Tag-triggered publishing: publish the single package referenced by the tag. - name: Build project before publish (tag) diff --git a/packages/vite/README.md b/packages/vite/README.md index 968f906c5c..67ed0cb366 100644 --- a/packages/vite/README.md +++ b/packages/vite/README.md @@ -1,6 +1,28 @@ -# @nativescript/vite - -Vite bundler integration for NativeScript apps. Provides a minimal setup for fast dev and build. +

+ + NativeScript + +

+ +

@nativescript/vite

+ +

+ Vite integration for NativeScript apps. +

+ +

+ npm version + license +

+ +

+ Documentation · + Environment Setup · + Contribute · + Community +

+ +--- ## Prerequisites diff --git a/packages/webpack5/README.md b/packages/webpack5/README.md index 73e509ce2f..7324ff08d1 100644 --- a/packages/webpack5/README.md +++ b/packages/webpack5/README.md @@ -1,30 +1,100 @@ -@nativescript/webpack rewrite - -The rewrite allows us to simplify things, and introduce some breaking changes. -Listing them here, so we can keep track of them - will be in the merge commit, and the release notes once we are ready. - -BREAKING CHANGES: - - `package.json` main should now use a relative path to the package.json instead of the app directory - - For example (given we have a `src` directory where our app is): - - `"main": "app.js"` becomes `"main": "src/app.js"` **OR** `"main": "src/app.ts"` (whether using JS or TS) - - This simplifies things, and will allow ctrl/cmd + clicking on the filename in some editors. - - - `postinstall` scripts have been removed. - - The configuration will not need to change in the user projects between updates. - - For existing projects we will provide an easy upgrade path, through `ns migrate` and a binary in the package. - - For new projects `ns create` should create the config file by invoking a binary in the package. - - - removed resolutions for short imports - use full imports instead. - - For example: - ``` - import http from 'http' - // becomes - import { http } from '@nativescript/core' - ``` +

+ + NativeScript + +

+ +

@nativescript/webpack

+ +

+ Webpack configuration for NativeScript apps. +

+ +

+ npm version + license + downloads +

+ +

+ Documentation · + Environment Setup · + Contribute · + Community +

+ +--- + +All NativeScript applications are bundled using webpack. This package provides the required configuration to build NativeScript apps with flexibility to customize as needed. + +## 📦 Installation + +```bash +npm install @nativescript/webpack --save-dev +``` + +## 🚀 Quick Start + +All new projects come with a base `webpack.config.js` that's pre-configured: + +```js +const webpack = require('@nativescript/webpack') + +module.exports = (env) => { + webpack.init(env) + + // Learn how to customize: + // https://docs.nativescript.org/webpack + + return webpack.resolveConfig() +} +``` + +## ✨ Features + +- **Auto-discovery**: Automatically detects your project type (TypeScript, Angular, Vue, React, Svelte) +- **Hot Module Replacement**: HMR enabled by default for faster development +- **DotEnv Support**: Built-in support for `.env` files to manage environment variables +- **Bundle Analysis**: Generate bundle reports with `--env.report` +- **Production Optimization**: Minification with Terser in production mode + +## 🔧 Global Variables + +Useful globally available variables in your app: + +| Variable | Description | +|----------|-------------| +| `__DEV__` | `true` when building in development mode | +| `global.isAndroid` / `__ANDROID__` | `true` when platform is Android | +| `global.isIOS` / `__IOS__` | `true` when platform is iOS | +| `global.isVisionOS` / `__VISIONOS__` | `true` when platform is visionOS | +| `global.__APPLE__` | `true` when platform is iOS or visionOS | + +## 📚 API + +### Core Methods + +| Method | Description | +|--------|-------------| +| `webpack.init(env)` | Initialize the internal env object (required) | +| `webpack.chainWebpack(chainFn)` | Add chain functions to modify config | +| `webpack.mergeWebpack(obj)` | Merge objects into the final config | +| `webpack.resolveConfig()` | Resolve the final webpack configuration | + +## 🎛️ CLI Flags + +| Flag | Description | +|------|-------------| +| `--no-hmr` | Disable Hot Module Replacement | +| `--env.production` | Enable production mode with minification | +| `--env.report` | Generate bundle analysis report | +| `--env.verbose` | Print verbose logs and internal config | +| `--env.e2e` | Enable E2E mode (enables `testID` property) | + +## 📖 Documentation + +For complete documentation including configuration examples, visit the [webpack configuration guide](https://docs.nativescript.org/configuration/webpack). + +## 📄 License + +[MIT licensed](https://github.com/NativeScript/NativeScript/blob/main/LICENSE). diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 12448d572a..834eaaa2b0 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -85,7 +85,13 @@ "url": "https://github.com/NativeScript/NativeScript" }, "author": { - "name": "NativeScript", - "email": "oss@nativescript.org" - } -} + "name": "Igor Randjelovic", + "email": "rigor789@gmail.com" + }, + "contributors": [ + { + "name": "NativeScript", + "email": "oss@nativescript.org" + } + ] +} \ No newline at end of file diff --git a/packages/webpack5/project.json b/packages/webpack5/project.json index 81e44bac31..976ba26943 100644 --- a/packages/webpack5/project.json +++ b/packages/webpack5/project.json @@ -21,6 +21,16 @@ "rootDir": "{projectRoot}/src", "main": "{projectRoot}/src/index.ts", "assets": [ + { + "input": "{projectRoot}", + "glob": "README.md", + "output": ".." + }, + { + "input": "{workspaceRoot}", + "glob": "LICENSE", + "output": ".." + }, { "input": "{projectRoot}/src/stubs", "glob": "*.{js,mjs}", From 4812ae89ba9bf9723402dd840866c056aab30112 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 03:07:45 +0000 Subject: [PATCH 08/16] chore(release): publish - project: webpack5 5.0.31-next.1 - project: vite 1.0.6-next.2 --- packages/vite/package.json | 2 +- packages/webpack5/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/vite/package.json b/packages/vite/package.json index 0b1843baa4..71c5f62f81 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/vite", - "version": "1.0.6-next.1", + "version": "1.0.6-next.2", "description": "Vite for NativeScript", "main": "./index.js", "module": "./index.js", diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 834eaaa2b0..ae78625e01 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.31-next.0", + "version": "5.0.31-next.1", "private": false, "main": "dist/index.js", "files": [ @@ -94,4 +94,4 @@ "email": "oss@nativescript.org" } ] -} \ No newline at end of file +} From 41b55aa469d8fd0b24e8bd86849fb6aef421e45c Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 5 Jan 2026 19:19:38 -0800 Subject: [PATCH 09/16] release(webpack): 5.0.31 --- packages/webpack5/CHANGELOG.md | 4 ++++ packages/webpack5/package.json | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/webpack5/CHANGELOG.md b/packages/webpack5/CHANGELOG.md index ef17990ac6..73e3848bde 100644 --- a/packages/webpack5/CHANGELOG.md +++ b/packages/webpack5/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.31 (2026-01-06) + +- LICENSE and README.md are now included in the package assets. + ## 5.0.30 (2026-01-06) ### 🩹 Fixes diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index ae78625e01..99b3bb919f 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.31-next.1", + "version": "5.0.31", "private": false, "main": "dist/index.js", "files": [ @@ -93,5 +93,13 @@ "name": "NativeScript", "email": "oss@nativescript.org" } + ], + "keywords": [ + "NativeScript", + "JavaScript", + "Android", + "iOS", + "TypeScript", + "webpack" ] } From 0e4628d8e24eea9aac616b315e00dcadcf7dea14 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 03:23:28 +0000 Subject: [PATCH 10/16] chore(release): publish - project: webpack5 5.0.32-next.0 --- packages/webpack5/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 99b3bb919f..3634a96518 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.31", + "version": "5.0.32-next.0", "private": false, "main": "dist/index.js", "files": [ From 08f6d18808cf5bae20f477fe4afed419e219712c Mon Sep 17 00:00:00 2001 From: Qazi Omair Ahmed Date: Mon, 5 Jan 2026 20:48:36 -0800 Subject: [PATCH 11/16] feat(slider): add linear-gradient support for track background (#11015) --- apps/automated/src/ui/slider/slider-tests.ts | 63 +++++++++++++ apps/toolbox/nativescript.config.ts | 4 +- apps/toolbox/src/app.css | 29 ++++++ apps/toolbox/src/main-page.xml | 1 + apps/toolbox/src/pages/sliders.ts | 14 +++ apps/toolbox/src/pages/sliders.xml | 48 ++++++++++ package-lock.json | 78 +++++++-------- packages/core/ui/slider/index.android.ts | 87 ++++++++++++++++- packages/core/ui/slider/index.ios.ts | 99 +++++++++++++++++++- 9 files changed, 375 insertions(+), 48 deletions(-) create mode 100644 apps/toolbox/src/pages/sliders.ts create mode 100644 apps/toolbox/src/pages/sliders.xml diff --git a/apps/automated/src/ui/slider/slider-tests.ts b/apps/automated/src/ui/slider/slider-tests.ts index 0fded42417..df8254add2 100644 --- a/apps/automated/src/ui/slider/slider-tests.ts +++ b/apps/automated/src/ui/slider/slider-tests.ts @@ -6,6 +6,8 @@ import { BindingOptions, View, Page, Observable, EventData, PropertyChangeData, import { Slider } from '@nativescript/core/ui/slider'; // << article-require-slider +import { LinearGradient } from '@nativescript/core/ui/styling/linear-gradient'; + // ### Binding the Progress and Slider value properties to a observable view-model property. // >> article-binding-slider-properties @@ -121,6 +123,67 @@ export function test_set_backgroundColor() { } } +export function test_set_linear_gradient_background() { + const slider = new Slider(); + + // Create a linear gradient programmatically + const gradient = new LinearGradient(); + gradient.angle = Math.PI / 2; // 90 degrees (left to right) + gradient.colorStops = [{ color: new Color('red') }, { color: new Color('green') }, { color: new Color('blue') }]; + + function testAction(views: Array) { + // Set the gradient via the style's backgroundImage + slider.style.backgroundImage = gradient; + + // Verify the slider was created and the gradient was applied + TKUnit.assertNotNull(slider, 'slider should not be null'); + + if (__APPLE__) { + // On iOS, verify that track images were set + const minTrackImage = slider.ios.minimumTrackImageForState(UIControlState.Normal); + const maxTrackImage = slider.ios.maximumTrackImageForState(UIControlState.Normal); + TKUnit.assertNotNull(minTrackImage, 'minimumTrackImage should be set after applying gradient'); + TKUnit.assertNotNull(maxTrackImage, 'maximumTrackImage should be set after applying gradient'); + } else if (__ANDROID__) { + // On Android, verify the progress drawable was modified + const progressDrawable = slider.android.getProgressDrawable(); + TKUnit.assertNotNull(progressDrawable, 'progressDrawable should not be null'); + } + } + + helper.buildUIAndRunTest(slider, testAction); +} + +export function test_set_linear_gradient_with_stops() { + const slider = new Slider(); + + // Create a linear gradient with explicit color stops + const gradient = new LinearGradient(); + gradient.angle = 0; // 0 degrees (bottom to top) + gradient.colorStops = [ + { color: new Color('orangered'), offset: { unit: '%', value: 0 } }, + { color: new Color('green'), offset: { unit: '%', value: 0.5 } }, + { color: new Color('lightblue'), offset: { unit: '%', value: 1 } }, + ]; + + function testAction(views: Array) { + slider.style.backgroundImage = gradient; + + // Verify the slider was created + TKUnit.assertNotNull(slider, 'slider should not be null'); + + if (__APPLE__) { + const minTrackImage = slider.ios.minimumTrackImageForState(UIControlState.Normal); + TKUnit.assertNotNull(minTrackImage, 'minimumTrackImage should be set after applying gradient with stops'); + } else if (__ANDROID__) { + const progressDrawable = slider.android.getProgressDrawable(); + TKUnit.assertNotNull(progressDrawable, 'progressDrawable should not be null'); + } + } + + helper.buildUIAndRunTest(slider, testAction); +} + export function test_default_TNS_values() { const slider = new Slider(); TKUnit.assertEqual(slider.value, 0, 'Default slider.value'); diff --git a/apps/toolbox/nativescript.config.ts b/apps/toolbox/nativescript.config.ts index 5eb9475ee3..6eeb31439f 100644 --- a/apps/toolbox/nativescript.config.ts +++ b/apps/toolbox/nativescript.config.ts @@ -12,6 +12,6 @@ export default { packageManager: 'npm', additionalPathsToClean: ['.ns-vite-build'], }, - bundler: 'vite', - bundlerConfigPath: 'vite.config.ts', + // bundler: 'vite', + // bundlerConfigPath: 'vite.config.ts', } as NativeScriptConfig; diff --git a/apps/toolbox/src/app.css b/apps/toolbox/src/app.css index 82f893d56b..21ad68b04e 100644 --- a/apps/toolbox/src/app.css +++ b/apps/toolbox/src/app.css @@ -339,3 +339,32 @@ Button { .text-center { text-align: center; } + +/* Sliders Demo Page Styles */ +.sliders-demo-page Slider.gradient-slider { + background: linear-gradient(to right, orangered, green, lightblue); +} + +.sliders-demo-page Slider.rainbow-slider { + background: linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet); +} + +.sliders-demo-page Slider.two-color-slider { + background: linear-gradient(to right, #ff6b6b, #4ecdc4); +} + +.sliders-demo-page Slider.sunset-slider { + background: linear-gradient(to right, #f12711, #f5af19); +} + +.sliders-demo-page Slider.ocean-slider { + background: linear-gradient(to right, #2193b0, #6dd5ed); +} + +.sliders-demo-page Slider.purple-slider { + background: linear-gradient(to right, #8e2de2, #4a00e0); +} + +.sliders-demo-page Slider.stops-slider { + background: linear-gradient(to right, red 0%, yellow 50%, green 100%); +} diff --git a/apps/toolbox/src/main-page.xml b/apps/toolbox/src/main-page.xml index 3c72d0b392..43efde9f2c 100644 --- a/apps/toolbox/src/main-page.xml +++ b/apps/toolbox/src/main-page.xml @@ -22,6 +22,7 @@