From dc1e2d761ea3d9f6b9b0e8e2f4b7d2ac75aa730d Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 18 Aug 2025 22:15:52 -0700 Subject: [PATCH 1/5] chore: update to cli 8.9.3 latest --- package-lock.json | 477 +++++++++------------------------------------- package.json | 14 +- 2 files changed, 93 insertions(+), 398 deletions(-) diff --git a/package-lock.json b/package-lock.json index dfa5afc5a0..45d6a34e34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,7 +65,7 @@ "lint-staged": "^15.2.0", "loader-utils": "^2.0.0 || ^3.0.0", "module-alias": "^2.2.2", - "nativescript": "~8.9.0", + "nativescript": "^8.9.3", "nativescript-typedoc-theme": "1.1.0", "nx": "21.3.7", "parse-css": "git+https://github.com/tabatkins/parse-css.git", @@ -11019,22 +11019,6 @@ "node": "*" } }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/byline": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", @@ -11799,17 +11783,17 @@ "license": "MIT" }, "node_modules/color": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.0.tgz", - "integrity": "sha512-16BlyiuyLq3MLxpRWyOTiWsO3ii/eLQLJUQXBSNcxMBBSnyt1ee9YUdaozQp03ifwm5woztEZGDbk9RGVuCsdw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^3.0.1", - "color-string": "^2.0.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, "engines": { - "node": ">=18" + "node": ">=12.5.0" } }, "node_modules/color-convert": { @@ -11830,50 +11814,35 @@ "license": "MIT" }, "node_modules/color-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.0.1.tgz", - "integrity": "sha512-5z9FbYTZPAo8iKsNEqRNv+OlpBbDcoE+SY9GjLfDUHEfcNNV7tS9eSAlFHEaub/r5tBL9LtskAeq1l9SaoZ5tQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-string/node_modules/color-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", - "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "node_modules/color/node_modules/color-convert": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.0.1.tgz", - "integrity": "sha512-5kQah2eolfQV7HCrxtsBBArPfT5dwaKYMCXeMQsdRO7ihTO/cuNLGjd50ITCDn+ZU/YbS0Go64SjP9154eopxg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=14.6" + "node": ">=7.0.0" } }, "node_modules/color/node_modules/color-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", - "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", @@ -12712,36 +12681,6 @@ "node": ">=0.10.0" } }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -15981,41 +15920,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -20451,9 +20355,9 @@ } }, "node_modules/nativescript": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/nativescript/-/nativescript-8.9.0.tgz", - "integrity": "sha512-9p8yGTqLeHpyI7adXBcuiqTZpRFXYeCp7QS34fKbgWOUePikt7svC6KI1HdNHKbZObMnqE3s2lqWlMFkxT++2Q==", + "version": "8.9.3", + "resolved": "https://registry.npmjs.org/nativescript/-/nativescript-8.9.3.tgz", + "integrity": "sha512-vHCaQfb6oxLM/gUOWyXuIMj+DMUyugqJeevse19ckyIWnwdvz9yAmRoGOLRi0xAInS8SVVOlIAmkyle5p0qKOg==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -20467,12 +20371,12 @@ "archiver": "^7.0.1", "axios": "1.7.9", "byline": "5.0.0", - "chalk": "^5.4.1", + "chalk": "4.1.2", "chokidar": "4.0.3", "cli-table3": "0.6.5", - "color": "5.0.0", + "color": "4.2.3", "convert-source-map": "2.0.0", - "detect-newline": "4.0.1", + "detect-newline": "3.1.0", "email-validator": "2.0.4", "esprima": "4.0.1", "font-finder": "1.1.0", @@ -20489,8 +20393,8 @@ "mkdirp": "3.0.1", "mute-stream": "2.0.0", "nativescript-dev-xcode": "0.8.1", - "open": "10.1.0", - "ora": "8.2.0", + "open": "8.4.2", + "ora": "5.4.1", "pacote": "21.0.0", "pbxproj-dom": "1.2.0", "plist": "3.1.0", @@ -20525,7 +20429,7 @@ "tns": "bin/tns" }, "engines": { - "node": ">=22.12.0" + "node": ">=20.0.0" }, "optionalDependencies": { "fsevents": "*" @@ -20607,27 +20511,34 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/nativescript/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/nativescript/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/nativescript/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -20649,60 +20560,25 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/nativescript/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "node_modules/nativescript/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nativescript/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nativescript/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/nativescript/node_modules/detect-newline": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", - "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", + "node_modules/nativescript/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, "node_modules/nativescript/node_modules/glob": { "version": "11.0.1", @@ -20728,46 +20604,14 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nativescript/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nativescript/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nativescript/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "node_modules/nativescript/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/nativescript/node_modules/jackspeak": { @@ -20786,36 +20630,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nativescript/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nativescript/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/nativescript/node_modules/lru-cache": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", @@ -20868,83 +20682,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/nativescript/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nativescript/node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nativescript/node_modules/ora": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", - "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^5.0.0", - "cli-spinners": "^2.9.2", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nativescript/node_modules/ora/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/nativescript/node_modules/path-scurry": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", @@ -20976,23 +20713,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/nativescript/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/nativescript/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -21006,33 +20726,17 @@ "node": ">=10" } }, - "node_modules/nativescript/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nativescript/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/nativescript/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/nativescript/node_modules/typescript": { @@ -24321,19 +24025,6 @@ "dev": true, "license": "MIT" }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -24771,6 +24462,23 @@ "plist": "^3.0.5" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "license": "MIT" + }, "node_modules/simple-update-notifier": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", @@ -25123,19 +24831,6 @@ "dev": true, "license": "MIT" }, - "node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/stream-buffers": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", diff --git a/package.json b/package.json index 56d36353f8..124261f962 100644 --- a/package.json +++ b/package.json @@ -61,17 +61,18 @@ "eslint": "~8.57.0", "eslint-config-prettier": "^10.0.0", "fork-ts-checker-webpack-plugin": "^7.0.0", - "form-data": ">=4.0.4", + "form-data": ">=4.0.4", "gonzales": "^1.0.7", "husky": "^9.0.0", "jest": "30.0.5", "jest-environment-jsdom": "30.0.5", + "jest-util": "30.0.5", "jiti": "2.4.2", "jsdom": "~22.1.0", "lint-staged": "^15.2.0", "loader-utils": "^2.0.0 || ^3.0.0", "module-alias": "^2.2.2", - "nativescript": "~8.9.0", + "nativescript": "^8.9.3", "nativescript-typedoc-theme": "1.1.0", "nx": "21.3.7", "parse-css": "git+https://github.com/tabatkins/parse-css.git", @@ -101,12 +102,11 @@ "webpack-cli": "^4.0.0", "webpack-merge": "^5.0.0", "webpack-virtual-modules": "^0.4.0", - "zx": "^8.3.0", - "jest-util": "30.0.5" + "zx": "^8.3.0" + }, + "overrides": { + "form-data": ">=4.0.4" }, - "overrides": { - "form-data": ">=4.0.4" - }, "lint-staged": { "**/*.{js,ts,css,scss,json,html}": [ "npx prettier --write" From 226dc85efb6cb7e8cde39375c740cec501334b7c Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 18 Aug 2025 22:17:04 -0700 Subject: [PATCH 2/5] feat(tabs): iconSource support for sys:// and font:// icons closes https://github.com/NativeScript/NativeScript/issues/10729 --- packages/core/image-source/index.d.ts | 4 ++-- packages/core/ui/tab-view/index.ios.ts | 26 +++++++++++++++++--------- packages/core/utils/common.ts | 13 +++++++++---- packages/core/utils/index.d.ts | 6 ++++++ 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/packages/core/image-source/index.d.ts b/packages/core/image-source/index.d.ts index 5394b68314..95d086d474 100644 --- a/packages/core/image-source/index.d.ts +++ b/packages/core/image-source/index.d.ts @@ -65,13 +65,13 @@ export class ImageSource { * Loads this instance from the specified system image name. * @param name the name of the system image */ - static fromSystemImageSync(name: string, instance: ImageBase): ImageSource; + static fromSystemImageSync(name: string, instance?: ImageBase): ImageSource; /** * Loads this instance from the specified system image name asynchronously. * @param name the name of the system image */ - static fromSystemImage(name: string, instance: ImageBase): Promise; + static fromSystemImage(name: string, instance?: ImageBase): Promise; /** * Loads this instance from the specified file. diff --git a/packages/core/ui/tab-view/index.ios.ts b/packages/core/ui/tab-view/index.ios.ts index 5da4665dd6..e23b06cd2b 100644 --- a/packages/core/ui/tab-view/index.ios.ts +++ b/packages/core/ui/tab-view/index.ios.ts @@ -12,7 +12,8 @@ import { CoreTypes } from '../../core-types'; import { ImageSource } from '../../image-source'; import { profile } from '../../profiling'; import { Frame } from '../frame'; -import { layout } from '../../utils'; +import { layout } from '../../utils/layout-helper'; +import { isFontIconURI, isSystemURI, SYSTEM_PREFIX } from '../../utils/common'; import { SDK_VERSION } from '../../utils/constants'; import { Device } from '../../platform'; export * from './tab-view-common'; @@ -239,7 +240,7 @@ export class TabViewItem extends TabViewItemBase { const parent = this.parent; const controller = this.__controller; if (parent && controller) { - const icon = parent._getIcon(this.iconSource); + const icon = parent._getIcon(this); const index = parent.items.indexOf(this); const title = getTransformedText(this.title, this.style.textTransform); @@ -456,7 +457,7 @@ export class TabView extends TabViewBase { items.forEach((item, i) => { const controller = this.getViewController(item); - const icon = this._getIcon(item.iconSource); + const icon = this._getIcon(item); const tabBarItem = UITabBarItem.alloc().initWithTitleImageTag(item.title || '', icon, i); updateTitleAndIconPositions(item, tabBarItem, controller); @@ -492,20 +493,27 @@ export class TabView extends TabViewBase { } } - public _getIcon(iconSource: string): UIImage { - if (!iconSource) { + public _getIcon(item: TabViewItem): UIImage { + if (!item || !item.iconSource) { return null; } - let image: UIImage = this._iconsCache[iconSource]; + let image: UIImage = this._iconsCache[item.iconSource]; if (!image) { - const is = ImageSource.fromFileOrResourceSync(iconSource); + let is: ImageSource; + if (isSystemURI(item.iconSource)) { + is = ImageSource.fromSystemImageSync(item.iconSource.slice(SYSTEM_PREFIX.length)); + } else if (isFontIconURI(item.iconSource)) { + is = ImageSource.fromFontIconCodeSync(item.iconSource, item.style.fontInternal, item.style.color); + } else { + is = ImageSource.fromFileOrResourceSync(item.iconSource); + } if (is && is.ios) { const originalRenderedImage = is.ios.imageWithRenderingMode(this._getIconRenderingMode()); - this._iconsCache[iconSource] = originalRenderedImage; + this._iconsCache[item.iconSource] = originalRenderedImage; image = originalRenderedImage; } else { - traceMissingIcon(iconSource); + traceMissingIcon(item.iconSource); } } diff --git a/packages/core/utils/common.ts b/packages/core/utils/common.ts index 2f8f46379d..9f2aef35c6 100644 --- a/packages/core/utils/common.ts +++ b/packages/core/utils/common.ts @@ -7,9 +7,10 @@ import { GC } from './index'; export * from './mainthread-helper'; export * from './macrotask-scheduler'; +export const FILE_PREFIX = 'file:///'; +export const FONT_PREFIX = 'font://'; export const RESOURCE_PREFIX = 'res://'; export const SYSTEM_PREFIX = 'sys://'; -export const FILE_PREFIX = 'file:///'; export function escapeRegexSymbols(source: string): string { const escapeRegex = /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g; @@ -85,10 +86,14 @@ export function isFontIconURI(uri: string): boolean { if (!types.isString(uri)) { return false; } + return uri.trim().startsWith(FONT_PREFIX); +} - const firstSegment = uri.trim().split('//')[0]; - - return firstSegment && firstSegment.indexOf('font:') === 0; +export function isSystemURI(uri: string): boolean { + if (!types.isString(uri)) { + return false; + } + return uri.trim().startsWith(SYSTEM_PREFIX); } export function isDataURI(uri: string): boolean { diff --git a/packages/core/utils/index.d.ts b/packages/core/utils/index.d.ts index 79389d3977..114258ac1d 100644 --- a/packages/core/utils/index.d.ts +++ b/packages/core/utils/index.d.ts @@ -87,6 +87,12 @@ export function mainThreadify(func: Function): (...args: any[]) => void; */ export function isFontIconURI(uri: string): boolean; +/** + * Returns true if the specified URI is a system URI like "sys://...". + * @param uri The URI. + */ +export function isSystemURI(uri: string): boolean; + /** * Returns true if the specified path points to a resource or local file. * @param path The path. From 6a8b92c1a19649a6527047873278fe9639d5b252 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 19 Aug 2025 13:49:39 -0700 Subject: [PATCH 3/5] feat(tabs): allow iconFontFamily for font icons in iconSource --- packages/core/ui/styling/style/index.ts | 1 + packages/core/ui/tab-view/index.android.ts | 31 ++++++++++++++------ packages/core/ui/tab-view/index.ios.ts | 13 ++++++-- packages/core/ui/tab-view/tab-view-common.ts | 7 +++++ 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/packages/core/ui/styling/style/index.ts b/packages/core/ui/styling/style/index.ts index 8002a42861..76fa3cf002 100644 --- a/packages/core/ui/styling/style/index.ts +++ b/packages/core/ui/styling/style/index.ts @@ -106,6 +106,7 @@ export class Style extends Observable { } public fontInternal: Font; + public iconFontFamily: string; /** * This property ensures inheritance of a11y scale among views. */ diff --git a/packages/core/ui/tab-view/index.android.ts b/packages/core/ui/tab-view/index.android.ts index cc8405311a..bc72801440 100644 --- a/packages/core/ui/tab-view/index.android.ts +++ b/packages/core/ui/tab-view/index.android.ts @@ -9,6 +9,7 @@ import { Trace } from '../../trace'; import { Color } from '../../color'; import { fontSizeProperty, fontInternalProperty } from '../styling/style-properties'; import { RESOURCE_PREFIX, ad, layout } from '../../utils'; +import { FONT_PREFIX, isFontIconURI } from '../../utils/common'; import { Frame } from '../frame'; import { Application } from '../../application'; import { AndroidHelper } from '../core/view'; @@ -292,19 +293,31 @@ function createTabItemSpec(item: TabViewItem): org.nativescript.widgets.TabItemS result.title = item.title; if (item.iconSource) { - if (item.iconSource.indexOf(RESOURCE_PREFIX) === 0) { - result.iconId = ad.resources.getDrawableId(item.iconSource.substr(RESOURCE_PREFIX.length)); - if (result.iconId === 0) { - traceMissingIcon(item.iconSource); - } - } else { - const is = ImageSource.fromFileOrResourceSync(item.iconSource); + const addDrawable = (is: ImageSource) => { if (is) { // TODO: Make this native call that accepts string so that we don't load Bitmap in JS. result.iconDrawable = new android.graphics.drawable.BitmapDrawable(appResources, is.android); } else { traceMissingIcon(item.iconSource); } + }; + if (item.iconSource.indexOf(RESOURCE_PREFIX) === 0) { + result.iconId = ad.resources.getDrawableId(item.iconSource.slice(RESOURCE_PREFIX.length)); + if (result.iconId === 0) { + traceMissingIcon(item.iconSource); + } + } else if (isFontIconURI(item.iconSource)) { + // Allow specifying a separate font family for the icon via style.iconFontFamily. + let iconFont: any = item.style.fontInternal; + const iconFontFamily = item.iconFontFamily || item.style.iconFontFamily; + if (iconFontFamily) { + const baseFont = item.style.fontInternal || Font.default; + iconFont = baseFont.withFontFamily(iconFontFamily); + } + const is = ImageSource.fromFontIconCodeSync(item.iconSource.slice(FONT_PREFIX.length), iconFont, item.style.color); + addDrawable(is); + } else { + addDrawable(ImageSource.fromFileOrResourceSync(item.iconSource)); } } @@ -494,7 +507,7 @@ export class TabView extends TabViewBase { JSON.stringify([ { value: 1, type: 0 /* org.nativescript.widgets.GridUnitType.auto */ }, { value: 1, type: 2 /* org.nativescript.widgets.GridUnitType.star */ }, - ]) + ]), ); viewPager.setLayoutParams(lp); @@ -506,7 +519,7 @@ export class TabView extends TabViewBase { JSON.stringify([ { value: 1, type: 2 /* org.nativescript.widgets.GridUnitType.star */ }, { value: 1, type: 0 /* org.nativescript.widgets.GridUnitType.auto */ }, - ]) + ]), ); tabLayout.setLayoutParams(lp); viewPager.setSwipePageEnabled(false); diff --git a/packages/core/ui/tab-view/index.ios.ts b/packages/core/ui/tab-view/index.ios.ts index e23b06cd2b..7680586c4e 100644 --- a/packages/core/ui/tab-view/index.ios.ts +++ b/packages/core/ui/tab-view/index.ios.ts @@ -13,7 +13,7 @@ import { ImageSource } from '../../image-source'; import { profile } from '../../profiling'; import { Frame } from '../frame'; import { layout } from '../../utils/layout-helper'; -import { isFontIconURI, isSystemURI, SYSTEM_PREFIX } from '../../utils/common'; +import { FONT_PREFIX, isFontIconURI, isSystemURI, SYSTEM_PREFIX } from '../../utils/common'; import { SDK_VERSION } from '../../utils/constants'; import { Device } from '../../platform'; export * from './tab-view-common'; @@ -504,7 +504,16 @@ export class TabView extends TabViewBase { if (isSystemURI(item.iconSource)) { is = ImageSource.fromSystemImageSync(item.iconSource.slice(SYSTEM_PREFIX.length)); } else if (isFontIconURI(item.iconSource)) { - is = ImageSource.fromFontIconCodeSync(item.iconSource, item.style.fontInternal, item.style.color); + // Allow specifying a separate font family for the icon via style.iconFontFamily. + // If provided, construct a Font from the family and (optionally) size from fontInternal. + let iconFont = item.style.fontInternal; + const iconFontFamily = item.iconFontFamily || item.style.iconFontFamily; + if (iconFontFamily) { + // Preserve size/style from existing fontInternal if present. + const baseFont = item.style.fontInternal || Font.default; + iconFont = baseFont.withFontFamily(iconFontFamily); + } + is = ImageSource.fromFontIconCodeSync(item.iconSource.slice(FONT_PREFIX.length), iconFont, item.style.color); } else { is = ImageSource.fromFileOrResourceSync(item.iconSource); } diff --git a/packages/core/ui/tab-view/tab-view-common.ts b/packages/core/ui/tab-view/tab-view-common.ts index c4a06d0ce3..75730e4a34 100644 --- a/packages/core/ui/tab-view/tab-view-common.ts +++ b/packages/core/ui/tab-view/tab-view-common.ts @@ -15,6 +15,7 @@ export abstract class TabViewItemBase extends ViewBase implements TabViewItemDef private _title = ''; private _view: View; private _iconSource: string; + iconFontFamily: string; get textTransform(): CoreTypes.TextTransformType { return this.style.textTransform; @@ -287,6 +288,12 @@ export const tabTextColorProperty = new CssProperty({ }); tabTextColorProperty.register(Style); +export const iconFontFamilyProperty = new CssProperty({ + name: 'iconFontFamily', + cssName: 'icon-font-family', +}); +iconFontFamilyProperty.register(Style); + export const tabBackgroundColorProperty = new CssProperty({ name: 'tabBackgroundColor', cssName: 'tab-background-color', From 6c0d191f9827ba6e669ac4114694dad4e2942a9b Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 5 Nov 2025 14:16:43 -0800 Subject: [PATCH 4/5] feat: demo page in toolbox --- apps/toolbox/src/main-page.xml | 1 + apps/toolbox/src/pages/tabview.ts | 89 ++++++++++++++++++++++++++++++ apps/toolbox/src/pages/tabview.xml | 34 ++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 apps/toolbox/src/pages/tabview.ts create mode 100644 apps/toolbox/src/pages/tabview.xml diff --git a/apps/toolbox/src/main-page.xml b/apps/toolbox/src/main-page.xml index 1f02baf8ff..224b9bd8b4 100644 --- a/apps/toolbox/src/main-page.xml +++ b/apps/toolbox/src/main-page.xml @@ -23,6 +23,7 @@