diff --git a/.eslintrc.json b/.eslintrc.json index 5b7d00967..3eab9c6ec 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -24,7 +24,22 @@ { "files": ["*.ts", "*.tsx"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier", "plugin:@nrwl/nx/typescript"], - "rules": {} + "rules": { + "no-empty": "off", + "no-useless-escape": "off", + "no-inner-declarations": "off", + "no-prototype-builtins": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-this-alias": "warn", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-inferrable-types": "off" + } }, { "files": ["*.js", "*.jsx"], diff --git a/packages/core/core-types/index.ts b/packages/core/core-types/index.ts index 539ceb3f9..2b8f1ddc8 100644 --- a/packages/core/core-types/index.ts +++ b/packages/core/core-types/index.ts @@ -38,7 +38,7 @@ export namespace CoreTypes { }; export type KeyboardInputType = 'datetime' | 'phone' | 'number' | 'url' | 'email' | 'integer'; - export module KeyboardType { + export namespace KeyboardType { export const datetime = 'datetime'; export const phone = 'phone'; export const number = 'number'; @@ -47,14 +47,17 @@ export namespace CoreTypes { export const integer = 'integer'; } export type AutofillType = 'username' | 'password' | 'none' | string; - export module AutofillType { + export namespace AutofillType { export const username = 'username'; export const password = 'password'; + export const newUsername = 'newUsername'; + export const newPassword = 'newPassword'; + export const oneTimeCode = 'oneTimeCode'; export const none = 'none'; } export type ReturnKeyButtonType = 'done' | 'next' | 'go' | 'search' | 'send'; - export module ReturnKeyType { + export namespace ReturnKeyType { export const done = 'done'; export const next = 'next'; export const go = 'go'; @@ -63,7 +66,7 @@ export namespace CoreTypes { } export type TextAlignmentType = 'initial' | 'left' | 'center' | 'right' | 'justify'; - export module TextAlignment { + export namespace TextAlignment { export const left = 'left'; export const center = 'center'; export const right = 'right'; @@ -71,14 +74,14 @@ export namespace CoreTypes { } export type TextDecorationType = 'none' | 'underline' | 'line-through' | 'underline line-through'; - export module TextDecoration { + export namespace TextDecoration { export const none = 'none'; export const underline = 'underline'; export const lineThrough = 'line-through'; } export type TextTransformType = 'initial' | 'none' | 'capitalize' | 'uppercase' | 'lowercase'; - export module TextTransform { + export namespace TextTransform { export const none = 'none'; export const capitalize = 'capitalize'; export const uppercase = 'uppercase'; @@ -86,7 +89,7 @@ export namespace CoreTypes { } export type WhiteSpaceType = 'initial' | 'normal' | 'nowrap'; - export module WhiteSpace { + export namespace WhiteSpace { export const normal = 'normal'; export const nowrap = 'nowrap'; } @@ -94,20 +97,20 @@ export namespace CoreTypes { export type MaxLinesType = number; export type OrientationType = 'horizontal' | 'vertical'; - export module Orientation { + export namespace Orientation { export const horizontal = 'horizontal'; export const vertical = 'vertical'; } export type DeviceOrientationType = 'portrait' | 'landscape' | 'unknown'; - export module DeviceOrientation { + export namespace DeviceOrientation { export const portrait = 'portrait'; export const landscape = 'landscape'; export const unknown = 'unknown'; } export type HorizontalAlignmentType = 'left' | 'center' | 'right' | 'stretch'; - export module HorizontalAlignment { + export namespace HorizontalAlignment { export const left = 'left'; export const center = 'center'; export const right = 'right'; @@ -117,7 +120,7 @@ export namespace CoreTypes { } export type VerticalAlignmentType = 'top' | 'middle' | 'bottom' | 'stretch'; - export module VerticalAlignment { + export namespace VerticalAlignment { export const top = 'top'; export const middle = 'middle'; export const bottom = 'bottom'; @@ -140,7 +143,7 @@ export namespace CoreTypes { } export type ImageStretchType = 'none' | 'aspectFill' | 'aspectFit' | 'fill'; - export module ImageStretch { + export namespace ImageStretch { export const none: ImageStretchType = 'none'; export const aspectFill: ImageStretchType = 'aspectFill'; export const aspectFit: ImageStretchType = 'aspectFit'; @@ -148,7 +151,7 @@ export namespace CoreTypes { } export type VisibilityType = 'visible' | 'hidden' | 'collapse' | 'collapsed'; - export module Visibility { + export namespace Visibility { export const visible: VisibilityType = 'visible'; export const collapse: VisibilityType = 'collapse'; export const collapsed: VisibilityType = 'collapsed'; @@ -158,30 +161,30 @@ export namespace CoreTypes { const parseStrict = makeParser(isValid); } - export module FontAttributes { + export namespace FontAttributes { export const Normal = 0; export const Bold = 1; export const Italic = 1 << 1; } - export module DeviceType { + export namespace DeviceType { export const Phone: string = 'Phone'; export const Tablet: string = 'Tablet'; } export type UpdateTextTriggerType = 'focusLost' | 'textChanged'; - export module UpdateTextTrigger { + export namespace UpdateTextTrigger { export const focusLost: UpdateTextTriggerType = 'focusLost'; export const textChanged: UpdateTextTriggerType = 'textChanged'; } - export module Accuracy { + export namespace Accuracy { export const any: number = 300; export const high: number = 3; } export type DockType = 'left' | 'top' | 'right' | 'bottom'; - export module Dock { + export namespace Dock { export const left: DockType = 'left'; export const top: DockType = 'top'; export const right: DockType = 'right'; @@ -189,48 +192,48 @@ export namespace CoreTypes { } export type AutocapitalizationInputType = 'none' | 'words' | 'sentences' | 'allcharacters'; - export module AutocapitalizationType { + export namespace AutocapitalizationType { export const none: AutocapitalizationInputType = 'none'; export const words: AutocapitalizationInputType = 'words'; export const sentences: AutocapitalizationInputType = 'sentences'; export const allCharacters: AutocapitalizationInputType = 'allcharacters'; } - export module NavigationBarVisibility { + export namespace NavigationBarVisibility { export const auto: string = 'auto'; export const never: string = 'never'; export const always: string = 'always'; } - export module AndroidActionBarIconVisibility { + export namespace AndroidActionBarIconVisibility { export const auto: string = 'auto'; export const never: string = 'never'; export const always: string = 'always'; } - export module AndroidActionItemPosition { + export namespace AndroidActionItemPosition { export const actionBar: string = 'actionBar'; export const actionBarIfRoom: string = 'actionBarIfRoom'; export const popup: string = 'popup'; } - export module IOSActionItemPosition { + export namespace IOSActionItemPosition { export const left: string = 'left'; export const right: string = 'right'; } - export module ImageFormat { + export namespace ImageFormat { export const png: string = 'png'; export const jpeg: string = 'jpeg'; export const jpg: string = 'jpg'; } - export module FontStyle { + export namespace FontStyle { export const normal: string = 'normal'; export const italic: string = 'italic'; } - export module FontWeight { + export namespace FontWeight { export const thin: string = '100'; export const extraLight: string = '200'; export const light: string = '300'; @@ -243,7 +246,7 @@ export namespace CoreTypes { } export type BackgroundRepeatType = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'; - export module BackgroundRepeat { + export namespace BackgroundRepeat { export const repeat: BackgroundRepeatType = 'repeat'; export const repeatX: BackgroundRepeatType = 'repeat-x'; export const repeatY: BackgroundRepeatType = 'repeat-y'; @@ -254,26 +257,26 @@ export namespace CoreTypes { let animation: typeof animationModule; - export module AnimationCurve { + export namespace AnimationCurve { export const ease = 'ease'; export const easeIn = 'easeIn'; export const easeOut = 'easeOut'; export const easeInOut = 'easeInOut'; export const linear = 'linear'; export const spring = 'spring'; - export function cubicBezier(x1: number, y1: number, x2: number, y2: number): Object { + export function cubicBezier(x1: number, y1: number, x2: number, y2: number) { animation = animation || require('../ui/animation'); return new animation.CubicBezierAnimationCurve(x1, y1, x2, y2); } } - export module StatusBarStyle { + export namespace StatusBarStyle { export const light = 'light'; export const dark = 'dark'; } - export module SystemAppearance { + export namespace SystemAppearance { export const light = 'light'; export const dark = 'dark'; } diff --git a/packages/core/css/parser.ts b/packages/core/css/parser.ts index b3669b7c7..83705ba3d 100644 --- a/packages/core/css/parser.ts +++ b/packages/core/css/parser.ts @@ -460,6 +460,7 @@ function parseArgumentsList(text: string, start: number, argument: (value: st return { start, end, value }; } + // eslint-disable-next-line no-constant-condition for (let index = 0; true; index++) { const arg = argument(text, end, index); if (!arg) { diff --git a/packages/core/data/observable-array/index.ts b/packages/core/data/observable-array/index.ts index 500950a4a..03a5d7e18 100644 --- a/packages/core/data/observable-array/index.ts +++ b/packages/core/data/observable-array/index.ts @@ -95,7 +95,7 @@ export class ObservableArray extends Observable { } *[Symbol.iterator]() { - for (let item of this._array) { + for (const item of this._array) { yield item; } } diff --git a/packages/core/globals/index.ts b/packages/core/globals/index.ts index eb6d0d0ca..2af308001 100644 --- a/packages/core/globals/index.ts +++ b/packages/core/globals/index.ts @@ -362,7 +362,7 @@ export function initGlobal() { } } -declare var jest: any; +declare const jest: any; function isTestingEnv() { return typeof jest !== 'undefined'; } diff --git a/packages/core/ui/action-bar/action-bar-common.ts b/packages/core/ui/action-bar/action-bar-common.ts index f5610e95a..103699c02 100644 --- a/packages/core/ui/action-bar/action-bar-common.ts +++ b/packages/core/ui/action-bar/action-bar-common.ts @@ -22,13 +22,14 @@ export class ActionBarBase extends View implements ActionBarDefinition { public effectiveContentInsetLeft: number; public effectiveContentInsetRight: number; - get navigationButton(): NavigationButton { - return this._navigationButton; - } disposeNativeView() { this._actionItems = null; super.disposeNativeView(); } + + get navigationButton(): NavigationButton { + return this._navigationButton; + } set navigationButton(value: NavigationButton) { if (this._navigationButton !== value) { if (this._navigationButton) { diff --git a/packages/core/ui/core/bindable/bindable-expressions.ts b/packages/core/ui/core/bindable/bindable-expressions.ts index 6954030e9..0bd062c5a 100644 --- a/packages/core/ui/core/bindable/bindable-expressions.ts +++ b/packages/core/ui/core/bindable/bindable-expressions.ts @@ -51,8 +51,8 @@ const logicalOperators = { const expressionParsers = { 'ArrayExpression': (expression: ASTExpression, model, isBackConvert: boolean, changedModel) => { const parsed = []; - for (let element of expression.elements) { - let value = convertExpressionToValue(element, model, isBackConvert, changedModel); + for (const element of expression.elements) { + const value = convertExpressionToValue(element, model, isBackConvert, changedModel); element.type == 'SpreadElement' ? parsed.push(...value) : parsed.push(value); } return parsed; @@ -116,8 +116,8 @@ const expressionParsers = { } const parsedArgs = []; - for (let argument of expression.arguments) { - let value = convertExpressionToValue(argument, model, isBackConvert, changedModel); + for (const argument of expression.arguments) { + const value = convertExpressionToValue(argument, model, isBackConvert, changedModel); argument.type == 'SpreadElement' ? parsedArgs.push(...value) : parsedArgs.push(value); } return expression.optional ? callback?.(...parsedArgs) : callback(...parsedArgs); @@ -181,8 +181,8 @@ const expressionParsers = { 'NewExpression': (expression: ASTExpression, model, isBackConvert: boolean, changedModel) => { const callback = convertExpressionToValue(expression.callee, model, isBackConvert, changedModel); const parsedArgs = []; - for (let argument of expression.arguments) { - let value = convertExpressionToValue(argument, model, isBackConvert, changedModel); + for (const argument of expression.arguments) { + const value = convertExpressionToValue(argument, model, isBackConvert, changedModel); argument.type == 'SpreadElement' ? parsedArgs.push(...value) : parsedArgs.push(value); } @@ -194,7 +194,7 @@ const expressionParsers = { }, 'ObjectExpression': (expression: ASTExpression, model, isBackConvert: boolean, changedModel) => { const parsedObject = {}; - for (let property of expression.properties) { + for (const property of expression.properties) { const value = convertExpressionToValue(property, model, isBackConvert, changedModel); Object.assign(parsedObject, value); } @@ -217,7 +217,7 @@ const expressionParsers = { const length = expression.quasis.length; for (let i = 0; i < length; i++) { - let q = expression.quasis[i]; + const q = expression.quasis[i]; parsedText += convertExpressionToValue(q, model, isBackConvert, changedModel); if (!q.tail) { parsedText += convertExpressionToValue(expression.expressions[i], model, isBackConvert, changedModel); @@ -262,7 +262,7 @@ export function parseExpression(expressionText: string): ASTExpression { if (expression == null) { const program: any = parse(expressionText, { ecmaVersion: 2020 }); const statements = program.body; - for (let statement of statements) { + for (const statement of statements) { if (statement.type == 'ExpressionStatement') { expression = statement.expression; break; diff --git a/packages/core/ui/core/bindable/index.ts b/packages/core/ui/core/bindable/index.ts index cb0ee5220..a737f80f2 100644 --- a/packages/core/ui/core/bindable/index.ts +++ b/packages/core/ui/core/bindable/index.ts @@ -415,7 +415,7 @@ export class Binding { } // Clear added props - for (let prop of addedProps) { + for (const prop of addedProps) { delete context[prop]; } addedProps.length = 0; diff --git a/packages/core/ui/editable-text-base/index.android.ts b/packages/core/ui/editable-text-base/index.android.ts index e0d0352af..4c090a054 100644 --- a/packages/core/ui/editable-text-base/index.android.ts +++ b/packages/core/ui/editable-text-base/index.android.ts @@ -229,7 +229,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { newInputType = android.text.InputType.TYPE_CLASS_NUMBER; break; - default: + default: { const inputType = +value; if (!isNaN(inputType)) { newInputType = inputType; @@ -237,6 +237,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { newInputType = android.text.InputType.TYPE_CLASS_TEXT; } break; + } } this._setInputType(newInputType); @@ -269,6 +270,15 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { case 'password': newOptions = 'password'; // android.view.View.AUTOFILL_HINT_PASSWORD break; + case 'newPassword': + newOptions = 'newPassword'; // android.view.View.AUTOFILL_HINT_NEW_PASSWORD + break; + case 'newUsername': + newOptions = 'newUsername'; // android.view.View.AUTOFILL_HINT_NEW_USERNAME + break; + case 'oneTimeCode': + newOptions = '2faAppOTPCode'; // android.view.View.AUTOFILL_HINT_2FA_APP_OTP + break; case 'none': newOptions = null; break; diff --git a/packages/core/ui/editable-text-base/index.ios.ts b/packages/core/ui/editable-text-base/index.ios.ts index df6f436d2..305ddb359 100644 --- a/packages/core/ui/editable-text-base/index.ios.ts +++ b/packages/core/ui/editable-text-base/index.ios.ts @@ -60,7 +60,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { newKeyboardType = UIKeyboardType.NumberPad; break; - default: + default: { const kt = +value; if (!isNaN(kt)) { newKeyboardType = kt; @@ -68,6 +68,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { newKeyboardType = UIKeyboardType.Default; } break; + } } this.nativeTextViewProtected.keyboardType = newKeyboardType; @@ -96,11 +97,19 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { case 'password': newTextContentType = UITextContentTypePassword; break; + case 'newPassword': + newTextContentType = UITextContentTypeNewPassword; + break; + case 'oneTimeCode': + newTextContentType = UITextContentTypeOneTimeCode; + break; case 'none': newTextContentType = null; - default: + break; + default: { newTextContentType = value; break; + } } this.nativeTextViewProtected.textContentType = newTextContentType; @@ -146,7 +155,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { case 'send': newValue = UIReturnKeyType.Send; break; - default: + default: { const rkt = +value; if (!isNaN(rkt)) { newValue = rkt; @@ -154,6 +163,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { newValue = UIKeyboardType.Default; } break; + } } this.nativeTextViewProtected.returnKeyType = newValue; diff --git a/packages/core/ui/frame/index.android.ts b/packages/core/ui/frame/index.android.ts index 8d652650a..1b926728e 100644 --- a/packages/core/ui/frame/index.android.ts +++ b/packages/core/ui/frame/index.android.ts @@ -439,7 +439,7 @@ export class Frame extends FrameBase { const newFragmentTag = `fragment${fragmentId}[${navDepth}]`; const newFragment = this.createFragment(newEntry, newFragmentTag); const transaction = manager.beginTransaction(); - let animated = currentEntry ? this._getIsAnimatedNavigation(newEntry.entry) : false; + const animated = currentEntry ? this._getIsAnimatedNavigation(newEntry.entry) : false; // NOTE: Don't use transition for the initial navigation (same as on iOS) // On API 21+ transition won't be triggered unless there was at least one // layout pass so we will wait forever for transitionCompleted handler... diff --git a/packages/core/ui/frame/index.ios.ts b/packages/core/ui/frame/index.ios.ts index 60a42befd..71e4d73e2 100644 --- a/packages/core/ui/frame/index.ios.ts +++ b/packages/core/ui/frame/index.ios.ts @@ -84,7 +84,7 @@ export class Frame extends FrameBase { } let navigationTransition: NavigationTransition; - let animated = this.currentPage ? this._getIsAnimatedNavigation(backstackEntry.entry) : false; + const animated = this.currentPage ? this._getIsAnimatedNavigation(backstackEntry.entry) : false; if (animated) { navigationTransition = this._getNavigationTransition(backstackEntry.entry); if (navigationTransition) { @@ -183,7 +183,7 @@ export class Frame extends FrameBase { } private pushViewControllerAnimated(viewController: UIViewController, animated: boolean, isModal: boolean) { - let transitionCoordinator = this._ios.controller.transitionCoordinator; + const transitionCoordinator = this._ios.controller.transitionCoordinator; if (!isModal && transitionCoordinator) { transitionCoordinator.animateAlongsideTransitionCompletion(null, () => { this._ios.controller.pushViewControllerAnimated(viewController, animated); diff --git a/packages/core/ui/layouts/grid-layout/grid-layout-common.ts b/packages/core/ui/layouts/grid-layout/grid-layout-common.ts index 581bcab04..0e18444df 100644 --- a/packages/core/ui/layouts/grid-layout/grid-layout-common.ts +++ b/packages/core/ui/layouts/grid-layout/grid-layout-common.ts @@ -78,15 +78,15 @@ export class ItemSpec extends Observable implements ItemSpecDefinition { private _value: number; private _unitType: GridUnitType; - constructor() { + constructor(...args) { super(); - if (arguments.length === 0) { + if (args.length === 0) { this._value = 1; this._unitType = GridUnitType.STAR; } else if (arguments.length === 2) { - const value = arguments[0]; - const type = arguments[1]; + const value = args[0]; + const type = args[1]; if (typeof value === 'number' && typeof type === 'string') { if (value < 0 || isNaN(value) || !isFinite(value)) { throw new Error(`Value should not be negative, NaN or Infinity: ${value}`); @@ -381,9 +381,9 @@ rowSpanProperty.register(View); export type GridUnitType = 'pixel' | 'star' | 'auto'; export namespace GridUnitType { - export const PIXEL: 'pixel' = 'pixel'; - export const STAR: 'star' = 'star'; - export const AUTO: 'auto' = 'auto'; + export const PIXEL = 'pixel'; + export const STAR = 'star'; + export const AUTO = 'auto'; export const isValid = makeValidator(PIXEL, STAR, AUTO); export const parse = makeParser(isValid); } diff --git a/packages/core/ui/layouts/root-layout/index.android.ts b/packages/core/ui/layouts/root-layout/index.android.ts index 1d5748d88..fbb87988c 100644 --- a/packages/core/ui/layouts/root-layout/index.android.ts +++ b/packages/core/ui/layouts/root-layout/index.android.ts @@ -109,7 +109,7 @@ export class RootLayout extends RootLayoutBase { backgroundColorAnimator.addUpdateListener( new android.animation.ValueAnimator.AnimatorUpdateListener({ onAnimationUpdate(animator: android.animation.ValueAnimator) { - let argb = (animator.getAnimatedValue()).intValue(); + const argb = (animator.getAnimatedValue()).intValue(); view.backgroundColor = new Color(argb); }, }) diff --git a/packages/core/ui/styling/style-properties.ts b/packages/core/ui/styling/style-properties.ts index 08da7e6d1..90e9ad1a6 100644 --- a/packages/core/ui/styling/style-properties.ts +++ b/packages/core/ui/styling/style-properties.ts @@ -734,6 +734,7 @@ function normalizeTransformation({ property, value }: Transformation): Transform } function convertTransformValue(property: string, stringValue: string): TransformationValue { + /* eslint-disable prefer-const */ let [x, y, z] = stringValue.split(',').map(parseFloat); if (property === 'translate') { y ??= IDENTITY_TRANSFORMATION.translate.y; diff --git a/packages/core/utils/common.ts b/packages/core/utils/common.ts index 17c3ad4d8..20cadd7a3 100644 --- a/packages/core/utils/common.ts +++ b/packages/core/utils/common.ts @@ -159,11 +159,11 @@ export function debounce(fn: any, delay = 300) { }; } -export function throttle(fn: any, delay = 300) { +export function throttle(fn: Function, delay = 300) { let waiting = false; - return function () { + return function (...args) { if (!waiting) { - fn.apply(this, arguments); + fn.apply(this, args); waiting = true; setTimeout(function () { waiting = false; diff --git a/packages/core/utils/index.android.ts b/packages/core/utils/index.android.ts index 5cd1b0710..5677c5451 100644 --- a/packages/core/utils/index.android.ts +++ b/packages/core/utils/index.android.ts @@ -22,20 +22,11 @@ export function openUrl(location: string): boolean { const context = ad.getApplicationContext(); try { const intent = new android.content.Intent(android.content.Intent.ACTION_VIEW, android.net.Uri.parse(location.trim())); - const packageManager = context.getPackageManager(); - intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK); - - // Handle schemes like mailto, tel, etc - if (intent.resolveActivity(packageManager) == null) { - Trace.write('Unable to open ' + location + '. Make sure to add queries element(https://developer.android.com/guide/topics/manifest/queries-element) matching the scheme to the AndroidManifest.xml file.', Trace.categories.Error, Trace.messageType.error); - return false; - } - context.startActivity(intent); } catch (e) { - // We Don't do anything with an error. We just output it - Trace.write('Error in OpenURL', Trace.categories.Error, Trace.messageType.error); + // We don't do anything with an error. We just output it + Trace.write(`Failed to start activity for handling URL: ${location}`, Trace.categories.Error, Trace.messageType.error); return false; } diff --git a/packages/core/utils/native-helper.android.ts b/packages/core/utils/native-helper.android.ts index 48dadb2c3..3d8339107 100644 --- a/packages/core/utils/native-helper.android.ts +++ b/packages/core/utils/native-helper.android.ts @@ -34,9 +34,10 @@ export function dataDeserialize(nativeData?: any) { } case 'org.json.JSONObject': { store = {}; - let i = nativeData.keys(); + const i = nativeData.keys(); + let key; while (i.hasNext()) { - let key = i.next(); + key = i.next(); store[key] = dataDeserialize(nativeData.get(key)); } break; diff --git a/packages/core/utils/native-helper.ios.ts b/packages/core/utils/native-helper.ios.ts index 1b759f4fc..0c73a9495 100644 --- a/packages/core/utils/native-helper.ios.ts +++ b/packages/core/utils/native-helper.ios.ts @@ -36,8 +36,8 @@ export function dataDeserialize(nativeData?: any) { case 'NSNull': return null; case 'NSMutableDictionary': - case 'NSDictionary': - let obj = {}; + case 'NSDictionary': { + const obj = {}; const length = nativeData.count; const keysArray = nativeData.allKeys as NSArray; for (let i = 0; i < length; i++) { @@ -45,14 +45,16 @@ export function dataDeserialize(nativeData?: any) { obj[nativeKey] = dataDeserialize(nativeData.objectForKey(nativeKey)); } return obj; + } case 'NSMutableArray': - case 'NSArray': - let array = []; + case 'NSArray': { + const array = []; const len = nativeData.count; for (let i = 0; i < len; i++) { array[i] = dataDeserialize(nativeData.objectAtIndex(i)); } return array; + } default: return nativeData; }