Add coexistence checks to all enqueue methods to prevent loading both React and Grid.js assets simultaneously. Changes: - ReactAdmin.php: Only enqueue React assets when ?react=1 - Init.php: Skip Grid.js when React active on admin pages - Form.php, Coupon.php, Access.php: Restore classic assets when ?react=0 - Customer.php, Product.php, License.php: Add coexistence checks Now the toggle between Classic and React versions works correctly. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
111 lines
3.5 KiB
JavaScript
111 lines
3.5 KiB
JavaScript
import { isRegExp, isString } from './is';
|
|
/**
|
|
* Truncates given string to the maximum characters count
|
|
*
|
|
* @param str An object that contains serializable values
|
|
* @param max Maximum number of characters in truncated string (0 = unlimited)
|
|
* @returns string Encoded
|
|
*/
|
|
export function truncate(str, max) {
|
|
if (max === void 0) { max = 0; }
|
|
if (typeof str !== 'string' || max === 0) {
|
|
return str;
|
|
}
|
|
return str.length <= max ? str : str.substr(0, max) + "...";
|
|
}
|
|
/**
|
|
* This is basically just `trim_line` from
|
|
* https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67
|
|
*
|
|
* @param str An object that contains serializable values
|
|
* @param max Maximum number of characters in truncated string
|
|
* @returns string Encoded
|
|
*/
|
|
export function snipLine(line, colno) {
|
|
var newLine = line;
|
|
var lineLength = newLine.length;
|
|
if (lineLength <= 150) {
|
|
return newLine;
|
|
}
|
|
if (colno > lineLength) {
|
|
// eslint-disable-next-line no-param-reassign
|
|
colno = lineLength;
|
|
}
|
|
var start = Math.max(colno - 60, 0);
|
|
if (start < 5) {
|
|
start = 0;
|
|
}
|
|
var end = Math.min(start + 140, lineLength);
|
|
if (end > lineLength - 5) {
|
|
end = lineLength;
|
|
}
|
|
if (end === lineLength) {
|
|
start = Math.max(end - 140, 0);
|
|
}
|
|
newLine = newLine.slice(start, end);
|
|
if (start > 0) {
|
|
newLine = "'{snip} " + newLine;
|
|
}
|
|
if (end < lineLength) {
|
|
newLine += ' {snip}';
|
|
}
|
|
return newLine;
|
|
}
|
|
/**
|
|
* Join values in array
|
|
* @param input array of values to be joined together
|
|
* @param delimiter string to be placed in-between values
|
|
* @returns Joined values
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
export function safeJoin(input, delimiter) {
|
|
if (!Array.isArray(input)) {
|
|
return '';
|
|
}
|
|
var output = [];
|
|
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
for (var i = 0; i < input.length; i++) {
|
|
var value = input[i];
|
|
try {
|
|
output.push(String(value));
|
|
}
|
|
catch (e) {
|
|
output.push('[value cannot be serialized]');
|
|
}
|
|
}
|
|
return output.join(delimiter);
|
|
}
|
|
/**
|
|
* Checks if the value matches a regex or includes the string
|
|
* @param value The string value to be checked against
|
|
* @param pattern Either a regex or a string that must be contained in value
|
|
*/
|
|
export function isMatchingPattern(value, pattern) {
|
|
if (!isString(value)) {
|
|
return false;
|
|
}
|
|
if (isRegExp(pattern)) {
|
|
return pattern.test(value);
|
|
}
|
|
if (typeof pattern === 'string') {
|
|
return value.indexOf(pattern) !== -1;
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* Given a string, escape characters which have meaning in the regex grammar, such that the result is safe to feed to
|
|
* `new RegExp()`.
|
|
*
|
|
* Based on https://github.com/sindresorhus/escape-string-regexp. Vendored to a) reduce the size by skipping the runtime
|
|
* type-checking, and b) ensure it gets down-compiled for old versions of Node (the published package only supports Node
|
|
* 12+).
|
|
*
|
|
* @param regexString The string to escape
|
|
* @returns An version of the string with all special regex characters escaped
|
|
*/
|
|
export function escapeStringForRegex(regexString) {
|
|
// escape the hyphen separately so we can also replace it with a unicode literal hyphen, to avoid the problems
|
|
// discussed in https://github.com/sindresorhus/escape-string-regexp/issues/20.
|
|
return regexString.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
|
|
}
|
|
//# sourceMappingURL=string.js.map
|