@radiantabyss/neutralino 1.0.0 → 1.0.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radiantabyss/neutralino",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "author": "radiantabyss.com",
5
5
  "license": "ISC",
6
6
  "eslintConfig": {
@@ -26,7 +26,6 @@
26
26
  },
27
27
  "type": "module",
28
28
  "dependencies": {
29
- "axios": "1.7.*",
30
29
  "validatorjs": "3.22.1"
31
30
  }
32
31
  }
package/src/Bootstrap.js CHANGED
@@ -1,4 +1,3 @@
1
- import Request from './Request.js';
2
1
  import Response from './Response.js';
3
2
  import Invoke from './Invoke.js';
4
3
  import Validator from './Validator.js';
@@ -7,23 +6,17 @@ import IPC from './IPC.js';
7
6
  import Config from './Support/Config.js';
8
7
  import Env from './Support/Env.js';
9
8
  import Helpers from './Support/Helpers.js';
10
- import Item from './Support/Item.js';
11
- import Items from './Support/Items.js';
12
- import Str from './Support/Str.js';
13
9
 
14
- export default async () => {
10
+ export default () => {
15
11
  //helpers
16
12
  for ( let key in Helpers ) {
17
13
  window[key] = Helpers[key];
18
14
  }
19
15
 
16
+ window.RA = {};
20
17
  window.Config = Config;
21
18
  window.Env = Env;
22
- window.Item = Item;
23
- window.Items = Items;
24
- window.Str = Str;
25
19
 
26
- window.Request = Request;
27
20
  window.Response = Response;
28
21
  window.Invoke = Invoke;
29
22
  window.Validator = Validator;
@@ -30,7 +30,7 @@ function addRoute(method, path, action, middleware, name, throw_error) {
30
30
  return;
31
31
  }
32
32
 
33
- RouteFiles[__route_file].push({
33
+ window.RA.RouteFiles[__neutralino_route_file].push({
34
34
  name: action_name,
35
35
  component,
36
36
  path,
@@ -1,5 +1,3 @@
1
- import Str from './../Support/Str';
2
-
3
1
  let self = {
4
2
  run(domain) {
5
3
  domain = domain.replace(/\\/g, '.').replace(/\//g, '.');
@@ -4,9 +4,9 @@ import RouteFiles from './RouteFiles.js';
4
4
  import Route from './Route.js';
5
5
  import RouteCrud from './RouteCrud.js';
6
6
 
7
- window.RouteFiles = RouteFiles;
8
- window.Route = Route;
9
- window.RouteCrud = RouteCrud;
7
+ window.RA.RouteFiles = RouteFiles;
8
+ window.RA.Route = Route;
9
+ window.RA.RouteCrud = RouteCrud;
10
10
 
11
11
  let Routes = [];
12
12
 
@@ -14,15 +14,15 @@ let Routes = [];
14
14
  let context = import.meta.glob('/app/Routes/**/*.js');
15
15
 
16
16
  const loadModules = async () => {
17
- window.Actions = await Actions();
17
+ window.RA.Actions = await Actions();
18
18
  const files = Object.keys(context);
19
19
 
20
20
  for ( let i = 0; i < files.length; i++ ) {
21
21
  let file = files[i].replace('/app/Routes/', '').replace(/\.js$/, '');
22
- window.__route_file = file;
22
+ window.RA.__neutralino_route_file = file;
23
23
 
24
- if ( !RouteFiles[__route_file] ) {
25
- RouteFiles[__route_file] = [];
24
+ if ( !RouteFiles[window.RA.__neutralino_route_file] ) {
25
+ RouteFiles[window.RA.__neutralino_route_file] = [];
26
26
  }
27
27
 
28
28
  await context[files[i]]();
@@ -88,7 +88,7 @@ export default async () => {
88
88
  await loadModules();
89
89
 
90
90
  //handle route matching
91
- window.IPC.handle('invoke', async (event, args) => {
91
+ IPC.handle('invoke', async (event, args) => {
92
92
  args.payload = JSON.parse(args.payload);
93
93
 
94
94
  let matched = await match(args, event);
@@ -1,32 +1,4 @@
1
1
  let self = {
2
- dmp(text) {
3
- console.log(text);
4
- },
5
-
6
- handleEmpty(items) {
7
- if ( items === false ) {
8
- return false;
9
- }
10
-
11
- if ( items === null ) {
12
- return null;
13
- }
14
-
15
- if ( Array.isArray(items) && !items.length ) {
16
- return [];
17
- }
18
-
19
- if ( !Array.isArray(items) && !Object.keys(items).length ) {
20
- return {};
21
- }
22
-
23
- return true;
24
- },
25
-
26
- array_unique(arr) {
27
- return [...new Set(arr)];
28
- },
29
-
30
2
  decode_json(string) {
31
3
  if ( typeof string == 'string') {
32
4
  return JSON.parse(string);
package/src/Request.js DELETED
@@ -1,173 +0,0 @@
1
- import axios from 'axios';
2
-
3
- const formatErrors = function(response) {
4
- let errors = [];
5
- if ( response && response.errors ) {
6
- for ( let i in response.errors ) {
7
- if ( typeof response.errors[i] === 'object' ) {
8
- for (let j in response.errors[i]) {
9
- errors.push(response.errors[i][j]);
10
- }
11
- }
12
- else {
13
- errors.push(response.errors[i]);
14
- }
15
- }
16
- }
17
- else if ( response.statusText ) {
18
- errors.push(response.statusText);
19
- }
20
-
21
- return errors;
22
- };
23
-
24
- const serializeToURLEncoded = (obj, prefix) => {
25
- const str = [];
26
- for ( let p in obj ) {
27
- if ( obj.hasOwnProperty(p) ) {
28
- const key = prefix ? `${prefix}[${p}]` : p;
29
- const value = obj[p];
30
-
31
- if ( typeof value === "object" ) {
32
- str.push(serializeToURLEncoded(value, key));
33
- }
34
- else {
35
- str.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
36
- }
37
- }
38
- }
39
- return str.join("&");
40
- };
41
-
42
- const appendFormData = (formData, key, value) => {
43
- if ( value instanceof Blob ) {
44
- formData.append(key, value);
45
- }
46
- else if ( Array.isArray(value) ) {
47
- value.forEach((v) => formData.append(`${key}[]`, v));
48
- }
49
- else if ( typeof value === 'object' && value !== null ) {
50
- for ( let subKey in value ) {
51
- appendFormData(formData, `${key}[${subKey}]`, value[subKey]);
52
- }
53
- }
54
- else {
55
- formData.append(key, value);
56
- }
57
- };
58
-
59
- axios.interceptors.request.use((request) => {
60
- if (request.data ) {
61
- if ( request.headers['Content-Type'] === 'application/x-www-form-urlencoded' ) {
62
- request.data = serializeToURLEncoded(request.data).replace(/\&+$/, '');
63
- }
64
- else if ( request.headers['Content-Type'] === 'application/json' ) {
65
- request.data = JSON.stringify(request.data);
66
- request.headers['Content-Type'] = 'application/x-www-form-urlencoded';
67
- }
68
- }
69
- return request;
70
- });
71
-
72
- const request = function(method, edge, payload = {}, display_errors = false, base_url = null, auth_token = null, headers = {}, upload_progress = null) {
73
- return new Promise((resolve, reject) => {
74
- if ( !base_url ) {
75
- base_url = process.env.BACK_URL;
76
- }
77
-
78
- if ( !auth_token ) {
79
- auth_token = JWT_TOKEN;
80
- }
81
-
82
- if ( !Object.keys(headers).length ) {
83
- headers = {
84
- 'Content-Type': 'application/x-www-form-urlencoded',
85
- };
86
- }
87
-
88
- let data;
89
- let url = base_url + edge;
90
-
91
- if ( method === 'GET' ) {
92
- url += '?' + new URLSearchParams(payload).toString();
93
- }
94
- else if ( method === 'POST' ) {
95
- if ( headers['Content-Type'] === 'multipart/form-data' ) {
96
- data = new FormData();
97
-
98
- for (let key in payload) {
99
- appendFormData(data, key, payload[key]);
100
- }
101
-
102
- delete headers['Content-Type'];
103
- }
104
- else if ( headers['Content-Type'] === 'application/x-www-form-urlencoded' ) {
105
- data = serializeToURLEncoded(payload).replace(/\&+$/, '');
106
- }
107
- else {
108
- data = JSON.stringify(payload);
109
- headers['Content-Type'] = 'application/x-www-form-urlencoded';
110
- }
111
- }
112
-
113
- if ( auth_token ) {
114
- if ( typeof auth_token !== 'object' ) {
115
- auth_token = { jwt_token: auth_token };
116
- }
117
- for ( let key in auth_token ) {
118
- if ( auth_token[key] !== '' && auth_token[key] !== null ) {
119
- url += url.includes('?') ? '&' : '?';
120
- url += `${key}=${auth_token[key]}`;
121
- }
122
- }
123
- }
124
-
125
- axios(url, {
126
- headers,
127
- method,
128
- url,
129
- data,
130
- })
131
- .then((request_response) => {
132
- let response = request_response.data;
133
-
134
- if ( response.success ) {
135
- return resolve(response.data);
136
- }
137
-
138
- let errors = formatErrors(response);
139
-
140
- if ( display_errors ) {
141
- ipc_send('request:error', errors.join('<br/>'));
142
- }
143
-
144
- reject(response.data.errors);
145
- })
146
- .catch((error) => {
147
- let errors = [error.message];
148
-
149
- if ( display_errors ) {
150
- ipc_send('request:error', errors.join('<br/>'));
151
- }
152
-
153
- reject(errors);
154
- });
155
- });
156
- };
157
-
158
- let self = {
159
- get(edge, payload = {}, display_errors = false, base_url = null, auth_token = null, headers = {}) {
160
- return request('GET', edge, payload, display_errors, base_url, auth_token, headers);
161
- },
162
-
163
- post(edge, payload = {}, display_errors = true, base_url = null, auth_token = null, headers = {}) {
164
- return request('POST', edge, payload, display_errors, base_url, auth_token, headers);
165
- },
166
-
167
- upload(edge, payload = {}, display_errors = true, upload_progress, base_url = null, auth_token = null, headers = {}) {
168
- headers['Content-Type'] = 'multipart/form-data';
169
- return request('POST', edge, payload, display_errors, base_url, auth_token, headers, upload_progress);
170
- },
171
- };
172
-
173
- export default self;
@@ -1,63 +0,0 @@
1
- let self = {
2
- patch(item, data) {
3
- return self.setKeys(item, Object.keys(data), Object.values(data));
4
- },
5
-
6
- setKey(item, key, value) {
7
- return self.setKeys(item, key, value);
8
- },
9
-
10
- setKeys(item, keys, values) {
11
- let not_empty = handleEmpty(item);
12
- if ( not_empty !== true ) {
13
- item = {};
14
- }
15
-
16
- if ( Array.isArray(keys) && !Array.isArray(values) ) {
17
- let array_values = [];
18
- for ( let key of keys ) {
19
- array_values.push(values);
20
- }
21
- values = array_values;
22
- }
23
-
24
- if ( !Array.isArray(keys) ) {
25
- keys = [keys];
26
- values = [values];
27
- }
28
-
29
- for ( let i = 0; i < keys.length; i++ ) {
30
- item[keys[i]] = values[i];
31
- }
32
-
33
- return {...item};
34
- },
35
-
36
- removeEmptyKeys(item) {
37
- let new_item = Array.isArray(item) ? [] : {};
38
- let count = Array.isArray(item) ? item.length : Object.keys(item).length;
39
- for ( let i = 0; i < count; i++ ) {
40
- let index = Array.isArray(item) ? i : Object.keys(item)[i];
41
-
42
- if ( item[index] !== '' ) {
43
- new_item[index] = item[index];
44
- }
45
- }
46
-
47
- return new_item;
48
- },
49
-
50
- deleteKeys(item, keys) {
51
- for ( let key of keys ) {
52
- delete item[key];
53
- }
54
-
55
- return {...item};
56
- },
57
-
58
- deleteKey(item, key) {
59
- return self.deleteKeys(item, [key]);
60
- },
61
- };
62
-
63
- export default self;
@@ -1,363 +0,0 @@
1
- const self = {
2
- pluck(items, key = 'id') {
3
- let plucked = [];
4
- for (let i = 0; i < items.length; i++) {
5
- plucked.push(items[i][key]);
6
- }
7
-
8
- return plucked;
9
- },
10
-
11
- spread(items) {
12
- return JSON.parse(JSON.stringify(items));
13
- },
14
-
15
- keyBy(items, key = 'id') {
16
- let not_empty = handleEmpty(items);
17
- if ( not_empty !== true ) {
18
- return not_empty;
19
- }
20
-
21
- let new_items = {};
22
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
23
- for ( let i = 0; i < count; i++ ) {
24
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
25
- new_items[items[index][key]] = items[index];
26
- }
27
-
28
- return new_items;
29
- },
30
-
31
- groupBy(items, key = 'id') {
32
- let not_empty = handleEmpty(items);
33
- if ( not_empty !== true ) {
34
- return not_empty;
35
- }
36
-
37
- let new_items = Array.isArray(items) ? [] : {};
38
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
39
- for ( let i = 0; i < count; i++ ) {
40
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
41
-
42
- if (typeof new_items[items[index][key]] === 'undefined') {
43
- new_items[items[index][key]] = [];
44
- }
45
-
46
- new_items[items[index][key]].push(items[index]);
47
- }
48
-
49
- return new_items;
50
- },
51
-
52
- find(items, ids) {
53
- let not_empty = handleEmpty(items);
54
- if ( not_empty !== true ) {
55
- return false;
56
- }
57
-
58
- let single = false;
59
- if ( !Array.isArray(ids) ) {
60
- if ( typeof ids === 'string' ) {
61
- ids = parseInt(ids);
62
- }
63
-
64
- ids = [ids];
65
- single = true;
66
- }
67
-
68
- let new_items = Array.isArray(items) ? [] : {};
69
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
70
- for ( let i = 0; i < count; i++ ) {
71
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
72
-
73
- if ( ids.includes(parseInt(items[index].id)) ) {
74
- if ( Array.isArray(items) ) {
75
- new_items.push(items[index]);
76
- }
77
- else {
78
- new_items[index] = items[index];
79
- }
80
- }
81
- }
82
-
83
- if ( single ) {
84
- if ( Array.isArray(new_items) && new_items.length ) {
85
- return new_items[0];
86
- }
87
- else if ( !Array.isArray(new_items) && Object.keys(new_items).length ) {
88
- return new_items[Object.keys(new_items)[0]];
89
- }
90
-
91
- return false;
92
- }
93
-
94
- return new_items;
95
- },
96
-
97
- findByKey(items, key, value = true, single = false) {
98
- let not_empty = handleEmpty(items);
99
- if ( not_empty !== true ) {
100
- return false;
101
- }
102
-
103
- let new_items = Array.isArray(items) ? [] : {};
104
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
105
- for ( let i = 0; i < count; i++ ) {
106
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
107
-
108
- if ( items[index][key] == value ) {
109
- if ( Array.isArray(items) ) {
110
- new_items.push(items[index]);
111
- }
112
- else {
113
- new_items[index] = items[index];
114
- }
115
- }
116
- }
117
-
118
- if ( single ) {
119
- if ( Array.isArray(new_items) && new_items.length ) {
120
- return new_items[0];
121
- }
122
- else if ( !Array.isArray(new_items) && Object.keys(new_items).length ) {
123
- return new_items[Object.keys(new_items)[0]];
124
- }
125
-
126
- return false;
127
- }
128
-
129
- return new_items;
130
- },
131
-
132
- add(items, item, at_first_position = false) {
133
- let not_empty = handleEmpty(items);
134
- if ( not_empty !== true ) {
135
- items = [];
136
- }
137
-
138
- if ( at_first_position ) {
139
- items.unshift(item);
140
- }
141
- else {
142
- items.push(item);
143
- }
144
-
145
- return items;
146
- },
147
-
148
- addMany(items, added, at_first_position = false) {
149
- let not_empty = handleEmpty(items);
150
- if ( not_empty !== true ) {
151
- items = [];
152
- }
153
-
154
- if ( at_first_position ) {
155
- return added.concat(items);
156
- }
157
- else {
158
- return items.concat(added);
159
- }
160
- },
161
-
162
- patch(items, data) {
163
- if ( !data.id ) {
164
- throw 'ID is required.';
165
- }
166
-
167
- let id = data.id;
168
- delete data.id;
169
-
170
- return self.setKeys(items, id, Object.keys(data), Object.values(data));
171
- },
172
-
173
- replace(items, item) {
174
- let not_empty = handleEmpty(items);
175
- if ( not_empty !== true ) {
176
- return not_empty;
177
- }
178
-
179
- let new_items = Array.isArray(items) ? [] : {};
180
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
181
- for ( let i = 0; i < count; i++ ) {
182
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
183
-
184
- if ( items[index].id == item.id ) {
185
- new_items[index] = item;
186
- }
187
- else {
188
- new_items[index] = items[index];
189
- }
190
- }
191
-
192
- return new_items;
193
- },
194
-
195
- delete(items, ids) {
196
- let not_empty = handleEmpty(items);
197
- if ( not_empty !== true ) {
198
- return not_empty;
199
- }
200
-
201
- if ( !Array.isArray(ids) ) {
202
- if ( typeof ids === 'string' ) {
203
- ids = parseInt(ids);
204
- }
205
-
206
- ids = [ids];
207
- }
208
-
209
- let new_items = Array.isArray(items) ? [] : {};
210
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
211
- for ( let i = 0; i < count; i++ ) {
212
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
213
-
214
- if ( ids.includes(parseInt(items[index].id)) ) {
215
- continue;
216
- }
217
-
218
- if ( Array.isArray(items) ) {
219
- new_items.push(items[index]);
220
- }
221
- else {
222
- new_items[index] = items[index];
223
- }
224
- }
225
-
226
- return new_items;
227
- },
228
-
229
- deleteByKey(items, key, value) {
230
- let not_empty = handleEmpty(items);
231
- if ( not_empty !== true ) {
232
- return not_empty;
233
- }
234
-
235
- let new_items = Array.isArray(items) ? [] : {};
236
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
237
- for ( let i = 0; i < count; i++ ) {
238
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
239
-
240
- if ( items[index][key] != value ) {
241
- new_items[index] = items[index];
242
- }
243
- }
244
-
245
- return new_items;
246
- },
247
-
248
- setKey(items, id, key, value) {
249
- return self.setKeys(items, id, key, value);
250
- },
251
-
252
- setKeys(items, ids, keys, values) {
253
- let not_empty = handleEmpty(items);
254
- if ( not_empty !== true ) {
255
- return not_empty;
256
- }
257
-
258
- if ( !Array.isArray(ids) ) {
259
- if ( typeof ids === 'string' ) {
260
- ids = parseInt(ids);
261
- }
262
-
263
- ids = [ids];
264
- }
265
-
266
- if ( Array.isArray(keys) && !Array.isArray(values) ) {
267
- let array_values = [];
268
- for ( let key of keys ) {
269
- array_values.push(values);
270
- }
271
- values = array_values;
272
- }
273
-
274
- if ( !Array.isArray(keys) ) {
275
- keys = [keys];
276
- values = [values];
277
- }
278
-
279
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
280
- for ( let i = 0; i < count; i++ ) {
281
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
282
-
283
- if ( ids.includes(parseInt(items[index].id)) ) {
284
- for ( let j = 0; j < keys.length; j++ ) {
285
- items[i][keys[j]] = values[j];
286
- }
287
- }
288
- }
289
-
290
- return items;
291
- },
292
-
293
- toggleKey(items, id, key) {
294
- return self.toggleKeys(items, id, key);
295
- },
296
-
297
- toggleKeys(items, ids, keys) {
298
- let not_empty = handleEmpty(items);
299
- if ( not_empty !== true ) {
300
- return not_empty;
301
- }
302
-
303
- if ( !Array.isArray(ids) ) {
304
- if ( typeof ids === 'string' ) {
305
- ids = parseInt(ids);
306
- }
307
-
308
- ids = [ids];
309
- }
310
-
311
- if ( !Array.isArray(keys) ) {
312
- keys = [keys];
313
- }
314
-
315
- let count = Array.isArray(items) ? items.length : Object.keys(items).length;
316
- for ( let i = 0; i < count; i++ ) {
317
- let index = Array.isArray(items) ? i : Object.keys(items)[i];
318
-
319
- if ( ids.includes(parseInt(items[index].id)) ) {
320
- for ( let j = 0; j < keys.length; j++ ) {
321
- items[index][keys[j]] = !items[index][keys[j]];
322
- }
323
- }
324
- }
325
-
326
- return items;
327
- },
328
-
329
- sort(items, from, to) {
330
- const copy = [...items];
331
- const valueToMove = copy.splice(from, 1)[0];
332
- copy.splice(to, 0, valueToMove);
333
-
334
- return copy;
335
- },
336
-
337
- next(items, current, key = 'id') {
338
- for ( let i = 0; i < items.length; i++ ) {
339
- if ( items[i][key] == current[key] && i < items.length - 1 ) {
340
- return items[i + 1];
341
- }
342
- }
343
-
344
- return false;
345
- },
346
-
347
- prev(items, current, key = 'id') {
348
- for ( let i = items.length - 1; i >= 0; i-- ) {
349
- if ( items[i][key] == current[key] && i > 0 ) {
350
- return items[i - 1];
351
- }
352
- }
353
-
354
- return false;
355
- },
356
- };
357
-
358
- window.pluck = self.pluck;
359
- window.spread = self.spread;
360
- window.keyBy = self.keyBy;
361
- window.groupBy = self.groupBy;
362
-
363
- export default self;
@@ -1,209 +0,0 @@
1
- let self = {
2
- /*helpers from https://github.com/validatorjs/validator.js*/
3
- ltrim(str, chars) {
4
- const pattern = chars ? new RegExp(`^[${chars.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}]+`, 'g') : /^\s+/g;
5
- return `${str}`.replace(pattern, '');
6
- },
7
-
8
- rtrim(str, chars) {
9
- const pattern = chars ? new RegExp(`[${chars.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}]+$`, 'g') : /(\s)+$/g;
10
- return `${str}`.replace(pattern, '');
11
- },
12
-
13
- trim(str, chars) {
14
- return self.rtrim(self.ltrim(`${str}`, chars), chars);
15
- },
16
- /*end helpers from https://github.com/validatorjs/validator.js*/
17
-
18
- urlencode(str) {
19
- return encodeURIComponent(str);
20
- },
21
-
22
- slug(str) {
23
- str = str.replace(/^\s+|\s+$/g, ''); // trim
24
- str = str.toLowerCase();
25
-
26
- // remove accents, swap ñ for n, etc
27
- var from = "àáãäâèéëêìíïîòóöôùúüûñç·/_,:;";
28
- var to = "aaaaaeeeeiiiioooouuuunc------";
29
-
30
- for (var i=0, l=from.length ; i<l ; i++) {
31
- str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
32
- }
33
-
34
- str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
35
- .replace(/\s+/g, '-') // collapse whitespace and replace by -
36
- .replace(/-+/g, '-'); // collapse dashes
37
-
38
- return str;
39
- },
40
-
41
- dash(str) {
42
- return str.split('').map((letter, idx) => {
43
- return letter.toUpperCase() === letter
44
- ? `${idx !== 0 ? '-' : ''}${letter.toLowerCase()}`
45
- : letter;
46
- }).join('');
47
- },
48
-
49
- snake(string) {
50
- return string
51
- .replace(/\s+(?=\d)/g, '')
52
- .replace(/\s+/g, '_')
53
- .replace(/([a-z])([A-Z])/g, '$1_$2')
54
- .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
55
- .toLowerCase();
56
- },
57
-
58
- camel(str) {
59
- return str.replace(/-/g, ' ').replace(/_/g, ' ').replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g,function(s) {
60
- return s.toUpperCase();
61
- }).replace(/\s+/g, '');
62
- },
63
-
64
- pascal(str) {
65
- return `${str}`
66
- .toLowerCase()
67
- .replace(new RegExp(/[-_]+/, 'g'), ' ')
68
- .replace(new RegExp(/[^\w\s]/, 'g'), '')
69
- .replace(new RegExp(/\s+(.)(\w*)/, 'g'), ($1, $2, $3) => `${$2.toUpperCase() + $3}`)
70
- .replace(new RegExp(/\w/), s => s.toUpperCase());
71
- },
72
-
73
- kebab(str) {
74
- return `${str}`.replace(/([a-z])([A-Z])/g, "$1-$2")
75
- .replace(/[\s_]+/g, '-')
76
- .toLowerCase();
77
- },
78
-
79
- camel2space(str) {
80
- if ( !str ) {
81
- return '';
82
- }
83
-
84
- return str.split('').map((letter, idx) => {
85
- return letter.toUpperCase() === letter
86
- ? `${idx !== 0 ? ' ' : ''}${letter}`
87
- : letter;
88
- }).join('');
89
- },
90
-
91
- ucfirst(string) {
92
- return string.charAt(0).toUpperCase() + string.slice(1);
93
- },
94
-
95
- ucwords(str) {
96
- if ( !str ) {
97
- str = '';
98
- }
99
-
100
- //ensure string
101
- str = str + '';
102
-
103
- return str.replace(/-/g, ' ').replace(/_/g, ' ').replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g,function(s) {
104
- return s.toUpperCase();
105
- });
106
- },
107
-
108
- ordinal_suffix(i) {
109
- var j = i % 10,
110
- k = i % 100;
111
- if (j == 1 && k != 11) {
112
- return i + "st";
113
- }
114
- if (j == 2 && k != 12) {
115
- return i + "nd";
116
- }
117
- if (j == 3 && k != 13) {
118
- return i + "rd";
119
- }
120
-
121
- return i + "th";
122
- },
123
-
124
- number_to_month(number) {
125
- let months = {
126
- 1: 'January',
127
- 2: 'February',
128
- 3: 'March',
129
- 4: 'April',
130
- 5: 'May',
131
- 6: 'June',
132
- 7: 'July',
133
- 8: 'August',
134
- 9: 'September',
135
- 10: 'October',
136
- 11: 'November',
137
- 12: 'December',
138
- };
139
-
140
- return months[`${number}`.replace(/^0/, '')];
141
- },
142
-
143
- nl2br(str) {
144
- if ( !str || !str.length ) {
145
- return '';
146
- }
147
-
148
- return str.replace(/(\r\n|\n\r|\r|\n)/g, '<br/>' + '$1');
149
- },
150
-
151
- strip_tags(str) {
152
- var div = document.createElement("div");
153
- div.innerHTML = str;
154
- var text = div.textContent || div.innerText || "";
155
- return text;
156
- },
157
-
158
- ensure_https(string) {
159
- if (!string.match(/^[a-zA-Z]+:\/\//)) {
160
- string = 'https://' + string;
161
- }
162
-
163
- return string;
164
- },
165
-
166
- add_commas(number) {
167
- if ( number === undefined || number === null ) {
168
- return '';
169
- }
170
-
171
- number = parseFloat(number).toFixed(2).toLocaleString('en-US');
172
-
173
- return number;
174
- },
175
-
176
- leading_zero(number) {
177
- return number < 10 ? `0${number}` : number;
178
- },
179
-
180
- to_percetange(number) {
181
- if ( number === undefined || !number ) {
182
- return '0%';
183
- }
184
-
185
- return (number / 10)+'%';
186
- },
187
-
188
- plural(str) {
189
- if ( str.match(/y$/) ) {
190
- return str.replace(/y$/, 'ies');
191
- }
192
-
193
- if ( str.match(/s$/) ) {
194
- return `${str}es`;
195
- }
196
-
197
- return `${str}s`;
198
- },
199
-
200
- truncate(str, length) {
201
- if (str.length > length) {
202
- return str.slice(0, length) + '...';
203
- }
204
-
205
- return str;
206
- },
207
- }
208
-
209
- export default self;