feat(visionos): ui-mobile-base supporting xros plus improvements to window handling (#10478)

This commit is contained in:
Nathan Walker
2024-04-05 17:07:16 -07:00
committed by GitHub
parent 9ca490250e
commit 01d537bf15
242 changed files with 8658 additions and 2099 deletions

View File

@ -364,6 +364,7 @@ exports[`angular configuration for android 1`] = `
__ANDROID__: true,
__IOS__: false,
__VISIONOS__: false,
__APPLE__: false,
'global.isAndroid': true,
'global.isIOS': false,
'global.isVisionOS': false,
@ -796,6 +797,7 @@ exports[`angular configuration for ios 1`] = `
__ANDROID__: false,
__IOS__: true,
__VISIONOS__: false,
__APPLE__: true,
'global.isAndroid': false,
'global.isIOS': true,
'global.isVisionOS': false,

View File

@ -266,6 +266,7 @@ exports[`base configuration for android 1`] = `
__ANDROID__: true,
__IOS__: false,
__VISIONOS__: false,
__APPLE__: false,
'global.isAndroid': true,
'global.isIOS': false,
'global.isVisionOS': false,
@ -593,6 +594,7 @@ exports[`base configuration for ios 1`] = `
__ANDROID__: false,
__IOS__: true,
__VISIONOS__: false,
__APPLE__: true,
'global.isAndroid': false,
'global.isIOS': true,
'global.isVisionOS': false,

View File

@ -266,6 +266,7 @@ exports[`javascript configuration for android 1`] = `
__ANDROID__: true,
__IOS__: false,
__VISIONOS__: false,
__APPLE__: false,
'global.isAndroid': true,
'global.isIOS': false,
'global.isVisionOS': false,
@ -592,6 +593,7 @@ exports[`javascript configuration for ios 1`] = `
__ANDROID__: false,
__IOS__: true,
__VISIONOS__: false,
__APPLE__: true,
'global.isAndroid': false,
'global.isIOS': true,
'global.isVisionOS': false,

View File

@ -288,6 +288,7 @@ exports[`react configuration > android > adds ReactRefreshWebpackPlugin when HMR
__ANDROID__: true,
__IOS__: false,
__VISIONOS__: false,
__APPLE__: false,
'global.isAndroid': true,
'global.isIOS': false,
'global.isVisionOS': false,
@ -626,6 +627,7 @@ exports[`react configuration > android > base config 1`] = `
__ANDROID__: true,
__IOS__: false,
__VISIONOS__: false,
__APPLE__: false,
'global.isAndroid': true,
'global.isIOS': false,
'global.isVisionOS': false,
@ -971,6 +973,7 @@ exports[`react configuration > ios > adds ReactRefreshWebpackPlugin when HMR ena
__ANDROID__: false,
__IOS__: true,
__VISIONOS__: false,
__APPLE__: true,
'global.isAndroid': false,
'global.isIOS': true,
'global.isVisionOS': false,
@ -1310,6 +1313,7 @@ exports[`react configuration > ios > base config 1`] = `
__ANDROID__: false,
__IOS__: true,
__VISIONOS__: false,
__APPLE__: true,
'global.isAndroid': false,
'global.isIOS': true,
'global.isVisionOS': false,

View File

@ -293,6 +293,7 @@ exports[`svelte configuration for android 1`] = `
__ANDROID__: true,
__IOS__: false,
__VISIONOS__: false,
__APPLE__: false,
'global.isAndroid': true,
'global.isIOS': false,
'global.isVisionOS': false,
@ -641,6 +642,7 @@ exports[`svelte configuration for ios 1`] = `
__ANDROID__: false,
__IOS__: true,
__VISIONOS__: false,
__APPLE__: true,
'global.isAndroid': false,
'global.isIOS': true,
'global.isVisionOS': false,

View File

@ -266,6 +266,7 @@ exports[`typescript configuration for android 1`] = `
__ANDROID__: true,
__IOS__: false,
__VISIONOS__: false,
__APPLE__: false,
'global.isAndroid': true,
'global.isIOS': false,
'global.isVisionOS': false,
@ -592,6 +593,7 @@ exports[`typescript configuration for ios 1`] = `
__ANDROID__: false,
__IOS__: true,
__VISIONOS__: false,
__APPLE__: true,
'global.isAndroid': false,
'global.isIOS': true,
'global.isVisionOS': false,

View File

@ -306,6 +306,7 @@ exports[`vue configuration for android 1`] = `
__ANDROID__: true,
__IOS__: false,
__VISIONOS__: false,
__APPLE__: false,
'global.isAndroid': true,
'global.isIOS': false,
'global.isVisionOS': false,
@ -667,6 +668,7 @@ exports[`vue configuration for ios 1`] = `
__ANDROID__: false,
__IOS__: true,
__VISIONOS__: false,
__APPLE__: true,
'global.isAndroid': false,
'global.isIOS': true,
'global.isVisionOS': false,

View File

@ -1,6 +1,6 @@
{
"name": "@nativescript/webpack",
"version": "5.0.18",
"version": "5.0.19-rc.0",
"private": false,
"main": "dist/index.js",
"files": [
@ -54,7 +54,7 @@
"webpack-virtual-modules": "^0.4.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "^16.2.0",
"@angular-devkit/build-angular": "^17.0.0",
"@types/css": "0.0.33",
"@types/jest": "29.5.4",
"@types/loader-utils": "2.0.3",
@ -63,11 +63,11 @@
"@types/sax": "1.2.4",
"@types/terser-webpack-plugin": "5.2.0",
"@types/webpack-virtual-modules": "0.1.1",
"jest": "~29.6.4",
"jest-matcher-utils": "~29.6.4",
"jest": "~29.7.0",
"jest-matcher-utils": "~29.7.0",
"nativescript-vue-template-compiler": "2.9.3",
"ts-jest": "29.1.1",
"typescript": "~5.2.0"
"ts-jest": "29.1.2",
"typescript": "~5.4.0"
},
"peerDependencies": {
"nativescript-vue-template-compiler": "^2.8.1"

View File

@ -206,6 +206,20 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
.add(`.${platform}.json`)
.add('.json');
if (platform === 'visionos') {
// visionOS allows for both .ios and .visionos extensions
const extensions = config.resolve.extensions.values();
const newExtensions = [];
extensions.forEach((ext) => {
newExtensions.push(ext);
if (ext.includes('visionos')) {
newExtensions.push(ext.replace('visionos', 'ios'));
}
});
config.resolve.extensions.clear().merge(newExtensions);
}
// base aliases
config.resolve.alias.set('~', getEntryDirPath()).set('@', getEntryDirPath());
@ -225,6 +239,9 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
.use('app-css-loader')
.loader('app-css-loader')
.options({
// TODO: allow both visionos and ios to resolve for css
// only resolve .ios css on visionOS for now
// platform: platform === 'visionos' ? 'ios' : platform,
platform,
})
.end();
@ -324,22 +341,26 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
// custom resolver to resolve platform extensions in @import statements
// ie. @import "foo.css" would import "foo.ios.css" if the platform is ios and it exists
resolve(id, baseDir, importOptions) {
const ext = extname(id);
const platformExt = ext ? `.${platform}${ext}` : '';
const extensions =
platform === 'visionos' ? [platform, 'ios'] : [platform];
for (const platformTarget of extensions) {
const ext = extname(id);
const platformExt = ext ? `.${platformTarget}${ext}` : '';
if (!id.includes(platformExt)) {
const platformRequest = id.replace(ext, platformExt);
const extPath = resolve(baseDir, platformRequest);
if (!id.includes(platformExt)) {
const platformRequest = id.replace(ext, platformExt);
const extPath = resolve(baseDir, platformRequest);
try {
return require.resolve(platformRequest, {
paths: [baseDir],
});
} catch {}
try {
return require.resolve(platformRequest, {
paths: [baseDir],
});
} catch {}
if (existsSync(extPath)) {
console.log(`resolving "${id}" to "${platformRequest}"`);
return extPath;
if (existsSync(extPath)) {
console.log(`resolving "${id}" to "${platformRequest}"`);
return extPath;
}
}
}
@ -447,6 +468,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
__ANDROID__: platform === 'android',
__IOS__: platform === 'ios',
__VISIONOS__: platform === 'visionos',
__APPLE__: platform === 'ios' || platform === 'visionos',
/* for compat only */ 'global.isAndroid': platform === 'android',
/* for compat only */ 'global.isIOS':
platform === 'ios' || platform === 'visionos',

View File

@ -62,7 +62,7 @@ export function getPlatformName(): Platform {
return 'ios';
}
if (env?.visionos) {
if (env?.visionos || env?.vision) {
return 'visionos';
}

View File

@ -46,6 +46,7 @@ async function parseXML(content: string): Promise<ParseResult> {
// // Register ios and android prefixes as namespaces to avoid "unbound xml namespace" errors
(saxParser as any).ns['ios'] = 'http://schemas.nativescript.org/tns.xsd';
(saxParser as any).ns['visionos'] = 'http://schemas.nativescript.org/tns.xsd';
(saxParser as any).ns['android'] = 'http://schemas.nativescript.org/tns.xsd';
(saxParser as any).ns['desktop'] = 'http://schemas.nativescript.org/tns.xsd';
(saxParser as any).ns['web'] = 'http://schemas.nativescript.org/tns.xsd';