feat(android): support clipToBounds (#9508)

* performance improvements around border handling

BREAKING CHANGE:

* if you have broder-radius or clip-path, it will clip by default
This commit is contained in:
farfromrefuge
2021-08-11 21:06:36 +02:00
committed by GitHub
parent e4ce17e156
commit 5890667b26
7 changed files with 591 additions and 283 deletions

View File

@@ -1,10 +1,11 @@
import Config from 'webpack-chain';
import { getProjectFilePath, getProjectRootPath } from '../helpers/project';
import { getProjectFilePath } from '../helpers/project';
import { getPlatformName } from '../helpers/platform';
import { env as _env, IWebpackEnv } from '../index';
import { error } from '../helpers/log';
import base from './base';
import { hasDependency } from '../helpers/dependencies';
export default function (config: Config, env: IWebpackEnv = _env): Config {
base(config, env);
@@ -13,35 +14,75 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
const mode = env.production ? 'production' : 'development';
const production = mode === 'production';
// target('node') is the default but causes svelte-loader to detect it as a "server" render, disabling HMR
// electron-main sneaks us past the target == 'node' check and gets us HMR
config.target('electron-main');
// svelte-hmr still references tns-core-modules, so we shim it here for compat.
config.resolve.alias.set('tns-core-modules', '@nativescript/core');
// resolve .svelte files
// the order is reversed because we are using prepend!
config.resolve.extensions.prepend('.svelte').prepend(`.${platform}.svelte`);
// add worker support to .svelte files (new Worker('./path'))
config.module.rule('workers').test(/\.(js|ts|svelte)$/);
// add a rule for .svelte files
config.module
.rule('svelte')
.test(/\.svelte$/)
.exclude.add(/node_modules/)
.end()
.use('svelte-loader-hot')
.loader('svelte-loader-hot')
.tap((options) => {
return {
...options,
dev: !production,
preprocess: getSvelteConfigPreprocessor(),
hotReload: !production,
hotOptions: {
injectCss: false,
native: true,
},
// Suppress A11y warnings
onwarn(warning, warn) {
if (!/A11y:/.test(warning.message)) {
warn(warning);
}
},
};
});
if (hasDependency('svelte-loader')) {
// configure using svelte-loader
config.module
.rule('svelte')
.test(/\.svelte$/)
.exclude.add(/node_modules/)
.end()
.use('svelte-loader')
.loader('svelte-loader')
.tap((options) => {
const svelteConfig = getSvelteConfig();
return {
...options,
compilerOptions: {
...svelteConfig?.compilerOptions,
dev: !production,
},
preprocess: svelteConfig?.preprocess,
hotReload: !production,
hotOptions: {
injectCss: false,
native: true,
},
};
});
} else {
// fallback for projects still using svelte-loader-hot
config.module
.rule('svelte')
.test(/\.svelte$/)
.exclude.add(/node_modules/)
.end()
.use('svelte-loader-hot')
.loader('svelte-loader-hot')
.tap((options) => {
const svelteConfig = getSvelteConfig();
return {
...options,
dev: !production,
preprocess: getSvelteConfigPreprocessor(),
hotReload: !production,
hotOptions: {
injectCss: false,
native: true,
},
// Suppress A11y warnings
onwarn(warning, warn) {
if (!/A11y:/.test(warning.message)) {
warn(warning);
}
},
};
});
}
return config;
}
@@ -54,6 +95,7 @@ function getSvelteConfigPreprocessor(): any {
interface ISvelteConfig {
preprocess: any;
compilerOptions: any;
}
function getSvelteConfig(): ISvelteConfig | undefined {