mirror of
https://github.com/flarum/core.git
synced 2025-10-15 08:55:53 +02:00
Remove lodash
from core (#2827)
* Remove `lodash-es` dependency * Replace `escapeRegExp` with home-made util * Replace `throttle` with `throttle-debounce` library * Use native browser methods for `deepFlatten` We need a polyfill for iOS 11 and below. I think using a native method with this polyfill is better than having our own function instead, even if the bundle size is ~150B more. * Save a few bytes in `escapeRegExp` * Fix typo in comment * Undo import re-organisation * Use spread instead of slice * Use smaller Array.flat polyfill from MDN * Export new utils in `compat.js`
This commit is contained in:
@@ -20,7 +20,6 @@ import Discussion from './models/Discussion';
|
||||
import Post from './models/Post';
|
||||
import Group from './models/Group';
|
||||
import Notification from './models/Notification';
|
||||
import { flattenDeep } from 'lodash-es';
|
||||
import PageState from './states/PageState';
|
||||
import ModalManagerState from './states/ModalManagerState';
|
||||
import AlertManagerState from './states/AlertManagerState';
|
||||
@@ -184,7 +183,7 @@ export default class Application {
|
||||
Object.keys(extensions).forEach((name) => {
|
||||
const extension = extensions[name];
|
||||
|
||||
const extenders = flattenDeep(extension.extend);
|
||||
const extenders = extension.extend.flat(Infinity);
|
||||
|
||||
for (const extender of extenders) {
|
||||
extender.extend(this, { name, exports: extension });
|
||||
|
@@ -12,7 +12,9 @@ import Drawer from './utils/Drawer';
|
||||
import anchorScroll from './utils/anchorScroll';
|
||||
import RequestError from './utils/RequestError';
|
||||
import abbreviateNumber from './utils/abbreviateNumber';
|
||||
import escapeRegExp from './utils/escapeRegExp';
|
||||
import * as string from './utils/string';
|
||||
import * as ThrottleDebounce from './utils/throttleDebounce';
|
||||
import Stream from './utils/Stream';
|
||||
import SubtreeRetainer from './utils/SubtreeRetainer';
|
||||
import setRouteWithForcedRefresh from './utils/setRouteWithForcedRefresh';
|
||||
@@ -91,6 +93,7 @@ export default {
|
||||
'utils/abbreviateNumber': abbreviateNumber,
|
||||
'utils/string': string,
|
||||
'utils/SubtreeRetainer': SubtreeRetainer,
|
||||
'utils/escapeRegExp': escapeRegExp,
|
||||
'utils/extract': extract,
|
||||
'utils/ScrollListener': ScrollListener,
|
||||
'utils/stringToColor': stringToColor,
|
||||
@@ -104,6 +107,7 @@ export default {
|
||||
'utils/formatNumber': formatNumber,
|
||||
'utils/mapRoutes': mapRoutes,
|
||||
'utils/withAttr': withAttr,
|
||||
'utils/throttleDebounce': ThrottleDebounce,
|
||||
'models/Notification': Notification,
|
||||
'models/User': User,
|
||||
'models/Post': Post,
|
||||
|
@@ -23,3 +23,5 @@ patchMithril(window);
|
||||
import * as Extend from './extend/index';
|
||||
|
||||
export { Extend };
|
||||
|
||||
import './utils/arrayFlatPolyfill';
|
||||
|
14
js/src/common/utils/arrayFlatPolyfill.ts
Normal file
14
js/src/common/utils/arrayFlatPolyfill.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
// Based off of the polyfill on MDN
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat#reduce_concat_isarray_recursivity
|
||||
//
|
||||
// Needed to provide support for Safari on iOS < 12
|
||||
|
||||
if (!Array.prototype['flat']) {
|
||||
Array.prototype['flat'] = function flat(this: any[], depth: number = 1): any[] {
|
||||
return depth > 0
|
||||
? Array.prototype.reduce.call(this, (acc, val): any[] => acc.concat(Array.isArray(val) ? flat.call(val, depth - 1) : val), [])
|
||||
: // If no depth is provided, or depth is 0, just return a copy of
|
||||
// the array. Spread is supported in all major browsers (iOS 8+)
|
||||
[...this];
|
||||
};
|
||||
}
|
10
js/src/common/utils/escapeRegExp.ts
Normal file
10
js/src/common/utils/escapeRegExp.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
const specialChars = /[.*+?^${}()|[\]\\]/g;
|
||||
|
||||
/**
|
||||
* Escapes the `RegExp` special characters in `input`.
|
||||
*
|
||||
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
|
||||
*/
|
||||
export default function escapeRegExp(input: string): string {
|
||||
return input.replace(specialChars, '\\$&');
|
||||
}
|
3
js/src/common/utils/throttleDebounce.ts
Normal file
3
js/src/common/utils/throttleDebounce.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
// Re-exports `throttle-debounce` to be used in `compat.js`.
|
||||
|
||||
export { throttle, debounce } from 'throttle-debounce';
|
Reference in New Issue
Block a user