Skip to content

Commit 1ebf18a

Browse files
authored
Merge pull request #26 from AddSearch/webpack-upgrade-and-eslint
upgrade webpack to v5, setup eslint
2 parents 6854e68 + db5e4bc commit 1ebf18a

File tree

8 files changed

+1849
-2031
lines changed

8 files changed

+1849
-2031
lines changed

.eslintrc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"env": {
3+
"browser": true,
4+
"commonjs": true,
5+
"es2021": true
6+
},
7+
"parserOptions": {
8+
"ecmaVersion": "latest"
9+
},
10+
"extends": "eslint:recommended",
11+
"rules": {
12+
"no-eval": ["error"],
13+
"no-trailing-spaces": "error",
14+
"no-irregular-whitespace": "off"
15+
}
16+
}

package-lock.json

Lines changed: 1758 additions & 1979 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"main": "index.js",
66
"jsdelivr": "./dist/addsearch-js-client.min.js",
77
"scripts": {
8-
"test": "./node_modules/mocha/bin/mocha --recursive --require @babel/register",
8+
"test": "./node_modules/mocha/bin/mocha.js --recursive --require @babel/register",
99
"build": "npm run test && ./node_modules/webpack-cli/bin/cli.js",
1010
"watch": "./node_modules/webpack-cli/bin/cli.js --watch"
1111
},
@@ -45,12 +45,18 @@
4545
"@babel/core": "^7.12.9",
4646
"@babel/preset-env": "^7.12.7",
4747
"@babel/register": "^7.12.1",
48+
"axios-mock-adapter": "^1.21.2",
4849
"babel-loader": "^8.2.1",
50+
"buffer": "^6.0.3",
51+
"eslint": "^8.13.0",
52+
"eslint-webpack-plugin": "^3.1.1",
4953
"esm": "^3.2.25",
5054
"fetch-mock": "^9.11.0",
51-
"mocha": "^8.2.1",
55+
"mocha": "^10.0.0",
56+
"mocha-axios": "^1.4.2",
57+
"terser-webpack-plugin": "^5.3.1",
5258
"uglify-js": "^3.12.0",
53-
"webpack": "^4.44.2",
54-
"webpack-cli": "^3.3.12"
59+
"webpack": "^5.72.0",
60+
"webpack-cli": "^4.10.0"
5561
}
5662
}

src/apifetch.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,14 @@ var executeApiFetch = function(apiHostname, sitekey, type, settings, cb, fuzzyRe
8989

9090
// Add custom field filters
9191
if (settings.customFieldFilters) {
92-
for (var i = 0; i < settings.customFieldFilters.length; i++) {
92+
for (let i = 0; i < settings.customFieldFilters.length; i++) {
9393
qs = qs + '&customField=' + settings.customFieldFilters[i];
9494
}
9595
}
9696

9797
// Add facet fields
9898
if (settings.facetFields) {
99-
for (var i = 0; i<settings.facetFields.length; i++) {
99+
for (let i = 0; i<settings.facetFields.length; i++) {
100100
qs = qs + '&facet=' + settings.facetFields[i];
101101
}
102102
}
@@ -118,7 +118,7 @@ var executeApiFetch = function(apiHostname, sitekey, type, settings, cb, fuzzyRe
118118

119119
// Personalization events
120120
if (settings.personalizationEvents && Array.isArray(settings.personalizationEvents)) {
121-
for (var i = 0; i<settings.personalizationEvents.length; i++) {
121+
for (let i = 0; i<settings.personalizationEvents.length; i++) {
122122
var obj = settings.personalizationEvents[i];
123123
var key = Object.keys(obj);
124124
qs = qs + '&personalizationEvent=' + encodeURIComponent(key + '=' + obj[key]);

src/index.js

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -170,44 +170,44 @@ var client = function(sitekey, privatekey) {
170170
/**
171171
* Public functions
172172
*/
173-
this.setApiHostname = function(hostname) { this.apiHostname = hostname; }
174-
this.getSettings = function() { return this.settings.getSettings(); }
175-
this.setLanguage = function(lang) { this.settings.setLanguage(lang); }
176-
this.setCategoryFilters = function(categories) { this.settings.setCategoryFilters(categories); }
177-
this.addCustomFieldFilter = function(fieldName, value) { this.settings.addCustomFieldFilter(fieldName, value); }
178-
this.removeCustomFieldFilter = function(fieldName, value) { this.settings.removeCustomFieldFilter(fieldName, value); }
179-
this.setPriceRangeFilter = function(minCents, maxCents) { this.settings.setPriceRangeFilter(minCents, maxCents); }
180-
this.setDateFilter = function(dateFrom, dateTo) { this.settings.setDateFilter(dateFrom, dateTo); }
181-
this.setJWT = function(jwt) { this.settings.setJWT(jwt); }
182-
this.setUserToken = function(token) { this.settings.setUserToken(token); }
183-
this.setPaging = function(page, pageSize, sortBy, sortOder) { this.settings.setPaging(page, pageSize, sortBy, sortOder); }
184-
this.nextPage = function() { this.settings.nextPage(); }
185-
this.previousPage = function() { this.settings.previousPage(); }
186-
this.setSuggestionsSize = function(size) { this.settings.setSuggestionsSize(size); }
187-
this.setAutocompleteSize = function(size) { this.settings.setAutocompleteSize(size); }
188-
this.addFacetField = function(fieldName) { this.settings.addFacetField(fieldName); }
189-
this.addHierarchicalFacetSetting = function(setting) { this.settings.addHierarchicalFacetSetting(setting); }
190-
this.addRangeFacet = function(field, ranges) { this.settings.addRangeFacet(field, ranges); }
191-
this.addStatsField = function(field) { this.settings.addStatsField(field); }
192-
this.setNumberOfFacets = function(numFacets) { this.settings.setNumberOfFacets(numFacets); }
193-
this.setResultType = function(type) { this.settings.setResultType(type); }
194-
this.setPersonalizationEvents = function(events) { this.settings.setPersonalizationEvents(events); }
195-
this.setFilterObject = function(filter) { this.settings.setFilterObject(filter); }
196-
this.setShuffleAndLimitTo = function(shuffleAndLimitTo) { this.settings.setShuffleAndLimitTo(shuffleAndLimitTo); }
197-
this.setFuzzyMatch = function(fuzzy) { this.settings.setFuzzyMatch(fuzzy); }
198-
this.setPostfixWildcard = function(wildcard) { this.settings.setPostfixWildcard(wildcard); }
199-
this.setCacheResponseTime = function(cacheResponseTime) { this.settings.setCacheResponseTime(cacheResponseTime) }
200-
this.setCollectAnalytics = function(collectAnalytics) { this.settings.setCollectAnalytics(collectAnalytics); }
201-
this.setAnalyticsTag = function(tagName) { this.settings.setAnalyticsTag(tagName) }
202-
this.setThrottleTime = function(delay) { this.settings.setThrottleTime(delay); }
203-
this.setStatsSessionId = function(id) { this.sessionId = id; }
204-
this.getStatsSessionId = function() { return this.sessionId; }
205-
this.enableLogicalOperators = function(enableLogicalOperators) { this.settings.enableLogicalOperators(enableLogicalOperators) }
206-
this.setSearchOperator = function(operator) { this.settings.setSearchOperator(operator) }
207-
208-
this.sendStatsEvent = function(type, keyword,data) {
173+
this.setApiHostname = function(hostname) {this.apiHostname = hostname;}
174+
this.getSettings = function() {return this.settings.getSettings();}
175+
this.setLanguage = function(lang) {this.settings.setLanguage(lang);}
176+
this.setCategoryFilters = function(categories) {this.settings.setCategoryFilters(categories);}
177+
this.addCustomFieldFilter = function(fieldName, value) {this.settings.addCustomFieldFilter(fieldName, value);}
178+
this.removeCustomFieldFilter = function(fieldName, value) {this.settings.removeCustomFieldFilter(fieldName, value);}
179+
this.setPriceRangeFilter = function(minCents, maxCents) {this.settings.setPriceRangeFilter(minCents, maxCents);}
180+
this.setDateFilter = function(dateFrom, dateTo) {this.settings.setDateFilter(dateFrom, dateTo);}
181+
this.setJWT = function(jwt) {this.settings.setJWT(jwt);}
182+
this.setUserToken = function(token) {this.settings.setUserToken(token);}
183+
this.setPaging = function(page, pageSize, sortBy, sortOder) {this.settings.setPaging(page, pageSize, sortBy, sortOder);}
184+
this.nextPage = function() {this.settings.nextPage();}
185+
this.previousPage = function() {this.settings.previousPage();}
186+
this.setSuggestionsSize = function(size) {this.settings.setSuggestionsSize(size);}
187+
this.setAutocompleteSize = function(size) {this.settings.setAutocompleteSize(size);}
188+
this.addFacetField = function(fieldName) {this.settings.addFacetField(fieldName);}
189+
this.addHierarchicalFacetSetting = function(setting) {this.settings.addHierarchicalFacetSetting(setting);}
190+
this.addRangeFacet = function(field, ranges) {this.settings.addRangeFacet(field, ranges);}
191+
this.addStatsField = function(field) {this.settings.addStatsField(field);}
192+
this.setNumberOfFacets = function(numFacets) {this.settings.setNumberOfFacets(numFacets);}
193+
this.setResultType = function(type) {this.settings.setResultType(type);}
194+
this.setPersonalizationEvents = function(events) {this.settings.setPersonalizationEvents(events);}
195+
this.setFilterObject = function(filter) {this.settings.setFilterObject(filter);}
196+
this.setShuffleAndLimitTo = function(shuffleAndLimitTo) {this.settings.setShuffleAndLimitTo(shuffleAndLimitTo);}
197+
this.setFuzzyMatch = function(fuzzy) {this.settings.setFuzzyMatch(fuzzy);}
198+
this.setPostfixWildcard = function(wildcard) {this.settings.setPostfixWildcard(wildcard);}
199+
this.setCacheResponseTime = function(cacheResponseTime) {this.settings.setCacheResponseTime(cacheResponseTime)}
200+
this.setCollectAnalytics = function(collectAnalytics) {this.settings.setCollectAnalytics(collectAnalytics);}
201+
this.setAnalyticsTag = function(tagName) {this.settings.setAnalyticsTag(tagName)}
202+
this.setThrottleTime = function(delay) {this.settings.setThrottleTime(delay);}
203+
this.setStatsSessionId = function(id) {this.sessionId = id;}
204+
this.getStatsSessionId = function() {return this.sessionId;}
205+
this.enableLogicalOperators = function(enableLogicalOperators) {this.settings.enableLogicalOperators(enableLogicalOperators)}
206+
this.setSearchOperator = function(operator) {this.settings.setSearchOperator(operator)}
207+
208+
this.sendStatsEvent = function(type, keyword, data) {
209209
if (type === 'search') {
210-
var payload = {
210+
let payload = {
211211
action: 'search',
212212
session: this.sessionId,
213213
keyword: keyword,
@@ -218,7 +218,7 @@ var client = function(sitekey, privatekey) {
218218
}
219219

220220
else if (type === 'click') {
221-
var payload = {
221+
let payload = {
222222
action: 'click',
223223
session: this.sessionId,
224224
keyword: keyword,

src/util.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
const Buffer = require('buffer/').Buffer;
2+
13
const isFunction = function(fn) {
24
return fn && {}.toString.call(fn) === '[object Function]';
35
}

test/apifetch.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
var assert = require('assert');
2-
var fetchMock = require('fetch-mock');
32
var apifetch = require('../src/apifetch');
3+
var MockAdapter = require("axios-mock-adapter");
4+
const axios = require('axios').default;
5+
var mock = new MockAdapter(axios);
46

7+
mock.onAny().reply(200, { response: 200 });
58

69
describe('apifetch', function() {
710
describe('executeApiFetch', function() {
811

912
it('should call callback with response data when query is successful', function() {
10-
fetchMock.get('*', { response: 200 });
1113
const expect = {response: 200};
1214

1315
apifetch('api.addsearch.com', 'sitekey', 'search', {paging:{}, keyword: 'foo'}, (res) => {
@@ -16,8 +18,6 @@ describe('apifetch', function() {
1618
});
1719

1820
it('should return client error when request type is invalid', function() {
19-
fetchMock.config.overwriteRoutes = true;
20-
fetchMock.get('*', 'foo');
2121
const expect = 400;
2222

2323
apifetch('api.addsearch.com', 'sitekey', 'ping', {paging:{}, keyword: 'foo'}, (res) => {

webpack.config.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
const webpack = require('webpack');
22
const PACKAGE = require('./package.json');
33
const banner = PACKAGE.name + ' ' + PACKAGE.version;
4+
const ESLintPlugin = require('eslint-webpack-plugin');
5+
const TerserJSPlugin = require('terser-webpack-plugin');
46

57
module.exports = {
68
entry: './src/index.js',
@@ -10,14 +12,27 @@ module.exports = {
1012
libraryTarget: 'global'
1113
},
1214
plugins: [
15+
new ESLintPlugin(),
1316
new webpack.BannerPlugin({
1417
banner: banner
1518
})
1619
],
17-
node: {
18-
Buffer: false
19-
},
2020
mode: 'production',
21+
optimization: {
22+
minimizer: [new TerserJSPlugin({
23+
extractComments: false,
24+
terserOptions: {
25+
format: {
26+
comments: /addsearch-js-client/i,
27+
}
28+
},
29+
})]
30+
},
31+
resolve: {
32+
fallback: {
33+
buffer: require.resolve('buffer/'),
34+
},
35+
},
2136
module: {
2237
rules: [
2338
{

0 commit comments

Comments
 (0)