mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 02:54:11 +08:00
feat: Scoped Packages (#7911)
* chore: move tns-core-modules to nativescript-core * chore: preparing compat generate script * chore: add missing definitions * chore: no need for http-request to be private * chore: packages chore * test: generate tests for tns-core-modules * chore: add anroid module for consistency * chore: add .npmignore * chore: added privateModulesWhitelist * chore(webpack): added bundle-entry-points * chore: scripts * chore: tests changed to use @ns/core * test: add scoped-packages test project * test: fix types * test: update test project * chore: build scripts * chore: update build script * chore: npm scripts cleanup * chore: make the compat pgk work with old wp config * test: generate diff friendly tests * chore: create barrel exports * chore: move files after rebase * chore: typedoc config * chore: compat mode * chore: review of barrels * chore: remove tns-core-modules import after rebase * chore: dev workflow setup * chore: update developer-workflow * docs: experiment with API extractor * chore: api-extractor and barrel exports * chore: api-extractor configs * chore: generate d.ts rollup with api-extractor * refactor: move methods inside Frame * chore: fic tests to use Frame static methods * refactor: create Builder class * refactor: use Builder class in tests * refactor: include Style in ui barrel * chore: separate compat build script * chore: fix tslint errors * chore: update NATIVESCRIPT_CORE_ARGS * chore: fix compat pack * chore: fix ui-test-app build with linked modules * chore: Application, ApplicationSettings, Connectivity and Http * chore: export Trace, Profiling and Utils * refactor: Static create methods for ImageSource * chore: fix deprecated usages of ImageSource * chore: move Span and FormattedString to ui * chore: add events-args and ImageSource to index files * chore: check for CLI >= 6.2 when building for IOS * chore: update travis build * chore: copy Pod file to compat package * chore: update error msg ui-tests-app * refactor: Apply suggestions from code review Co-Authored-By: Martin Yankov <m.i.yankov@gmail.com> * chore: typings and refs * chore: add missing d.ts files for public API * chore: adress code review FB * chore: update api-report * chore: dev-workflow for other apps * chore: api update * chore: update api-report
This commit is contained in:

committed by
GitHub

parent
6c7139477e
commit
cc97a16800
@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "qualifier-matcher",
|
||||
"main": "qualifier-matcher",
|
||||
"types": "qualifier-matcher.d.ts"
|
||||
}
|
13
nativescript-core/module-name-resolver/qualifier-matcher/qualifier-matcher.d.ts
vendored
Normal file
13
nativescript-core/module-name-resolver/qualifier-matcher/qualifier-matcher.d.ts
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Provides ModuleNameResolver class used for loading files based on device capabilities.
|
||||
* @module "module-name-resolver/qualifier-matcher"
|
||||
*/ /** */
|
||||
|
||||
export interface PlatformContext {
|
||||
width: number;
|
||||
height: number;
|
||||
os: string;
|
||||
deviceType: string;
|
||||
}
|
||||
|
||||
export function findMatch(path: string, ext: string, candidates: Array<string>, context: PlatformContext): string;
|
@ -0,0 +1,158 @@
|
||||
import { PlatformContext } from "./";
|
||||
const MIN_WH: string = "minWH";
|
||||
const MIN_W: string = "minW";
|
||||
const MIN_H: string = "minH";
|
||||
const PRIORITY_STEP = 10000;
|
||||
|
||||
interface QualifierSpec {
|
||||
isMatch(value: string): boolean;
|
||||
getMatchValue(value: string, context: PlatformContext): number;
|
||||
}
|
||||
|
||||
const minWidthHeightQualifier: QualifierSpec = {
|
||||
isMatch: function (value: string): boolean {
|
||||
return value.indexOf(MIN_WH) === 0;
|
||||
|
||||
},
|
||||
getMatchValue(value: string, context: PlatformContext): number {
|
||||
const numVal = parseInt(value.substr(MIN_WH.length));
|
||||
if (isNaN(numVal)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
const actualLength = Math.min(context.width, context.height);
|
||||
if (actualLength < numVal) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return PRIORITY_STEP - (actualLength - numVal);
|
||||
}
|
||||
};
|
||||
|
||||
const minWidthQualifier: QualifierSpec = {
|
||||
isMatch: function (value: string): boolean {
|
||||
return value.indexOf(MIN_W) === 0 && value.indexOf(MIN_WH) < 0;
|
||||
|
||||
},
|
||||
getMatchValue(value: string, context: PlatformContext): number {
|
||||
const numVal = parseInt(value.substr(MIN_W.length));
|
||||
if (isNaN(numVal)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
const actualWidth = context.width;
|
||||
if (actualWidth < numVal) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return PRIORITY_STEP - (actualWidth - numVal);
|
||||
}
|
||||
};
|
||||
|
||||
const minHeightQualifier: QualifierSpec = {
|
||||
isMatch: function (value: string): boolean {
|
||||
return value.indexOf(MIN_H) === 0 && value.indexOf(MIN_WH) < 0;
|
||||
|
||||
},
|
||||
getMatchValue(value: string, context: PlatformContext): number {
|
||||
const numVal = parseInt(value.substr(MIN_H.length));
|
||||
if (isNaN(numVal)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
const actualHeight = context.height;
|
||||
if (actualHeight < numVal) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return PRIORITY_STEP - (actualHeight - numVal);
|
||||
}
|
||||
};
|
||||
|
||||
const platformQualifier: QualifierSpec = {
|
||||
isMatch: function (value: string): boolean {
|
||||
return value === "android" ||
|
||||
value === "ios";
|
||||
|
||||
},
|
||||
getMatchValue(value: string, context: PlatformContext): number {
|
||||
return value === context.os.toLowerCase() ? 1 : -1;
|
||||
}
|
||||
};
|
||||
|
||||
const orientationQualifier: QualifierSpec = {
|
||||
isMatch: function (value: string): boolean {
|
||||
return value === "land" ||
|
||||
value === "port";
|
||||
|
||||
},
|
||||
getMatchValue(value: string, context: PlatformContext): number {
|
||||
const isLandscape: number = (context.width > context.height) ? 1 : -1;
|
||||
|
||||
return (value === "land") ? isLandscape : -isLandscape;
|
||||
}
|
||||
};
|
||||
|
||||
// List of supported qualifiers ordered by priority
|
||||
const supportedQualifiers: Array<QualifierSpec> = [
|
||||
minWidthHeightQualifier,
|
||||
minWidthQualifier,
|
||||
minHeightQualifier,
|
||||
orientationQualifier,
|
||||
platformQualifier
|
||||
];
|
||||
|
||||
function checkQualifiers(qualifiers: Array<string>, context: PlatformContext): number {
|
||||
let result = 0;
|
||||
let value: number;
|
||||
for (let i = 0; i < qualifiers.length; i++) {
|
||||
if (qualifiers[i]) {
|
||||
value = checkQualifier(qualifiers[i], context);
|
||||
if (value < 0) {
|
||||
// Non of the supported qualifiers matched this or the match was not satisfied
|
||||
return -1;
|
||||
}
|
||||
|
||||
result += value;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function checkQualifier(value: string, context: PlatformContext) {
|
||||
let result: number;
|
||||
for (let i = 0; i < supportedQualifiers.length; i++) {
|
||||
if (supportedQualifiers[i].isMatch(value)) {
|
||||
result = supportedQualifiers[i].getMatchValue(value, context);
|
||||
if (result > 0) {
|
||||
result += (supportedQualifiers.length - i) * PRIORITY_STEP;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
export function findMatch(path: string, ext: string, candidates: Array<string>, context: PlatformContext): string {
|
||||
let bestValue = -1;
|
||||
let result: string = null;
|
||||
|
||||
for (let i = 0; i < candidates.length; i++) {
|
||||
const filePath = candidates[i];
|
||||
const qualifiersStr: string = filePath.substr(path.length, filePath.length - path.length - (ext ? ext.length : 0));
|
||||
|
||||
const qualifiers = qualifiersStr.split(".");
|
||||
|
||||
const value = checkQualifiers(qualifiers, context);
|
||||
|
||||
if (value >= 0 && value > bestValue) {
|
||||
bestValue = value;
|
||||
result = candidates[i];
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
Reference in New Issue
Block a user