From e2db2875c279782ccb6f87fb646bb72622f64357 Mon Sep 17 00:00:00 2001 From: Polina Nguen Date: Tue, 21 Jul 2020 15:32:31 -0700 Subject: [PATCH 1/2] Convert attributes_validator to TS --- .../lib/core/event_builder/event_helpers.js | 2 +- .../lib/core/event_builder/index.js | 2 +- .../utils/attributes_validator/index.tests.js | 2 +- .../{index.js => index.ts} | 32 ++++++++++--------- 4 files changed, 20 insertions(+), 18 deletions(-) rename packages/optimizely-sdk/lib/utils/attributes_validator/{index.js => index.ts} (72%) diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.js b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.js index 778efa662..e85ea0f30 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.js +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.js @@ -18,7 +18,7 @@ import { getLogger } from '@optimizely/js-sdk-logging'; import fns from '../../utils/fns'; import projectConfig from '../project_config'; import eventTagUtils from '../../utils/event_tag_utils'; -import attributesValidator from'../../utils/attributes_validator'; +import * as attributesValidator from'../../utils/attributes_validator'; var logger = getLogger('EVENT_BUILDER'); diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.js b/packages/optimizely-sdk/lib/core/event_builder/index.js index 08cb0225e..77d934fed 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.js +++ b/packages/optimizely-sdk/lib/core/event_builder/index.js @@ -17,7 +17,7 @@ import fns from '../../utils/fns'; import enums from '../../utils/enums'; import projectConfig from '../project_config'; import eventTagUtils from '../../utils/event_tag_utils'; -import attributeValidator from '../../utils/attributes_validator'; +import * as attributeValidator from '../../utils/attributes_validator'; var ACTIVATE_EVENT_KEY = 'campaign_activated'; var CUSTOM_ATTRIBUTE_FEATURE_TYPE = 'custom'; diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js index 96ebbd7f6..91dfaef55 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js @@ -16,7 +16,7 @@ import { assert } from 'chai'; import { sprintf } from '@optimizely/js-sdk-utils'; -import attributesValidator from './'; +import * as attributesValidator from './'; import { ERROR_MESSAGES } from '../enums'; describe('lib/utils/attributes_validator', function() { diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.js b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts similarity index 72% rename from packages/optimizely-sdk/lib/utils/attributes_validator/index.js rename to packages/optimizely-sdk/lib/utils/attributes_validator/index.ts index 2b15c27a1..f08adac79 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.js +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts @@ -18,15 +18,19 @@ import { sprintf } from '@optimizely/js-sdk-utils'; import fns from '../../utils/fns'; import { ERROR_MESSAGES } from '../enums'; -var MODULE_NAME = 'ATTRIBUTES_VALIDATOR'; +const MODULE_NAME = 'ATTRIBUTES_VALIDATOR'; /** * Validates user's provided attributes - * @param {Object} attributes - * @return {boolean} True if the attributes are valid + * @param {object} attributes + * @return {boolean} true if the attributes are valid * @throws If the attributes are not valid */ -export var validate = function(attributes) { +type Attributes = { + [key: string]: string | number | boolean +} + +export function validate(attributes: Attributes): boolean { if (typeof attributes === 'object' && !Array.isArray(attributes) && attributes !== null) { Object.keys(attributes).forEach(function(key) { if (typeof attributes[key] === 'undefined') { @@ -37,21 +41,19 @@ export var validate = function(attributes) { } else { throw new Error(sprintf(ERROR_MESSAGES.INVALID_ATTRIBUTES, MODULE_NAME)); } -}; +} -export var isAttributeValid = function(attributeKey, attributeValue) { +/** + * Validates user's provided attribute + * @param {string} attributeKey + * @param {string | boolean | number} attributeValue + * @return {boolean} true if the attribute is valid + */ +export function isAttributeValid(attributeKey: string, attributeValue: string | boolean | number): boolean { return ( typeof attributeKey === 'string' && (typeof attributeValue === 'string' || typeof attributeValue === 'boolean' || (fns.isNumber(attributeValue) && fns.isSafeInteger(attributeValue))) ); -}; - -/** - * Provides utility method for validating that the attributes user has provided are valid - */ -export default { - validate: validate, - isAttributeValid: isAttributeValid, -}; +} From cf56a9b78db3a13acdbe4d3781a457f7461b77bd Mon Sep 17 00:00:00 2001 From: Polina Nguen Date: Wed, 29 Jul 2020 09:58:32 -0700 Subject: [PATCH 2/2] Change type attributes, attributeKey, and attributeValue to unknown --- .../lib/utils/attributes_validator/index.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts index f08adac79..8fdccbe50 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts @@ -22,15 +22,12 @@ const MODULE_NAME = 'ATTRIBUTES_VALIDATOR'; /** * Validates user's provided attributes - * @param {object} attributes - * @return {boolean} true if the attributes are valid + * @param {unknown} attributes + * @return {boolean} true if the attributes are valid * @throws If the attributes are not valid */ -type Attributes = { - [key: string]: string | number | boolean -} -export function validate(attributes: Attributes): boolean { +export function validate(attributes: unknown): boolean { if (typeof attributes === 'object' && !Array.isArray(attributes) && attributes !== null) { Object.keys(attributes).forEach(function(key) { if (typeof attributes[key] === 'undefined') { @@ -45,11 +42,11 @@ export function validate(attributes: Attributes): boolean { /** * Validates user's provided attribute - * @param {string} attributeKey - * @param {string | boolean | number} attributeValue + * @param {unknown} attributeKey + * @param {unknown} attributeValue * @return {boolean} true if the attribute is valid */ -export function isAttributeValid(attributeKey: string, attributeValue: string | boolean | number): boolean { +export function isAttributeValid(attributeKey: unknown, attributeValue: unknown): boolean { return ( typeof attributeKey === 'string' && (typeof attributeValue === 'string' ||