Skip to content

Commit d00751b

Browse files
mjc1283yavorona
andauthored
build: Introduce TypeScript into optimizely-sdk build (#504)
Summary: Add TypeScript into the build for optimizely-sdk. The goal is to enable future development with TS and incremental conversion of modules from JS to TS. - Uses the same TS version as subpackages (datafile-manager, event-processor, etc.) - Uses rollup-plugin-typescript2 to add TS compilation step to rollup build - tsconfig.json for optimizely-sdk is based on the share root tsconfig.json, with appropriate overrides - Lint implementation is updated for TS compatibility, based on React SDK's - Mocha test suite is updated for TS compatibility: types installed, command updated to use ts-node, based on official - Mocha TS example - Configuration for Karma-based tests is updated to use ts-loader - Converted string_value_validator and several other smaller modules as examples and litmus tests of the build changes Test plan: Manual testing using local build and linked Node app Existing tests must pass - there are no intended functional changes Inspected and compared build output from master branch, and this branch Co-authored-by: Polina Nguen <[email protected]>
1 parent 0427cdd commit d00751b

File tree

24 files changed

+650
-161
lines changed

24 files changed

+650
-161
lines changed

packages/optimizely-sdk/.eslintrc.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ module.exports = {
44
commonjs: true,
55
node: true,
66
},
7-
extends: 'eslint:recommended',
7+
extends: [
8+
'eslint:recommended',
9+
'plugin:@typescript-eslint/recommended',
10+
],
811
globals: {
912
Atomics: 'readonly',
1013
SharedArrayBuffer: 'readonly',
@@ -14,7 +17,18 @@ module.exports = {
1417
ecmaVersion: 6,
1518
sourceType: 'module',
1619
},
20+
overrides: [
21+
{
22+
'files': ['*.ts'],
23+
'rules': {
24+
'@typescript-eslint/explicit-module-boundary-types': ['error']
25+
}
26+
}
27+
],
1728
rules: {
1829
'no-prototype-builtins': 'off',
30+
'@typescript-eslint/explicit-module-boundary-types': 'off',
31+
'@typescript-eslint/no-empty-function': 'off',
32+
'no-shadow': 'error',
1933
},
2034
};

packages/optimizely-sdk/karma.base.conf.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ module.exports = {
2424

2525
webpack: {
2626
mode: 'production',
27+
module: {
28+
rules: [
29+
{
30+
test: /\.[tj]s$/,
31+
use: 'ts-loader',
32+
exclude: /node_modules/,
33+
},
34+
],
35+
},
36+
resolve: {
37+
extensions: ['.ts', '.js'],
38+
},
2739
},
2840

2941
//browserStack setup

packages/optimizely-sdk/lib/core/decision_service/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import enums from '../../utils/enums';
2020
import fns from '../../utils/fns';
2121
import projectConfig from '../project_config';
2222
import AudienceEvaluator from '../audience_evaluator';
23-
import stringValidator from '../../utils/string_value_validator';
23+
import * as stringValidator from '../../utils/string_value_validator';
2424

2525
var MODULE_NAME = 'DECISION_SERVICE';
2626
var ERROR_MESSAGES = enums.ERROR_MESSAGES;

packages/optimizely-sdk/lib/core/decision_service/index.tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import AudienceEvaluator from '../audience_evaluator';
3232
import errorHandler from '../../plugins/error_handler';
3333
import eventBuilder from '../../core/event_builder/index.js';
3434
import eventDispatcher from '../../plugins/event_dispatcher/index.node';
35-
import jsonSchemaValidator from '../../utils/json_schema_validator';
35+
import * as jsonSchemaValidator from '../../utils/json_schema_validator';
3636
import {
3737
getTestProjectConfig,
3838
getTestProjectConfigWithFeatures,

packages/optimizely-sdk/lib/core/event_builder/event_helpers.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import { getLogger } from '@optimizely/js-sdk-logging';
1717

1818
import fns from '../../utils/fns';
1919
import projectConfig from '../project_config';
20-
import eventTagUtils from '../../utils/event_tag_utils';
21-
import attributesValidator from'../../utils/attributes_validator';
20+
import * as eventTagUtils from '../../utils/event_tag_utils';
21+
import * as attributesValidator from'../../utils/attributes_validator';
2222

2323
var logger = getLogger('EVENT_BUILDER');
2424

@@ -106,6 +106,14 @@ export var buildConversionEvent = function(config) {
106106
var eventTags = config.eventTags;
107107
var eventId = projectConfig.getEventId(configObj, eventKey);
108108

109+
let revenue = null;
110+
let eventValue = null;
111+
112+
if (eventTags) {
113+
revenue = eventTagUtils.getRevenueValue(eventTags, logger);
114+
eventValue = eventTagUtils.getEventValue(eventTags, logger);
115+
}
116+
109117
return {
110118
type: 'conversion',
111119
timestamp: fns.currentTimestamp(),
@@ -131,8 +139,8 @@ export var buildConversionEvent = function(config) {
131139
key: eventKey,
132140
},
133141

134-
revenue: eventTagUtils.getRevenueValue(eventTags, logger),
135-
value: eventTagUtils.getEventValue(eventTags, logger),
142+
revenue: revenue,
143+
value: eventValue,
136144
tags: eventTags,
137145
};
138146
};

packages/optimizely-sdk/lib/core/event_builder/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
import fns from '../../utils/fns';
1717
import enums from '../../utils/enums';
1818
import projectConfig from '../project_config';
19-
import eventTagUtils from '../../utils/event_tag_utils';
20-
import attributeValidator from '../../utils/attributes_validator';
19+
import * as eventTagUtils from '../../utils/event_tag_utils';
20+
import * as attributeValidator from '../../utils/attributes_validator';
2121

2222
var ACTIVATE_EVENT_KEY = 'campaign_activated';
2323
var CUSTOM_ATTRIBUTE_FEATURE_TYPE = 'custom';

packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { ERROR_MESSAGES, LOG_MESSAGES } from '../../utils/enums';
2525
import testData from '../../tests/test_data';
2626
import * as optimizelyConfig from '../optimizely_config/index';
2727
import projectConfigManager from './project_config_manager';
28-
import jsonSchemaValidator from '../../utils/json_schema_validator';
28+
import * as jsonSchemaValidator from '../../utils/json_schema_validator';
2929

3030
describe('lib/core/project_config/project_config_manager', function() {
3131
var globalStubErrorHandler;

packages/optimizely-sdk/lib/core/project_config/project_config_schema.js renamed to packages/optimizely-sdk/lib/core/project_config/project_config_schema.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
/**
1818
* Project Config JSON Schema file used to validate the project json datafile
1919
*/
20-
export var schema = {
20+
import { JSONSchema4 } from 'json-schema';
21+
22+
var schemaDefinition = {
2123
$schema: 'http://json-schema.org/draft-04/schema#',
2224
type: 'object',
2325
properties: {
@@ -276,4 +278,6 @@ export var schema = {
276278
},
277279
};
278280

279-
export default schema;
281+
const schema = schemaDefinition as JSONSchema4
282+
283+
export default schema

packages/optimizely-sdk/lib/index.d.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ declare module '@optimizely/optimizely-sdk' {
3939

4040
// The options object given to Optimizely.createInstance.
4141
export interface Config {
42+
// TODO[OASIS-6649]: Don't use object type
43+
// eslint-disable-next-line @typescript-eslint/ban-types
4244
datafile?: object | string;
4345
datafileOptions?: DatafileOptions;
4446
errorHandler?: ErrorHandler;
@@ -50,6 +52,8 @@ declare module '@optimizely/optimizely-sdk' {
5052
| enums.LOG_LEVEL.INFO
5153
| enums.LOG_LEVEL.NOTSET
5254
| enums.LOG_LEVEL.WARNING;
55+
// TODO[OASIS-6649]: Don't use object type
56+
// eslint-disable-next-line @typescript-eslint/ban-types
5357
jsonSchemaValidator?: object;
5458
userProfileService?: UserProfileService | null;
5559
eventBatchSize?: number;
@@ -115,6 +119,8 @@ declare module '@optimizely/optimizely-sdk' {
115119
// HTTP method with which to send the event.
116120
httpVerb: 'POST';
117121
// Value to send in the request body, JSON-serialized.
122+
// TODO[OASIS-6649]: Don't use any type
123+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
118124
params: any;
119125
}
120126

@@ -159,6 +165,8 @@ declare module '@optimizely/optimizely-sdk' {
159165
}
160166

161167
export type UserAttributes = {
168+
// TODO[OASIS-6649]: Don't use any type
169+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
162170
[name: string]: any;
163171
};
164172

@@ -183,6 +191,8 @@ declare module '@optimizely/optimizely-sdk' {
183191
endOfRange: number;
184192
}>;
185193
audienceIds: string[];
194+
// TODO[OASIS-6649]: Don't use object type
195+
// eslint-disable-next-line @typescript-eslint/ban-types
186196
forcedVariations: object;
187197
}
188198

packages/optimizely-sdk/lib/optimizely/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ import decisionService from '../core/decision_service';
2222
import enums from '../utils/enums';
2323
import { getImpressionEvent, getConversionEvent } from '../core/event_builder/index.js';
2424
import { buildConversionEvent, buildImpressionEvent } from '../core/event_builder/event_helpers';
25-
import eventTagsValidator from '../utils/event_tags_validator';
25+
import * as eventTagsValidator from '../utils/event_tags_validator';
2626
import notificationCenter from '../core/notification_center';
2727
import projectConfig from '../core/project_config';
28-
import userProfileServiceValidator from '../utils/user_profile_service_validator';
29-
import stringValidator from '../utils/string_value_validator';
28+
import * as userProfileServiceValidator from '../utils/user_profile_service_validator';
29+
import * as stringValidator from '../utils/string_value_validator';
3030
import projectConfigManager from '../core/project_config/project_config_manager';
3131

3232
var ERROR_MESSAGES = enums.ERROR_MESSAGES;

0 commit comments

Comments
 (0)