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:
Alexander Vakrilov
2019-10-17 00:45:33 +03:00
committed by GitHub
parent 6c7139477e
commit cc97a16800
880 changed files with 9090 additions and 2104 deletions

View File

@ -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;
}