@salespark/toolkit 2.1.7 → 2.1.9
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 +44 -5
- package/dist/index.cjs +47 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +43 -2
- package/dist/index.d.ts +43 -2
- package/dist/index.js +45 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -231,8 +231,22 @@ declare function omit<T extends object, K extends keyof T>(obj: T, keys: K[]): O
|
|
|
231
231
|
* 21-08-2025: Created
|
|
232
232
|
****************************************************/
|
|
233
233
|
declare function objectToString(obj: unknown): string;
|
|
234
|
-
declare function cleanObject<T = unknown>(obj: T): any;
|
|
234
|
+
declare function cleanObject<T = unknown>(obj: T, removeEmptyString?: boolean): any;
|
|
235
235
|
|
|
236
|
+
type Locale = string | string[] | undefined;
|
|
237
|
+
type CapitalizeFirstOptions = {
|
|
238
|
+
lowerRest?: boolean;
|
|
239
|
+
locale?: Locale;
|
|
240
|
+
};
|
|
241
|
+
type CapitalizeWordsOptions = {
|
|
242
|
+
lowerRest?: boolean;
|
|
243
|
+
locale?: Locale;
|
|
244
|
+
treatHyphenAsSeparator?: boolean;
|
|
245
|
+
};
|
|
246
|
+
type SentenceCaseOptions = {
|
|
247
|
+
lowerRest?: boolean;
|
|
248
|
+
locale?: Locale;
|
|
249
|
+
};
|
|
236
250
|
/******************************************************
|
|
237
251
|
* ##: Slugify String
|
|
238
252
|
* Converts a string to a URL-friendly slug (basic ASCII, keeps numbers and dashes)
|
|
@@ -261,6 +275,33 @@ declare function fill(template: string, values: Record<string, string | number>)
|
|
|
261
275
|
* 21-08-2025: Created
|
|
262
276
|
****************************************************/
|
|
263
277
|
declare function deburr(str: string): string;
|
|
278
|
+
/******************************************************
|
|
279
|
+
* ##: Capitalize First Letter
|
|
280
|
+
* Capitalizes only the first character of a string; optionally lowercases the rest
|
|
281
|
+
* @param {String} input - Input string
|
|
282
|
+
* @param {Object} options - { lowerRest = true, locale }
|
|
283
|
+
* History:
|
|
284
|
+
* 19-12-2025: Created
|
|
285
|
+
****************************************************/
|
|
286
|
+
declare function capitalizeFirst(input: unknown, options?: CapitalizeFirstOptions): string;
|
|
287
|
+
/******************************************************
|
|
288
|
+
* ##: Capitalize Words
|
|
289
|
+
* Capitalizes each word in a string with options for hyphens and locale
|
|
290
|
+
* @param {String} input - Input string
|
|
291
|
+
* @param {Object} options - { lowerRest = true, locale, treatHyphenAsSeparator = false }
|
|
292
|
+
* History:
|
|
293
|
+
* 19-12-2025: Created
|
|
294
|
+
****************************************************/
|
|
295
|
+
declare function capitalizeWords(input: unknown, options?: CapitalizeWordsOptions): string;
|
|
296
|
+
/******************************************************
|
|
297
|
+
* ##: Sentence Case
|
|
298
|
+
* Capitalizes the first letter of each sentence (. ! ?) with optional lowercasing of the rest
|
|
299
|
+
* @param {String} input - Input string
|
|
300
|
+
* @param {Object} options - { lowerRest = true, locale }
|
|
301
|
+
* History:
|
|
302
|
+
* 19-12-2025: Created
|
|
303
|
+
****************************************************/
|
|
304
|
+
declare function sentenceCase(input: unknown, options?: SentenceCaseOptions): string;
|
|
264
305
|
/**
|
|
265
306
|
* @deprecated Use `deburr` instead.
|
|
266
307
|
*/
|
|
@@ -781,4 +822,4 @@ declare const assessSecurityRisks: (risks: SecurityRisk[]) => {
|
|
|
781
822
|
declare const isBrowser: boolean;
|
|
782
823
|
declare const isNode: boolean;
|
|
783
824
|
|
|
784
|
-
export { type SecurityCheckResult, type SecurityRisk, addSpaceBetweenNumbers, addThousandsSpace, areArraysDeepEqualUnordered, areArraysEqual, assessSecurityRisks, basicSanitize, checkMarkdownSecurity, chunk, clamp, cleanObject, compact, currencyToSymbol, debounce, deburr, delay, difference, fill, flatten, flattenDepth, flattenDepthBase, flattenOnce, formatBytes, formatCurrency, formatDecimalNumber, getStringSimilarity, groupBy, hasNilOrEmpty, humanFileSize, intersection, isBrowser, isFlattenable, isNil, isNilEmptyOrZeroLen, isNilEmptyOrZeroLength, isNilOrEmpty, isNilOrNaN, isNilOrZeroLen, isNilOrZeroLength, isNilText, isNilTextOrEmpty, isNode, isNullOrUndefined, isNullOrUndefinedEmptyOrZero, isNullOrUndefinedInArray, isNullOrUndefinedOrNaN, isNullOrUndefinedTextInc, isNullUndefinedOrEmpty, isNullUndefinedOrEmptyEnforced, isNullUndefinedOrZero, isPTTaxId, isValidIBAN, isValidPTTaxId, numbersEqual, objectToString, omit, otp, parseName, parseToBool, parseToNumber, pick, pluck, pushAll, randomDigits, removeDiacritics, round, safeAdd, safeDivide, safeMultiply, safeParseFloat, safeParseInt, safeSubtract, sanitize, sanitizeMarkdown, shuffle, slugify, sortBy, stringSimilarity, symbolToCurrency, throttle, toBool, toInteger, toNumber, uniq, uniqBy };
|
|
825
|
+
export { type CapitalizeFirstOptions, type CapitalizeWordsOptions, type SecurityCheckResult, type SecurityRisk, type SentenceCaseOptions, addSpaceBetweenNumbers, addThousandsSpace, areArraysDeepEqualUnordered, areArraysEqual, assessSecurityRisks, basicSanitize, capitalizeFirst, capitalizeWords, checkMarkdownSecurity, chunk, clamp, cleanObject, compact, currencyToSymbol, debounce, deburr, delay, difference, fill, flatten, flattenDepth, flattenDepthBase, flattenOnce, formatBytes, formatCurrency, formatDecimalNumber, getStringSimilarity, groupBy, hasNilOrEmpty, humanFileSize, intersection, isBrowser, isFlattenable, isNil, isNilEmptyOrZeroLen, isNilEmptyOrZeroLength, isNilOrEmpty, isNilOrNaN, isNilOrZeroLen, isNilOrZeroLength, isNilText, isNilTextOrEmpty, isNode, isNullOrUndefined, isNullOrUndefinedEmptyOrZero, isNullOrUndefinedInArray, isNullOrUndefinedOrNaN, isNullOrUndefinedTextInc, isNullUndefinedOrEmpty, isNullUndefinedOrEmptyEnforced, isNullUndefinedOrZero, isPTTaxId, isValidIBAN, isValidPTTaxId, numbersEqual, objectToString, omit, otp, parseName, parseToBool, parseToNumber, pick, pluck, pushAll, randomDigits, removeDiacritics, round, safeAdd, safeDivide, safeMultiply, safeParseFloat, safeParseInt, safeSubtract, sanitize, sanitizeMarkdown, sentenceCase, shuffle, slugify, sortBy, stringSimilarity, symbolToCurrency, throttle, toBool, toInteger, toNumber, uniq, uniqBy };
|
package/dist/index.d.ts
CHANGED
|
@@ -231,8 +231,22 @@ declare function omit<T extends object, K extends keyof T>(obj: T, keys: K[]): O
|
|
|
231
231
|
* 21-08-2025: Created
|
|
232
232
|
****************************************************/
|
|
233
233
|
declare function objectToString(obj: unknown): string;
|
|
234
|
-
declare function cleanObject<T = unknown>(obj: T): any;
|
|
234
|
+
declare function cleanObject<T = unknown>(obj: T, removeEmptyString?: boolean): any;
|
|
235
235
|
|
|
236
|
+
type Locale = string | string[] | undefined;
|
|
237
|
+
type CapitalizeFirstOptions = {
|
|
238
|
+
lowerRest?: boolean;
|
|
239
|
+
locale?: Locale;
|
|
240
|
+
};
|
|
241
|
+
type CapitalizeWordsOptions = {
|
|
242
|
+
lowerRest?: boolean;
|
|
243
|
+
locale?: Locale;
|
|
244
|
+
treatHyphenAsSeparator?: boolean;
|
|
245
|
+
};
|
|
246
|
+
type SentenceCaseOptions = {
|
|
247
|
+
lowerRest?: boolean;
|
|
248
|
+
locale?: Locale;
|
|
249
|
+
};
|
|
236
250
|
/******************************************************
|
|
237
251
|
* ##: Slugify String
|
|
238
252
|
* Converts a string to a URL-friendly slug (basic ASCII, keeps numbers and dashes)
|
|
@@ -261,6 +275,33 @@ declare function fill(template: string, values: Record<string, string | number>)
|
|
|
261
275
|
* 21-08-2025: Created
|
|
262
276
|
****************************************************/
|
|
263
277
|
declare function deburr(str: string): string;
|
|
278
|
+
/******************************************************
|
|
279
|
+
* ##: Capitalize First Letter
|
|
280
|
+
* Capitalizes only the first character of a string; optionally lowercases the rest
|
|
281
|
+
* @param {String} input - Input string
|
|
282
|
+
* @param {Object} options - { lowerRest = true, locale }
|
|
283
|
+
* History:
|
|
284
|
+
* 19-12-2025: Created
|
|
285
|
+
****************************************************/
|
|
286
|
+
declare function capitalizeFirst(input: unknown, options?: CapitalizeFirstOptions): string;
|
|
287
|
+
/******************************************************
|
|
288
|
+
* ##: Capitalize Words
|
|
289
|
+
* Capitalizes each word in a string with options for hyphens and locale
|
|
290
|
+
* @param {String} input - Input string
|
|
291
|
+
* @param {Object} options - { lowerRest = true, locale, treatHyphenAsSeparator = false }
|
|
292
|
+
* History:
|
|
293
|
+
* 19-12-2025: Created
|
|
294
|
+
****************************************************/
|
|
295
|
+
declare function capitalizeWords(input: unknown, options?: CapitalizeWordsOptions): string;
|
|
296
|
+
/******************************************************
|
|
297
|
+
* ##: Sentence Case
|
|
298
|
+
* Capitalizes the first letter of each sentence (. ! ?) with optional lowercasing of the rest
|
|
299
|
+
* @param {String} input - Input string
|
|
300
|
+
* @param {Object} options - { lowerRest = true, locale }
|
|
301
|
+
* History:
|
|
302
|
+
* 19-12-2025: Created
|
|
303
|
+
****************************************************/
|
|
304
|
+
declare function sentenceCase(input: unknown, options?: SentenceCaseOptions): string;
|
|
264
305
|
/**
|
|
265
306
|
* @deprecated Use `deburr` instead.
|
|
266
307
|
*/
|
|
@@ -781,4 +822,4 @@ declare const assessSecurityRisks: (risks: SecurityRisk[]) => {
|
|
|
781
822
|
declare const isBrowser: boolean;
|
|
782
823
|
declare const isNode: boolean;
|
|
783
824
|
|
|
784
|
-
export { type SecurityCheckResult, type SecurityRisk, addSpaceBetweenNumbers, addThousandsSpace, areArraysDeepEqualUnordered, areArraysEqual, assessSecurityRisks, basicSanitize, checkMarkdownSecurity, chunk, clamp, cleanObject, compact, currencyToSymbol, debounce, deburr, delay, difference, fill, flatten, flattenDepth, flattenDepthBase, flattenOnce, formatBytes, formatCurrency, formatDecimalNumber, getStringSimilarity, groupBy, hasNilOrEmpty, humanFileSize, intersection, isBrowser, isFlattenable, isNil, isNilEmptyOrZeroLen, isNilEmptyOrZeroLength, isNilOrEmpty, isNilOrNaN, isNilOrZeroLen, isNilOrZeroLength, isNilText, isNilTextOrEmpty, isNode, isNullOrUndefined, isNullOrUndefinedEmptyOrZero, isNullOrUndefinedInArray, isNullOrUndefinedOrNaN, isNullOrUndefinedTextInc, isNullUndefinedOrEmpty, isNullUndefinedOrEmptyEnforced, isNullUndefinedOrZero, isPTTaxId, isValidIBAN, isValidPTTaxId, numbersEqual, objectToString, omit, otp, parseName, parseToBool, parseToNumber, pick, pluck, pushAll, randomDigits, removeDiacritics, round, safeAdd, safeDivide, safeMultiply, safeParseFloat, safeParseInt, safeSubtract, sanitize, sanitizeMarkdown, shuffle, slugify, sortBy, stringSimilarity, symbolToCurrency, throttle, toBool, toInteger, toNumber, uniq, uniqBy };
|
|
825
|
+
export { type CapitalizeFirstOptions, type CapitalizeWordsOptions, type SecurityCheckResult, type SecurityRisk, type SentenceCaseOptions, addSpaceBetweenNumbers, addThousandsSpace, areArraysDeepEqualUnordered, areArraysEqual, assessSecurityRisks, basicSanitize, capitalizeFirst, capitalizeWords, checkMarkdownSecurity, chunk, clamp, cleanObject, compact, currencyToSymbol, debounce, deburr, delay, difference, fill, flatten, flattenDepth, flattenDepthBase, flattenOnce, formatBytes, formatCurrency, formatDecimalNumber, getStringSimilarity, groupBy, hasNilOrEmpty, humanFileSize, intersection, isBrowser, isFlattenable, isNil, isNilEmptyOrZeroLen, isNilEmptyOrZeroLength, isNilOrEmpty, isNilOrNaN, isNilOrZeroLen, isNilOrZeroLength, isNilText, isNilTextOrEmpty, isNode, isNullOrUndefined, isNullOrUndefinedEmptyOrZero, isNullOrUndefinedInArray, isNullOrUndefinedOrNaN, isNullOrUndefinedTextInc, isNullUndefinedOrEmpty, isNullUndefinedOrEmptyEnforced, isNullUndefinedOrZero, isPTTaxId, isValidIBAN, isValidPTTaxId, numbersEqual, objectToString, omit, otp, parseName, parseToBool, parseToNumber, pick, pluck, pushAll, randomDigits, removeDiacritics, round, safeAdd, safeDivide, safeMultiply, safeParseFloat, safeParseInt, safeSubtract, sanitize, sanitizeMarkdown, sentenceCase, shuffle, slugify, sortBy, stringSimilarity, symbolToCurrency, throttle, toBool, toInteger, toNumber, uniq, uniqBy };
|
package/dist/index.js
CHANGED
|
@@ -185,18 +185,18 @@ function objectToString(obj) {
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
|
-
var isRemovable = (v) => v === null || v === void 0 || v === "null" || v === "undefined";
|
|
189
|
-
function cleanObject(obj) {
|
|
188
|
+
var isRemovable = (v, removeEmptyString) => v === null || v === void 0 || v === "null" || v === "undefined" || removeEmptyString && v === "";
|
|
189
|
+
function cleanObject(obj, removeEmptyString = false) {
|
|
190
190
|
if (Array.isArray(obj)) {
|
|
191
|
-
const cleanedArray = obj.map((item) => cleanObject(item)).filter((item) => !isRemovable(item));
|
|
191
|
+
const cleanedArray = obj.map((item) => cleanObject(item, removeEmptyString)).filter((item) => !isRemovable(item, removeEmptyString));
|
|
192
192
|
return cleanedArray;
|
|
193
193
|
}
|
|
194
194
|
if (obj !== null && typeof obj === "object") {
|
|
195
195
|
const cleaned = {};
|
|
196
196
|
for (const [key, value] of Object.entries(obj)) {
|
|
197
|
-
if (isRemovable(value)) continue;
|
|
198
|
-
const nested = cleanObject(value);
|
|
199
|
-
if (isRemovable(nested)) continue;
|
|
197
|
+
if (isRemovable(value, removeEmptyString)) continue;
|
|
198
|
+
const nested = cleanObject(value, removeEmptyString);
|
|
199
|
+
if (isRemovable(nested, removeEmptyString)) continue;
|
|
200
200
|
const isObj = typeof nested === "object" && nested !== null;
|
|
201
201
|
const isEmptyObj = isObj && !Array.isArray(nested) && Object.keys(nested).length === 0;
|
|
202
202
|
const isEmptyArr = Array.isArray(nested) && nested.length === 0;
|
|
@@ -209,6 +209,12 @@ function cleanObject(obj) {
|
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
// src/utils/string.ts
|
|
212
|
+
function upper(value, locale) {
|
|
213
|
+
return locale ? value.toLocaleUpperCase(locale) : value.toUpperCase();
|
|
214
|
+
}
|
|
215
|
+
function lower(value, locale) {
|
|
216
|
+
return locale ? value.toLocaleLowerCase(locale) : value.toLowerCase();
|
|
217
|
+
}
|
|
212
218
|
function slugify(input) {
|
|
213
219
|
return input.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
214
220
|
}
|
|
@@ -222,6 +228,38 @@ function deburr(str) {
|
|
|
222
228
|
return str;
|
|
223
229
|
}
|
|
224
230
|
}
|
|
231
|
+
function capitalizeFirst(input, options) {
|
|
232
|
+
if (typeof input !== "string" || input.length === 0) return "";
|
|
233
|
+
const { lowerRest = true, locale } = options ?? {};
|
|
234
|
+
const first = upper(input[0], locale);
|
|
235
|
+
const rest = lowerRest ? lower(input.slice(1), locale) : input.slice(1);
|
|
236
|
+
return first + rest;
|
|
237
|
+
}
|
|
238
|
+
function capitalizeWords(input, options) {
|
|
239
|
+
if (typeof input !== "string" || input.length === 0) return "";
|
|
240
|
+
const {
|
|
241
|
+
lowerRest = true,
|
|
242
|
+
locale,
|
|
243
|
+
treatHyphenAsSeparator = false
|
|
244
|
+
} = options ?? {};
|
|
245
|
+
const wordPattern = treatHyphenAsSeparator ? /[\p{L}\p{N}]+(?:['’][\p{L}\p{N}]+)*/gu : /[\p{L}\p{N}]+(?:['’\-][\p{L}\p{N}]+)*/gu;
|
|
246
|
+
return input.replace(wordPattern, (word) => {
|
|
247
|
+
const first = upper(word[0], locale);
|
|
248
|
+
const rest = lowerRest ? lower(word.slice(1), locale) : word.slice(1);
|
|
249
|
+
return first + rest;
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
function sentenceCase(input, options) {
|
|
253
|
+
if (typeof input !== "string" || input.length === 0) return "";
|
|
254
|
+
const { lowerRest = true, locale } = options ?? {};
|
|
255
|
+
const base = lowerRest ? lower(input, locale) : input;
|
|
256
|
+
const sentencePattern = /(^\s*[\p{L}])|([.!?]\s*[\p{L}])/gu;
|
|
257
|
+
return base.replace(sentencePattern, (match) => {
|
|
258
|
+
const lastChar = match[match.length - 1];
|
|
259
|
+
const upperChar = upper(lastChar, locale);
|
|
260
|
+
return match.slice(0, -1) + upperChar;
|
|
261
|
+
});
|
|
262
|
+
}
|
|
225
263
|
var removeDiacritics = deburr;
|
|
226
264
|
function sanitize(input, maxLength) {
|
|
227
265
|
if (typeof input !== "string") return "";
|
|
@@ -1694,6 +1732,6 @@ var assessSecurityRisks = (risks) => {
|
|
|
1694
1732
|
var isBrowser = typeof globalThis !== "undefined" && typeof globalThis.document !== "undefined";
|
|
1695
1733
|
var isNode = typeof process !== "undefined" && !!process.versions?.node;
|
|
1696
1734
|
|
|
1697
|
-
export { addSpaceBetweenNumbers, addThousandsSpace, areArraysDeepEqualUnordered, areArraysEqual, assessSecurityRisks, basicSanitize, checkMarkdownSecurity, chunk, clamp, cleanObject, compact, currencyToSymbol, debounce, deburr, delay, difference, fill, flatten, flattenDepth, flattenDepthBase, flattenOnce, formatBytes, formatCurrency, formatDecimalNumber, getStringSimilarity, groupBy, hasNilOrEmpty, humanFileSize, intersection, isBrowser, isFlattenable, isNil, isNilEmptyOrZeroLen, isNilEmptyOrZeroLength, isNilOrEmpty, isNilOrNaN, isNilOrZeroLen, isNilOrZeroLength, isNilText, isNilTextOrEmpty, isNode, isNullOrUndefined, isNullOrUndefinedEmptyOrZero, isNullOrUndefinedInArray, isNullOrUndefinedOrNaN, isNullOrUndefinedTextInc, isNullUndefinedOrEmpty, isNullUndefinedOrEmptyEnforced, isNullUndefinedOrZero, isPTTaxId, isValidIBAN, isValidPTTaxId, numbersEqual, objectToString, omit, otp, parseName, parseToBool, parseToNumber, pick, pluck, pushAll, randomDigits, removeDiacritics, round, safeAdd, safeDivide, safeMultiply, safeParseFloat, safeParseInt, safeSubtract, sanitize, sanitizeMarkdown, shuffle, slugify, sortBy, stringSimilarity, symbolToCurrency, throttle, toBool, toInteger, toNumber, uniq, uniqBy };
|
|
1735
|
+
export { addSpaceBetweenNumbers, addThousandsSpace, areArraysDeepEqualUnordered, areArraysEqual, assessSecurityRisks, basicSanitize, capitalizeFirst, capitalizeWords, checkMarkdownSecurity, chunk, clamp, cleanObject, compact, currencyToSymbol, debounce, deburr, delay, difference, fill, flatten, flattenDepth, flattenDepthBase, flattenOnce, formatBytes, formatCurrency, formatDecimalNumber, getStringSimilarity, groupBy, hasNilOrEmpty, humanFileSize, intersection, isBrowser, isFlattenable, isNil, isNilEmptyOrZeroLen, isNilEmptyOrZeroLength, isNilOrEmpty, isNilOrNaN, isNilOrZeroLen, isNilOrZeroLength, isNilText, isNilTextOrEmpty, isNode, isNullOrUndefined, isNullOrUndefinedEmptyOrZero, isNullOrUndefinedInArray, isNullOrUndefinedOrNaN, isNullOrUndefinedTextInc, isNullUndefinedOrEmpty, isNullUndefinedOrEmptyEnforced, isNullUndefinedOrZero, isPTTaxId, isValidIBAN, isValidPTTaxId, numbersEqual, objectToString, omit, otp, parseName, parseToBool, parseToNumber, pick, pluck, pushAll, randomDigits, removeDiacritics, round, safeAdd, safeDivide, safeMultiply, safeParseFloat, safeParseInt, safeSubtract, sanitize, sanitizeMarkdown, sentenceCase, shuffle, slugify, sortBy, stringSimilarity, symbolToCurrency, throttle, toBool, toInteger, toNumber, uniq, uniqBy };
|
|
1698
1736
|
//# sourceMappingURL=index.js.map
|
|
1699
1737
|
//# sourceMappingURL=index.js.map
|