From e783f4c4553fe19667d6be6bbf05c8d380ba1d74 Mon Sep 17 00:00:00 2001 From: Polina Nguen Date: Thu, 16 Jul 2020 21:30:45 -0700 Subject: [PATCH 1/3] Convert project_config_schema and json_schema_validator modules to TS --- .../lib/core/decision_service/index.tests.js | 2 +- .../project_config_manager.tests.js | 2 +- ...nfig_schema.js => project_config_schema.ts} | 8 ++++++-- .../lib/optimizely/index.tests.js | 2 +- .../{index.js => index.ts} | 18 +++++++----------- 5 files changed, 16 insertions(+), 16 deletions(-) rename packages/optimizely-sdk/lib/core/project_config/{project_config_schema.js => project_config_schema.ts} (98%) rename packages/optimizely-sdk/lib/utils/json_schema_validator/{index.js => index.ts} (75%) diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.tests.js b/packages/optimizely-sdk/lib/core/decision_service/index.tests.js index 6571364d1..0f5b20552 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.tests.js +++ b/packages/optimizely-sdk/lib/core/decision_service/index.tests.js @@ -32,7 +32,7 @@ import AudienceEvaluator from '../audience_evaluator'; import errorHandler from '../../plugins/error_handler'; import eventBuilder from '../../core/event_builder/index.js'; import eventDispatcher from '../../plugins/event_dispatcher/index.node'; -import jsonSchemaValidator from '../../utils/json_schema_validator'; +import * as jsonSchemaValidator from '../../utils/json_schema_validator'; import { getTestProjectConfig, getTestProjectConfigWithFeatures, diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index de38044ea..e43b95fc5 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -25,7 +25,7 @@ import { ERROR_MESSAGES, LOG_MESSAGES } from '../../utils/enums'; import testData from '../../tests/test_data'; import * as optimizelyConfig from '../optimizely_config/index'; import projectConfigManager from './project_config_manager'; -import jsonSchemaValidator from '../../utils/json_schema_validator'; +import * as jsonSchemaValidator from '../../utils/json_schema_validator'; describe('lib/core/project_config/project_config_manager', function() { var globalStubErrorHandler; diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_schema.js b/packages/optimizely-sdk/lib/core/project_config/project_config_schema.ts similarity index 98% rename from packages/optimizely-sdk/lib/core/project_config/project_config_schema.js rename to packages/optimizely-sdk/lib/core/project_config/project_config_schema.ts index d04959b0d..27077de49 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_schema.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_schema.ts @@ -17,7 +17,9 @@ /** * Project Config JSON Schema file used to validate the project json datafile */ -export var schema = { + import { JSONSchema4 } from 'json-schema'; + + var schemaDefinition = { $schema: 'http://json-schema.org/draft-04/schema#', type: 'object', properties: { @@ -276,4 +278,6 @@ export var schema = { }, }; -export default schema; +const schema = schemaDefinition as JSONSchema4 + +export { schema } diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index 777d4c505..003685832 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -31,7 +31,7 @@ import errorHandler from '../plugins/error_handler'; import fns from '../utils/fns'; import logger from '../plugins/logger'; import decisionService from '../core/decision_service'; -import jsonSchemaValidator from '../utils/json_schema_validator'; +import * as jsonSchemaValidator from '../utils/json_schema_validator'; import projectConfig from '../core/project_config'; import testData from '../tests/test_data'; diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.js b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts similarity index 75% rename from packages/optimizely-sdk/lib/utils/json_schema_validator/index.js rename to packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts index 3f21978de..65a7a1742 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.js +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts @@ -17,21 +17,21 @@ import { sprintf } from '@optimizely/js-sdk-utils'; import { validate as jsonSchemaValidator } from 'json-schema'; import { ERROR_MESSAGES } from '../enums'; -import projectConfigSchema from '../../core/project_config/project_config_schema'; +import { schema } from '../../core/project_config/project_config_schema'; -var MODULE_NAME = 'JSON_SCHEMA_VALIDATOR'; +const MODULE_NAME = 'JSON_SCHEMA_VALIDATOR'; /** * Validate the given json object against the specified schema - * @param {Object} jsonObject The object to validate against the schema - * @return {Boolean} True if the given object is valid + * @param {object} jsonObject The object to validate against the schema + * @return {boolean} true if the given object is valid */ -export var validate = function(jsonObject) { +export function validate(jsonObject: Record): boolean { if (!jsonObject) { throw new Error(sprintf(ERROR_MESSAGES.NO_JSON_PROVIDED, MODULE_NAME)); } - var result = jsonSchemaValidator(jsonObject, projectConfigSchema); + const result = jsonSchemaValidator(jsonObject, schema); if (result.valid) { return true; } else { @@ -42,8 +42,4 @@ export var validate = function(jsonObject) { } throw new Error(sprintf(ERROR_MESSAGES.INVALID_JSON, MODULE_NAME)); } -}; - -export default { - validate: validate, -}; +} From a004a3c4667fc15e794473f651f04b2b754814bd Mon Sep 17 00:00:00 2001 From: Polina Nguen Date: Fri, 17 Jul 2020 14:38:43 -0700 Subject: [PATCH 2/3] Address Mike's comments --- .../lib/core/project_config/project_config_schema.ts | 2 +- .../optimizely-sdk/lib/utils/json_schema_validator/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_schema.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_schema.ts index 27077de49..e21830b89 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_schema.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_schema.ts @@ -280,4 +280,4 @@ const schema = schemaDefinition as JSONSchema4 -export { schema } +export default schema diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts index 65a7a1742..a3c2c7178 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts @@ -17,7 +17,7 @@ import { sprintf } from '@optimizely/js-sdk-utils'; import { validate as jsonSchemaValidator } from 'json-schema'; import { ERROR_MESSAGES } from '../enums'; -import { schema } from '../../core/project_config/project_config_schema'; +import schema from '../../core/project_config/project_config_schema'; const MODULE_NAME = 'JSON_SCHEMA_VALIDATOR'; @@ -26,7 +26,7 @@ const MODULE_NAME = 'JSON_SCHEMA_VALIDATOR'; * @param {object} jsonObject The object to validate against the schema * @return {boolean} true if the given object is valid */ -export function validate(jsonObject: Record): boolean { +export function validate(jsonObject: JSON): boolean { if (!jsonObject) { throw new Error(sprintf(ERROR_MESSAGES.NO_JSON_PROVIDED, MODULE_NAME)); } From fa3e204fcf86c3f19e3c9f84fb2a982920a63b86 Mon Sep 17 00:00:00 2001 From: Polina Nguen Date: Wed, 29 Jul 2020 09:50:31 -0700 Subject: [PATCH 3/3] Update validate function to accept empty object --- .../lib/utils/json_schema_validator/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts index a3c2c7178..a30df70a8 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts @@ -23,15 +23,15 @@ const MODULE_NAME = 'JSON_SCHEMA_VALIDATOR'; /** * Validate the given json object against the specified schema - * @param {object} jsonObject The object to validate against the schema - * @return {boolean} true if the given object is valid + * @param {unknown} jsonObject The object to validate against the schema + * @return {boolean} true if the given object is valid */ -export function validate(jsonObject: JSON): boolean { +export function validate(jsonObject: unknown): boolean { if (!jsonObject) { throw new Error(sprintf(ERROR_MESSAGES.NO_JSON_PROVIDED, MODULE_NAME)); } - const result = jsonSchemaValidator(jsonObject, schema); + const result = jsonSchemaValidator(jsonObject as {}, schema); if (result.valid) { return true; } else {