ez-saga 18.0.3 → 18.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +7 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/lib/redux/PromiseMiddleware.d.ts +8 -0
- package/lib/redux/PromiseMiddleware.js +39 -0
- package/lib/redux/PromiseMiddleware.js.map +1 -0
- package/lib/redux/createApp.d.ts +3 -0
- package/lib/redux/createApp.js +106 -0
- package/lib/redux/createApp.js.map +1 -0
- package/lib/redux/defaultReducer.d.ts +5 -0
- package/lib/redux/defaultReducer.js +12 -0
- package/lib/redux/defaultReducer.js.map +1 -0
- package/lib/redux/typeDeclare.d.ts +64 -0
- package/lib/redux/typeDeclare.js +2 -0
- package/lib/redux/typeDeclare.js.map +1 -0
- package/package.json +8 -25
- package/src/global-shim.d.ts +10 -0
- package/src/index.ts +2 -0
- package/src/redux/typeDeclare.ts +12 -1
- package/tsconfig.json +38 -0
- package/dist/index.js +0 -3
- package/dist/index.js.LICENSE.txt +0 -1
- package/dist/index.js.map +0 -1
- package/src/index.d.ts +0 -1
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { PayloadAction, EffectTool, Effect, ModelReducer, ModelEffect, ReduxModel, ReduxApp } from './redux/typeDeclare';
|
|
2
|
+
export { Dispatch, Action } from 'redux';
|
|
3
|
+
import createApp from './redux/createApp';
|
|
4
|
+
declare const _default: {
|
|
5
|
+
createApp: typeof createApp;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,eAAe;IACb,SAAS,EAAE,SAAS;CACrB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Dispatch, Middleware } from 'redux';
|
|
2
|
+
import { RegistedModel } from './typeDeclare';
|
|
3
|
+
/**
|
|
4
|
+
* 创建中间层
|
|
5
|
+
* @param registedModel 已注册model
|
|
6
|
+
*/
|
|
7
|
+
declare function createPromiseMiddleware<D extends Dispatch>(registedModel: RegistedModel): Middleware<any, any, any>;
|
|
8
|
+
export default createPromiseMiddleware;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 创建中间层
|
|
3
|
+
* @param registedModel 已注册model
|
|
4
|
+
*/
|
|
5
|
+
function createPromiseMiddleware(registedModel) {
|
|
6
|
+
function isEffect(type) {
|
|
7
|
+
if (!type || typeof type !== 'string')
|
|
8
|
+
return false;
|
|
9
|
+
const [modelName, effect] = type.split('/');
|
|
10
|
+
const model = registedModel[modelName];
|
|
11
|
+
if (model) {
|
|
12
|
+
if (model.effects && model.effects[effect]) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return (api) => (next) => (action) => {
|
|
19
|
+
let exeEffect = false;
|
|
20
|
+
if (action?.type !== undefined) {
|
|
21
|
+
const { type } = action;
|
|
22
|
+
exeEffect = isEffect(type);
|
|
23
|
+
}
|
|
24
|
+
if (exeEffect) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
next({
|
|
27
|
+
_dy_resolve: resolve,
|
|
28
|
+
_dy_reject: reject,
|
|
29
|
+
...action,
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return next(action);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export default createPromiseMiddleware;
|
|
39
|
+
//# sourceMappingURL=PromiseMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromiseMiddleware.js","sourceRoot":"","sources":["../../src/redux/PromiseMiddleware.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,SAAS,uBAAuB,CAAqB,aAA4B;IAC/E,SAAS,QAAQ,CAAC,IAAY;QAC5B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,GAA0B,EAAE,EAAE,CAAC,CAAC,IAA8B,EAAE,EAAE,CAAC,CAAC,MAAe,EAAE,EAAE;QAC7F,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAK,MAAiB,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAgB,CAAC;YAClC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC;oBACH,WAAW,EAAE,OAAO;oBACpB,UAAU,EAAE,MAAM;oBAClB,GAAG,MAAgB;iBACpB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { legacy_createStore as createStore, applyMiddleware, compose } from 'redux';
|
|
2
|
+
import { createSlice, combineReducers } from '@reduxjs/toolkit';
|
|
3
|
+
import createSagaMiddleware from 'redux-saga';
|
|
4
|
+
import { call, put, select, takeEvery, putResolve } from 'redux-saga/effects';
|
|
5
|
+
import win from 'global/window';
|
|
6
|
+
import saveState from './defaultReducer';
|
|
7
|
+
import createPromiseMiddleware from './PromiseMiddleware';
|
|
8
|
+
/**
|
|
9
|
+
* 获取注册model函数
|
|
10
|
+
* @param store redux store
|
|
11
|
+
* @param registedModel 已注册model, 对象, 属性为model名称, value为model
|
|
12
|
+
* @param allReducers 所有的reducers
|
|
13
|
+
* @param sagaMiddleware saga中间件
|
|
14
|
+
* @returns 返回function regist(model)
|
|
15
|
+
*/
|
|
16
|
+
function getRegistModelFunc(store, registedModel, allReducers, sagaMiddleware) {
|
|
17
|
+
/** model函数注册函数
|
|
18
|
+
* @param model 模块, 其格式为
|
|
19
|
+
* {
|
|
20
|
+
* name: 'name',
|
|
21
|
+
* state: {},
|
|
22
|
+
* reducers: {},
|
|
23
|
+
* effects: {}
|
|
24
|
+
* }
|
|
25
|
+
*/
|
|
26
|
+
return function regist(reduxModel) {
|
|
27
|
+
const model = {
|
|
28
|
+
...reduxModel,
|
|
29
|
+
initialState: {}
|
|
30
|
+
};
|
|
31
|
+
if (registedModel[model.name]) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (!model.state) {
|
|
35
|
+
model.state = {};
|
|
36
|
+
}
|
|
37
|
+
model.initialState = model.state;
|
|
38
|
+
if (!model.reducers) {
|
|
39
|
+
model.reducers = {};
|
|
40
|
+
}
|
|
41
|
+
if (!model.reducers.saveState) {
|
|
42
|
+
model.reducers.saveState = saveState;
|
|
43
|
+
}
|
|
44
|
+
if (!model.effects) {
|
|
45
|
+
model.effects = {};
|
|
46
|
+
}
|
|
47
|
+
const modelSlice = createSlice(model);
|
|
48
|
+
const reducer = modelSlice.reducer;
|
|
49
|
+
allReducers[model.name] = reducer;
|
|
50
|
+
registedModel[model.name] = model;
|
|
51
|
+
//获得一个新的reducer, 将所有的reducer整合成一个
|
|
52
|
+
let newReducer = combineReducers(allReducers);
|
|
53
|
+
store.replaceReducer(newReducer);
|
|
54
|
+
//注册effects
|
|
55
|
+
for (let effect in model.effects) {
|
|
56
|
+
let type = `${model.name}/${effect}`;
|
|
57
|
+
let execFun = model.effects[effect];
|
|
58
|
+
function* loading(opFun, action) {
|
|
59
|
+
// 开始异步任务设置loading状态
|
|
60
|
+
yield putResolve({ type: `${model.name}/saveState`, payload: { loading: true } });
|
|
61
|
+
let ret = yield call(execFun, action, opFun);
|
|
62
|
+
// 结束异步任务关闭loading状态
|
|
63
|
+
yield putResolve({ type: `${model.name}/saveState`, payload: { loading: false } });
|
|
64
|
+
if (action._dy_resolve) {
|
|
65
|
+
action._dy_resolve(ret);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function* runEffect() {
|
|
69
|
+
//yield takeLatest(type, loading, { call, put, putResolve, select });
|
|
70
|
+
yield takeEvery(type, loading, { call, put, putResolve, select });
|
|
71
|
+
}
|
|
72
|
+
sagaMiddleware.run(runEffect);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/** 创建store */
|
|
77
|
+
export default function create() {
|
|
78
|
+
//已经注册的reducer, key是名字, value是reducer
|
|
79
|
+
const allReducers = {};
|
|
80
|
+
//已注册model
|
|
81
|
+
const registedModel = {};
|
|
82
|
+
const sagaMiddleware = createSagaMiddleware();
|
|
83
|
+
const promiseMiddleware = createPromiseMiddleware(registedModel);
|
|
84
|
+
const middlewares = [
|
|
85
|
+
promiseMiddleware,
|
|
86
|
+
sagaMiddleware
|
|
87
|
+
];
|
|
88
|
+
// eslint-disable-next-line no-undef
|
|
89
|
+
const composeEnhancers = process.env.NODE_ENV !== 'production'
|
|
90
|
+
&& win.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?
|
|
91
|
+
win.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ trace: true, maxAge: 30 }) : compose;
|
|
92
|
+
const enhancers = [applyMiddleware(...middlewares)];
|
|
93
|
+
//redux store
|
|
94
|
+
const store = createStore(saveState, {}, composeEnhancers(...enhancers));
|
|
95
|
+
const regist = getRegistModelFunc(store, registedModel, allReducers, sagaMiddleware);
|
|
96
|
+
let app = {
|
|
97
|
+
/** redux store */
|
|
98
|
+
store: store,
|
|
99
|
+
/** saga中间件 */
|
|
100
|
+
sagaMiddleware: sagaMiddleware,
|
|
101
|
+
/** model注册函数 */
|
|
102
|
+
regist: regist
|
|
103
|
+
};
|
|
104
|
+
return app;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=createApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createApp.js","sourceRoot":"","sources":["../../src/redux/createApp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultReducer.js","sourceRoot":"","sources":["../../src/redux/defaultReducer.ts"],"names":[],"mappings":"AAIA,MAAM,SAAS,GAAgC,CAAC,KAAU,EAAE,MAAqB,EAAE,EAAE;IACnF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,GAAG;QACZ,GAAG,KAAK;QACR,GAAG,MAAM,CAAC,OAAO;KAClB,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** 类型申明 */
|
|
2
|
+
import { Action as ReduxAction, Store, Reducer, UnknownAction } from 'redux';
|
|
3
|
+
import { Action, SagaMiddleware } from 'redux-saga';
|
|
4
|
+
import { PutEffect, SelectEffect } from 'redux-saga/effects';
|
|
5
|
+
/** payload action类型 */
|
|
6
|
+
export interface PayloadAction extends UnknownAction, ReduxAction<string> {
|
|
7
|
+
/** 类型 */
|
|
8
|
+
type: string;
|
|
9
|
+
/** 载体 */
|
|
10
|
+
payload?: any;
|
|
11
|
+
[extraProps: string]: any;
|
|
12
|
+
}
|
|
13
|
+
declare module 'redux' {
|
|
14
|
+
interface Dispatch {
|
|
15
|
+
<R = any>(action: PayloadAction, ...extraArgs: any[]): Promise<R>;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** 工具 */
|
|
19
|
+
export interface EffectTool {
|
|
20
|
+
/** 调用异步函数, 并获得该异步函数的结果 */
|
|
21
|
+
call: (...args: any[]) => any;
|
|
22
|
+
/** 分发异步action */
|
|
23
|
+
put: <A extends Action>(action: A) => PutEffect<A>;
|
|
24
|
+
/** 分发同步action */
|
|
25
|
+
putResolve: <A extends Action>(action: A) => PutEffect<A>;
|
|
26
|
+
/** 从store从获取状态 */
|
|
27
|
+
select: ((selectFunc: (state: any) => any) => SelectEffect) | (() => SelectEffect);
|
|
28
|
+
}
|
|
29
|
+
/** Effect函数类型 */
|
|
30
|
+
export interface Effect {
|
|
31
|
+
(action: PayloadAction, tool: EffectTool): Generator | Promise<any> | any;
|
|
32
|
+
}
|
|
33
|
+
/** ModelReducer定义 */
|
|
34
|
+
export interface ModelReducer {
|
|
35
|
+
[key: string]: Reducer<any, PayloadAction>;
|
|
36
|
+
}
|
|
37
|
+
/** ModelEffect定义 */
|
|
38
|
+
export interface ModelEffect {
|
|
39
|
+
[key: string]: Effect;
|
|
40
|
+
}
|
|
41
|
+
export interface ReduxModel {
|
|
42
|
+
name: string;
|
|
43
|
+
state?: any;
|
|
44
|
+
reducers?: ModelReducer;
|
|
45
|
+
effects?: ModelEffect;
|
|
46
|
+
}
|
|
47
|
+
export interface ReduxSagaModel extends ReduxModel {
|
|
48
|
+
initialState: any;
|
|
49
|
+
reducerPath: string;
|
|
50
|
+
reducers: ModelReducer;
|
|
51
|
+
}
|
|
52
|
+
export interface RegistedModel {
|
|
53
|
+
[key: string]: ReduxModel;
|
|
54
|
+
}
|
|
55
|
+
/** app */
|
|
56
|
+
export interface ReduxApp {
|
|
57
|
+
store: Store<any, ReduxAction>;
|
|
58
|
+
sagaMiddleware: SagaMiddleware<object>;
|
|
59
|
+
regist: (model: ReduxModel) => void;
|
|
60
|
+
}
|
|
61
|
+
export interface ReduxSagaModel extends ReduxModel {
|
|
62
|
+
initialState: any;
|
|
63
|
+
reducers: ModelReducer;
|
|
64
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeDeclare.js","sourceRoot":"","sources":["../../src/redux/typeDeclare.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ez-saga",
|
|
3
|
-
"version": "18.0.
|
|
3
|
+
"version": "18.0.5",
|
|
4
4
|
"description": "The ez-saga project is a project that imitates dva-js",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"typings": "lib/index.d.ts",
|
|
6
7
|
"sideEffects": false,
|
|
7
8
|
"repository": {
|
|
8
9
|
"type": "git",
|
|
@@ -22,13 +23,14 @@
|
|
|
22
23
|
],
|
|
23
24
|
"license": "MIT",
|
|
24
25
|
"scripts": {
|
|
25
|
-
"build:prod": "
|
|
26
|
+
"build:prod": "rimraf lib && tsc",
|
|
27
|
+
"build:types": "tsc",
|
|
26
28
|
"lint": "eslint --ext .js src"
|
|
27
29
|
},
|
|
28
30
|
"dependencies": {
|
|
29
|
-
"@reduxjs/toolkit": "^2.
|
|
31
|
+
"@reduxjs/toolkit": "^2.11.2",
|
|
30
32
|
"redux": "^5.0.1",
|
|
31
|
-
"redux-saga": "^1.
|
|
33
|
+
"redux-saga": "^1.4.2",
|
|
32
34
|
"global": "^4.4.0"
|
|
33
35
|
},
|
|
34
36
|
"peerDependencies": {},
|
|
@@ -45,30 +47,12 @@
|
|
|
45
47
|
"@babel/plugin-transform-class-properties": "^7.23.3",
|
|
46
48
|
"@babel/plugin-transform-private-methods": "^7.23.3",
|
|
47
49
|
"@babel/plugin-transform-private-property-in-object": "^7.23.4",
|
|
48
|
-
"autoprefixer": "^10.4.17",
|
|
49
|
-
"babel-loader": "^9.1.3",
|
|
50
|
-
"babel-plugin-dynamic-import-webpack": "^1.1.0",
|
|
51
|
-
"babel-plugin-import": "^1.13.8",
|
|
52
|
-
"chalk": "^4.1.2",
|
|
53
|
-
"copy-webpack-plugin": "^12.0.2",
|
|
54
|
-
"core-js": "^3.35.1",
|
|
55
50
|
"cross-env": "^7.0.3",
|
|
56
51
|
"eslint": "^8.56.0",
|
|
57
52
|
"eslint-plugin-flowtype": "^8.0.3",
|
|
58
53
|
"eslint-plugin-import": "^2.29.1",
|
|
59
54
|
"eslint-plugin-node": "^11.1.0",
|
|
60
55
|
"eslint-plugin-standard": "^4.1.0",
|
|
61
|
-
"eslint-webpack-plugin": "^4.0.1",
|
|
62
|
-
"rimraf": "^5.0.5",
|
|
63
|
-
"semver": "^7.5.4",
|
|
64
|
-
"shelljs": "^0.8.5",
|
|
65
|
-
"terser-webpack-plugin": "^5.3.10",
|
|
66
|
-
"webpack": "^5.89.0",
|
|
67
|
-
"webpack-bundle-analyzer": "^4.10.1",
|
|
68
|
-
"webpack-cli": "^5.1.4",
|
|
69
|
-
"webpack-dev-server": "^4.15.1",
|
|
70
|
-
"webpack-merge": "^5.10.0",
|
|
71
|
-
"ts-loader": "^9.5.1",
|
|
72
56
|
"typescript": "^5.3.3"
|
|
73
57
|
},
|
|
74
58
|
"engines": {
|
|
@@ -82,11 +66,10 @@
|
|
|
82
66
|
"not op_mini all"
|
|
83
67
|
],
|
|
84
68
|
"files": [
|
|
85
|
-
"dist",
|
|
86
69
|
"lib",
|
|
87
70
|
"src",
|
|
88
71
|
"index.js",
|
|
89
|
-
"
|
|
72
|
+
"tsconfig.json",
|
|
90
73
|
"typing.d.ts"
|
|
91
74
|
]
|
|
92
75
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
/// <reference path="./global-shim.d.ts" />
|
|
1
2
|
export { PayloadAction, EffectTool, Effect, ModelReducer, ModelEffect, ReduxModel, ReduxApp } from './redux/typeDeclare';
|
|
3
|
+
export { Dispatch, Action } from 'redux';
|
|
2
4
|
import createApp from './redux/createApp';
|
|
3
5
|
export default {
|
|
4
6
|
createApp: createApp
|
package/src/redux/typeDeclare.ts
CHANGED
|
@@ -14,6 +14,17 @@ export interface PayloadAction extends UnknownAction, ReduxAction<string> {
|
|
|
14
14
|
[extraProps: string]: any;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
declare module 'redux' {
|
|
18
|
+
export interface Dispatch {
|
|
19
|
+
<R = any>(action: PayloadAction, ...extraArgs: any[]): Promise<R>;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// /** 定义AsyncDispatch, 使其兼容redux promiseMiddleware中间件修改返回结果的情况 */
|
|
24
|
+
// export interface AsyncDispatch {
|
|
25
|
+
// <R = any>(action: PayloadAction, ...extraArgs: any[]): Promise<R>;
|
|
26
|
+
// }
|
|
27
|
+
|
|
17
28
|
/** 工具 */
|
|
18
29
|
export interface EffectTool {
|
|
19
30
|
/** 调用异步函数, 并获得该异步函数的结果 */
|
|
@@ -28,7 +39,7 @@ export interface EffectTool {
|
|
|
28
39
|
|
|
29
40
|
/** Effect函数类型 */
|
|
30
41
|
export interface Effect {
|
|
31
|
-
(action: PayloadAction, tool: EffectTool): Generator | any;
|
|
42
|
+
(action: PayloadAction, tool: EffectTool): Generator | Promise<any> | any;
|
|
32
43
|
}
|
|
33
44
|
|
|
34
45
|
/** ModelReducer定义 */
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "esnext",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"resolveJsonModule": true,
|
|
7
|
+
"importHelpers": true,
|
|
8
|
+
"jsx": "react-jsx",
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"baseUrl": "./",
|
|
12
|
+
"noImplicitAny": false,
|
|
13
|
+
"strict": true,
|
|
14
|
+
"paths": {
|
|
15
|
+
"@/*": [
|
|
16
|
+
"src/*"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"declaration": true,
|
|
20
|
+
"outDir": "lib",
|
|
21
|
+
"allowSyntheticDefaultImports": true
|
|
22
|
+
},
|
|
23
|
+
"include": [
|
|
24
|
+
"src/**/*",
|
|
25
|
+
"typings.d.ts"
|
|
26
|
+
],
|
|
27
|
+
"exclude": [
|
|
28
|
+
"node_modules",
|
|
29
|
+
"lib",
|
|
30
|
+
"es",
|
|
31
|
+
"dist",
|
|
32
|
+
"typings",
|
|
33
|
+
"**/__test__",
|
|
34
|
+
"test",
|
|
35
|
+
"docs",
|
|
36
|
+
"tests"
|
|
37
|
+
]
|
|
38
|
+
}
|