mirror of
https://github.com/iconify/iconify.git
synced 2025-01-22 22:58:27 +00:00
Properly support ES modules in API redundancy package, run tests for both CommonJS and ES modules
This commit is contained in:
parent
e6f69c6901
commit
e3bc9f7832
@ -3,7 +3,7 @@ module.exports = {
|
|||||||
browser: true,
|
browser: true,
|
||||||
es6: true,
|
es6: true,
|
||||||
node: true,
|
node: true,
|
||||||
mocha: true,
|
jasmine: true,
|
||||||
},
|
},
|
||||||
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
|
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
|
||||||
globals: {
|
globals: {
|
||||||
@ -11,13 +11,10 @@ module.exports = {
|
|||||||
SharedArrayBuffer: 'readonly',
|
SharedArrayBuffer: 'readonly',
|
||||||
},
|
},
|
||||||
parser: '@typescript-eslint/parser',
|
parser: '@typescript-eslint/parser',
|
||||||
parserOptions: {
|
plugins: ['@typescript-eslint', 'jasmine'],
|
||||||
ecmaVersion: 2018,
|
|
||||||
sourceType: 'module',
|
|
||||||
project: __dirname + '/tsconfig.json',
|
|
||||||
},
|
|
||||||
plugins: ['@typescript-eslint'],
|
|
||||||
rules: {
|
rules: {
|
||||||
'no-mixed-spaces-and-tabs': ['off'],
|
'no-mixed-spaces-and-tabs': ['off'],
|
||||||
|
'no-unused-vars': ['off'],
|
||||||
|
'@typescript-eslint/no-unused-vars-experimental': ['error'],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
57
packages/api-redundancy/package-lock.json
generated
57
packages/api-redundancy/package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@iconify/api-redundancy",
|
"name": "@iconify/api-redundancy",
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@iconify/api-redundancy",
|
"name": "@iconify/api-redundancy",
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"license": "(Apache-2.0 OR GPL-2.0)",
|
"license": "(Apache-2.0 OR GPL-2.0)",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^27.0.1",
|
"@types/jest": "^27.0.1",
|
||||||
@ -15,6 +15,8 @@
|
|||||||
"@typescript-eslint/parser": "^4.31.1",
|
"@typescript-eslint/parser": "^4.31.1",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^7.32.0",
|
"eslint": "^7.32.0",
|
||||||
|
"eslint-plugin-jasmine": "^4.1.2",
|
||||||
|
"jasmine": "^3.9.0",
|
||||||
"jest": "^27.2.0",
|
"jest": "^27.2.0",
|
||||||
"ts-jest": "^27.0.5",
|
"ts-jest": "^27.0.5",
|
||||||
"tsup": "^5.1.0"
|
"tsup": "^5.1.0"
|
||||||
@ -2266,6 +2268,16 @@
|
|||||||
"url": "https://opencollective.com/eslint"
|
"url": "https://opencollective.com/eslint"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/eslint-plugin-jasmine": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-plugin-jasmine/-/eslint-plugin-jasmine-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-Jr52EBi6Ql5WVDvRCKBID9kRD6/CaObvCWmgHpqobczX2Mzt8/QMu9vpgx6q/O5jyQ9CIGrKaEbPuEfHRf8guw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8",
|
||||||
|
"npm": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/eslint-scope": {
|
"node_modules/eslint-scope": {
|
||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||||
@ -3133,6 +3145,25 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/jasmine": {
|
||||||
|
"version": "3.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.9.0.tgz",
|
||||||
|
"integrity": "sha512-JgtzteG7xnqZZ51fg7N2/wiQmXon09szkALcRMTgCMX4u/m17gVJFjObnvw5FXkZOWuweHPaPRVB6DI2uN0wVA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"glob": "^7.1.6",
|
||||||
|
"jasmine-core": "~3.9.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"jasmine": "bin/jasmine.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/jasmine-core": {
|
||||||
|
"version": "3.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.9.0.tgz",
|
||||||
|
"integrity": "sha512-Tv3kVbPCGVrjsnHBZ38NsPU3sDOtNa0XmbG2baiyJqdb5/SPpDO6GVwJYtUryl6KB4q1Ssckwg612ES9Z0dreQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/jest": {
|
"node_modules/jest": {
|
||||||
"version": "27.2.0",
|
"version": "27.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz",
|
||||||
@ -7248,6 +7279,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"eslint-plugin-jasmine": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-plugin-jasmine/-/eslint-plugin-jasmine-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-Jr52EBi6Ql5WVDvRCKBID9kRD6/CaObvCWmgHpqobczX2Mzt8/QMu9vpgx6q/O5jyQ9CIGrKaEbPuEfHRf8guw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"eslint-scope": {
|
"eslint-scope": {
|
||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||||
@ -7884,6 +7921,22 @@
|
|||||||
"istanbul-lib-report": "^3.0.0"
|
"istanbul-lib-report": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"jasmine": {
|
||||||
|
"version": "3.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.9.0.tgz",
|
||||||
|
"integrity": "sha512-JgtzteG7xnqZZ51fg7N2/wiQmXon09szkALcRMTgCMX4u/m17gVJFjObnvw5FXkZOWuweHPaPRVB6DI2uN0wVA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"glob": "^7.1.6",
|
||||||
|
"jasmine-core": "~3.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"jasmine-core": {
|
||||||
|
"version": "3.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.9.0.tgz",
|
||||||
|
"integrity": "sha512-Tv3kVbPCGVrjsnHBZ38NsPU3sDOtNa0XmbG2baiyJqdb5/SPpDO6GVwJYtUryl6KB4q1Ssckwg612ES9Z0dreQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"version": "27.2.0",
|
"version": "27.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz",
|
||||||
|
@ -1,17 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "@iconify/api-redundancy",
|
"name": "@iconify/api-redundancy",
|
||||||
"description": "Reusable redundancy library for API queries",
|
"description": "Reusable redundancy library for API queries",
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"author": "Vjacheslav Trushkin",
|
"author": "Vjacheslav Trushkin",
|
||||||
"license": "(Apache-2.0 OR GPL-2.0)",
|
"license": "(Apache-2.0 OR GPL-2.0)",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"module": "dist/index.mjs",
|
"module": "dist/index.mjs",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"require": "./dist/index.js",
|
||||||
|
"import": "./dist/index.mjs"
|
||||||
|
}
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "npx eslint src/*.ts",
|
"lint": "eslint src/*.ts",
|
||||||
"prebuild": "npm run lint",
|
"prebuild": "npm run lint",
|
||||||
"build": "tsup src/index.ts --dts --format esm,cjs",
|
"build": "tsup src/index.ts --dts --format esm,cjs",
|
||||||
"test": "jest --runInBand"
|
"test:jest": "jest --runInBand",
|
||||||
|
"test:jasmine": "cross-env NODE_OPTIONS=--experimental-vm-modules npx jasmine",
|
||||||
|
"test": "npm run test:jest && npm run test:jasmine"
|
||||||
},
|
},
|
||||||
"bugs": "https://github.com/iconify/iconify/issues",
|
"bugs": "https://github.com/iconify/iconify/issues",
|
||||||
"homepage": "https://iconify.design/",
|
"homepage": "https://iconify.design/",
|
||||||
@ -27,6 +35,8 @@
|
|||||||
"@typescript-eslint/parser": "^4.31.1",
|
"@typescript-eslint/parser": "^4.31.1",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^7.32.0",
|
"eslint": "^7.32.0",
|
||||||
|
"eslint-plugin-jasmine": "^4.1.2",
|
||||||
|
"jasmine": "^3.9.0",
|
||||||
"jest": "^27.2.0",
|
"jest": "^27.2.0",
|
||||||
"ts-jest": "^27.0.5",
|
"ts-jest": "^27.0.5",
|
||||||
"tsup": "^5.1.0"
|
"tsup": "^5.1.0"
|
||||||
|
113
packages/api-redundancy/spec/redundancySpec.mjs
Normal file
113
packages/api-redundancy/spec/redundancySpec.mjs
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
import { initRedundancy } from '@iconify/api-redundancy';
|
||||||
|
|
||||||
|
describe('Redundancy class', () => {
|
||||||
|
it('Simple query', (done) => {
|
||||||
|
const redundancy = initRedundancy({
|
||||||
|
resources: [
|
||||||
|
'https://api.local', // Will fail
|
||||||
|
'https://api-backup1.local', // Success
|
||||||
|
'https://api-backup2.local',
|
||||||
|
],
|
||||||
|
rotate: 20,
|
||||||
|
timeout: 100,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Premade responses
|
||||||
|
const responses = {
|
||||||
|
'https://api-backup1.local/foo': 'foo',
|
||||||
|
};
|
||||||
|
let counter = 0;
|
||||||
|
let doneCallbackCalled = false;
|
||||||
|
|
||||||
|
const query = redundancy.query(
|
||||||
|
'/foo',
|
||||||
|
(resource, payload, status) => {
|
||||||
|
counter++;
|
||||||
|
expect(counter).toBeLessThan(3); // No more than 2 queries should be executed
|
||||||
|
|
||||||
|
// Make URI from resource + payload
|
||||||
|
const uri = resource + payload;
|
||||||
|
|
||||||
|
// Get fake data if it exists
|
||||||
|
if (responses[uri] === void 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do something with "data", simulate instant callback
|
||||||
|
status.done(responses[uri]);
|
||||||
|
|
||||||
|
// Complete test
|
||||||
|
setTimeout(() => {
|
||||||
|
expect(counter).toEqual(2);
|
||||||
|
expect(doneCallbackCalled).toEqual(true);
|
||||||
|
expect(query().status).toEqual('completed');
|
||||||
|
expect(redundancy.getIndex()).toEqual(1); // Should have changed to 1 after query
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
(data) => {
|
||||||
|
expect(data).toEqual('foo');
|
||||||
|
doneCallbackCalled = true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Test find()
|
||||||
|
expect(redundancy.find((item) => item().payload === '/foo')).toEqual(
|
||||||
|
query
|
||||||
|
);
|
||||||
|
expect(redundancy.find((item) => item().status === 'pending')).toEqual(
|
||||||
|
query
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Different start index', (done) => {
|
||||||
|
const redundancy = initRedundancy({
|
||||||
|
resources: [
|
||||||
|
'https://api.local',
|
||||||
|
'https://api-backup1.local',
|
||||||
|
'https://api-backup2.local',
|
||||||
|
],
|
||||||
|
rotate: 20,
|
||||||
|
timeout: 3000,
|
||||||
|
index: 1,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Premade responses
|
||||||
|
const responses = {
|
||||||
|
'https://api-backup1.local/foo': 'foo',
|
||||||
|
};
|
||||||
|
let counter = 0;
|
||||||
|
|
||||||
|
const query = redundancy.query('/foo', (resource, payload, status) => {
|
||||||
|
counter++;
|
||||||
|
expect(counter).toBeLessThan(2); // Should be success on first call because start index = 1
|
||||||
|
|
||||||
|
// Make URI from resource + payload
|
||||||
|
const uri = resource + payload;
|
||||||
|
|
||||||
|
// Get fake data if it exists
|
||||||
|
if (responses[uri] === void 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do something with "data", simulate instant callback
|
||||||
|
status.done(responses[uri]);
|
||||||
|
|
||||||
|
// Complete test
|
||||||
|
setTimeout(() => {
|
||||||
|
expect(counter).toEqual(1);
|
||||||
|
expect(query().status).toEqual('completed');
|
||||||
|
expect(redundancy.getIndex()).toEqual(1);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test find()
|
||||||
|
expect(redundancy.find((item) => item().payload === '/foo')).toEqual(
|
||||||
|
query
|
||||||
|
);
|
||||||
|
expect(redundancy.find((item) => item().status === 'pending')).toEqual(
|
||||||
|
query
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
7
packages/api-redundancy/spec/support/jasmine.json
Normal file
7
packages/api-redundancy/spec/support/jasmine.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"spec_dir": "spec",
|
||||||
|
"spec_files": ["**/*[sS]pec.?(m)js"],
|
||||||
|
"helpers": ["helpers/**/*.?(m)js"],
|
||||||
|
"stopSpecOnExpectationFailure": false,
|
||||||
|
"random": true
|
||||||
|
}
|
@ -2,7 +2,7 @@ import type { RedundancyConfig } from '../src/config';
|
|||||||
import { sendQuery } from '../src/query';
|
import { sendQuery } from '../src/query';
|
||||||
|
|
||||||
describe('Basic queries', () => {
|
describe('Basic queries', () => {
|
||||||
test('Empty query', (done) => {
|
it('Empty query', (done) => {
|
||||||
const payload = {};
|
const payload = {};
|
||||||
const config: RedundancyConfig = {
|
const config: RedundancyConfig = {
|
||||||
resources: [],
|
resources: [],
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"include": ["./src/*.ts", "./tests/*.ts"],
|
"include": ["./src/*.ts", "./tests/*.ts", ".eslintrc.js"],
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "ESNext",
|
"target": "ESNext",
|
||||||
"module": "CommonJS",
|
"module": "CommonJS",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user