chore: bundles exports everything and webpack bundles everything

This commit is contained in:
arthurfiorette 2022-01-07 15:45:06 -03:00
parent 79ce1926d2
commit ed1e163472
No known key found for this signature in database
GPG Key ID: 9D190CD53C53C555
17 changed files with 59 additions and 74 deletions

View File

@ -1,9 +1,8 @@
# Compiled code # Compiled code
## NodeJS ## CommonJS
The code is compiled with `tsc` with support to `>= ES6`. See the The code is compiled with `webpack` for ES2017+.
[build config](/tsconfig.build.json).
- `axios-cache-interceptor`: Redirects to `/dist/index.js` - `axios-cache-interceptor`: Redirects to `/dist/index.js`
- `axios-cache-interceptor/dist/index.js`: The main library file. - `axios-cache-interceptor/dist/index.js`: The main library file.
@ -12,7 +11,7 @@ The code is compiled with `tsc` with support to `>= ES6`. See the
Every browser build is also compatible with CommonsJS because it builds with UMD, so you Every browser build is also compatible with CommonsJS because it builds with UMD, so you
can use them too. can use them too.
## Browsers ## UMD
> _NOTE_: Axios itself requires [ES6 Promises](https://axios-http.com/docs/notes#promises) > _NOTE_: Axios itself requires [ES6 Promises](https://axios-http.com/docs/notes#promises)
@ -23,7 +22,7 @@ CommonsJS and more)
- `axios-cache-interceptor/dist/index.min.js`: Production file for ES6+ - `axios-cache-interceptor/dist/index.min.js`: Production file for ES6+
- `axios-cache-interceptor/dist/index.es5.min.js`: Production file for ES5+ - `axios-cache-interceptor/dist/index.es5.min.js`: Production file for ES5+
- `axios-cache-interceptor/dist/index.es2020.min.js`: Production file for ES2020+ - `axios-cache-interceptor/dist/index.es2020.min.js`: Production file for ES2020+
- `axios-cache-interceptor/dist/index.development.js`: Development file - `axios-cache-interceptor/dist/index.development.js`: Development file (ES2020+)
```html ```html
<!-- You can use the cdn of your choice --> <!-- You can use the cdn of your choice -->

View File

@ -2,17 +2,16 @@
"name": "axios-cache-interceptor", "name": "axios-cache-interceptor",
"version": "0.7.9", "version": "0.7.9",
"description": "Cache interceptor for axios", "description": "Cache interceptor for axios",
"types": "./dist/index.ts",
"main": "./dist/index.js", "main": "./dist/index.js",
"browser": "./dist/index.min.js", "browser": "./dist/index.min.js",
"jsdelivr": "./dist/index.min.js", "jsdelivr": "./dist/index.min.js",
"unpkg": "./dist/index.min.js", "unpkg": "./dist/index.min.js",
"runkitExampleFilename": "./examples/runkit.js", "runkitExampleFilename": "./examples/runkit.js",
"scripts": { "scripts": {
"build": "concurrently 'npm:build:*'", "build": "webpack",
"build:browser": "webpack",
"build:node": "tsc -p tsconfig.build.json",
"test": "jest --coverage", "test": "jest --coverage",
"escheck": "es-check es5 ./dist/index.es5.min.js && es-check es6 ./dist/index.min.js", "escheck": "npx es-check es5 ./dist/index.es5.min.js && npx es-check es6 ./dist/index.min.js",
"format": "prettier --write .", "format": "prettier --write .",
"lint": "tsc --noEmit && eslint . --ext .ts", "lint": "tsc --noEmit && eslint . --ext .ts",
"version": "auto-changelog -p && git add CHANGELOG.md" "version": "auto-changelog -p && git add CHANGELOG.md"
@ -53,8 +52,6 @@
"@typescript-eslint/parser": "^5.8.1", "@typescript-eslint/parser": "^5.8.1",
"auto-changelog": "^2.3.0", "auto-changelog": "^2.3.0",
"axios": "~0.24.0", "axios": "~0.24.0",
"concurrently": "^7.0.0",
"es-check": "^6.1.1",
"eslint": "^8.3.0", "eslint": "^8.3.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0", "eslint-plugin-prettier": "^4.0.0",

2
src/cache/create.ts vendored
View File

@ -1,8 +1,8 @@
import type { AxiosInstance } from 'axios'; import type { AxiosInstance } from 'axios';
import { isStorage } from '..';
import { defaultHeaderInterpreter } from '../header/interpreter'; import { defaultHeaderInterpreter } from '../header/interpreter';
import { CacheRequestInterceptor } from '../interceptors/request'; import { CacheRequestInterceptor } from '../interceptors/request';
import { CacheResponseInterceptor } from '../interceptors/response'; import { CacheResponseInterceptor } from '../interceptors/response';
import { isStorage } from '../storage/build';
import { buildMemoryStorage } from '../storage/memory'; import { buildMemoryStorage } from '../storage/memory';
import { defaultKeyGenerator } from '../util/key-generator'; import { defaultKeyGenerator } from '../util/key-generator';
import type { AxiosCacheInstance } from './axios'; import type { AxiosCacheInstance } from './axios';

View File

@ -1,11 +0,0 @@
/** Index file for webpack and cdn usage */
export {
createCache,
isAxiosCacheInterceptor,
setupCache,
useCache
} from './cache/create';
export { buildStorage } from './storage/build';
export { buildMemoryStorage } from './storage/memory';
export { buildWebStorage } from './storage/web-api';

View File

@ -1,15 +1,5 @@
/** Index file for webpack and cdn usage */ export * from './index';
export {
createCache,
isAxiosCacheInterceptor,
setupCache,
useCache
} from './cache/create';
export { buildStorage } from './storage/build';
export { buildMemoryStorage } from './storage/memory';
export { buildWebStorage } from './storage/web-api';
console.warn( console.warn(
'You are using a development build. Make sure to use the correct build in production\nhttps://axios-cache-interceptor.js.org/pages/installing' 'You are using a development build. Make sure to use the correct build in production\nhttps://axios-cache-interceptor.js.org/#/pages/installing'
); );

View File

@ -1,11 +1,18 @@
export * from './cache/axios'; export * from './cache/axios';
export * from './cache/cache'; export * from './cache/cache';
export * from './cache/create'; export * from './cache/create';
export * from './header/interpreter';
export * from './header/types'; export * from './header/types';
export * from './interceptors/request';
export * from './interceptors/response';
export * from './interceptors/types'; export * from './interceptors/types';
export * as InterceptorUtil from './interceptors/util';
export * from './storage/build'; export * from './storage/build';
export * from './storage/memory'; export * from './storage/memory';
export * from './storage/types'; export * from './storage/types';
export * from './storage/web-api'; export * from './storage/web-api';
export * from './util/cache-predicate';
export * from './util/headers'; export * from './util/headers';
export * from './util/key-generator';
export * from './util/types'; export * from './util/types';
export * from './util/update-cache';

View File

@ -1,4 +1,5 @@
import type { CacheAxiosResponse, CacheProperties } from '..'; import type { CacheAxiosResponse } from '../cache/axios';
import type { CacheProperties } from '../cache/cache';
import type { CachePredicateObject } from './types'; import type { CachePredicateObject } from './types';
/** Returns true if the response should be cached */ /** Returns true if the response should be cached */

View File

@ -31,7 +31,7 @@ export type KeyGenerator = <R = any, D = any>(
options: CacheRequestConfig<R, D> options: CacheRequestConfig<R, D>
) => string; ) => string;
type MaybePromise<T> = T | Promise<T> | PromiseLike<T>; export type MaybePromise<T> = T | Promise<T> | PromiseLike<T>;
export type CacheUpdater<R, D> = export type CacheUpdater<R, D> =
| 'delete' | 'delete'

View File

@ -1,5 +1,5 @@
import type { AxiosStorage } from '..';
import type { CacheAxiosResponse } from '../cache/axios'; import type { CacheAxiosResponse } from '../cache/axios';
import type { AxiosStorage } from '../storage/types';
import type { CacheUpdater } from './types'; import type { CacheUpdater } from './types';
/** Function to update all caches, from CacheProperties.update, with the new data. */ /** Function to update all caches, from CacheProperties.update, with the new data. */

View File

@ -3,15 +3,6 @@ import { buildMemoryStorage } from '../src/storage/memory';
import { buildWebStorage } from '../src/storage/web-api'; import { buildWebStorage } from '../src/storage/web-api';
describe('test bundle imports', () => { describe('test bundle imports', () => {
it('tests browser ', async () => {
const bundle = await import('../src/index.browser');
expect(bundle.setupCache).toBe(setupCache);
expect(bundle.isAxiosCacheInterceptor).toBe(isAxiosCacheInterceptor);
expect(bundle.buildMemoryStorage).toBe(buildMemoryStorage);
expect(bundle.buildWebStorage).toBe(buildWebStorage);
});
it('test development bundle imports', async () => { it('test development bundle imports', async () => {
const oldWarn = console.warn; const oldWarn = console.warn;
console.warn = jest.fn(); console.warn = jest.fn();

View File

@ -1,6 +1,7 @@
import Axios from 'axios'; import Axios from 'axios';
import { AxiosCacheInstance, CacheProperties, setupCache } from '../../src'; import type { AxiosCacheInstance } from '../../src/cache/axios';
import type { CacheInstance } from '../../src/cache/cache'; import type { CacheInstance, CacheProperties } from '../../src/cache/cache';
import { setupCache } from '../../src/cache/create';
import { Header } from '../../src/util/headers'; import { Header } from '../../src/util/headers';
export const XMockRandom = 'x-mock-random'; export const XMockRandom = 'x-mock-random';

View File

@ -1,5 +1,6 @@
import { Axios } from 'axios'; import { Axios } from 'axios';
import { buildMemoryStorage, isStorage } from '../../src'; import { isStorage } from '../../src/storage/build';
import { buildMemoryStorage } from '../../src/storage/memory';
import { mockAxios } from '../mocks/axios'; import { mockAxios } from '../mocks/axios';
it('tests isStorage function', () => { it('tests isStorage function', () => {

View File

@ -1,4 +1,4 @@
import type { CachedStorageValue } from '../../src'; import type { CachedStorageValue } from '../../src/storage/types';
import { isCachePredicateValid } from '../../src/util/cache-predicate'; import { isCachePredicateValid } from '../../src/util/cache-predicate';
import { mockAxios } from '../mocks/axios'; import { mockAxios } from '../mocks/axios';
import { createResponse } from '../utils'; import { createResponse } from '../utils';

View File

@ -1,4 +1,4 @@
import type { CachedStorageValue } from '../../src'; import type { CachedStorageValue } from '../../src/storage/types';
import { defaultKeyGenerator } from '../../src/util/key-generator'; import { defaultKeyGenerator } from '../../src/util/key-generator';
import { mockAxios } from '../mocks/axios'; import { mockAxios } from '../mocks/axios';

View File

@ -1,11 +0,0 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"noEmit": false,
"target": "ES6",
"declaration": false,
"declarationMap": false,
"module": "ESNext"
},
"include": ["src/index.*.ts"]
}

View File

@ -2,8 +2,10 @@
"extends": "./tsconfig.json", "extends": "./tsconfig.json",
"compilerOptions": { "compilerOptions": {
"noEmit": false, "noEmit": false,
"target": "ES6" "target": "ESNext",
"module": "ESNext",
"declaration": false,
"declarationMap": false
}, },
"include": ["src"], "include": ["src"]
"exclude": ["src/index.*.ts"]
} }

View File

@ -10,10 +10,12 @@ const TerserWebpackPlugin = require('terser-webpack-plugin');
* entry: string; * entry: string;
* esTarget: string; * esTarget: string;
* minimize: boolean; * minimize: boolean;
* override?: import('typescript').CompilerOptions;
* library?: import('webpack').LibraryOptions;
* }} options * }} options
* @returns {import('webpack').Configuration} * @returns {import('webpack').Configuration}
*/ */
const config = ({ output, esTarget, minimize, entry }) => ({ const config = ({ output, esTarget, minimize, entry, override = {}, library }) => ({
mode: 'production', mode: 'production',
entry: path.resolve(__dirname, 'src', entry), entry: path.resolve(__dirname, 'src', entry),
@ -24,7 +26,8 @@ const config = ({ output, esTarget, minimize, entry }) => ({
filename: output, filename: output,
library: { library: {
type: 'umd', type: 'umd',
name: 'AxiosCacheInterceptor' name: 'AxiosCacheInterceptor',
...library
}, },
chunkFormat: 'module' chunkFormat: 'module'
}, },
@ -44,9 +47,10 @@ const config = ({ output, esTarget, minimize, entry }) => ({
test: /\.(ts|js)$/, test: /\.(ts|js)$/,
loader: 'ts-loader', loader: 'ts-loader',
options: { options: {
configFile: path.resolve(__dirname, 'tsconfig.browser.json'), configFile: path.resolve(__dirname, 'tsconfig.build.json'),
compilerOptions: { compilerOptions: {
target: esTarget target: esTarget,
...override
} }
} }
} }
@ -67,21 +71,35 @@ module.exports = [
minimize: false minimize: false
}), }),
config({ config({
esTarget: 'es2015', esTarget: 'es2015', // ES6
entry: 'index.browser.ts', entry: 'index.ts',
output: 'index.min.js', output: 'index.min.js',
minimize: true minimize: true
}), }),
config({ config({
esTarget: 'es5', esTarget: 'es5',
entry: 'index.browser.ts', entry: 'index.ts',
output: 'index.es5.min.js', output: 'index.es5.min.js',
minimize: true minimize: true
}), }),
config({ config({
esTarget: 'es2020', esTarget: 'es2020',
entry: 'index.browser.ts', entry: 'index.ts',
output: 'index.es2020.min.js', output: 'index.es2020.min.js',
minimize: true minimize: true
}),
config({
esTarget: 'es2017',
entry: 'index.ts',
output: 'index.js',
minimize: true,
library: {
type: 'commonjs',
name: undefined
},
override: {
declaration: true,
declarationMap: true
}
}) })
]; ];