anu-verzum 1.0.0
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/README.md +1997 -0
- package/babel-preset.js +13 -0
- package/dist/core/components/AnulyticsProvider.js +227 -0
- package/dist/core/components/Component.js +34 -0
- package/dist/core/components/Connector.js +133 -0
- package/dist/core/components/Context.js +98 -0
- package/dist/core/components/Feature.js +24 -0
- package/dist/core/components/Fragment.js +24 -0
- package/dist/core/components/History.js +163 -0
- package/dist/core/components/Intl.js +168 -0
- package/dist/core/domUtils.js +95 -0
- package/dist/core/elements.js +26 -0
- package/dist/core/reconciler.js +379 -0
- package/dist/index.js +55 -0
- package/dist/misc/async.js +24 -0
- package/dist/misc/polyfill.js +1 -0
- package/dist/misc/utils.js +27 -0
- package/dist/server-api/server-api.js +111 -0
- package/dist/store/store.js +171 -0
- package/package.json +43 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _async = _interopRequireDefault(require("./misc/async"));
|
|
8
|
+
var _utils = _interopRequireDefault(require("./misc/utils"));
|
|
9
|
+
var _serverApi = _interopRequireDefault(require("./server-api/server-api"));
|
|
10
|
+
var _elements = require("./core/elements");
|
|
11
|
+
var _reconciler = require("./core/reconciler");
|
|
12
|
+
var _store = _interopRequireDefault(require("./store/store"));
|
|
13
|
+
var _Context = require("./core/components/Context");
|
|
14
|
+
var _Component = require("./core/components/Component");
|
|
15
|
+
var _Fragment = require("./core/components/Fragment");
|
|
16
|
+
var _Connector = _interopRequireDefault(require("./core/components/Connector"));
|
|
17
|
+
var _Feature = _interopRequireDefault(require("./core/components/Feature"));
|
|
18
|
+
var _History = _interopRequireDefault(require("./core/components/History"));
|
|
19
|
+
var _Intl = _interopRequireDefault(require("./core/components/Intl"));
|
|
20
|
+
var _AnulyticsProvider = _interopRequireWildcard(require("./core/components/AnulyticsProvider"));
|
|
21
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
22
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
|
+
window.requestIdleCallback = window.requestIdleCallback || function (callBack) {
|
|
24
|
+
const start = Date.now();
|
|
25
|
+
return setTimeout(() => {
|
|
26
|
+
callBack({
|
|
27
|
+
didTimeout: false,
|
|
28
|
+
timeRemaining: () => Math.max(0, 50 - (Date.now() - start))
|
|
29
|
+
});
|
|
30
|
+
}, 1);
|
|
31
|
+
};
|
|
32
|
+
window.cancelIdleCallback = window.cancelIdleCallback || function (id) {
|
|
33
|
+
clearTimeout(id);
|
|
34
|
+
};
|
|
35
|
+
const Anu = {
|
|
36
|
+
Anulytics: {
|
|
37
|
+
Provider: _AnulyticsProvider.default,
|
|
38
|
+
trackEvent: _AnulyticsProvider.trackEvent
|
|
39
|
+
},
|
|
40
|
+
createContext: _Context.createContext,
|
|
41
|
+
createElement: _elements.createElement,
|
|
42
|
+
createRef: _reconciler.createRef,
|
|
43
|
+
Component: _Component.Component,
|
|
44
|
+
Fragment: _Fragment.Fragment,
|
|
45
|
+
render: _reconciler.render,
|
|
46
|
+
Feature: _Feature.default,
|
|
47
|
+
History: _History.default,
|
|
48
|
+
Intl: _Intl.default,
|
|
49
|
+
Connector: _Connector.default,
|
|
50
|
+
ServerAPI: _serverApi.default,
|
|
51
|
+
store: _store.default,
|
|
52
|
+
Async: _async.default,
|
|
53
|
+
Utils: _utils.default
|
|
54
|
+
};
|
|
55
|
+
var _default = exports.default = Anu;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
const asyncMap = (coll, iteratee, callback) => {
|
|
8
|
+
const collection = Array.isArray(coll) ? coll : [coll];
|
|
9
|
+
const collLastIndex = collection.length - 1;
|
|
10
|
+
const results = [];
|
|
11
|
+
for (let i = 0; i < collection.length; i++) {
|
|
12
|
+
(index => {
|
|
13
|
+
const result = iteratee(collection[index]);
|
|
14
|
+
results.push(result);
|
|
15
|
+
if (index === collLastIndex) {
|
|
16
|
+
callback(results);
|
|
17
|
+
}
|
|
18
|
+
})(i);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const Async = {
|
|
22
|
+
map: asyncMap
|
|
23
|
+
};
|
|
24
|
+
var _default = exports.default = Async;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
const isObject = object => object !== null && typeof object === 'object';
|
|
8
|
+
const deepEqual = (object1, object2) => {
|
|
9
|
+
const keys1 = Object.keys(object1);
|
|
10
|
+
const keys2 = Object.keys(object2);
|
|
11
|
+
if (keys1.length !== keys2.length) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
for (const key of keys1) {
|
|
15
|
+
const val1 = object1[key];
|
|
16
|
+
const val2 = object2[key];
|
|
17
|
+
const areObjects = isObject(val1) && isObject(val2);
|
|
18
|
+
if (areObjects && !deepEqual(val1, val2) || !areObjects && val1 !== val2) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
};
|
|
24
|
+
const Utils = {
|
|
25
|
+
deepEqual
|
|
26
|
+
};
|
|
27
|
+
var _default = exports.default = Utils;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
const SUCCESS_STATUS_CODES = [200, 201, 202, 203, 204, 205, 206, 207, 208, 226];
|
|
8
|
+
const CLIENT_ERROR_STATUS_CODES = [400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 421, 422, 423, 424, 425, 426, 428, 429, 431, 451];
|
|
9
|
+
const SERVER_ERROR_STATUS_CODES = [500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511];
|
|
10
|
+
const _setXHR = (successHandler, errorHandler) => {
|
|
11
|
+
const XHR = new XMLHttpRequest();
|
|
12
|
+
XHR.onload = () => {
|
|
13
|
+
const {
|
|
14
|
+
status,
|
|
15
|
+
response
|
|
16
|
+
} = XHR;
|
|
17
|
+
if (SUCCESS_STATUS_CODES.indexOf(status) > -1) {
|
|
18
|
+
successHandler({
|
|
19
|
+
status,
|
|
20
|
+
response: response ? (() => {
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(response);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
console.error('Invalid JSON response:', e.message);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
})() : null
|
|
28
|
+
});
|
|
29
|
+
} else if (CLIENT_ERROR_STATUS_CODES.indexOf(status) > -1 || SERVER_ERROR_STATUS_CODES.indexOf(status) > -1) {
|
|
30
|
+
errorHandler({
|
|
31
|
+
status,
|
|
32
|
+
response: null
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return XHR;
|
|
37
|
+
};
|
|
38
|
+
const _trimUrlFromSpaces = url => `${url.replace(/\s/g, '_')}`;
|
|
39
|
+
const _serverGetAPI = (url, params = {}) => (successHandler, errorHandler) => {
|
|
40
|
+
const XHR = _setXHR(successHandler, errorHandler);
|
|
41
|
+
let urlWithParams = _trimUrlFromSpaces(url);
|
|
42
|
+
const urlParamKeys = Object.keys(params);
|
|
43
|
+
if (urlParamKeys.length > 0) {
|
|
44
|
+
urlParamKeys.forEach((key, index) => {
|
|
45
|
+
if (index === 0) {
|
|
46
|
+
urlWithParams += `?${key}=${params[key]}`;
|
|
47
|
+
} else {
|
|
48
|
+
urlWithParams += `&${key}=${params[key]}`;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
XHR.open('GET', urlWithParams, true);
|
|
53
|
+
XHR.send();
|
|
54
|
+
};
|
|
55
|
+
const _serverPostAPI = (url, data) => (successHandler, errorHandler) => {
|
|
56
|
+
if (!data) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const urlParams = `data=${JSON.stringify(data)}`;
|
|
60
|
+
const XHR = _setXHR(successHandler, errorHandler);
|
|
61
|
+
XHR.open('POST', url, true);
|
|
62
|
+
XHR.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
|
63
|
+
XHR.send(urlParams);
|
|
64
|
+
};
|
|
65
|
+
const _serverPutAPI = (url, data) => (successHandler, errorHandler) => {
|
|
66
|
+
if (!data) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const XHR = _setXHR(successHandler, errorHandler);
|
|
70
|
+
XHR.open('PUT', url, true);
|
|
71
|
+
XHR.setRequestHeader('Content-type', 'application/json; charset=utf-8');
|
|
72
|
+
XHR.send(JSON.stringify(data));
|
|
73
|
+
};
|
|
74
|
+
const _serverDeleteAPI = (url, params = {}) => (successHandler, errorHandler) => {
|
|
75
|
+
const XHR = _setXHR(successHandler, errorHandler);
|
|
76
|
+
let urlWithParams = _trimUrlFromSpaces(url);
|
|
77
|
+
const urlParamKeys = Object.keys(params);
|
|
78
|
+
if (urlParamKeys.length > 0) {
|
|
79
|
+
urlParamKeys.forEach((key, index) => {
|
|
80
|
+
if (index === 0) {
|
|
81
|
+
urlWithParams += `?${key}=${params[key]}`;
|
|
82
|
+
} else {
|
|
83
|
+
urlWithParams += `&${key}=${params[key]}`;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
XHR.open('DELETE', urlWithParams, true);
|
|
88
|
+
XHR.send();
|
|
89
|
+
};
|
|
90
|
+
const _serverFileAPI = (url, files, data = {}) => (successHandler, errorHandler) => {
|
|
91
|
+
if (!files) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const XHR = _setXHR(successHandler, errorHandler);
|
|
95
|
+
XHR.open('POST', url, true);
|
|
96
|
+
const formData = new FormData();
|
|
97
|
+
const formDataFiles = Array.isArray(files) ? files : [files];
|
|
98
|
+
formDataFiles.forEach((file, index) => {
|
|
99
|
+
formData.append(index, file);
|
|
100
|
+
});
|
|
101
|
+
formData.append('data', JSON.stringify(data));
|
|
102
|
+
XHR.send(formData);
|
|
103
|
+
};
|
|
104
|
+
const ServerAPI = {
|
|
105
|
+
get: (url, params) => new Promise(_serverGetAPI(url, params)),
|
|
106
|
+
post: (url, data) => new Promise(_serverPostAPI(url, data)),
|
|
107
|
+
put: (url, data) => new Promise(_serverPutAPI(url, data)),
|
|
108
|
+
delete: (url, params) => new Promise(_serverDeleteAPI(url, params)),
|
|
109
|
+
file: (url, file, data) => new Promise(_serverFileAPI(url, file, data))
|
|
110
|
+
};
|
|
111
|
+
var _default = exports.default = ServerAPI;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _AnulyticsProvider = require("../core/components/AnulyticsProvider");
|
|
8
|
+
const createStore = (reducer, initialState, middleware) => {
|
|
9
|
+
const _currentReducer = reducer;
|
|
10
|
+
let _currentState = initialState;
|
|
11
|
+
const _subscribers = [];
|
|
12
|
+
const _validateAction = action => {
|
|
13
|
+
if (!action || typeof action !== 'object' || Array.isArray(action)) {
|
|
14
|
+
throw new Error('Action must be an object!');
|
|
15
|
+
}
|
|
16
|
+
if (typeof action.type === 'undefined') {
|
|
17
|
+
throw new Error('Action must have a type!');
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const _coreDispatch = action => {
|
|
21
|
+
_validateAction(action);
|
|
22
|
+
const prevState = {
|
|
23
|
+
..._currentState
|
|
24
|
+
};
|
|
25
|
+
_currentState = _currentReducer(_currentState, action);
|
|
26
|
+
(0, _AnulyticsProvider.trackStateChange)(prevState, action, _currentState);
|
|
27
|
+
_subscribers.forEach(subscriber => {
|
|
28
|
+
subscriber();
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
const getState = () => _currentState;
|
|
32
|
+
const store = {
|
|
33
|
+
getState,
|
|
34
|
+
dispatch: _coreDispatch,
|
|
35
|
+
subscribe: newListener => {
|
|
36
|
+
_subscribers.push(newListener);
|
|
37
|
+
},
|
|
38
|
+
unsubscribe: listenerToRemove => {
|
|
39
|
+
const index = _subscribers.indexOf(listenerToRemove);
|
|
40
|
+
if (index >= 0) {
|
|
41
|
+
_subscribers.splice(index, 1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
if (middleware) {
|
|
46
|
+
const dispatch = action => store.dispatch(action);
|
|
47
|
+
store.dispatch = middleware({
|
|
48
|
+
dispatch,
|
|
49
|
+
getState
|
|
50
|
+
})(_coreDispatch);
|
|
51
|
+
}
|
|
52
|
+
return store;
|
|
53
|
+
};
|
|
54
|
+
const applyMiddleware = (...middlewares) => store => {
|
|
55
|
+
if (middlewares.length === 0) {
|
|
56
|
+
return dispatch => dispatch;
|
|
57
|
+
}
|
|
58
|
+
if (middlewares.length === 1) {
|
|
59
|
+
return middlewares[0](store);
|
|
60
|
+
}
|
|
61
|
+
const boundMiddlewares = middlewares.map(middleware => middleware(store));
|
|
62
|
+
return boundMiddlewares.reduce((a, b) => next => a(b(next)));
|
|
63
|
+
};
|
|
64
|
+
const thunkMiddleware = ({
|
|
65
|
+
dispatch,
|
|
66
|
+
getState
|
|
67
|
+
}) => next => action => {
|
|
68
|
+
if (typeof action === 'function') {
|
|
69
|
+
return action(dispatch, getState);
|
|
70
|
+
}
|
|
71
|
+
return next(action);
|
|
72
|
+
};
|
|
73
|
+
const loggingMiddleware = ({
|
|
74
|
+
getState
|
|
75
|
+
}) => next => action => {
|
|
76
|
+
const prevState = {
|
|
77
|
+
...getState()
|
|
78
|
+
};
|
|
79
|
+
const result = next(action);
|
|
80
|
+
const nextState = {
|
|
81
|
+
...getState()
|
|
82
|
+
};
|
|
83
|
+
console.log('\n-----');
|
|
84
|
+
console.log('Previous state:', prevState);
|
|
85
|
+
console.log('Dispatching action:', action);
|
|
86
|
+
console.log('Next state:', nextState);
|
|
87
|
+
return result;
|
|
88
|
+
};
|
|
89
|
+
const combineReducers = reducers => {
|
|
90
|
+
const reducerKeys = Object.keys(reducers);
|
|
91
|
+
return (state = {}, action) => {
|
|
92
|
+
const nextState = {};
|
|
93
|
+
const keysLength = reducerKeys.length;
|
|
94
|
+
for (let i = 0; i < keysLength; i++) {
|
|
95
|
+
const key = reducerKeys[i];
|
|
96
|
+
const reducer = reducers[key];
|
|
97
|
+
const previousStateForKey = state[key];
|
|
98
|
+
const nextStateForKey = reducer(previousStateForKey, action);
|
|
99
|
+
nextState[key] = nextStateForKey;
|
|
100
|
+
}
|
|
101
|
+
return nextState;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
const _generateKey = args => {
|
|
105
|
+
const parts = [];
|
|
106
|
+
for (let i = 0; i < args.length; i++) {
|
|
107
|
+
const arg = args[i];
|
|
108
|
+
const type = typeof arg;
|
|
109
|
+
if (arg === null) {
|
|
110
|
+
parts.push('null');
|
|
111
|
+
} else if (arg === undefined) {
|
|
112
|
+
parts.push('undefined');
|
|
113
|
+
} else if (type === 'function') {
|
|
114
|
+
parts.push(`function:${arg.name || 'anonymous'}:${arg.toString().slice(0, 100)}`);
|
|
115
|
+
} else if (type === 'symbol') {
|
|
116
|
+
parts.push(`symbol:${arg.toString()}`);
|
|
117
|
+
} else if (type === 'object') {
|
|
118
|
+
try {
|
|
119
|
+
parts.push(`object:${JSON.stringify(arg)}`);
|
|
120
|
+
} catch (e) {
|
|
121
|
+
parts.push(`object:circular:${Object.prototype.toString.call(arg)}`);
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
parts.push(`${type}:${arg}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return parts.join('|');
|
|
128
|
+
};
|
|
129
|
+
const _memoize = (func, maxSize = 100) => {
|
|
130
|
+
const cache = new Map();
|
|
131
|
+
const accessOrder = [];
|
|
132
|
+
return (...args) => {
|
|
133
|
+
const key = _generateKey(args);
|
|
134
|
+
if (cache.has(key)) {
|
|
135
|
+
const index = accessOrder.indexOf(key);
|
|
136
|
+
accessOrder.splice(index, 1);
|
|
137
|
+
accessOrder.push(key);
|
|
138
|
+
return cache.get(key);
|
|
139
|
+
}
|
|
140
|
+
const result = func.apply(null, args);
|
|
141
|
+
cache.set(key, result);
|
|
142
|
+
accessOrder.push(key);
|
|
143
|
+
if (cache.size > maxSize) {
|
|
144
|
+
const oldestKey = accessOrder.shift();
|
|
145
|
+
cache.delete(oldestKey);
|
|
146
|
+
}
|
|
147
|
+
return result;
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
const createSelector = (dependenciesInput, transformation) => {
|
|
151
|
+
const dependencies = Array.isArray(dependenciesInput) ? dependenciesInput : [dependenciesInput];
|
|
152
|
+
const memoizedTransformation = _memoize(transformation);
|
|
153
|
+
return _memoize(input => {
|
|
154
|
+
const params = [];
|
|
155
|
+
dependencies.forEach(func => {
|
|
156
|
+
params.push(func(input));
|
|
157
|
+
});
|
|
158
|
+
return memoizedTransformation.apply(null, params);
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
const store = {
|
|
162
|
+
combineReducers,
|
|
163
|
+
createSelector,
|
|
164
|
+
createStore,
|
|
165
|
+
middleware: {
|
|
166
|
+
applyMiddleware,
|
|
167
|
+
loggingMiddleware,
|
|
168
|
+
thunkMiddleware
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
var _default = exports.default = store;
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "anu-verzum",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A \"React-like\" UI library that supports JSX syntax, state management, array-rendering, i18n, routing and many more.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"anu-verzum",
|
|
7
|
+
"UI-library",
|
|
8
|
+
"React-like",
|
|
9
|
+
"JSX",
|
|
10
|
+
"state-management",
|
|
11
|
+
"routing",
|
|
12
|
+
"i18n"
|
|
13
|
+
],
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"babel-preset.js"
|
|
17
|
+
],
|
|
18
|
+
"homepage": "https://github.com/Anubis-programmer/ANUVerzum#readme",
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/Anubis-programmer/ANUVerzum/issues"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/Anubis-programmer/ANUVerzum.git"
|
|
25
|
+
},
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"author": "Anubis-programmer",
|
|
28
|
+
"type": "commonjs",
|
|
29
|
+
"main": "dist/index.js",
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "babel src --out-dir dist --extensions \".js\" --copy-files",
|
|
32
|
+
"prepare": "npm run build",
|
|
33
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@babel/plugin-transform-react-jsx": "^7.21.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@babel/cli": "^7.21.0",
|
|
40
|
+
"@babel/core": "^7.21.0",
|
|
41
|
+
"@babel/preset-env": "^7.21.0"
|
|
42
|
+
}
|
|
43
|
+
}
|