From 4727c84a18dddb824ab0049fb12c9518dbd3b4ca Mon Sep 17 00:00:00 2001 From: Manuel Saelices Date: Mon, 25 Feb 2019 13:49:45 +0100 Subject: [PATCH 1/8] chore: Make NodeRequire declaration match the latest webpack-env one. --- tns-core-modules/tns-core-modules.d.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tns-core-modules/tns-core-modules.d.ts b/tns-core-modules/tns-core-modules.d.ts index 495b0ee5b..1a9ec6d30 100644 --- a/tns-core-modules/tns-core-modules.d.ts +++ b/tns-core-modules/tns-core-modules.d.ts @@ -22,12 +22,15 @@ declare var console: Console; declare var require: NodeRequire; // Extend NodeRequire with the webpack's require context extension. +interface RequireContext { + keys(): string[]; + (id: string): any; + (id: string): T; + resolve(id: string): string; +} + interface NodeRequire { - context(root: string, recursive: boolean, filter: RegExp): { - (module: string): any; - id: number; - keys(): string[]; - } + context(path: string, deep?: boolean, filter?: RegExp): RequireContext; } declare var __dirname: string; From 9c3bbd699b660fe3dac8b7e8011380023626c160 Mon Sep 17 00:00:00 2001 From: Manuel Saelices Date: Tue, 18 Jun 2019 09:49:02 +0200 Subject: [PATCH 2/8] chore: Fix http-request short imports on Android. --- .../http/http-request/http-request.android.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tns-core-modules/http/http-request/http-request.android.ts b/tns-core-modules/http/http-request/http-request.android.ts index 150b2ba89..47a314bcd 100644 --- a/tns-core-modules/http/http-request/http-request.android.ts +++ b/tns-core-modules/http/http-request/http-request.android.ts @@ -25,24 +25,24 @@ let requestIdCounter = 0; const pendingRequests = {}; let imageSource: typeof imageSourceModule; -function ensureImageSource() { - if (!imageSource) { - imageSource = require("image-source"); - } +function ensureImageSource() { + if (!imageSource) { + imageSource = require("tns-core-modules/image-source"); + } } -let platform: typeof platformModule; -function ensurePlatform() { - if (!platform) { - platform = require("platform"); - } +let platform: typeof platformModule; +function ensurePlatform() { + if (!platform) { + platform = require("tns-core-modules/platform"); + } } let fs: typeof fsModule; -function ensureFileSystem() { - if (!fs) { - fs = require("file-system"); - } +function ensureFileSystem() { + if (!fs) { + fs = require("tns-core-modules/file-system"); + } } let completeCallback: org.nativescript.widgets.Async.CompleteCallback; From 6d422a3dba7f2080b5a65524b4e100dc6a6ec68f Mon Sep 17 00:00:00 2001 From: Manuel Saelices Date: Tue, 18 Jun 2019 09:49:02 +0200 Subject: [PATCH 3/8] chore: Fix http-request short imports on Android. --- tns-core-modules/http/http-request/http-request.android.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tns-core-modules/http/http-request/http-request.android.ts b/tns-core-modules/http/http-request/http-request.android.ts index 58969f60f..8800046c5 100644 --- a/tns-core-modules/http/http-request/http-request.android.ts +++ b/tns-core-modules/http/http-request/http-request.android.ts @@ -27,21 +27,21 @@ const pendingRequests = {}; let imageSource: typeof imageSourceModule; function ensureImageSource() { if (!imageSource) { - imageSource = require("image-source"); + imageSource = require("../../image-source"); } } let platform: typeof platformModule; function ensurePlatform() { if (!platform) { - platform = require("platform"); + platform = require("../../platform"); } } let fs: typeof fsModule; function ensureFileSystem() { if (!fs) { - fs = require("file-system"); + fs = require("../../file-system"); } } From a14d2ee7206a604a08d841a583232f8f018365c4 Mon Sep 17 00:00:00 2001 From: Manol Donev Date: Thu, 27 Jun 2019 18:24:20 +0300 Subject: [PATCH 4/8] chore: require relative path within tns-core-modules --- .../application/application-common.ts | 2 +- tns-core-modules/bundle-entry-points.ts | 80 +++++++++---------- tns-core-modules/file-system/file-system.ts | 2 +- tns-core-modules/globals/globals.ts | 18 ++--- .../http/http-request/http-request-common.ts | 2 +- .../http/http-request/http-request.ios.ts | 4 +- .../component-builder/component-builder.ts | 2 +- .../ui/core/view-base/view-base.ts | 2 +- tns-core-modules/ui/core/view/view-common.ts | 2 +- tns-core-modules/ui/dialogs/dialogs-common.ts | 8 +- tns-core-modules/ui/enums/enums.ts | 2 +- tns-core-modules/ui/frame/frame.android.ts | 4 +- tns-core-modules/ui/frame/frame.d.ts | 2 +- .../ui/image-cache/image-cache.ios.ts | 2 +- tns-core-modules/ui/styling/style-scope.ts | 2 +- 15 files changed, 67 insertions(+), 67 deletions(-) diff --git a/tns-core-modules/application/application-common.ts b/tns-core-modules/application/application-common.ts index e0434eb67..0ca6c76a1 100644 --- a/tns-core-modules/application/application-common.ts +++ b/tns-core-modules/application/application-common.ts @@ -1,5 +1,5 @@ // Require globals first so that snapshot takes __extends function. -require("globals"); +require("../globals"); import { Observable, EventData } from "../data/observable"; import { View } from "../ui/core/view"; diff --git a/tns-core-modules/bundle-entry-points.ts b/tns-core-modules/bundle-entry-points.ts index df94028bf..372b75b16 100644 --- a/tns-core-modules/bundle-entry-points.ts +++ b/tns-core-modules/bundle-entry-points.ts @@ -4,44 +4,44 @@ if (global.TNS_WEBPACK) { // Register "dynamically" loaded module that need to be resolved by the // XML/component builders. - global.registerModule("text/formatted-string", () => require("text/formatted-string")); - global.registerModule("text/span", () => require("text/span")); - global.registerModule("ui/action-bar", () => require("ui/action-bar")); - global.registerModule("ui/activity-indicator", () => require("ui/activity-indicator")); - global.registerModule("ui/border", () => require("ui/border")); - global.registerModule("ui/bottom-navigation", () => require("ui/bottom-navigation")); - global.registerModule("ui/button", () => require("ui/button")); - global.registerModule("ui/content-view", () => require("ui/content-view")); - global.registerModule("ui/date-picker", () => require("ui/date-picker")); - global.registerModule("ui/frame", () => require("ui/frame")); - global.registerModule("ui/html-view", () => require("ui/html-view")); - global.registerModule("ui/image", () => require("ui/image")); - global.registerModule("ui/label", () => require("ui/label")); - global.registerModule("ui/layouts/absolute-layout", () => require("ui/layouts/absolute-layout")); - global.registerModule("ui/layouts/dock-layout", () => require("ui/layouts/dock-layout")); - global.registerModule("ui/layouts/grid-layout", () => require("ui/layouts/grid-layout")); - global.registerModule("ui/layouts/stack-layout", () => require("ui/layouts/stack-layout")); - global.registerModule("ui/layouts/flexbox-layout", () => require("ui/layouts/flexbox-layout")); - global.registerModule("ui/layouts/wrap-layout", () => require("ui/layouts/wrap-layout")); - global.registerModule("ui/list-picker", () => require("ui/list-picker")); - global.registerModule("ui/page", () => require("ui/page")); - global.registerModule("ui/placeholder", () => require("ui/placeholder")); - global.registerModule("ui/progress", () => require("ui/progress")); - global.registerModule("ui/proxy-view-container", () => require("ui/proxy-view-container")); - global.registerModule("ui/repeater", () => require("ui/repeater")); - global.registerModule("ui/scroll-view", () => require("ui/scroll-view")); - global.registerModule("ui/search-bar", () => require("ui/search-bar")); - global.registerModule("ui/segmented-bar", () => require("ui/segmented-bar")); - global.registerModule("ui/slider", () => require("ui/slider")); - global.registerModule("ui/switch", () => require("ui/switch")); - global.registerModule("ui/tab-view", () => require("ui/tab-view")); - global.registerModule("ui/tab-navigation-base/tab-strip", () => require("ui/tab-navigation-base/tab-strip")); - global.registerModule("ui/tab-navigation-base/tab-strip-item", () => require("ui/tab-navigation-base/tab-strip-item")); - global.registerModule("ui/tab-navigation-base/tab-content-item", () => require("ui/tab-navigation-base/tab-content-item")); - global.registerModule("ui/tabs", () => require("ui/tabs")); - global.registerModule("ui/web-view", () => require("ui/web-view")); - global.registerModule("ui/text-field", () => require("ui/text-field")); - global.registerModule("ui/text-view", () => require("ui/text-view")); - global.registerModule("ui/time-picker", () => require("ui/time-picker")); - global.registerModule("ui/list-view", () => require("ui/list-view")); + global.registerModule("text/formatted-string", () => require("./text/formatted-string")); + global.registerModule("text/span", () => require("./text/span")); + global.registerModule("ui/action-bar", () => require("./ui/action-bar")); + global.registerModule("ui/activity-indicator", () => require("./ui/activity-indicator")); + global.registerModule("ui/border", () => require("./ui/border")); + global.registerModule("ui/bottom-navigation", () => require("./ui/bottom-navigation")); + global.registerModule("ui/button", () => require("./ui/button")); + global.registerModule("ui/content-view", () => require("./ui/content-view")); + global.registerModule("ui/date-picker", () => require("./ui/date-picker")); + global.registerModule("ui/frame", () => require("./ui/frame")); + global.registerModule("ui/html-view", () => require("./ui/html-view")); + global.registerModule("ui/image", () => require("./ui/image")); + global.registerModule("ui/label", () => require("./ui/label")); + global.registerModule("ui/layouts/absolute-layout", () => require("./ui/layouts/absolute-layout")); + global.registerModule("ui/layouts/dock-layout", () => require("./ui/layouts/dock-layout")); + global.registerModule("ui/layouts/grid-layout", () => require("./ui/layouts/grid-layout")); + global.registerModule("ui/layouts/stack-layout", () => require("./ui/layouts/stack-layout")); + global.registerModule("ui/layouts/flexbox-layout", () => require("./ui/layouts/flexbox-layout")); + global.registerModule("ui/layouts/wrap-layout", () => require("./ui/layouts/wrap-layout")); + global.registerModule("ui/list-picker", () => require("./ui/list-picker")); + global.registerModule("ui/page", () => require("./ui/page")); + global.registerModule("ui/placeholder", () => require("./ui/placeholder")); + global.registerModule("ui/progress", () => require("./ui/progress")); + global.registerModule("ui/proxy-view-container", () => require("./ui/proxy-view-container")); + global.registerModule("ui/repeater", () => require("./ui/repeater")); + global.registerModule("ui/scroll-view", () => require("./ui/scroll-view")); + global.registerModule("ui/search-bar", () => require("./ui/search-bar")); + global.registerModule("ui/segmented-bar", () => require("./ui/segmented-bar")); + global.registerModule("ui/slider", () => require("./ui/slider")); + global.registerModule("ui/switch", () => require("./ui/switch")); + global.registerModule("ui/tab-view", () => require("./ui/tab-view")); + global.registerModule("ui/tab-navigation-base/tab-strip", () => require("./ui/tab-navigation-base/tab-strip")); + global.registerModule("ui/tab-navigation-base/tab-strip-item", () => require("./ui/tab-navigation-base/tab-strip-item")); + global.registerModule("ui/tab-navigation-base/tab-content-item", () => require("./ui/tab-navigation-base/tab-content-item")); + global.registerModule("ui/tabs", () => require("./ui/tabs")); + global.registerModule("ui/web-view", () => require("./ui/web-view")); + global.registerModule("ui/text-field", () => require("./ui/text-field")); + global.registerModule("ui/text-view", () => require("./ui/text-view")); + global.registerModule("ui/time-picker", () => require("./ui/time-picker")); + global.registerModule("ui/list-view", () => require("./ui/list-view")); } diff --git a/tns-core-modules/file-system/file-system.ts b/tns-core-modules/file-system/file-system.ts index 183003f2c..aa1209716 100644 --- a/tns-core-modules/file-system/file-system.ts +++ b/tns-core-modules/file-system/file-system.ts @@ -17,7 +17,7 @@ function getFileAccess(): FileSystemAccess { let platform: typeof platformModule; function ensurePlatform() { if (!platform) { - platform = require("platform"); + platform = require("../platform"); } } diff --git a/tns-core-modules/globals/globals.ts b/tns-core-modules/globals/globals.ts index 1725e4c44..af2f62197 100644 --- a/tns-core-modules/globals/globals.ts +++ b/tns-core-modules/globals/globals.ts @@ -129,10 +129,10 @@ global.zonedCallback = function (callback: Function): Function { } }; -global.registerModule("timer", () => require("timer")); -global.registerModule("ui/dialogs", () => require("ui/dialogs")); -global.registerModule("xhr", () => require("xhr")); -global.registerModule("fetch", () => require("fetch")); +global.registerModule("timer", () => require("../timer")); +global.registerModule("ui/dialogs", () => require("../ui/dialogs")); +global.registerModule("xhr", () => require("../xhr")); +global.registerModule("fetch", () => require("../fetch")); (global).System = { import(path) { @@ -167,10 +167,10 @@ export function install() { if ((global).__snapshot || (global).__snapshotEnabled) { if (!snapshotGlobals) { // require in snapshot mode is cheap - const timer: typeof timerModule = require("timer"); - const dialogs: typeof dialogsModule = require("ui/dialogs"); - const xhr = require("xhr"); - const fetch = require("fetch"); + const timer: typeof timerModule = require("../timer"); + const dialogs: typeof dialogsModule = require("../ui/dialogs"); + const xhr = require("../xhr"); + const fetch = require("../fetch"); snapshotGlobals = snapshotGlobals || { setTimeout: timer.setTimeout, @@ -193,7 +193,7 @@ export function install() { Response: fetch.Response, }; } - const consoleModule = require("console").Console; + const consoleModule = require("../console").Console; // Object.assign call will fire an error when trying to write to a read-only property of an object, such as 'console' global.console = global.console || new consoleModule(); Object.assign(global, snapshotGlobals); diff --git a/tns-core-modules/http/http-request/http-request-common.ts b/tns-core-modules/http/http-request/http-request-common.ts index aff2f4ceb..15df5fc09 100644 --- a/tns-core-modules/http/http-request/http-request-common.ts +++ b/tns-core-modules/http/http-request/http-request-common.ts @@ -1,7 +1,7 @@ import * as fsModule from "../../file-system"; export function getFilenameFromUrl(url: string) { - const fs: typeof fsModule = require("file-system"); + const fs: typeof fsModule = require("../../file-system"); const slashPos = url.lastIndexOf("/") + 1; const questionMarkPos = url.lastIndexOf("?"); diff --git a/tns-core-modules/http/http-request/http-request.ios.ts b/tns-core-modules/http/http-request/http-request.ios.ts index cff881b1d..f54d1c496 100644 --- a/tns-core-modules/http/http-request/http-request.ios.ts +++ b/tns-core-modules/http/http-request/http-request.ios.ts @@ -56,14 +56,14 @@ function ensureSessionNotFollowingRedirects() { let imageSource: typeof imageSourceModule; function ensureImageSource() { if (!imageSource) { - imageSource = require("image-source"); + imageSource = require("../../image-source"); } } let fs: typeof fsModule; function ensureFileSystem() { if (!fs) { - fs = require("file-system"); + fs = require("../../file-system"); } } diff --git a/tns-core-modules/ui/builder/component-builder/component-builder.ts b/tns-core-modules/ui/builder/component-builder/component-builder.ts index 7e04c16d5..89987f393 100644 --- a/tns-core-modules/ui/builder/component-builder/component-builder.ts +++ b/tns-core-modules/ui/builder/component-builder/component-builder.ts @@ -51,7 +51,7 @@ const createComponentInstance = profile("createComponentInstance", (elementName: // Create instance of the component. instance = new instanceType(); } catch (ex) { - const debug: typeof debugModule = require("utils/debug"); + const debug: typeof debugModule = require("../../../utils/debug"); throw new debug.ScopeError(ex, "Module '" + resolvedModuleName + "' not found for element '" + (namespace ? namespace + ":" : "") + elementName + "'."); } diff --git a/tns-core-modules/ui/core/view-base/view-base.ts b/tns-core-modules/ui/core/view-base/view-base.ts index c85cce7d3..a282768bc 100644 --- a/tns-core-modules/ui/core/view-base/view-base.ts +++ b/tns-core-modules/ui/core/view-base/view-base.ts @@ -37,7 +37,7 @@ function ensuredomNodeModule(): void { let styleScopeModule: typeof ssm; function ensureStyleScopeModule() { if (!styleScopeModule) { - styleScopeModule = require("ui/styling/style-scope"); + styleScopeModule = require("../../styling/style-scope"); } } diff --git a/tns-core-modules/ui/core/view/view-common.ts b/tns-core-modules/ui/core/view/view-common.ts index 791a8c4af..6eb43e383 100644 --- a/tns-core-modules/ui/core/view/view-common.ts +++ b/tns-core-modules/ui/core/view/view-common.ts @@ -34,7 +34,7 @@ import * as am from "../../animation"; let animationModule: typeof am; function ensureAnimationModule() { if (!animationModule) { - animationModule = require("ui/animation"); + animationModule = require("../../animation"); } } diff --git a/tns-core-modules/ui/dialogs/dialogs-common.ts b/tns-core-modules/ui/dialogs/dialogs-common.ts index e80159127..58cd326e9 100644 --- a/tns-core-modules/ui/dialogs/dialogs-common.ts +++ b/tns-core-modules/ui/dialogs/dialogs-common.ts @@ -78,7 +78,7 @@ export module capitalizationType { let frame: typeof frameModule; export function getCurrentPage(): Page { if (!frame) { - frame = require("ui/frame"); + frame = require("../frame"); } let topmostFrame = frame.topmost(); @@ -108,7 +108,7 @@ let textField: View; export function getButtonColors(): { color: Color, backgroundColor: Color } { if (!button) { - const Button = require("ui/button").Button; + const Button = require("../button").Button; button = new Button; if (isIOS) { button._setupUI({}); @@ -127,7 +127,7 @@ export function getButtonColors(): { color: Color, backgroundColor: Color } { export function getLabelColor(): Color { if (!label) { - const Label = require("ui/label").Label; + const Label = require("../label").Label; label = new Label; if (isIOS) { label._setupUI({}); @@ -144,7 +144,7 @@ export function getLabelColor(): Color { export function getTextFieldColor(): Color { if (!textField) { - const TextField = require("ui/text-field").TextField; + const TextField = require("../text-field").TextField; textField = new TextField(); if (isIOS) { textField._setupUI({}); diff --git a/tns-core-modules/ui/enums/enums.ts b/tns-core-modules/ui/enums/enums.ts index a82824e96..a39c8295f 100644 --- a/tns-core-modules/ui/enums/enums.ts +++ b/tns-core-modules/ui/enums/enums.ts @@ -177,7 +177,7 @@ export module AnimationCurve { export const linear = "linear"; export const spring = "spring"; export function cubicBezier(x1: number, y1: number, x2: number, y2: number): Object { - animation = animation || require("ui/animation"); + animation = animation || require("../animation"); return new animation.CubicBezierAnimationCurve(x1, y1 , x2, y2); } diff --git a/tns-core-modules/ui/frame/frame.android.ts b/tns-core-modules/ui/frame/frame.android.ts index c697cd87a..f94a91282 100644 --- a/tns-core-modules/ui/frame/frame.android.ts +++ b/tns-core-modules/ui/frame/frame.android.ts @@ -46,7 +46,7 @@ let fragmentId = -1; export let moduleLoaded: boolean; if (global && global.__inspector) { - const devtools = require("tns-core-modules/debugger/devtools-elements"); + const devtools = require("../../debugger/devtools-elements"); devtools.attachDOMInspectorEventCallbacks(global.__inspector); devtools.attachDOMInspectorCommandCallbacks(global.__inspector); } @@ -754,7 +754,7 @@ function ensureFragmentClass() { } // this require will apply the FragmentClass implementation - require("ui/frame/fragment"); + require("./fragment"); if (!fragmentClass) { throw new Error("Failed to initialize the extended androidx.fragment.app.Fragment class"); diff --git a/tns-core-modules/ui/frame/frame.d.ts b/tns-core-modules/ui/frame/frame.d.ts index 5d5eaf324..14a642904 100644 --- a/tns-core-modules/ui/frame/frame.d.ts +++ b/tns-core-modules/ui/frame/frame.d.ts @@ -30,7 +30,7 @@ export class Frame extends View { * This method will require the module and will check for a Page property in the exports of the module. * @param pageModuleName The name of the module to require starting from the application root. * For example if you want to navigate to page called "myPage.js" in a folder called "subFolder" and your root folder is "app" you can call navigate method like this: - * const frames = require("ui/frame"); + * const frames = require("tns-core-modules/ui/frame"); * frames.topmost().navigate("app/subFolder/myPage"); */ navigate(pageModuleName: string); diff --git a/tns-core-modules/ui/image-cache/image-cache.ios.ts b/tns-core-modules/ui/image-cache/image-cache.ios.ts index 595cc0657..27b61d4e4 100644 --- a/tns-core-modules/ui/image-cache/image-cache.ios.ts +++ b/tns-core-modules/ui/image-cache/image-cache.ios.ts @@ -8,7 +8,7 @@ import * as utils from "../../utils/utils"; let httpRequest: typeof httpRequestModule; function ensureHttpRequest() { if (!httpRequest) { - httpRequest = require("http/http-request"); + httpRequest = require("../../http/http-request"); } } diff --git a/tns-core-modules/ui/styling/style-scope.ts b/tns-core-modules/ui/styling/style-scope.ts index d2995f6af..cecab4e2b 100644 --- a/tns-core-modules/ui/styling/style-scope.ts +++ b/tns-core-modules/ui/styling/style-scope.ts @@ -35,7 +35,7 @@ import * as kam from "../animation/keyframe-animation"; let keyframeAnimationModule: typeof kam; function ensureKeyframeAnimationModule() { if (!keyframeAnimationModule) { - keyframeAnimationModule = require("ui/animation/keyframe-animation"); + keyframeAnimationModule = require("../animation/keyframe-animation"); } } From e6fd43bfe56f02935369391b47f754e323044ccf Mon Sep 17 00:00:00 2001 From: Nathanael Anderson Date: Tue, 25 Feb 2020 22:22:39 -0600 Subject: [PATCH 5/8] Fix Style Scope issue with Webpack css/scss files --- nativescript-core/ui/styling/style-scope.ts | 26 ++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/nativescript-core/ui/styling/style-scope.ts b/nativescript-core/ui/styling/style-scope.ts index 0f1a219ab..47b96e92b 100644 --- a/nativescript-core/ui/styling/style-scope.ts +++ b/nativescript-core/ui/styling/style-scope.ts @@ -110,6 +110,19 @@ class CSSSource { this.parse(); } + public static fromDetect(cssOrAst: any, keyframes: KeyframesMap, fileName?: string): CSSSource { + if (typeof cssOrAst === "string") { + // raw-loader + return CSSSource.fromSource(cssOrAst, keyframes, fileName); + } else if (typeof cssOrAst === "object" && cssOrAst.type === "stylesheet" && cssOrAst.stylesheet && cssOrAst.stylesheet.rules) { + // css-loader + return CSSSource.fromAST(cssOrAst, keyframes, fileName); + } else { + // css2json-loader + return CSSSource.fromSource(cssOrAst.toString(), keyframes, fileName); + } + } + public static fromURI(uri: string, keyframes: KeyframesMap): CSSSource { // webpack modules require all file paths to be relative to /app folder const appRelativeUri = CSSSource.pathRelativeToApp(uri); @@ -119,16 +132,7 @@ class CSSSource { try { const cssOrAst = global.loadModule(resolvedModuleName, true); if (cssOrAst) { - if (typeof cssOrAst === "string") { - // raw-loader - return CSSSource.fromSource(cssOrAst, keyframes, resolvedModuleName); - } else if (typeof cssOrAst === "object" && cssOrAst.type === "stylesheet" && cssOrAst.stylesheet && cssOrAst.stylesheet.rules) { - // css-loader - return CSSSource.fromAST(cssOrAst, keyframes, resolvedModuleName); - } else { - // css2json-loader - return CSSSource.fromSource(cssOrAst.toString(), keyframes, resolvedModuleName); - } + return CSSSource.fromDetect(cssOrAst, keyframes, resolvedModuleName); } } catch (e) { traceWrite(`Could not load CSS from ${uri}: ${e}`, traceCategories.Error, traceMessageType.error); @@ -325,7 +329,7 @@ export function removeTaggedAdditionalCSS(tag: String | Number): Boolean { } export function addTaggedAdditionalCSS(cssText: string, tag?: string | Number): Boolean { - const parsed: RuleSet[] = CSSSource.fromSource(cssText, applicationKeyframes, undefined).selectors; + const parsed: RuleSet[] = CSSSource.fromDetect(cssText, applicationKeyframes, undefined).selectors; let changed = false; if (parsed && parsed.length) { changed = true; From 1a316b8a7267163f70ff8c6bc2d09bb435754ab3 Mon Sep 17 00:00:00 2001 From: mylmz10 Date: Sat, 7 Mar 2020 20:32:48 +0300 Subject: [PATCH 6/8] Set length value to auto when length is undefined --- nativescript-core/ui/core/view/view.android.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nativescript-core/ui/core/view/view.android.ts b/nativescript-core/ui/core/view/view.android.ts index 2388aa67c..bbfab0194 100644 --- a/nativescript-core/ui/core/view/view.android.ts +++ b/nativescript-core/ui/core/view/view.android.ts @@ -1116,7 +1116,7 @@ function createNativePercentLengthProperty(options: NativePercentLengthPropertyO setPercent = options.setPercent || percentNotSupported; options = null; } - if (length == "auto") { // tslint:disable-line + if (length == "auto" || !length) { // tslint:disable-line setPixels(this.nativeViewProtected, auto); } else if (typeof length === "number") { setPixels(this.nativeViewProtected, layout.round(layout.toDevicePixels(length))); From b31114b9d7a2d7d49dc6277ebca1d0739c90c3de Mon Sep 17 00:00:00 2001 From: Manuel Saelices Date: Mon, 9 Mar 2020 01:11:50 +0100 Subject: [PATCH 7/8] Solving previous merge conflict --- .../http/http-request/http-request.android.ts | 1 - .../application/application-common.ts | 131 --------- tns-core-modules/bundle-entry-points.ts | 47 ---- tns-core-modules/globals/globals.ts | 261 ------------------ 4 files changed, 440 deletions(-) delete mode 100644 tns-core-modules/application/application-common.ts delete mode 100644 tns-core-modules/bundle-entry-points.ts delete mode 100644 tns-core-modules/globals/globals.ts diff --git a/nativescript-core/http/http-request/http-request.android.ts b/nativescript-core/http/http-request/http-request.android.ts index 794405e24..b9be9098b 100644 --- a/nativescript-core/http/http-request/http-request.android.ts +++ b/nativescript-core/http/http-request/http-request.android.ts @@ -28,7 +28,6 @@ let imageSource: typeof imageSourceModule; function ensureImageSource() { if (!imageSource) { imageSource = require("../../image-source"); - imageSource = require("../../image-source"); } } diff --git a/tns-core-modules/application/application-common.ts b/tns-core-modules/application/application-common.ts deleted file mode 100644 index 0ca6c76a1..000000000 --- a/tns-core-modules/application/application-common.ts +++ /dev/null @@ -1,131 +0,0 @@ -// Require globals first so that snapshot takes __extends function. -require("../globals"); - -import { Observable, EventData } from "../data/observable"; -import { View } from "../ui/core/view"; -import { - trace as profilingTrace, - time, - uptime, - level as profilingLevel, -} from "../profiling"; - -const events = new Observable(); -let launched = false; -function setLaunched() { - launched = true; - events.off("launch", setLaunched); -} -events.on("launch", setLaunched); - -if (profilingLevel() > 0) { - events.on("displayed", () => { - const duration = uptime(); - const end = time(); - const start = end - duration; - profilingTrace(`Displayed in ${duration.toFixed(2)}ms`, start, end); - }); -} - -export function hasLaunched(): boolean { - return launched; -} - -export { Observable }; - -import { - AndroidApplication, - CssChangedEventData, - iOSApplication, - LoadAppCSSEventData, - UnhandledErrorEventData, - DiscardedErrorEventData, -} from "./application"; - -export { UnhandledErrorEventData, DiscardedErrorEventData, CssChangedEventData, LoadAppCSSEventData }; - -export const launchEvent = "launch"; -export const suspendEvent = "suspend"; -export const displayedEvent = "displayed"; -export const resumeEvent = "resume"; -export const exitEvent = "exit"; -export const lowMemoryEvent = "lowMemory"; -export const uncaughtErrorEvent = "uncaughtError"; -export const discardedErrorEvent = "discardedError"; -export const orientationChangedEvent = "orientationChanged"; - -let cssFile: string = "./app.css"; - -let resources: any = {}; - -export function getResources() { - return resources; -} - -export function setResources(res: any) { - resources = res; -} - -export let android = undefined; -export let ios = undefined; - -export const on: typeof events.on = events.on.bind(events); -export const off: typeof events.off = events.off.bind(events); -export const notify: typeof events.notify = events.notify.bind(events); -export const hasListeners: typeof events.hasListeners = events.hasListeners.bind(events); - -let app: iOSApplication | AndroidApplication; -export function setApplication(instance: iOSApplication | AndroidApplication): void { - app = instance; -} - -export function livesync(rootView: View, context?: ModuleContext) { - events.notify({ eventName: "livesync", object: app }); - const liveSyncCore = global.__onLiveSyncCore; - let reapplyAppStyles = false; - - // ModuleContext is available only for Hot Module Replacement - if (context && context.path) { - const styleExtensions = ["css", "scss"]; - const appStylesFullFileName = getCssFileName(); - const appStylesFileName = appStylesFullFileName.substring(0, appStylesFullFileName.lastIndexOf(".") + 1); - reapplyAppStyles = styleExtensions.some(ext => context.path === appStylesFileName.concat(ext)); - } - - // Handle application styles - if (reapplyAppStyles && rootView) { - rootView._onCssStateChange(); - } else if (liveSyncCore) { - liveSyncCore(context); - } -} - -export function setCssFileName(cssFileName: string) { - cssFile = cssFileName; - events.notify({ eventName: "cssChanged", object: app, cssFile: cssFileName }); -} - -export function getCssFileName(): string { - return cssFile; -} - -export function loadAppCss(): void { - try { - events.notify({ eventName: "loadAppCss", object: app, cssFile: getCssFileName() }); - } catch (e) { - throw new Error(`The file ${getCssFileName()} couldn't be loaded! ` + - `You may need to register it inside ./app/vendor.ts.`); - } -} - -export function addCss(cssText: string): void { - events.notify({ eventName: "cssChanged", object: app, cssText: cssText }); -} - -global.__onUncaughtError = function (error: NativeScriptError) { - events.notify({ eventName: uncaughtErrorEvent, object: app, android: error, ios: error, error: error }); -}; - -global.__onDiscardedError = function (error: NativeScriptError) { - events.notify({ eventName: discardedErrorEvent, object: app, error: error }); -}; diff --git a/tns-core-modules/bundle-entry-points.ts b/tns-core-modules/bundle-entry-points.ts deleted file mode 100644 index 372b75b16..000000000 --- a/tns-core-modules/bundle-entry-points.ts +++ /dev/null @@ -1,47 +0,0 @@ -if (global.TNS_WEBPACK) { - require("globals"); - - // Register "dynamically" loaded module that need to be resolved by the - // XML/component builders. - - global.registerModule("text/formatted-string", () => require("./text/formatted-string")); - global.registerModule("text/span", () => require("./text/span")); - global.registerModule("ui/action-bar", () => require("./ui/action-bar")); - global.registerModule("ui/activity-indicator", () => require("./ui/activity-indicator")); - global.registerModule("ui/border", () => require("./ui/border")); - global.registerModule("ui/bottom-navigation", () => require("./ui/bottom-navigation")); - global.registerModule("ui/button", () => require("./ui/button")); - global.registerModule("ui/content-view", () => require("./ui/content-view")); - global.registerModule("ui/date-picker", () => require("./ui/date-picker")); - global.registerModule("ui/frame", () => require("./ui/frame")); - global.registerModule("ui/html-view", () => require("./ui/html-view")); - global.registerModule("ui/image", () => require("./ui/image")); - global.registerModule("ui/label", () => require("./ui/label")); - global.registerModule("ui/layouts/absolute-layout", () => require("./ui/layouts/absolute-layout")); - global.registerModule("ui/layouts/dock-layout", () => require("./ui/layouts/dock-layout")); - global.registerModule("ui/layouts/grid-layout", () => require("./ui/layouts/grid-layout")); - global.registerModule("ui/layouts/stack-layout", () => require("./ui/layouts/stack-layout")); - global.registerModule("ui/layouts/flexbox-layout", () => require("./ui/layouts/flexbox-layout")); - global.registerModule("ui/layouts/wrap-layout", () => require("./ui/layouts/wrap-layout")); - global.registerModule("ui/list-picker", () => require("./ui/list-picker")); - global.registerModule("ui/page", () => require("./ui/page")); - global.registerModule("ui/placeholder", () => require("./ui/placeholder")); - global.registerModule("ui/progress", () => require("./ui/progress")); - global.registerModule("ui/proxy-view-container", () => require("./ui/proxy-view-container")); - global.registerModule("ui/repeater", () => require("./ui/repeater")); - global.registerModule("ui/scroll-view", () => require("./ui/scroll-view")); - global.registerModule("ui/search-bar", () => require("./ui/search-bar")); - global.registerModule("ui/segmented-bar", () => require("./ui/segmented-bar")); - global.registerModule("ui/slider", () => require("./ui/slider")); - global.registerModule("ui/switch", () => require("./ui/switch")); - global.registerModule("ui/tab-view", () => require("./ui/tab-view")); - global.registerModule("ui/tab-navigation-base/tab-strip", () => require("./ui/tab-navigation-base/tab-strip")); - global.registerModule("ui/tab-navigation-base/tab-strip-item", () => require("./ui/tab-navigation-base/tab-strip-item")); - global.registerModule("ui/tab-navigation-base/tab-content-item", () => require("./ui/tab-navigation-base/tab-content-item")); - global.registerModule("ui/tabs", () => require("./ui/tabs")); - global.registerModule("ui/web-view", () => require("./ui/web-view")); - global.registerModule("ui/text-field", () => require("./ui/text-field")); - global.registerModule("ui/text-view", () => require("./ui/text-view")); - global.registerModule("ui/time-picker", () => require("./ui/time-picker")); - global.registerModule("ui/list-view", () => require("./ui/list-view")); -} diff --git a/tns-core-modules/globals/globals.ts b/tns-core-modules/globals/globals.ts deleted file mode 100644 index af2f62197..000000000 --- a/tns-core-modules/globals/globals.ts +++ /dev/null @@ -1,261 +0,0 @@ -// Required by TypeScript compiler -require("./ts-helpers"); - -// This method iterates all the keys in the source exports object and copies them to the destination exports one. -// Note: the method will not check for naming collisions and will override any already existing entries in the destination exports. -global.moduleMerge = function (sourceExports: any, destExports: any) { - for (let key in sourceExports) { - destExports[key] = sourceExports[key]; - } -}; - -import * as timerModule from "../timer"; -import * as dialogsModule from "../ui/dialogs"; - -type ModuleLoader = (name?: string) => any; -const modules: Map = new Map(); - -(global).moduleResolvers = [global.require]; - -global.registerModule = function (name: string, loader: ModuleLoader): void { - // console.log("[global.registerModule]", name); - modules.set(name, loader); -}; - -global._unregisterModule = function (name: string): void { - // console.log("[global._unregisterModule]", name); - modules.delete(name); -}; - -interface Context { - keys(): string[]; - (key: string): any; -} -interface ExtensionMap { - [originalFileExtension: string]: string; -} - -const defaultExtensionMap = { - ".js": ".js", - ".ts": ".js", - ".css": ".css", - ".scss": ".css", - ".less": ".css", - ".sass": ".css", - ".xml": ".xml" -}; - -global.registerWebpackModules = function registerWebpackModules(context: Context, extensionMap: ExtensionMap = {}) { - context.keys().forEach(key => { - const extDotIndex = key.lastIndexOf("."); - const base = key.substr(0, extDotIndex); - const originalExt = key.substr(extDotIndex); - const registerExt = extensionMap[originalExt] || defaultExtensionMap[originalExt] || originalExt; - - // We prefer source files for webpack scenarios before compilation leftovers, - // e. g. if we get a .js and .ts for the same module, the .js is probably the compiled version of the .ts file, - // so we register the .ts with higher priority, similar is the case with us preferring the .scss to .css - const isSourceFile = originalExt !== registerExt; - - const registerName = base + registerExt; - if (registerName.startsWith("./") && registerName.endsWith(".js")) { - const jsNickNames = [ - // This is extremely short version like "main-page" that was promoted to be used with global.registerModule("module-name", loaderFunc); - registerName.substr(2, registerName.length - 5), - // This is for supporting module names like "./main/main-page" - registerName.substr(0, registerName.length - 3), - // This is for supporting module names like "main/main-page.js" - registerName.substr(2), - ]; - - jsNickNames.forEach(jsNickName => { - if (isSourceFile || !global.moduleExists(jsNickName)) { - global.registerModule(jsNickName, () => context(key)); - } - }); - } else if (registerName.startsWith("./")) { - const moduleNickNames = [ - // This is for supporting module names like "main/main-page.xml" - registerName.substr(2), - ]; - - moduleNickNames.forEach(moduleNickName => { - if (!global.moduleExists(moduleNickName)) { - global.registerModule(moduleNickName, () => context(key)); - } - }); - } - - if (isSourceFile || !global.moduleExists(registerName)) { - global.registerModule(registerName, () => context(key)); - } - }); -}; - -global.moduleExists = function (name: string): boolean { - return modules.has(name); -}; - -global.loadModule = function (name: string): any { - const loader = modules.get(name); - if (loader) { - return loader(name); - } - - for (let resolver of (global).moduleResolvers) { - const result = resolver(name); - if (result) { - modules.set(name, () => result); - - return result; - } - } -}; - -global.getRegisteredModules = function (): string[] { - return Array.from(modules.keys()); -}; - -global.zonedCallback = function (callback: Function): Function { - if ((global).zone) { - // Zone v0.5.* style callback wrapping - return (global).zone.bind(callback); - } - if ((global).Zone) { - // Zone v0.6.* style callback wrapping - return (global).Zone.current.wrap(callback); - } else { - return callback; - } -}; - -global.registerModule("timer", () => require("../timer")); -global.registerModule("ui/dialogs", () => require("../ui/dialogs")); -global.registerModule("xhr", () => require("../xhr")); -global.registerModule("fetch", () => require("../fetch")); - -(global).System = { - import(path) { - return new Promise((resolve, reject) => { - try { - resolve(global.require(path)); - } catch (e) { - reject(e); - } - }); - } -}; - -function registerOnGlobalContext(name: string, module: string): void { - Object.defineProperty(global, name, { - get: function () { - // We do not need to cache require() call since it is already cached in the runtime. - let m = global.loadModule(module); - - // Redefine the property to make sure the above code is executed only once. - let resolvedValue = m[name]; - Object.defineProperty(global, name, { value: resolvedValue, configurable: true, writable: true }); - - return resolvedValue; - }, - configurable: true - }); -} - -let snapshotGlobals; -export function install() { - if ((global).__snapshot || (global).__snapshotEnabled) { - if (!snapshotGlobals) { - // require in snapshot mode is cheap - const timer: typeof timerModule = require("../timer"); - const dialogs: typeof dialogsModule = require("../ui/dialogs"); - const xhr = require("../xhr"); - const fetch = require("../fetch"); - - snapshotGlobals = snapshotGlobals || { - setTimeout: timer.setTimeout, - clearTimeout: timer.clearTimeout, - setInterval: timer.setInterval, - clearInterval: timer.clearInterval, - - alert: dialogs.alert, - confirm: dialogs.confirm, - prompt: dialogs.prompt, - login: dialogs.login, - action: dialogs.action, - - XMLHttpRequest: xhr.XMLHttpRequest, - FormData: xhr.FormData, - - fetch: fetch.fetch, - Headers: fetch.Headers, - Request: fetch.Request, - Response: fetch.Response, - }; - } - const consoleModule = require("../console").Console; - // Object.assign call will fire an error when trying to write to a read-only property of an object, such as 'console' - global.console = global.console || new consoleModule(); - Object.assign(global, snapshotGlobals); - } else { - registerOnGlobalContext("setTimeout", "timer"); - registerOnGlobalContext("clearTimeout", "timer"); - registerOnGlobalContext("setInterval", "timer"); - registerOnGlobalContext("clearInterval", "timer"); - - registerOnGlobalContext("alert", "ui/dialogs"); - registerOnGlobalContext("confirm", "ui/dialogs"); - registerOnGlobalContext("prompt", "ui/dialogs"); - registerOnGlobalContext("login", "ui/dialogs"); - registerOnGlobalContext("action", "ui/dialogs"); - - registerOnGlobalContext("XMLHttpRequest", "xhr"); - registerOnGlobalContext("FormData", "xhr"); - - registerOnGlobalContext("fetch", "fetch"); - registerOnGlobalContext("Headers", "fetch"); - registerOnGlobalContext("Request", "fetch"); - registerOnGlobalContext("Response", "fetch"); - } -} -install(); - -export function Deprecated(target: Object, key?: string | symbol, descriptor?: any) { - if (descriptor) { - const originalMethod = descriptor.value; - - descriptor.value = function (...args: any[]) { - console.log(`${key.toString()} is deprecated`); - - return originalMethod.apply(this, args); - }; - - return descriptor; - } else { - console.log(`${(target && (target).name || target)} is deprecated`); - - return target; - } -} - -global.Deprecated = Deprecated; - -export function Experimental(target: Object, key?: string | symbol, descriptor?: any) { - if (descriptor) { - const originalMethod = descriptor.value; - - descriptor.value = function (...args: any[]) { - console.log(`${key.toString()} is experimental`); - - return originalMethod.apply(this, args); - }; - - return descriptor; - } else { - console.log(`${(target && (target).name || target)} is experimental`); - - return target; - } -} - -global.Experimental = Experimental; From a3c881fd5ef9d453501b54b31ca58ff1b9543c93 Mon Sep 17 00:00:00 2001 From: Manuel Saelices Date: Mon, 9 Mar 2020 01:15:50 +0100 Subject: [PATCH 8/8] TypeScript definitions for the css-tree-parser.ts file --- nativescript-core/css/css-tree-parser.d.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 nativescript-core/css/css-tree-parser.d.ts diff --git a/nativescript-core/css/css-tree-parser.d.ts b/nativescript-core/css/css-tree-parser.d.ts new file mode 100644 index 000000000..263200320 --- /dev/null +++ b/nativescript-core/css/css-tree-parser.d.ts @@ -0,0 +1 @@ +export declare function cssTreeParse(css: any, source: any): any;