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/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
+ }