Skip to content

fix: detect core version before including inspector_modules on android #10520

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -435,9 +435,6 @@ exports[`angular configuration for android 1`] = `
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
'@nativescript/core/ui/frame/activity'
],
'tns_modules/inspector_modules': [
'@nativescript/core/inspector_modules'
]
}
}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -323,9 +323,6 @@ exports[`base configuration for android 1`] = `
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
'@nativescript/core/ui/frame/activity'
],
'tns_modules/inspector_modules': [
'@nativescript/core/inspector_modules'
]
}
}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,9 +322,6 @@ exports[`javascript configuration for android 1`] = `
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
'@nativescript/core/ui/frame/activity'
],
'tns_modules/inspector_modules': [
'@nativescript/core/inspector_modules'
]
}
}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,9 +352,6 @@ exports[`react configuration > android > adds ReactRefreshWebpackPlugin when HMR
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
'@nativescript/core/ui/frame/activity'
],
'tns_modules/inspector_modules': [
'@nativescript/core/inspector_modules'
]
}
}"
Expand Down Expand Up @@ -683,9 +680,6 @@ exports[`react configuration > android > base config 1`] = `
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
'@nativescript/core/ui/frame/activity'
],
'tns_modules/inspector_modules': [
'@nativescript/core/inspector_modules'
]
}
}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,6 @@ exports[`svelte configuration for android 1`] = `
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
'@nativescript/core/ui/frame/activity'
],
'tns_modules/inspector_modules': [
'@nativescript/core/inspector_modules'
]
}
}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,9 +322,6 @@ exports[`typescript configuration for android 1`] = `
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
'@nativescript/core/ui/frame/activity'
],
'tns_modules/inspector_modules': [
'@nativescript/core/inspector_modules'
]
}
}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,9 +357,6 @@ exports[`vue configuration for android 1`] = `
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
'@nativescript/core/ui/frame/activity'
],
'tns_modules/inspector_modules': [
'@nativescript/core/inspector_modules'
]
}
}"
Expand Down
27 changes: 27 additions & 0 deletions packages/webpack5/__tests__/configuration/base.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import fs from 'fs';
import base from '../../src/configuration/base';
import { init } from '../../src';
import { applyFileReplacements } from '../../src/helpers/fileReplacements';
import * as dependenciesHelpers from '../../src/helpers/dependencies';
import { additionalCopyRules } from '../../src/helpers/copyRules';

describe('base configuration', () => {
Expand Down Expand Up @@ -221,4 +222,30 @@ describe('base configuration', () => {
expect(config.output.get('sourceMapFilename')).toMatchSnapshot();
expect(config.get('devtool')).toBe('hidden-source-map');
});

it('includes inspector_modules on android when @nativescript/core version is >= 8.7.0', () => {
const getDependencyVersionSpy = jest.spyOn(
dependenciesHelpers,
'getDependencyVersion'
);
getDependencyVersionSpy.withImplementation(
(name) => {
if (name === '@nativescript/core') {
return '8.7.0';
}
return null;
},
() => {
init({
android: true,
});

const config = base(new Config());
const entry = config.entryPoints.get('tns_modules/inspector_modules');

expect(entry).toBeDefined();
expect(entry.values().length).toBe(1);
}
);
});
});
1 change: 1 addition & 0 deletions packages/webpack5/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"sass": "^1.0.0",
"sass-loader": "^13.0.0",
"sax": "^1.0.0",
"semver": "^7.0.0 || ^6.0.0",
"source-map": "^0.7.0",
"terser-webpack-plugin": "^5.0.0",
"ts-dedent": "^2.0.0",
Expand Down
37 changes: 10 additions & 27 deletions packages/webpack5/src/configuration/angular.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { extname, resolve } from 'path';
import Config from 'webpack-chain';
import { satisfies } from 'semver';
import { existsSync } from 'fs';

import { getTypescript, readTsConfig } from '../helpers/typescript';
import { getDependencyPath } from '../helpers/dependencies';
import { getDependencyVersion } from '../helpers/dependencies';
import { getProjectTSConfigPath } from '../helpers/project';
import { env as _env, IWebpackEnv } from '../index';
import { warnOnce } from '../helpers/log';
Expand Down Expand Up @@ -187,13 +188,16 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
.loader('angular-hot-loader');
});

const buildAngularMajorVersion = getBuildAngularMajorVersion();
if (buildAngularMajorVersion) {
const buildAngularVersion = getDependencyVersion(
'@angular-devkit/build-angular'
);

if (buildAngularVersion) {
const buildAngularOptions: any = {
aot: !disableAOT,
};

if (buildAngularMajorVersion < 15) {
if (satisfies(buildAngularVersion, '<15.0.0')) {
const tsConfig = readTsConfig(tsConfigPath);
const { ScriptTarget } = getTypescript();
buildAngularOptions.scriptTarget =
Expand Down Expand Up @@ -315,27 +319,6 @@ function getAngularWebpackPlugin(): any {
return AngularWebpackPlugin;
}

const MAJOR_VER_RE = /^(\d+)\./;
function getBuildAngularMajorVersion() {
const buildAngularPath = getDependencyPath('@angular-devkit/build-angular');
if (!buildAngularPath) {
return null;
}

try {
const buildAngularVersion =
require(`${buildAngularPath}/package.json`).version;

const [_, majorStr] = buildAngularVersion.match(MAJOR_VER_RE);

return Number(majorStr);
} catch (err) {
// ignore
}

return null;
}

function tryRequireResolve(path: string) {
try {
return require.resolve(path);
Expand All @@ -348,10 +331,10 @@ function getWebpackLoaderPath() {
return (
tryRequireResolve(
'@angular-devkit/build-angular/src/babel/webpack-loader'
) ||
) ??
tryRequireResolve(
'@angular-devkit/build-angular/src/tools/babel/webpack-loader'
) ||
) ??
// fallback to angular 16.1+
'@angular-devkit/build-angular/src/tools/babel/webpack-loader'
);
Expand Down
19 changes: 12 additions & 7 deletions packages/webpack5/src/configuration/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,19 @@ import {
HotModuleReplacementPlugin,
} from 'webpack';
import Config from 'webpack-chain';
import { satisfies } from 'semver';
import { existsSync } from 'fs';

import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
import TerserPlugin from 'terser-webpack-plugin';

import { getProjectFilePath, getProjectTSConfigPath } from '../helpers/project';
import { getDependencyVersion, hasDependency } from '../helpers/dependencies';
import { PlatformSuffixPlugin } from '../plugins/PlatformSuffixPlugin';
import { applyFileReplacements } from '../helpers/fileReplacements';
import { addCopyRule, applyCopyRules } from '../helpers/copyRules';
import { WatchStatePlugin } from '../plugins/WatchStatePlugin';
import { hasDependency } from '../helpers/dependencies';
import { applyDotEnvPlugin } from '../helpers/dotEnv';
import { env as _env, IWebpackEnv } from '../index';
import { getValue } from '../helpers/config';
Expand Down Expand Up @@ -86,7 +87,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
const sourceMapAbsolutePath = getProjectFilePath(
`./${
env.buildPath ?? 'platforms'
}/${platform}-sourceMaps/[file].map[query]`,
}/${platform}-sourceMaps/[file].map[query]`
);
const sourceMapRelativePath = relative(outputPath, sourceMapAbsolutePath);
config.output.sourceMapFilename(sourceMapRelativePath);
Expand Down Expand Up @@ -272,7 +273,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
const configFile = tsConfigPath
? {
configFile: tsConfigPath,
}
}
: undefined;

// set up ts support
Expand Down Expand Up @@ -451,7 +452,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
* +-----------------------------------------------------------------------------------------+
*/
/System.import\(\) is deprecated/,
]),
])
);

// todo: refine defaults
Expand Down Expand Up @@ -516,7 +517,11 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {

function shouldIncludeInspectorModules(): boolean {
const platform = getPlatformName();
// todo: check if core modules are external
// todo: check if we are testing
return platform === 'ios' || platform === 'android';
const coreVersion = getDependencyVersion('@nativescript/core');

if (coreVersion && satisfies(coreVersion, '>=8.7.0')) {
return platform === 'ios' || platform === 'android';
}

return platform === 'ios';
}
20 changes: 20 additions & 0 deletions packages/webpack5/src/helpers/dependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,23 @@ export function getDependencyPath(dependencyName: string): string | null {
return null;
}
}

/**
* Utility to get the version of a dependency.
*
* @param dependencyName
* @returns string | null - version of the dependency or null if not found
*/
export function getDependencyVersion(dependencyName: string): string | null {
const dependencyPath = getDependencyPath(dependencyName);
if (!dependencyPath) {
return null;
}

try {
return require(`${dependencyPath}/package.json`).version;
} catch (err) {
// ignore
}
return null;
}
Loading