@knapsack/utils 5.0.0--canary.6593.4738696.0 → 5.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/.lintstagedrc.mjs +2 -2
- package/CHANGELOG.md +151 -0
- package/dist/.tsbuildinfo-es +1 -1
- package/dist/arrays.d.ts.map +1 -1
- package/dist/arrays.js.map +1 -1
- package/dist/arrays.mjs.map +1 -1
- package/dist/dates.js.map +1 -1
- package/dist/dates.mjs +1 -1
- package/dist/dates.mjs.map +1 -1
- package/dist/fetcher.js.map +1 -1
- package/dist/fetcher.mjs.map +1 -1
- package/dist/functions.d.ts +15 -1
- package/dist/functions.d.ts.map +1 -1
- package/dist/functions.js +1 -1
- package/dist/functions.js.map +1 -1
- package/dist/functions.mjs +1 -1
- package/dist/functions.mjs.map +1 -1
- package/dist/ids.d.ts +1 -0
- package/dist/ids.d.ts.map +1 -1
- package/dist/ids.js +1 -1
- package/dist/ids.js.map +1 -1
- package/dist/ids.mjs +1 -1
- package/dist/ids.mjs.map +1 -1
- package/dist/immer.d.ts +1 -1
- package/dist/immer.d.ts.map +1 -1
- package/dist/immer.js +1 -1
- package/dist/immer.js.map +1 -1
- package/dist/immer.mjs +1 -1
- package/dist/immer.mjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/is-types.js.map +1 -1
- package/dist/is-types.mjs.map +1 -1
- package/dist/js-env.js.map +1 -1
- package/dist/js-env.mjs.map +1 -1
- package/dist/loose-equal.js.map +1 -1
- package/dist/loose-equal.mjs.map +1 -1
- package/dist/misc.js.map +1 -1
- package/dist/misc.mjs.map +1 -1
- package/dist/objects.d.ts.map +1 -1
- package/dist/objects.js +1 -1
- package/dist/objects.js.map +1 -1
- package/dist/objects.mjs +1 -1
- package/dist/objects.mjs.map +1 -1
- package/dist/paths.js.map +1 -1
- package/dist/paths.mjs.map +1 -1
- package/dist/strings.js.map +1 -1
- package/dist/strings.mjs.map +1 -1
- package/dist/type-tools.d.ts.map +1 -1
- package/dist/type-tools.js.map +1 -1
- package/dist/type-tools.mjs.map +1 -1
- package/dist/urls.d.ts +12 -0
- package/dist/urls.d.ts.map +1 -1
- package/dist/urls.js +2 -2
- package/dist/urls.js.map +1 -1
- package/dist/urls.mjs +2 -2
- package/dist/urls.mjs.map +1 -1
- package/dist/validation.js.map +1 -1
- package/dist/validation.mjs.map +1 -1
- package/package.json +15 -17
- package/vitest.config.ts +7 -0
- package/.eslintrc.js +0 -4
- package/ava.config.cjs +0 -3
package/dist/loose-equal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/is-types.ts","../src/loose-equal.ts"],"names":["isObject","__name","val","isArray","isDate","looseCompareArrays","a","b","equal","i","looseEqual","aKeysCount","bKeysCount","key","aHasKey","bHasKey","looseIndexOf","arr","item"],"mappings":"aAAO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAMA,EAAWC,CACtBC,CAAAA,
|
|
1
|
+
{"version":3,"sources":["../src/is-types.ts","../src/loose-equal.ts"],"names":["isObject","__name","val","isArray","isDate","looseCompareArrays","a","b","equal","i","looseEqual","aKeysCount","bKeysCount","key","aHasKey","bHasKey","looseIndexOf","arr","item"],"mappings":"aAAO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAMA,EAAWC,CAAAA,CACtBC,CAAAA,EAEAA,IAAQ,IAAA,EAAQ,OAAOA,GAAQ,QAAA,EAAY,CAAC,MAAM,OAAA,CAAQA,CAAG,EAHvC,UAAA,CAAA,CAgBjB,IAAMC,EAAU,KAAA,CAAM,OAAA,CAMtB,IAAMC,CAAAA,CAASH,CAAAA,CAACC,GAA8BA,CAAAA,YAAe,IAAA,CAA9C,UClBtB,SAASG,CAAAA,CAAmBC,EAAcC,CAAAA,CAAuB,CAC/D,GAAID,CAAAA,CAAE,MAAA,GAAWC,EAAE,MAAA,CAAQ,OAAO,OAClC,IAAIC,CAAAA,CAAQ,KACZ,IAAA,IAASC,CAAAA,CAAI,EAAGD,CAAAA,EAASC,CAAAA,CAAIH,EAAE,MAAA,CAAQG,CAAAA,EAAAA,CAErCD,EAAQE,CAAAA,CAAWJ,CAAAA,CAAEG,CAAC,CAAA,CAAGF,CAAAA,CAAEE,CAAC,CAAC,CAAA,CAE/B,OAAOD,CACT,CARSP,EAAAI,CAAAA,CAAA,oBAAA,CAAA,CAUF,SAASK,CAAAA,CAAWJ,CAAAA,CAAYC,EAAqB,CAC1D,GAAID,IAAMC,CAAAA,CAAG,OAAO,MAEpB,GAAIH,CAAAA,CAAOE,CAAC,CAAA,EAAKF,CAAAA,CAAOG,CAAC,CAAA,CACvB,OAAOD,EAAE,OAAA,EAAQ,GAAMC,EAAE,OAAA,EAAQ,CAGnC,GAAIJ,CAAAA,CAAQG,CAAC,GAAKH,CAAAA,CAAQI,CAAC,EACzB,OAAOF,CAAAA,CAAmBC,EAAGC,CAAC,CAAA,CAGhC,GAAIP,CAAAA,CAASM,CAAC,GAAKN,CAAAA,CAASO,CAAC,EAAG,CAC9B,IAAMI,EAAa,MAAA,CAAO,IAAA,CAAKL,CAAC,CAAA,CAAE,MAAA,CAC5BM,EAAa,MAAA,CAAO,IAAA,CAAKL,CAAC,CAAA,CAAE,MAAA,CAClC,GAAII,CAAAA,GAAeC,CAAAA,CACjB,OAAO,MAAA,CAGT,IAAA,IAAWC,KAAOP,CAAAA,CAAG,CAEnB,IAAMQ,CAAAA,CAAUR,CAAAA,CAAE,eAAeO,CAAG,CAAA,CAE9BE,EAAUR,CAAAA,CAAE,cAAA,CAAeM,CAAG,CAAA,CACpC,GACGC,GAAW,CAACC,CAAAA,EACZ,CAACD,CAAAA,EAAWC,CAAAA,EACb,CAACL,CAAAA,CAAWJ,CAAAA,CAAEO,CAAG,CAAA,CAAGN,CAAAA,CAAEM,CAAG,CAAC,CAAA,CAE1B,OAAO,MAEX,CACF,CACA,OAAO,MAAA,CAAOP,CAAC,CAAA,GAAM,MAAA,CAAOC,CAAC,CAC/B,CAjCgBN,EAAAS,CAAAA,CAAA,YAAA,CAAA,CAmCT,SAASM,CAAAA,CAAaC,CAAAA,CAAgBf,EAAsB,CACjE,OAAOe,EAAI,SAAA,CAAWC,CAAAA,EAASR,EAAWQ,CAAAA,CAAMhB,CAAG,CAAC,CACtD,CAFgBD,EAAAe,CAAAA,CAAA,cAAA,CAAA","file":"loose-equal.js","sourcesContent":["export const isObject = (\n val: unknown,\n): val is Record<string | symbol, unknown> =>\n val !== null && typeof val === 'object' && !Array.isArray(val);\n\nexport function isObjectEmpty(\n val: unknown,\n): val is Record<string | symbol, unknown> {\n return isObject(val) && Object.keys(val).length === 0;\n}\n\nexport const objectToString = Object.prototype.toString;\nexport const toTypeString = (value: unknown): string =>\n objectToString.call(value);\n\n// eslint-disable-next-line prefer-destructuring\nexport const isArray = Array.isArray;\nexport const isMap = (val: unknown): val is Map<any, any> =>\n toTypeString(val) === '[object Map]';\nexport const isSet = (val: unknown): val is Set<any> =>\n toTypeString(val) === '[object Set]';\n\nexport const isDate = (val: unknown): val is Date => val instanceof Date;\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const isFunction = (val: unknown): val is Function =>\n typeof val === 'function';\nexport const isString = (val: unknown): val is string =>\n typeof val === 'string';\nexport const isNumber = (val: unknown): val is number =>\n typeof val === 'number';\nexport const isSymbol = (val: unknown): val is symbol =>\n typeof val === 'symbol';\n\nexport const isPromise = <T = any>(val: unknown): val is Promise<T> => {\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\n\nexport const toRawType = (value: unknown): string => {\n // extract \"RawType\" from strings like \"[object RawType]\"\n return toTypeString(value).slice(8, -1);\n};\n\nexport const isPlainObject = (val: unknown): val is Record<string, unknown> =>\n toTypeString(val) === '[object Object]';\n\nexport const isIntegerKey = (key: unknown): boolean =>\n isString(key) &&\n key !== 'NaN' &&\n key[0] !== '-' &&\n `${parseInt(key, 10)}` === key;\n","import { isArray, isDate, isObject } from './is-types';\n\n// Thanks! https://github.com/vuejs/vue-next/blob/master/packages/shared/src/looseEqual.ts\n\nfunction looseCompareArrays(a: unknown[], b: unknown[]): boolean {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\n\nexport function looseEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n if (isDate(a) && isDate(b)) {\n return a.getTime() === b.getTime();\n }\n\n if (isArray(a) && isArray(b)) {\n return looseCompareArrays(a, b);\n }\n\n if (isObject(a) && isObject(b)) {\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n // eslint-disable-next-line guard-for-in\n for (const key in a) {\n // eslint-disable-next-line no-prototype-builtins\n const aHasKey = a.hasOwnProperty(key);\n // eslint-disable-next-line no-prototype-builtins\n const bHasKey = b.hasOwnProperty(key);\n if (\n (aHasKey && !bHasKey) ||\n (!aHasKey && bHasKey) ||\n !looseEqual(a[key], b[key])\n ) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\n\nexport function looseIndexOf(arr: unknown[], val: unknown): number {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n"]}
|
package/dist/loose-equal.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/is-types.ts","../src/loose-equal.ts"],"names":["isObject","__name","val","isArray","isDate","looseCompareArrays","a","b","equal","i","looseEqual","aKeysCount","bKeysCount","key","aHasKey","bHasKey","looseIndexOf","arr","item"],"mappings":"AAAO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAMA,EAAWC,CACtBC,CAAAA,
|
|
1
|
+
{"version":3,"sources":["../src/is-types.ts","../src/loose-equal.ts"],"names":["isObject","__name","val","isArray","isDate","looseCompareArrays","a","b","equal","i","looseEqual","aKeysCount","bKeysCount","key","aHasKey","bHasKey","looseIndexOf","arr","item"],"mappings":"AAAO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAMA,EAAWC,CAAAA,CACtBC,CAAAA,EAEAA,IAAQ,IAAA,EAAQ,OAAOA,GAAQ,QAAA,EAAY,CAAC,MAAM,OAAA,CAAQA,CAAG,EAHvC,UAAA,CAAA,CAgBjB,IAAMC,EAAU,KAAA,CAAM,OAAA,CAMtB,IAAMC,CAAAA,CAASH,CAAAA,CAACC,GAA8BA,CAAAA,YAAe,IAAA,CAA9C,UClBtB,SAASG,CAAAA,CAAmBC,EAAcC,CAAAA,CAAuB,CAC/D,GAAID,CAAAA,CAAE,MAAA,GAAWC,EAAE,MAAA,CAAQ,OAAO,OAClC,IAAIC,CAAAA,CAAQ,KACZ,IAAA,IAASC,CAAAA,CAAI,EAAGD,CAAAA,EAASC,CAAAA,CAAIH,EAAE,MAAA,CAAQG,CAAAA,EAAAA,CAErCD,EAAQE,CAAAA,CAAWJ,CAAAA,CAAEG,CAAC,CAAA,CAAGF,CAAAA,CAAEE,CAAC,CAAC,CAAA,CAE/B,OAAOD,CACT,CARSP,EAAAI,CAAAA,CAAA,oBAAA,CAAA,CAUF,SAASK,CAAAA,CAAWJ,CAAAA,CAAYC,EAAqB,CAC1D,GAAID,IAAMC,CAAAA,CAAG,OAAO,MAEpB,GAAIH,CAAAA,CAAOE,CAAC,CAAA,EAAKF,CAAAA,CAAOG,CAAC,CAAA,CACvB,OAAOD,EAAE,OAAA,EAAQ,GAAMC,EAAE,OAAA,EAAQ,CAGnC,GAAIJ,CAAAA,CAAQG,CAAC,GAAKH,CAAAA,CAAQI,CAAC,EACzB,OAAOF,CAAAA,CAAmBC,EAAGC,CAAC,CAAA,CAGhC,GAAIP,CAAAA,CAASM,CAAC,GAAKN,CAAAA,CAASO,CAAC,EAAG,CAC9B,IAAMI,EAAa,MAAA,CAAO,IAAA,CAAKL,CAAC,CAAA,CAAE,MAAA,CAC5BM,EAAa,MAAA,CAAO,IAAA,CAAKL,CAAC,CAAA,CAAE,MAAA,CAClC,GAAII,CAAAA,GAAeC,CAAAA,CACjB,OAAO,MAAA,CAGT,IAAA,IAAWC,KAAOP,CAAAA,CAAG,CAEnB,IAAMQ,CAAAA,CAAUR,CAAAA,CAAE,eAAeO,CAAG,CAAA,CAE9BE,EAAUR,CAAAA,CAAE,cAAA,CAAeM,CAAG,CAAA,CACpC,GACGC,GAAW,CAACC,CAAAA,EACZ,CAACD,CAAAA,EAAWC,CAAAA,EACb,CAACL,CAAAA,CAAWJ,CAAAA,CAAEO,CAAG,CAAA,CAAGN,CAAAA,CAAEM,CAAG,CAAC,CAAA,CAE1B,OAAO,MAEX,CACF,CACA,OAAO,MAAA,CAAOP,CAAC,CAAA,GAAM,MAAA,CAAOC,CAAC,CAC/B,CAjCgBN,EAAAS,CAAAA,CAAA,YAAA,CAAA,CAmCT,SAASM,CAAAA,CAAaC,CAAAA,CAAgBf,EAAsB,CACjE,OAAOe,EAAI,SAAA,CAAWC,CAAAA,EAASR,EAAWQ,CAAAA,CAAMhB,CAAG,CAAC,CACtD,CAFgBD,EAAAe,CAAAA,CAAA,cAAA,CAAA","file":"loose-equal.mjs","sourcesContent":["export const isObject = (\n val: unknown,\n): val is Record<string | symbol, unknown> =>\n val !== null && typeof val === 'object' && !Array.isArray(val);\n\nexport function isObjectEmpty(\n val: unknown,\n): val is Record<string | symbol, unknown> {\n return isObject(val) && Object.keys(val).length === 0;\n}\n\nexport const objectToString = Object.prototype.toString;\nexport const toTypeString = (value: unknown): string =>\n objectToString.call(value);\n\n// eslint-disable-next-line prefer-destructuring\nexport const isArray = Array.isArray;\nexport const isMap = (val: unknown): val is Map<any, any> =>\n toTypeString(val) === '[object Map]';\nexport const isSet = (val: unknown): val is Set<any> =>\n toTypeString(val) === '[object Set]';\n\nexport const isDate = (val: unknown): val is Date => val instanceof Date;\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const isFunction = (val: unknown): val is Function =>\n typeof val === 'function';\nexport const isString = (val: unknown): val is string =>\n typeof val === 'string';\nexport const isNumber = (val: unknown): val is number =>\n typeof val === 'number';\nexport const isSymbol = (val: unknown): val is symbol =>\n typeof val === 'symbol';\n\nexport const isPromise = <T = any>(val: unknown): val is Promise<T> => {\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\n\nexport const toRawType = (value: unknown): string => {\n // extract \"RawType\" from strings like \"[object RawType]\"\n return toTypeString(value).slice(8, -1);\n};\n\nexport const isPlainObject = (val: unknown): val is Record<string, unknown> =>\n toTypeString(val) === '[object Object]';\n\nexport const isIntegerKey = (key: unknown): boolean =>\n isString(key) &&\n key !== 'NaN' &&\n key[0] !== '-' &&\n `${parseInt(key, 10)}` === key;\n","import { isArray, isDate, isObject } from './is-types';\n\n// Thanks! https://github.com/vuejs/vue-next/blob/master/packages/shared/src/looseEqual.ts\n\nfunction looseCompareArrays(a: unknown[], b: unknown[]): boolean {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\n\nexport function looseEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n if (isDate(a) && isDate(b)) {\n return a.getTime() === b.getTime();\n }\n\n if (isArray(a) && isArray(b)) {\n return looseCompareArrays(a, b);\n }\n\n if (isObject(a) && isObject(b)) {\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n // eslint-disable-next-line guard-for-in\n for (const key in a) {\n // eslint-disable-next-line no-prototype-builtins\n const aHasKey = a.hasOwnProperty(key);\n // eslint-disable-next-line no-prototype-builtins\n const bHasKey = b.hasOwnProperty(key);\n if (\n (aHasKey && !bHasKey) ||\n (!aHasKey && bHasKey) ||\n !looseEqual(a[key], b[key])\n ) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\n\nexport function looseIndexOf(arr: unknown[], val: unknown): number {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n"]}
|
package/dist/misc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/misc.ts"],"names":["getRandomInt","max","__name","timer","startTime","timerInSeconds","timerEnd"],"mappings":"8FAGO,SAASA,CAAAA,CAAaC,CAAqB,
|
|
1
|
+
{"version":3,"sources":["../src/misc.ts"],"names":["getRandomInt","max","__name","timer","startTime","timerInSeconds","timerEnd"],"mappings":"8FAGO,SAASA,CAAAA,CAAaC,CAAAA,CAAqB,CAChD,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,CAAI,IAAA,CAAK,KAAA,CAAMA,CAAG,CAAC,CACnD,CAFgBC,CAAAA,CAAAF,CAAAA,CAAA,cAAA,CAAA,CAOT,IAAMG,EAAQD,CAAAA,CAAA,IAAsB,CACzC,IAAME,CAAAA,CAAY,IAAI,MAAK,CAAE,OAAA,EAAQ,CACrC,OAAO,IAAM,IAAI,MAAK,CAAE,OAAA,EAAQ,CAAIA,CACtC,CAAA,CAHqB,OAAA,CAAA,CAORC,EAAiBH,CAAAA,CAAA,IAAsB,CAClD,IAAMI,CAAAA,CAAWH,CAAAA,EAAM,CACvB,OAAO,IAAMG,CAAAA,EAAS,CAAI,GAC5B,CAAA,CAH8B,gBAAA","file":"misc.js","sourcesContent":["/**\n * Get Random Integer\n */\nexport function getRandomInt(max: number): number {\n return Math.floor(Math.random() * Math.floor(max));\n}\n\n/**\n * Timer results in ms\n */\nexport const timer = (): (() => number) => {\n const startTime = new Date().getTime();\n return () => new Date().getTime() - startTime;\n};\n/**\n * The above timer, but in seconds instead of ms\n */\nexport const timerInSeconds = (): (() => number) => {\n const timerEnd = timer();\n return () => timerEnd() / 1000;\n};\n"]}
|
package/dist/misc.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/misc.ts"],"names":["getRandomInt","max","__name","timer","startTime","timerInSeconds","timerEnd"],"mappings":"iFAGO,SAASA,CAAAA,CAAaC,CAAqB,
|
|
1
|
+
{"version":3,"sources":["../src/misc.ts"],"names":["getRandomInt","max","__name","timer","startTime","timerInSeconds","timerEnd"],"mappings":"iFAGO,SAASA,CAAAA,CAAaC,CAAAA,CAAqB,CAChD,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,CAAI,IAAA,CAAK,KAAA,CAAMA,CAAG,CAAC,CACnD,CAFgBC,CAAAA,CAAAF,CAAAA,CAAA,cAAA,CAAA,CAOT,IAAMG,EAAQD,CAAAA,CAAA,IAAsB,CACzC,IAAME,CAAAA,CAAY,IAAI,MAAK,CAAE,OAAA,EAAQ,CACrC,OAAO,IAAM,IAAI,MAAK,CAAE,OAAA,EAAQ,CAAIA,CACtC,CAAA,CAHqB,OAAA,CAAA,CAORC,EAAiBH,CAAAA,CAAA,IAAsB,CAClD,IAAMI,CAAAA,CAAWH,CAAAA,EAAM,CACvB,OAAO,IAAMG,CAAAA,EAAS,CAAI,GAC5B,CAAA,CAH8B,gBAAA","file":"misc.mjs","sourcesContent":["/**\n * Get Random Integer\n */\nexport function getRandomInt(max: number): number {\n return Math.floor(Math.random() * Math.floor(max));\n}\n\n/**\n * Timer results in ms\n */\nexport const timer = (): (() => number) => {\n const startTime = new Date().getTime();\n return () => new Date().getTime() - startTime;\n};\n/**\n * The above timer, but in seconds instead of ms\n */\nexport const timerInSeconds = (): (() => number) => {\n const timerEnd = timer();\n return () => timerEnd() / 1000;\n};\n"]}
|
package/dist/objects.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../src/objects.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAEjD;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../src/objects.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAEjD;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAU7E;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,KAAK,CAAC,KACL,OAAO,CAAC,CAAC,CAAmB,CAAC;AAEhC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EACzE,GAAG,EAAE,CAAC,GACL,CAAC,CAQH;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,KAAA,OAevC;AAED;;;GAGG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmBzC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAC5B,CAAC,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAKxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GACtB,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAWpC"}
|
package/dist/objects.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var d=require('clean-deep'),groupBy_js=require('lodash/groupBy.js'),deepmerge=require('deepmerge');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var d__default=/*#__PURE__*/_interopDefault(d);var groupBy_js__default=/*#__PURE__*/_interopDefault(groupBy_js);var deepmerge__default=/*#__PURE__*/_interopDefault(deepmerge);var y=Object.defineProperty;var e=(n,t)=>y(n,"name",{value:t,configurable:true});var u=e(n=>n!==null&&typeof n=="object"&&!Array.isArray(n),"isObject");function
|
|
1
|
+
'use strict';var d=require('clean-deep'),groupBy_js=require('lodash/groupBy.js'),deepmerge=require('deepmerge');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var d__default=/*#__PURE__*/_interopDefault(d);var groupBy_js__default=/*#__PURE__*/_interopDefault(groupBy_js);var deepmerge__default=/*#__PURE__*/_interopDefault(deepmerge);var y=Object.defineProperty;var e=(n,t)=>y(n,"name",{value:t,configurable:true});var u=e(n=>n!==null&&typeof n=="object"&&!Array.isArray(n),"isObject");function T(n){return Object.keys(n).sort().reduce((t,r)=>(t[r]=n[r],t),{})}e(T,"sortObject");var b=e(n=>d__default.default(n),"removeEmptyObjects");function m(n){return d__default.default(n,{undefinedValues:true,nullValues:true,emptyArrays:false,emptyObjects:false,emptyStrings:true})}e(m,"removeUndefinedProps");function p(n){if(typeof n!="object"||!n)return n;if(Array.isArray(n)){let o=[];return n.forEach((s,i)=>{o[i]=p(s);}),o}let t=Object.keys(n).sort(),r={};return t.forEach(o=>{r[o]=p(n[o]);}),r}e(p,"sortKeysRecursive");function k(n){if(!u(n))throw new Error("Expected an object to flatten");let t={};function r(o,s){Object.entries(o).forEach(([i,c])=>{let a=[...s,i];u(c)&&(t[a.join(".")]=c,r(c,a));});}return e(r,"dive"),r(n,[]),t}e(k,"flatten");function R(n){return Object.entries(n).map(([t,r])=>({id:t,...r}))}e(R,"dictionaryToArray");function j(n){return Object.entries(n).reduce((t,[r,o])=>(t[r]={id:r,...o},t),{})}e(j,"updateDictionaryWithId");Object.defineProperty(exports,"groupBy",{enumerable:true,get:function(){return groupBy_js__default.default}});Object.defineProperty(exports,"deepMerge",{enumerable:true,get:function(){return deepmerge__default.default}});exports.dictionaryToArray=R;exports.flatten=k;exports.removeEmptyObjects=b;exports.removeUndefinedProps=m;exports.sortKeysRecursive=p;exports.sortObject=T;exports.updateDictionaryWithId=j;//# sourceMappingURL=objects.js.map
|
|
2
2
|
//# sourceMappingURL=objects.js.map
|
package/dist/objects.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/objects.ts","../src/is-types.ts"],"names":["isObject","__name","val","sortObject","theObject","obj","key","removeEmptyObjects","src","cleanDeep","removeUndefinedProps","sortKeysRecursive","object","newArray","item","index","sortedKeys","sortedObject","flatten","flattenedObj","dive","thisObj","path","value","thisPath","dictionaryToArray","dictionary","id","updateDictionaryWithId","dict","acc"],"mappings":"gWAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CCAO,IAAMA,CAAAA,CAAWC,EACtBC,
|
|
1
|
+
{"version":3,"sources":["../src/objects.ts","../src/is-types.ts"],"names":["isObject","__name","val","sortObject","theObject","obj","key","removeEmptyObjects","src","cleanDeep","removeUndefinedProps","sortKeysRecursive","object","newArray","item","index","sortedKeys","sortedObject","flatten","flattenedObj","dive","thisObj","path","value","thisPath","dictionaryToArray","dictionary","id","updateDictionaryWithId","dict","acc"],"mappings":"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","file":"objects.js","sourcesContent":["import cleanDeep from 'clean-deep';\nimport { isObject } from './is-types';\n\nexport { default as groupBy } from 'lodash/groupBy.js';\n// @todo: look into lodash/merge vs deepMerge behavior differences and use cases (ie. immutable vs not)\n// export { default as deepMerge } from 'lodash/merge.js';\nexport { default as deepMerge } from 'deepmerge';\n\n/**\n * Sort object by alphabetizing keys.\n */\nexport function sortObject<T extends Record<string, unknown>>(theObject: T): T {\n return Object.keys(theObject)\n .sort()\n .reduce(\n (obj, key: keyof T) => {\n obj[key] = theObject[key];\n return obj;\n },\n <T>{},\n );\n}\n\n/**\n * Remove empty objects in nested object.\n * Leverage stringify to convert empty objects to undefined, which is removed\n * during stringification.\n */\nexport const removeEmptyObjects = <T extends Record<string, unknown>>(\n src: T,\n): Partial<T> => cleanDeep(src);\n\n/**\n * Removes keys like `{ x: undefined }` from the object\n */\nexport function removeUndefinedProps<T extends Record<PropertyKey, unknown>>(\n obj: T,\n): T {\n return cleanDeep(obj, {\n undefinedValues: true,\n nullValues: true,\n emptyArrays: false,\n emptyObjects: false,\n emptyStrings: true,\n }) as T;\n}\n\n/**\n * Sort object and arrays recursively by alphabetizing keys.\n */\nexport function sortKeysRecursive(object) {\n if (typeof object !== 'object' || !object) return object;\n if (Array.isArray(object)) {\n const newArray: any[] = [];\n object.forEach((item, index) => {\n newArray[index] = sortKeysRecursive(item);\n });\n return newArray;\n }\n const sortedKeys = Object.keys(object).sort();\n const sortedObject = {};\n sortedKeys.forEach((key) => {\n sortedObject[key] = sortKeysRecursive(object[key]);\n });\n return sortedObject;\n}\n\n/**\n * Turn a nested object into a single-level object with dot notation keys and\n * values equal to the deepest **object** in the nested object.\n */\nexport function flatten(\n obj: Record<string, unknown>,\n): Record<string, Record<string, unknown>> {\n if (!isObject(obj)) {\n throw new Error('Expected an object to flatten');\n }\n const flattenedObj: Record<string, Record<string, unknown>> = {};\n\n function dive(thisObj: Record<string, unknown>, path: string[]) {\n Object.entries(thisObj).forEach(([key, value]) => {\n const thisPath = [...path, key];\n if (isObject(value)) {\n flattenedObj[thisPath.join('.')] = value;\n dive(value, thisPath);\n }\n });\n }\n\n dive(obj, []);\n\n return flattenedObj;\n}\n\n/**\n * This function takes a dictionary of objects and returns an array of objects with the `id` merged into the object.\n * Helpful when you have a dictionary of objects and you want to add the `id` to the object (from dictionary key) then want to use array methods.\n * Example:\n * ```ts\n * const dictionary = {\n * '123': { name: 'foo' },\n * '456': { name: 'bar' },\n * }\n *\n * dictionaryToArray(dictionary).forEach(({ id, name }) => {\n * // stuff\n * })\n * ```\n * @see {@link updateDictionaryWithId}\n * @see {@link arrayToDictionary}\n */\nexport function dictionaryToArray<T extends Record<string, any>>(\n dictionary: Record<string, T>,\n): (T & { id: string })[] {\n return Object.entries(dictionary).map(([id, value]) => ({\n id,\n ...value,\n }));\n}\n\n/**\n * This function takes a dictionary of objects and returns a dictionary of objects with the `id` merged into the object.\n * Helpful when you have a dictionary of objects and you want to add the `id` to the object (from dictionary key)\n * @see {@link dictionaryToArray}\n * @example\n * ```ts\n * const dictionary = {\n * '123': { name: 'foo' },\n * '456': { name: 'bar' },\n * }\n *\n * const dictionaryWithId = updateDictionaryWithId(dictionary)\n * // Which is now:\n * {\n * '123': { id: '123', name: 'foo' },\n * '456': { id: '456', name: 'bar' },\n * }\n * ```\n */\nexport function updateDictionaryWithId<T extends Record<string, any>>(\n dict: Record<string, T>,\n): Record<string, T & { id: string }> {\n return Object.entries(dict).reduce(\n (acc, [id, value]) => {\n acc[id] = {\n id,\n ...value,\n };\n return acc;\n },\n {} as Record<string, T & { id: string }>,\n );\n}\n","export const isObject = (\n val: unknown,\n): val is Record<string | symbol, unknown> =>\n val !== null && typeof val === 'object' && !Array.isArray(val);\n\nexport function isObjectEmpty(\n val: unknown,\n): val is Record<string | symbol, unknown> {\n return isObject(val) && Object.keys(val).length === 0;\n}\n\nexport const objectToString = Object.prototype.toString;\nexport const toTypeString = (value: unknown): string =>\n objectToString.call(value);\n\n// eslint-disable-next-line prefer-destructuring\nexport const isArray = Array.isArray;\nexport const isMap = (val: unknown): val is Map<any, any> =>\n toTypeString(val) === '[object Map]';\nexport const isSet = (val: unknown): val is Set<any> =>\n toTypeString(val) === '[object Set]';\n\nexport const isDate = (val: unknown): val is Date => val instanceof Date;\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const isFunction = (val: unknown): val is Function =>\n typeof val === 'function';\nexport const isString = (val: unknown): val is string =>\n typeof val === 'string';\nexport const isNumber = (val: unknown): val is number =>\n typeof val === 'number';\nexport const isSymbol = (val: unknown): val is symbol =>\n typeof val === 'symbol';\n\nexport const isPromise = <T = any>(val: unknown): val is Promise<T> => {\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\n\nexport const toRawType = (value: unknown): string => {\n // extract \"RawType\" from strings like \"[object RawType]\"\n return toTypeString(value).slice(8, -1);\n};\n\nexport const isPlainObject = (val: unknown): val is Record<string, unknown> =>\n toTypeString(val) === '[object Object]';\n\nexport const isIntegerKey = (key: unknown): boolean =>\n isString(key) &&\n key !== 'NaN' &&\n key[0] !== '-' &&\n `${parseInt(key, 10)}` === key;\n"]}
|
package/dist/objects.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import d from'clean-deep';export{default as groupBy}from'lodash/groupBy.js';export{default as deepMerge}from'deepmerge';var y=Object.defineProperty;var e=(n,t)=>y(n,"name",{value:t,configurable:true});var u=e(n=>n!==null&&typeof n=="object"&&!Array.isArray(n),"isObject");function
|
|
1
|
+
import d from'clean-deep';export{default as groupBy}from'lodash/groupBy.js';export{default as deepMerge}from'deepmerge';var y=Object.defineProperty;var e=(n,t)=>y(n,"name",{value:t,configurable:true});var u=e(n=>n!==null&&typeof n=="object"&&!Array.isArray(n),"isObject");function T(n){return Object.keys(n).sort().reduce((t,r)=>(t[r]=n[r],t),{})}e(T,"sortObject");var b=e(n=>d(n),"removeEmptyObjects");function m(n){return d(n,{undefinedValues:true,nullValues:true,emptyArrays:false,emptyObjects:false,emptyStrings:true})}e(m,"removeUndefinedProps");function p(n){if(typeof n!="object"||!n)return n;if(Array.isArray(n)){let o=[];return n.forEach((s,i)=>{o[i]=p(s);}),o}let t=Object.keys(n).sort(),r={};return t.forEach(o=>{r[o]=p(n[o]);}),r}e(p,"sortKeysRecursive");function k(n){if(!u(n))throw new Error("Expected an object to flatten");let t={};function r(o,s){Object.entries(o).forEach(([i,c])=>{let a=[...s,i];u(c)&&(t[a.join(".")]=c,r(c,a));});}return e(r,"dive"),r(n,[]),t}e(k,"flatten");function R(n){return Object.entries(n).map(([t,r])=>({id:t,...r}))}e(R,"dictionaryToArray");function j(n){return Object.entries(n).reduce((t,[r,o])=>(t[r]={id:r,...o},t),{})}e(j,"updateDictionaryWithId");export{R as dictionaryToArray,k as flatten,b as removeEmptyObjects,m as removeUndefinedProps,p as sortKeysRecursive,T as sortObject,j as updateDictionaryWithId};//# sourceMappingURL=objects.mjs.map
|
|
2
2
|
//# sourceMappingURL=objects.mjs.map
|
package/dist/objects.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/objects.ts","../src/is-types.ts"],"names":["isObject","__name","val","sortObject","theObject","obj","key","removeEmptyObjects","src","cleanDeep","removeUndefinedProps","sortKeysRecursive","object","newArray","item","index","sortedKeys","sortedObject","flatten","flattenedObj","dive","thisObj","path","value","thisPath","dictionaryToArray","dictionary","id","updateDictionaryWithId","dict","acc"],"mappings":"wHAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CCAO,IAAMA,CAAAA,CAAWC,EACtBC,
|
|
1
|
+
{"version":3,"sources":["../src/objects.ts","../src/is-types.ts"],"names":["isObject","__name","val","sortObject","theObject","obj","key","removeEmptyObjects","src","cleanDeep","removeUndefinedProps","sortKeysRecursive","object","newArray","item","index","sortedKeys","sortedObject","flatten","flattenedObj","dive","thisObj","path","value","thisPath","dictionaryToArray","dictionary","id","updateDictionaryWithId","dict","acc"],"mappings":"wHAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CCAO,IAAMA,CAAAA,CAAWC,EACtBC,CAAAA,EAEAA,CAAAA,GAAQ,IAAA,EAAQ,OAAOA,CAAAA,EAAQ,QAAA,EAAY,CAAC,KAAA,CAAM,QAAQA,CAAG,CAAA,CAHvC,UAAA,CAAA,CDWjB,SAASC,CAAAA,CAA8CC,CAAAA,CAAiB,CAC7E,OAAO,MAAA,CAAO,KAAKA,CAAS,CAAA,CACzB,IAAA,EAAK,CACL,MAAA,CACC,CAACC,CAAAA,CAAKC,CAAAA,IACJD,EAAIC,CAAG,CAAA,CAAIF,CAAAA,CAAUE,CAAG,CAAA,CACjBD,CAAAA,CAAAA,CAEN,EACL,CACJ,CAVgBJ,CAAAA,CAAAE,CAAAA,CAAA,YAAA,CAAA,CAiBT,IAAMI,CAAAA,CAAqBN,CAAAA,CAChCO,CAAAA,EACeC,EAAUD,CAAG,CAAA,CAFI,oBAAA,EAO3B,SAASE,CAAAA,CACdL,CAAAA,CACG,CACH,OAAOI,EAAUJ,CAAAA,CAAK,CACpB,eAAA,CAAiB,IAAA,CACjB,UAAA,CAAY,IAAA,CACZ,WAAA,CAAa,KAAA,CACb,aAAc,KAAA,CACd,YAAA,CAAc,IAChB,CAAC,CACH,CAVgBJ,CAAAA,CAAAS,CAAAA,CAAA,wBAeT,SAASC,CAAAA,CAAkBC,CAAAA,CAAQ,CACxC,GAAI,OAAOA,CAAAA,EAAW,QAAA,EAAY,CAACA,CAAAA,CAAQ,OAAOA,CAAAA,CAClD,GAAI,KAAA,CAAM,OAAA,CAAQA,CAAM,CAAA,CAAG,CACzB,IAAMC,CAAAA,CAAkB,EAAC,CACzB,OAAAD,CAAAA,CAAO,OAAA,CAAQ,CAACE,EAAMC,CAAAA,GAAU,CAC9BF,CAAAA,CAASE,CAAK,CAAA,CAAIJ,CAAAA,CAAkBG,CAAI,EAC1C,CAAC,CAAA,CACMD,CACT,CACA,IAAMG,CAAAA,CAAa,MAAA,CAAO,IAAA,CAAKJ,CAAM,EAAE,IAAA,EAAK,CACtCK,CAAAA,CAAe,EAAC,CACtB,OAAAD,CAAAA,CAAW,OAAA,CAASV,GAAQ,CAC1BW,CAAAA,CAAaX,CAAG,CAAA,CAAIK,CAAAA,CAAkBC,CAAAA,CAAON,CAAG,CAAC,EACnD,CAAC,CAAA,CACMW,CACT,CAfgBhB,CAAAA,CAAAU,CAAAA,CAAA,mBAAA,CAAA,CAqBT,SAASO,EACdb,CAAAA,CACyC,CACzC,GAAI,CAACL,CAAAA,CAASK,CAAG,CAAA,CACf,MAAM,IAAI,KAAA,CAAM,+BAA+B,CAAA,CAEjD,IAAMc,CAAAA,CAAwD,EAAC,CAE/D,SAASC,EAAKC,CAAAA,CAAkCC,CAAAA,CAAgB,CAC9D,MAAA,CAAO,OAAA,CAAQD,CAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAACf,CAAAA,CAAKiB,CAAK,CAAA,GAAM,CAChD,IAAMC,CAAAA,CAAW,CAAC,GAAGF,CAAAA,CAAMhB,CAAG,CAAA,CAC1BN,CAAAA,CAASuB,CAAK,CAAA,GAChBJ,CAAAA,CAAaK,CAAAA,CAAS,KAAK,GAAG,CAAC,CAAA,CAAID,CAAAA,CACnCH,CAAAA,CAAKG,CAAAA,CAAOC,CAAQ,CAAA,EAExB,CAAC,EACH,CARS,OAAAvB,CAAAA,CAAAmB,CAAAA,CAAA,MAAA,CAAA,CAUTA,CAAAA,CAAKf,CAAAA,CAAK,EAAE,CAAA,CAELc,CACT,CArBgBlB,CAAAA,CAAAiB,CAAAA,CAAA,SAAA,CAAA,CAwCT,SAASO,EACdC,CAAAA,CACwB,CACxB,OAAO,MAAA,CAAO,OAAA,CAAQA,CAAU,CAAA,CAAE,GAAA,CAAI,CAAC,CAACC,CAAAA,CAAIJ,CAAK,CAAA,IAAO,CACtD,EAAA,CAAAI,CAAAA,CACA,GAAGJ,CACL,CAAA,CAAE,CACJ,CAPgBtB,CAAAA,CAAAwB,CAAAA,CAAA,mBAAA,CAAA,CA4BT,SAASG,CAAAA,CACdC,EACoC,CACpC,OAAO,MAAA,CAAO,OAAA,CAAQA,CAAI,CAAA,CAAE,MAAA,CAC1B,CAACC,EAAK,CAACH,CAAAA,CAAIJ,CAAK,CAAA,IACdO,CAAAA,CAAIH,CAAE,CAAA,CAAI,CACR,GAAAA,CAAAA,CACA,GAAGJ,CACL,CAAA,CACOO,GAET,EACF,CACF,CAbgB7B,EAAA2B,CAAAA,CAAA,wBAAA,CAAA","file":"objects.mjs","sourcesContent":["import cleanDeep from 'clean-deep';\nimport { isObject } from './is-types';\n\nexport { default as groupBy } from 'lodash/groupBy.js';\n// @todo: look into lodash/merge vs deepMerge behavior differences and use cases (ie. immutable vs not)\n// export { default as deepMerge } from 'lodash/merge.js';\nexport { default as deepMerge } from 'deepmerge';\n\n/**\n * Sort object by alphabetizing keys.\n */\nexport function sortObject<T extends Record<string, unknown>>(theObject: T): T {\n return Object.keys(theObject)\n .sort()\n .reduce(\n (obj, key: keyof T) => {\n obj[key] = theObject[key];\n return obj;\n },\n <T>{},\n );\n}\n\n/**\n * Remove empty objects in nested object.\n * Leverage stringify to convert empty objects to undefined, which is removed\n * during stringification.\n */\nexport const removeEmptyObjects = <T extends Record<string, unknown>>(\n src: T,\n): Partial<T> => cleanDeep(src);\n\n/**\n * Removes keys like `{ x: undefined }` from the object\n */\nexport function removeUndefinedProps<T extends Record<PropertyKey, unknown>>(\n obj: T,\n): T {\n return cleanDeep(obj, {\n undefinedValues: true,\n nullValues: true,\n emptyArrays: false,\n emptyObjects: false,\n emptyStrings: true,\n }) as T;\n}\n\n/**\n * Sort object and arrays recursively by alphabetizing keys.\n */\nexport function sortKeysRecursive(object) {\n if (typeof object !== 'object' || !object) return object;\n if (Array.isArray(object)) {\n const newArray: any[] = [];\n object.forEach((item, index) => {\n newArray[index] = sortKeysRecursive(item);\n });\n return newArray;\n }\n const sortedKeys = Object.keys(object).sort();\n const sortedObject = {};\n sortedKeys.forEach((key) => {\n sortedObject[key] = sortKeysRecursive(object[key]);\n });\n return sortedObject;\n}\n\n/**\n * Turn a nested object into a single-level object with dot notation keys and\n * values equal to the deepest **object** in the nested object.\n */\nexport function flatten(\n obj: Record<string, unknown>,\n): Record<string, Record<string, unknown>> {\n if (!isObject(obj)) {\n throw new Error('Expected an object to flatten');\n }\n const flattenedObj: Record<string, Record<string, unknown>> = {};\n\n function dive(thisObj: Record<string, unknown>, path: string[]) {\n Object.entries(thisObj).forEach(([key, value]) => {\n const thisPath = [...path, key];\n if (isObject(value)) {\n flattenedObj[thisPath.join('.')] = value;\n dive(value, thisPath);\n }\n });\n }\n\n dive(obj, []);\n\n return flattenedObj;\n}\n\n/**\n * This function takes a dictionary of objects and returns an array of objects with the `id` merged into the object.\n * Helpful when you have a dictionary of objects and you want to add the `id` to the object (from dictionary key) then want to use array methods.\n * Example:\n * ```ts\n * const dictionary = {\n * '123': { name: 'foo' },\n * '456': { name: 'bar' },\n * }\n *\n * dictionaryToArray(dictionary).forEach(({ id, name }) => {\n * // stuff\n * })\n * ```\n * @see {@link updateDictionaryWithId}\n * @see {@link arrayToDictionary}\n */\nexport function dictionaryToArray<T extends Record<string, any>>(\n dictionary: Record<string, T>,\n): (T & { id: string })[] {\n return Object.entries(dictionary).map(([id, value]) => ({\n id,\n ...value,\n }));\n}\n\n/**\n * This function takes a dictionary of objects and returns a dictionary of objects with the `id` merged into the object.\n * Helpful when you have a dictionary of objects and you want to add the `id` to the object (from dictionary key)\n * @see {@link dictionaryToArray}\n * @example\n * ```ts\n * const dictionary = {\n * '123': { name: 'foo' },\n * '456': { name: 'bar' },\n * }\n *\n * const dictionaryWithId = updateDictionaryWithId(dictionary)\n * // Which is now:\n * {\n * '123': { id: '123', name: 'foo' },\n * '456': { id: '456', name: 'bar' },\n * }\n * ```\n */\nexport function updateDictionaryWithId<T extends Record<string, any>>(\n dict: Record<string, T>,\n): Record<string, T & { id: string }> {\n return Object.entries(dict).reduce(\n (acc, [id, value]) => {\n acc[id] = {\n id,\n ...value,\n };\n return acc;\n },\n {} as Record<string, T & { id: string }>,\n );\n}\n","export const isObject = (\n val: unknown,\n): val is Record<string | symbol, unknown> =>\n val !== null && typeof val === 'object' && !Array.isArray(val);\n\nexport function isObjectEmpty(\n val: unknown,\n): val is Record<string | symbol, unknown> {\n return isObject(val) && Object.keys(val).length === 0;\n}\n\nexport const objectToString = Object.prototype.toString;\nexport const toTypeString = (value: unknown): string =>\n objectToString.call(value);\n\n// eslint-disable-next-line prefer-destructuring\nexport const isArray = Array.isArray;\nexport const isMap = (val: unknown): val is Map<any, any> =>\n toTypeString(val) === '[object Map]';\nexport const isSet = (val: unknown): val is Set<any> =>\n toTypeString(val) === '[object Set]';\n\nexport const isDate = (val: unknown): val is Date => val instanceof Date;\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const isFunction = (val: unknown): val is Function =>\n typeof val === 'function';\nexport const isString = (val: unknown): val is string =>\n typeof val === 'string';\nexport const isNumber = (val: unknown): val is number =>\n typeof val === 'number';\nexport const isSymbol = (val: unknown): val is symbol =>\n typeof val === 'symbol';\n\nexport const isPromise = <T = any>(val: unknown): val is Promise<T> => {\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\n\nexport const toRawType = (value: unknown): string => {\n // extract \"RawType\" from strings like \"[object RawType]\"\n return toTypeString(value).slice(8, -1);\n};\n\nexport const isPlainObject = (val: unknown): val is Record<string, unknown> =>\n toTypeString(val) === '[object Object]';\n\nexport const isIntegerKey = (key: unknown): boolean =>\n isString(key) &&\n key !== 'NaN' &&\n key[0] !== '-' &&\n `${parseInt(key, 10)}` === key;\n"]}
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/paths.ts"],"names":["getFileNameFromPath","__name","path","parts","parts2"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/paths.ts"],"names":["getFileNameFromPath","__name","path","parts","parts2"],"mappings":"8FASO,IAAMA,CAAAA,CAAsBC,EAACC,CAAAA,EAAyB,CAC3D,GAAI,CACF,GAAI,CAACA,CAAAA,CAAM,OAAO,GAElB,IAAMC,CAAAA,CAAQD,EAAK,KAAA,CAAM,OAAO,EAI1BE,CAAAA,CAFWD,CAAAA,CAAMA,CAAAA,CAAM,MAAA,CAAS,CAAC,CAAA,CAEf,MAAM,GAAG,CAAA,CAEjC,OAAIC,CAAAA,CAAO,MAAA,GAAW,EAAUA,CAAAA,CAAO,CAAC,EAEjCA,CAAAA,CAAO,KAAA,CAAM,EAAG,EAAE,CAAA,CAAE,KAAK,GAAG,CACrC,MAAY,CACV,OAAOF,CACT,CACF,CAAA,CAhBmC,qBAAA","file":"paths.js","sourcesContent":["/**\n * @fileoverview Paths\n * This provides utilities for working with file paths.\n * It may have things that could be from Node.js's `path` module but that's b/c it's for browser usage.\n */\n\n/**\n * Gets the file name from a path string, similar to Node's path.parse().name\n */\nexport const getFileNameFromPath = (path: string): string => {\n try {\n if (!path) return '';\n // Split on forward or back slashes\n const parts = path.split(/[/\\\\]/);\n // Get last part\n const fileName = parts[parts.length - 1];\n // Remove extension if exists\n const parts2 = fileName.split('.');\n // If only one part, return it\n if (parts2.length === 1) return parts2[0];\n // If multiple parts, return all except last\n return parts2.slice(0, -1).join('.');\n } catch (_) {\n return path;\n }\n};\n"]}
|
package/dist/paths.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/paths.ts"],"names":["getFileNameFromPath","__name","path","parts","parts2"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/paths.ts"],"names":["getFileNameFromPath","__name","path","parts","parts2"],"mappings":"iFASO,IAAMA,CAAAA,CAAsBC,EAACC,CAAAA,EAAyB,CAC3D,GAAI,CACF,GAAI,CAACA,CAAAA,CAAM,OAAO,GAElB,IAAMC,CAAAA,CAAQD,EAAK,KAAA,CAAM,OAAO,EAI1BE,CAAAA,CAFWD,CAAAA,CAAMA,CAAAA,CAAM,MAAA,CAAS,CAAC,CAAA,CAEf,MAAM,GAAG,CAAA,CAEjC,OAAIC,CAAAA,CAAO,MAAA,GAAW,EAAUA,CAAAA,CAAO,CAAC,EAEjCA,CAAAA,CAAO,KAAA,CAAM,EAAG,EAAE,CAAA,CAAE,KAAK,GAAG,CACrC,MAAY,CACV,OAAOF,CACT,CACF,CAAA,CAhBmC,qBAAA","file":"paths.mjs","sourcesContent":["/**\n * @fileoverview Paths\n * This provides utilities for working with file paths.\n * It may have things that could be from Node.js's `path` module but that's b/c it's for browser usage.\n */\n\n/**\n * Gets the file name from a path string, similar to Node's path.parse().name\n */\nexport const getFileNameFromPath = (path: string): string => {\n try {\n if (!path) return '';\n // Split on forward or back slashes\n const parts = path.split(/[/\\\\]/);\n // Get last part\n const fileName = parts[parts.length - 1];\n // Remove extension if exists\n const parts2 = fileName.split('.');\n // If only one part, return it\n if (parts2.length === 1) return parts2[0];\n // If multiple parts, return all except last\n return parts2.slice(0, -1).join('.');\n } catch (_) {\n return path;\n }\n};\n"]}
|
package/dist/strings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/ts-toolbelt@9.6.0/node_modules/ts-toolbelt/out/index.js","../src/strings.ts","../src/js-env.ts","../src/type-tools.ts"],"names":["require_out","__commonJSMin","isNode","cssKebabCase","__name","str","kebabCase","cssVarName","name","escapeRegEx","string","containsString","haystack","needle","needleNormalized","capitalizeFirstLetter","upperFirst","isFirstLetterCapital","upperCamelCase","camelCase","pascalCase","base64ToString","b64","stringToBase64","isBase64","src","s","stringHasSpaces","removeNpmScope","pkgName","isUrl","url","emailMatcher","isEmail","email","getDomainFromEmail","decodeBasicAuth","auth","username","password","parseNumberWithUnit","value","stringValue","unitRegex","match","numberValue","unit","unitIndex","startsWithLetter","removeWrappingQuotes","getShortName","default","nameParts","shortNameParts","part","key"],"mappings":"mnBAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,UAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAAA,CAAAC,CAAAA,CAAAA,CAAA,ICAA,EAAA,CAAA,KCcaC,CACX,CAAA,OAAO,OAAY,CAAA,GAAA,EACnB,OAAQ,CAAA,QAAA,EAAY,IACpB,EAAA,OAAA,CAAQ,SAAS,IAAQ,EAAA,KCCC,CAZ5B,CAAA,CAAA,EAAA,EFUO,IAAMC,CAAeC,CAAAA,CAAAA,CAACC,GAC3BA,CAAI,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAIC,CAAAA,kBAAS,CAAE,CAAA,IAAA,CAAK,GAAG,CADZ,CAAA,cAAA,CAAA,CAEfC,CAAaH,CAAAA,CAAAA,CAACI,CAAiB,EAAA,CAAA,EAAA,EAAKL,CAAaK,CAAAA,CAAI,CAAC,CAAzC,CAAA,CAAA,YAAA,EAMnB,SAASC,CAAAA,CAAYC,CAAwB,CAAA,CAClD,OAAOA,CAAAA,CAAO,QAAQ,oBAAsB,CAAA,MAAM,CACpD,CAFgBN,CAAAK,CAAAA,CAAAA,CAAA,aAYT,CAAA,CAAA,SAASE,EAAeC,CAAkBC,CAAAA,CAAAA,CAAyB,CACxE,IAAMC,CAAmBL,CAAAA,CAAAA,CAAYI,CAAM,CAAA,CAAE,aAE7C,CAAA,OAD2BJ,CAAYG,CAAAA,CAAQ,CAAE,CAAA,WAAA,EACvB,CAAA,MAAA,CAAOE,CAAgB,CAAM,GAAA,EACzD,CAJgBV,CAAAA,CAAAO,CAAA,CAAA,gBAAA,CAAA,CAMT,SAASI,CAAAA,CAAsBL,EAAwB,CAC5D,OAAOM,kBAAWN,CAAAA,CAAM,CAC1B,CAFgBN,CAAAW,CAAAA,CAAAA,CAAA,yBAIT,SAASE,CAAAA,CAAqBZ,CAAsB,CAAA,CACzD,OAAI,CAACA,CAAOA,EAAAA,CAAAA,CAAI,SAAW,CAAU,CAAA,KAAA,CAC9BA,CAAI,CAAA,CAAC,CAAMA,GAAAA,CAAAA,CAAI,CAAC,CAAA,CAAE,aAC3B,CAHgBD,CAAAa,CAAAA,CAAAA,CAAA,sBAST,CAAA,CAAA,SAASC,CAAeb,CAAAA,CAAAA,CAAqB,CAClD,OAAOU,CAAAA,CAAsBI,kBAAUd,CAAAA,CAAG,CAAC,CAC7C,CAFgBD,CAAAA,CAAAc,EAAA,gBAGT,CAAA,CAAA,IAAME,CAAaF,CAAAA,EAEnB,SAASG,CAAAA,CAAeC,CAAqB,CAAA,CAClD,OAAOpB,CAAS,CAAA,MAAA,CAAO,IAAKoB,CAAAA,CAAAA,CAAK,QAAQ,CAAA,CAAE,QAAS,EAAA,CAAI,KAAKA,CAAG,CAClE,CAFgBlB,CAAAA,CAAAiB,CAAA,CAAA,gBAAA,CAAA,CAIT,SAASE,CAAAA,CAAeb,EAAwB,CACrD,OAAOR,CAAS,CAAA,MAAA,CAAO,IAAKQ,CAAAA,CAAM,CAAE,CAAA,QAAA,CAAS,QAAQ,CAAI,CAAA,IAAA,CAAKA,CAAM,CACtE,CAFgBN,CAAAA,CAAAmB,CAAA,CAAA,gBAAA,CAAA,CAOT,SAASC,EAASC,CAAAA,CAAAA,CAA6B,CACpD,GAAI,OAAOA,CAAAA,EAAQ,QAAU,CAAA,OAAO,OACpC,IAAMC,CAAAA,CAAID,CAAI,CAAA,OAAA,CAAQ,MAAQ,CAAA,EAAE,CAAE,CAAA,OAAA,CAAQ,UAAW,EAAE,CAAA,CACvD,OAAO,CAAC,kBAAmB,CAAA,IAAA,CAAKC,CAAC,CAAA,EAAK,CAAC,mBAAoB,CAAA,IAAA,CAAKA,CAAC,CACnE,CAJgBtB,CAAAA,CAAAoB,EAAA,CAAA,UAAA,CAAA,CAMT,SAASG,EAAgBjB,CAAAA,CAAAA,CAAyB,CACvD,OAAOA,CAAO,CAAA,OAAA,CAAQ,GAAG,CAAA,GAAM,EACjC,CAFgBN,CAAAA,CAAAuB,EAAA,CAAA,iBAAA,CAAA,CAST,SAASC,EAAAA,CAAeC,CAAyB,CAAA,CACtD,GAAI,CAACA,CAAAA,CAAQ,UAAW,CAAA,GAAG,CAAK,EAAA,CAACA,CAAQ,CAAA,QAAA,CAAS,GAAG,CACnD,CAAA,OAAOA,CAET,CAAA,GAAM,EAAGrB,CAAI,CAAA,CAAIqB,EAAQ,KAAM,CAAA,GAAG,CAClC,CAAA,OAAKrB,CAAaqB,EAAAA,CAEpB,CAPgBzB,CAAAA,CAAAwB,GAAA,gBAST,CAAA,CAAA,SAASE,EAAMC,CAAAA,CAAAA,CAA6B,CACjD,GAAI,OAAOA,CAAAA,EAAQ,SAAU,OAAO,MAAA,CACpC,GAAI,CACS,IAAI,GAAA,CAAIA,CAAG,EACtB,OAAO,KACT,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CARgB3B,CAAA0B,CAAAA,EAAAA,CAAA,OAUhB,CAAA,CAAA,IAAME,CACJ,CAAA,sJAAA,CAKWC,CAAU7B,CAAAA,CAAAA,CAAC8B,GACtB,OAAOA,CAAAA,EAAU,QAAYA,EAAAA,CAAAA,CAAM,MAAU,EAAA,GAAA,EAAOF,CAAa,CAAA,IAAA,CAAKE,CAAK,CADtD,CAAA,SAAA,CAAA,CAMVC,EAAqB/B,CAAAA,CAAAA,CAAC8B,CACjCD,EAAAA,CAAAA,CAAQC,CAAK,CAAA,CAAIA,EAAM,SAAUA,CAAAA,CAAAA,CAAM,OAAQ,CAAA,GAAG,CAAI,CAAA,CAAC,CAAI,CAAA,IAAA,CAD3B,sBAMrBE,EAAkBhC,CAAAA,CAAAA,CAC7BiC,CAC2C,EAAA,CAC3C,GAAM,CAACC,CAAUC,CAAAA,CAAQ,EAAIlB,CAAegB,CAAAA,CAAI,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA,CAC3D,OAAO,CAAE,SAAAC,CAAU,CAAA,QAAA,CAAAC,CAAS,CAC9B,CAL+B,CAAA,iBAAA,EAUxB,SAASC,EAAAA,CAAoBC,EAGlC,CACA,IAAMC,CAAc,CAAA,MAAA,CAAOD,CAAK,CAAA,CAAE,IAAK,EAAA,CACjCE,EAAY,eACZC,CAAAA,CAAAA,CAAQF,CAAY,CAAA,KAAA,CAAMC,CAAS,CAAA,CAErCE,CACAC,CAAAA,CAAAA,CAEJ,GAAIF,CAAO,CAAA,CACT,IAAMG,CAAAA,CAAYH,CAAM,CAAA,KAAA,CACxBC,CAAc,CAAA,UAAA,CAAWH,EAAY,KAAM,CAAA,CAAA,CAAGK,CAAS,CAAC,CACxD,CAAA,CAACD,CAAI,CAAA,CAAIF,EACX,CACEC,KAAAA,CAAAA,CAAc,UAAWH,CAAAA,CAAW,CACpCI,CAAAA,CAAAA,CAAO,EAET,CAAA,GAAI,OAAO,KAAMD,CAAAA,CAAW,CAC1B,CAAA,MAAM,IAAI,KAAA,CAAM,CAAgCJ,6BAAAA,EAAAA,CAAK,EAAE,CAGzD,CAAA,OAAO,CAAE,KAAA,CAAOI,CAAa,CAAA,IAAA,CAAAC,CAAK,CACpC,CAxBgB1C,CAAAoC,CAAAA,EAAAA,CAAA,qBA6BT,CAAA,CAAA,SAASQ,EAAiB3C,CAAAA,CAAAA,CAAsB,CACrD,OAAO,YAAY,IAAKA,CAAAA,CAAG,CAC7B,CAFgBD,CAAA4C,CAAAA,EAAAA,CAAA,kBAOT,CAAA,CAAA,SAASC,GAAqB5C,CAAqB,CAAA,CACxD,OAAI,CAACA,CAAO,EAAA,OAAOA,CAAQ,EAAA,QAAA,CAAiBA,EAE1CA,CAEG,CAAA,OAAA,CAAQ,UAAY,CAAA,IAAI,CAExB,CAAA,OAAA,CAAQ,UAAY,CAAA,IAAI,CAE/B,CATgBD,CAAAA,CAAA6C,EAAA,CAAA,sBAAA,CAAA,CAkBHC,IAAAA,EAAAA,CAAe9C,CAACI,CAAAA,CAAAA,EAAiB,CAC5C,GAAI,CAACA,CAAQ2C,EAAAA,kBAAAA,CAAQ3C,CAAI,CAAA,CAAG,OAE5B,GAAI,CAACA,CAAK,CAAA,QAAA,CAAS,GAAG,CAAA,CACpB,OAAOA,CAAAA,CAGT,IAAM4C,CAAAA,CAAY5C,EAAK,KAAM,CAAA,GAAG,CAC1B6C,CAAAA,CAAAA,CAA2B,EAAC,CAElC,OAAAD,CAAAA,CAAU,QAASE,CAAS,EAAA,CAC1B,GAAM,CAACC,CAAKd,CAAAA,CAAK,CAAIa,CAAAA,CAAAA,CAAK,MAAM,GAAG,CAAA,CAEnC,GAAI,EAAA,CAACb,CAAS,EAAA,CAAC,OAAS,CAAA,KAAA,CAAO,IAAI,CAAE,CAAA,QAAA,CAASA,CAAK,CAAA,CAAA,CAGnD,OAAI,CAAC,MAAQ,CAAA,IAAA,CAAM,KAAK,CAAE,CAAA,QAAA,CAASA,CAAK,CAAA,CAC/BY,CAAe,CAAA,IAAA,CAAKE,CAAG,CAAA,CAEzBF,EAAe,IAAKZ,CAAAA,CAAK,CAClC,CAAC,CACMY,CAAAA,CAAAA,CAAe,IAAK,CAAA,IAAI,CACjC,CAtB4B,CAAA,cAAA","file":"strings.js","sourcesContent":["","import camelCase from 'lodash/camelCase.js';\nimport kebabCase from 'just-kebab-case'; // Why not lodash/kebabCase? https://github.com/lodash/lodash/issues/2843#issuecomment-262255270\nimport upperFirst from 'lodash/upperFirst.js';\nimport { isNode } from './js-env';\nimport { isEmpty } from './type-tools';\n\nexport { default as snakeCase } from 'lodash/snakeCase.js';\nexport { default as capitalize } from 'lodash/capitalize.js';\nexport { camelCase, kebabCase, kebabCase as paramCase };\n\n/**\n * Lower and split on dots, that's it. Do NOT split standalone strings on\n * numbers, caps, etc. Note that we split/join specifically to process each\n * segment of a token name, ie if `color.primary`, we process 'color' and 'primary'\n * individually\n */\nexport const cssKebabCase = (str: string) =>\n str.split('.').map(kebabCase).join('-');\nexport const cssVarName = (name: string) => `--${cssKebabCase(name)}`;\n\n/**\n * This function takes a string and escapes any regex related characters\n * Intended to be used to \"cleanse\" user input of regex that causes failures when using string operators\n */\nexport function escapeRegEx(string: string): string {\n return string.replace(/[*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\n/**\n * Basic \"fuzzy\" search of one string within another.\n * Both the haystack and needle are escaped for regex characters, then converted to lower case\n * If the needle appears in the haystack, will return true, otherwise returns false\n * @param {string} haystack - string to seach within\n * @param {string} needle - string being searched for\n * @returns {boolean}\n */\nexport function containsString(haystack: string, needle: string): boolean {\n const needleNormalized = escapeRegEx(needle).toLowerCase();\n const haystackNormalized = escapeRegEx(haystack).toLowerCase();\n return haystackNormalized.search(needleNormalized) !== -1;\n}\n\nexport function capitalizeFirstLetter(string: string): string {\n return upperFirst(string);\n}\n\nexport function isFirstLetterCapital(str: string): boolean {\n if (!str || str.length === 0) return false;\n return str[0] === str[0].toUpperCase();\n}\n\n/**\n * Transform into a string of capitalized words without separators. How React Component names are transformed.\n * aka PascalCase\n */\nexport function upperCamelCase(str: string): string {\n return capitalizeFirstLetter(camelCase(str));\n}\nexport const pascalCase = upperCamelCase;\n\nexport function base64ToString(b64: string): string {\n return isNode ? Buffer.from(b64, 'base64').toString() : atob(b64);\n}\n\nexport function stringToBase64(string: string): string {\n return isNode ? Buffer.from(string).toString('base64') : btoa(string);\n}\n\n/**\n * check if a value is a valid Base64 string\n */\nexport function isBase64(src: unknown): src is string {\n if (typeof src !== 'string') return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n}\n\nexport function stringHasSpaces(string: string): boolean {\n return string.indexOf(' ') !== -1;\n}\n\n/**\n * Removes the NPM \"@scope\" in pkg names\n * `@scope/name` => `name`\n * `name` => `name`\n */\nexport function removeNpmScope(pkgName: string): string {\n if (!pkgName.startsWith('@') && !pkgName.includes('/')) {\n return pkgName;\n }\n const [, name] = pkgName.split('/');\n if (!name) return pkgName;\n return name;\n}\n\nexport function isUrl(url: unknown): url is string {\n if (typeof url !== 'string') return false;\n try {\n const _u = new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n// RFC 5322 spec, https://emailregex.com/\nconst emailMatcher =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/**\n * Check that email is < 320 chars (according to spec), then if passes regex.\n * @link https://www.rfc-editor.org/errata/eid1690#:~:text=It%20should%20say%3A-,In%20addition%20to%20restrictions%20on%20syntax%2C%20there%20is%20a%20length,total%20length%20of%20320%20characters.\n */\nexport const isEmail = (email: unknown): email is string =>\n typeof email === 'string' && email.length <= 320 && emailMatcher.test(email);\n\n/**\n * Returns \"knapsack.cloud\" from \"bloom@knapsack.cloud\", if valid email\n */\nexport const getDomainFromEmail = (email: string): string | null =>\n isEmail(email) ? email.substring(email.indexOf('@') + 1) : null;\n\n/**\n * Basic auth headers are username:password in base64, decode and compare\n */\nexport const decodeBasicAuth = (\n auth: string,\n): { username: string; password: string } => {\n const [username, password] = base64ToString(auth).split(':');\n return { username, password };\n};\n\n/**\n * Parse a string that may contain a unit, like \"10px\" or \"10%\"\n */\nexport function parseNumberWithUnit(value: string | number): {\n value: number;\n unit?: string;\n} {\n const stringValue = String(value).trim();\n const unitRegex = /([a-zA-Z%])+$/;\n const match = stringValue.match(unitRegex);\n\n let numberValue: number;\n let unit: string;\n\n if (match) {\n const unitIndex = match.index;\n numberValue = parseFloat(stringValue.slice(0, unitIndex));\n [unit] = match;\n } else {\n numberValue = parseFloat(stringValue);\n unit = '';\n }\n if (Number.isNaN(numberValue)) {\n throw new Error(`Invalid value, not a number: ${value}`);\n }\n\n return { value: numberValue, unit };\n}\n\n/**\n * Check if a strings first character is a letter\n */\nexport function startsWithLetter(str: string): boolean {\n return /^[a-zA-Z]/.test(str);\n}\n\n/**\n * Removes wrapping single or double quotes from a string\n */\nexport function removeWrappingQuotes(str: string): string {\n if (!str || typeof str !== 'string') return str;\n return (\n str\n // remove double quotes\n .replace(/^\"(.*)\"$/, '$1')\n // remove single quotes\n .replace(/^'(.*)'$/, '$1')\n );\n}\n\n/**\n * Transforms a name string containing key-value pairs into a shortened version.\n *\n * Example:\n * Input: \"mode=dark, status=on, debug=false\"\n * Output: \"dark, status\"\n */\nexport const getShortName = (name: string) => {\n if (!name || isEmpty(name)) return;\n\n if (!name.includes('=')) {\n return name;\n }\n\n const nameParts = name.split(',');\n const shortNameParts: string[] = [];\n\n nameParts.forEach((part) => {\n const [key, value] = part.split('=');\n\n if (!value || ['false', 'off', 'no'].includes(value)) {\n return;\n }\n if (['true', 'on', 'yes'].includes(value)) {\n return shortNameParts.push(key);\n }\n return shortNameParts.push(value);\n });\n return shortNameParts.join(', ');\n};\n","/* global window self */\n\n// Thanks! https://github.com/flexdinesh/browser-or-node/blob/master/src/index.js\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n/* eslint-disable no-restricted-globals */\nexport const isWebWorker =\n typeof self === 'object' &&\n self.constructor &&\n self.constructor.name === 'DedicatedWorkerGlobalScope';\n/* eslint-enable no-restricted-globals */\n\nexport const isNode =\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null;\n\n/**\n * @see https://github.com/jsdom/jsdom/releases/tag/12.0.0\n * @see https://github.com/jsdom/jsdom/issues/1537\n */\n/* eslint-disable no-undef */\nexport const isJsDom = () =>\n (typeof window !== 'undefined' && window.name === 'nodejs') ||\n navigator.userAgent.includes('Node.js') ||\n navigator.userAgent.includes('jsdom');\n","import type { FC, Component } from 'react';\nimport type {\n PackageJson as PackageJsonBase,\n TsConfigJson as TsConfigJsonBase,\n} from 'type-fest';\n\nexport { expectNever, expectType } from 'ts-expect';\nexport type { TypeEqual, TypeOf } from 'ts-expect';\nexport type {\n Except,\n Simplify,\n Merge,\n SetRequired,\n SetOptional,\n AsyncReturnType,\n PartialDeep,\n} from 'type-fest';\n// https://github.com/millsp/ts-toolbelt\nexport * as TsToolbelt from 'ts-toolbelt';\nexport { default as isEmpty } from 'lodash/isEmpty.js';\n\n/**\n * Turns `() => Promise<string>` into `string`\n */\nexport type PromiseResult<T> = T extends (...args: unknown[]) => unknown\n ? Awaited<ReturnType<T>>\n : never;\n\n/**\n * Opposite of `keyof`\n * @example\n * type Foo = { a: string; b: number; c: boolean };\n * type Bar = ValueOf<Foo>; // string | number | boolean\n */\nexport type ValueOf<T> = T[keyof T];\n\nexport type GetValueOrAsyncReturnValue<X> = X extends (\n ...args: unknown[]\n) => unknown\n ? Awaited<X>\n : X;\n\n/**\n * @template V would get `string` if passed in either `string` or `() => Promise<string>`\n */\nexport type ValueOrGetValue<V> = V extends (\n ...args: unknown[]\n) => Promise<infer X>\n ? X\n : V;\n\n/**\n * Typesafe `Object.keys()` that returns better than `string[]`\n */\nexport function keys<O extends Record<string, unknown>>(\n obj: O,\n): Array<keyof O> {\n return Object.keys(obj) as Array<keyof O>;\n}\n\n/**\n * Typesafe `Object.entries()` that retains the keys actual string value instead of just `string`\n */\nexport function entries<O extends Record<string, unknown>>(\n obj: O,\n): Array<[keyof O, O[keyof O]]> {\n return Object.entries(obj) as Array<[keyof O, O[keyof O]]>;\n}\n\n/**\n * Typesafe way to check if a key is in an object\n */\nexport function isObjKey<T extends Record<string | number | symbol, unknown>>(\n key: string | number | symbol,\n obj: T,\n): key is keyof T {\n return key in obj;\n}\n\n/**\n * Check whether a value is defined (non-nullable), meaning it is neither `null`\n * or `undefined`. This can be useful as a type-guard, as for example:\n * `[1, null].filter(Boolean)` does not always type-guard correctly.\n * @example\n * ```\n * import {isDefined} from 'ts-extras';\n * [1, null, 2, undefined].filter(isDefined); // => [1, 2]\n *\n```\n*/\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Get Props from a React Component\n * @example\n * type Props = PropsFrom<typeof Button>;\n */\nexport type PropsFrom<TheComponent> = TheComponent extends FC<infer Props>\n ? Props\n : TheComponent extends Component<infer Props>\n ? Props\n : never;\n\nexport interface PackageJson extends PackageJsonBase, Record<string, unknown> {\n scripts?: {\n [scriptName: string]: string;\n };\n exports?: {\n [key: string]: PackageJsonBase.Exports;\n };\n}\n\nexport interface TsConfigJson\n extends TsConfigJsonBase,\n Record<string, unknown> {}\n\n/**\n * Expands object types recursively\n * @link https://stackoverflow.com/a/57683652\n * @deprecated Use `Simplify` instead\n */\nexport type ExpandRecursively<T> = T extends Record<string, unknown>\n ? T extends infer O\n ? { [K in keyof O]: ExpandRecursively<O[K]> }\n : never\n : T;\n\n/**\n * Workaround to allow typed info to work with Object.entries\n */\nexport type Entries<T> = {\n [K in keyof T]: [K, T[K]];\n}[keyof T][];\n\ndeclare const __brandKey: unique symbol;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/ts-toolbelt@9.6.0/node_modules/ts-toolbelt/out/index.js","../src/js-env.ts","../src/type-tools.ts","../src/strings.ts"],"names":["require_out","__commonJSMin","isNode","cssKebabCase","__name","str","kebabCase","cssVarName","name","escapeRegEx","string","containsString","haystack","needle","needleNormalized","capitalizeFirstLetter","upperFirst","isFirstLetterCapital","upperCamelCase","camelCase","pascalCase","base64ToString","b64","stringToBase64","isBase64","src","s","stringHasSpaces","removeNpmScope","pkgName","isUrl","url","emailMatcher","isEmail","email","getDomainFromEmail","decodeBasicAuth","auth","username","password","parseNumberWithUnit","value","stringValue","unitRegex","match","numberValue","unit","unitIndex","startsWithLetter","removeWrappingQuotes","getShortName","default","nameParts","shortNameParts","part","key"],"mappings":"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","file":"strings.js","sourcesContent":["","/* global window self */\n\n// Thanks! https://github.com/flexdinesh/browser-or-node/blob/master/src/index.js\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n/* eslint-disable no-restricted-globals */\nexport const isWebWorker =\n typeof self === 'object' &&\n self.constructor &&\n self.constructor.name === 'DedicatedWorkerGlobalScope';\n/* eslint-enable no-restricted-globals */\n\nexport const isNode =\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null;\n\n/**\n * @see https://github.com/jsdom/jsdom/releases/tag/12.0.0\n * @see https://github.com/jsdom/jsdom/issues/1537\n */\n/* eslint-disable no-undef */\nexport const isJsDom = () =>\n (typeof window !== 'undefined' && window.name === 'nodejs') ||\n navigator.userAgent.includes('Node.js') ||\n navigator.userAgent.includes('jsdom');\n","import type { FC, Component } from 'react';\nimport type {\n PackageJson as PackageJsonBase,\n TsConfigJson as TsConfigJsonBase,\n} from 'type-fest';\n\nexport { expectNever, expectType } from 'ts-expect';\nexport type { TypeEqual, TypeOf } from 'ts-expect';\nexport type {\n Except,\n Simplify,\n Merge,\n SetRequired,\n SetOptional,\n AsyncReturnType,\n PartialDeep,\n} from 'type-fest';\n// https://github.com/millsp/ts-toolbelt\nexport * as TsToolbelt from 'ts-toolbelt';\nexport { default as isEmpty } from 'lodash/isEmpty.js';\n\n/**\n * Turns `() => Promise<string>` into `string`\n */\nexport type PromiseResult<T> = T extends (...args: unknown[]) => unknown\n ? Awaited<ReturnType<T>>\n : never;\n\n/**\n * Opposite of `keyof`\n * @example\n * type Foo = { a: string; b: number; c: boolean };\n * type Bar = ValueOf<Foo>; // string | number | boolean\n */\nexport type ValueOf<T> = T[keyof T];\n\nexport type GetValueOrAsyncReturnValue<X> = X extends (\n ...args: unknown[]\n) => unknown\n ? Awaited<X>\n : X;\n\n/**\n * @template V would get `string` if passed in either `string` or `() => Promise<string>`\n */\nexport type ValueOrGetValue<V> = V extends (\n ...args: unknown[]\n) => Promise<infer X>\n ? X\n : V;\n\n/**\n * Typesafe `Object.keys()` that returns better than `string[]`\n */\nexport function keys<O extends Record<string, unknown>>(\n obj: O,\n): Array<keyof O> {\n return Object.keys(obj) as Array<keyof O>;\n}\n\n/**\n * Typesafe `Object.entries()` that retains the keys actual string value instead of just `string`\n */\nexport function entries<O extends Record<string, unknown>>(\n obj: O,\n): Array<[keyof O, O[keyof O]]> {\n return Object.entries(obj) as Array<[keyof O, O[keyof O]]>;\n}\n\n/**\n * Typesafe way to check if a key is in an object\n */\nexport function isObjKey<T extends Record<string | number | symbol, unknown>>(\n key: string | number | symbol,\n obj: T,\n): key is keyof T {\n return key in obj;\n}\n\n/**\n * Check whether a value is defined (non-nullable), meaning it is neither `null`\n * or `undefined`. This can be useful as a type-guard, as for example:\n * `[1, null].filter(Boolean)` does not always type-guard correctly.\n * @example\n * ```\n * import {isDefined} from 'ts-extras';\n * [1, null, 2, undefined].filter(isDefined); // => [1, 2]\n *\n```\n*/\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Get Props from a React Component\n * @example\n * type Props = PropsFrom<typeof Button>;\n */\nexport type PropsFrom<TheComponent> =\n TheComponent extends FC<infer Props>\n ? Props\n : TheComponent extends Component<infer Props>\n ? Props\n : never;\n\nexport interface PackageJson extends PackageJsonBase, Record<string, unknown> {\n scripts?: {\n [scriptName: string]: string;\n };\n exports?: {\n [key: string]: PackageJsonBase.Exports;\n };\n}\n\nexport interface TsConfigJson\n extends TsConfigJsonBase, Record<string, unknown> {}\n\n/**\n * Expands object types recursively\n * @link https://stackoverflow.com/a/57683652\n * @deprecated Use `Simplify` instead\n */\nexport type ExpandRecursively<T> =\n T extends Record<string, unknown>\n ? T extends infer O\n ? { [K in keyof O]: ExpandRecursively<O[K]> }\n : never\n : T;\n\n/**\n * Workaround to allow typed info to work with Object.entries\n */\nexport type Entries<T> = {\n [K in keyof T]: [K, T[K]];\n}[keyof T][];\n\ndeclare const __brandKey: unique symbol;\n","import camelCase from 'lodash/camelCase.js';\nimport kebabCase from 'just-kebab-case'; // Why not lodash/kebabCase? https://github.com/lodash/lodash/issues/2843#issuecomment-262255270\nimport upperFirst from 'lodash/upperFirst.js';\nimport { isNode } from './js-env';\nimport { isEmpty } from './type-tools';\n\nexport { default as snakeCase } from 'lodash/snakeCase.js';\nexport { default as capitalize } from 'lodash/capitalize.js';\nexport { camelCase, kebabCase, kebabCase as paramCase };\n\n/**\n * Lower and split on dots, that's it. Do NOT split standalone strings on\n * numbers, caps, etc. Note that we split/join specifically to process each\n * segment of a token name, ie if `color.primary`, we process 'color' and 'primary'\n * individually\n */\nexport const cssKebabCase = (str: string) =>\n str.split('.').map(kebabCase).join('-');\nexport const cssVarName = (name: string) => `--${cssKebabCase(name)}`;\n\n/**\n * This function takes a string and escapes any regex related characters\n * Intended to be used to \"cleanse\" user input of regex that causes failures when using string operators\n */\nexport function escapeRegEx(string: string): string {\n return string.replace(/[*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\n/**\n * Basic \"fuzzy\" search of one string within another.\n * Both the haystack and needle are escaped for regex characters, then converted to lower case\n * If the needle appears in the haystack, will return true, otherwise returns false\n * @param {string} haystack - string to seach within\n * @param {string} needle - string being searched for\n * @returns {boolean}\n */\nexport function containsString(haystack: string, needle: string): boolean {\n const needleNormalized = escapeRegEx(needle).toLowerCase();\n const haystackNormalized = escapeRegEx(haystack).toLowerCase();\n return haystackNormalized.search(needleNormalized) !== -1;\n}\n\nexport function capitalizeFirstLetter(string: string): string {\n return upperFirst(string);\n}\n\nexport function isFirstLetterCapital(str: string): boolean {\n if (!str || str.length === 0) return false;\n return str[0] === str[0].toUpperCase();\n}\n\n/**\n * Transform into a string of capitalized words without separators. How React Component names are transformed.\n * aka PascalCase\n */\nexport function upperCamelCase(str: string): string {\n return capitalizeFirstLetter(camelCase(str));\n}\nexport const pascalCase = upperCamelCase;\n\nexport function base64ToString(b64: string): string {\n return isNode ? Buffer.from(b64, 'base64').toString() : atob(b64);\n}\n\nexport function stringToBase64(string: string): string {\n return isNode ? Buffer.from(string).toString('base64') : btoa(string);\n}\n\n/**\n * check if a value is a valid Base64 string\n */\nexport function isBase64(src: unknown): src is string {\n if (typeof src !== 'string') return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n}\n\nexport function stringHasSpaces(string: string): boolean {\n return string.indexOf(' ') !== -1;\n}\n\n/**\n * Removes the NPM \"@scope\" in pkg names\n * `@scope/name` => `name`\n * `name` => `name`\n */\nexport function removeNpmScope(pkgName: string): string {\n if (!pkgName.startsWith('@') && !pkgName.includes('/')) {\n return pkgName;\n }\n const [, name] = pkgName.split('/');\n if (!name) return pkgName;\n return name;\n}\n\nexport function isUrl(url: unknown): url is string {\n if (typeof url !== 'string') return false;\n try {\n const _u = new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n// RFC 5322 spec, https://emailregex.com/\nconst emailMatcher =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/**\n * Check that email is < 320 chars (according to spec), then if passes regex.\n * @link https://www.rfc-editor.org/errata/eid1690#:~:text=It%20should%20say%3A-,In%20addition%20to%20restrictions%20on%20syntax%2C%20there%20is%20a%20length,total%20length%20of%20320%20characters.\n */\nexport const isEmail = (email: unknown): email is string =>\n typeof email === 'string' && email.length <= 320 && emailMatcher.test(email);\n\n/**\n * Returns \"knapsack.cloud\" from \"bloom@knapsack.cloud\", if valid email\n */\nexport const getDomainFromEmail = (email: string): string | null =>\n isEmail(email) ? email.substring(email.indexOf('@') + 1) : null;\n\n/**\n * Basic auth headers are username:password in base64, decode and compare\n */\nexport const decodeBasicAuth = (\n auth: string,\n): { username: string; password: string } => {\n const [username, password] = base64ToString(auth).split(':');\n return { username, password };\n};\n\n/**\n * Parse a string that may contain a unit, like \"10px\" or \"10%\"\n */\nexport function parseNumberWithUnit(value: string | number): {\n value: number;\n unit?: string;\n} {\n const stringValue = String(value).trim();\n const unitRegex = /([a-zA-Z%])+$/;\n const match = stringValue.match(unitRegex);\n\n let numberValue: number;\n let unit: string;\n\n if (match) {\n const unitIndex = match.index;\n numberValue = parseFloat(stringValue.slice(0, unitIndex));\n [unit] = match;\n } else {\n numberValue = parseFloat(stringValue);\n unit = '';\n }\n if (Number.isNaN(numberValue)) {\n throw new Error(`Invalid value, not a number: ${value}`);\n }\n\n return { value: numberValue, unit };\n}\n\n/**\n * Check if a strings first character is a letter\n */\nexport function startsWithLetter(str: string): boolean {\n return /^[a-zA-Z]/.test(str);\n}\n\n/**\n * Removes wrapping single or double quotes from a string\n */\nexport function removeWrappingQuotes(str: string): string {\n if (!str || typeof str !== 'string') return str;\n return (\n str\n // remove double quotes\n .replace(/^\"(.*)\"$/, '$1')\n // remove single quotes\n .replace(/^'(.*)'$/, '$1')\n );\n}\n\n/**\n * Transforms a name string containing key-value pairs into a shortened version.\n *\n * Example:\n * Input: \"mode=dark, status=on, debug=false\"\n * Output: \"dark, status\"\n */\nexport const getShortName = (name: string) => {\n if (!name || isEmpty(name)) return;\n\n if (!name.includes('=')) {\n return name;\n }\n\n const nameParts = name.split(',');\n const shortNameParts: string[] = [];\n\n nameParts.forEach((part) => {\n const [key, value] = part.split('=');\n\n if (!value || ['false', 'off', 'no'].includes(value)) {\n return;\n }\n if (['true', 'on', 'yes'].includes(value)) {\n return shortNameParts.push(key);\n }\n return shortNameParts.push(value);\n });\n return shortNameParts.join(', ');\n};\n"]}
|
package/dist/strings.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/ts-toolbelt@9.6.0/node_modules/ts-toolbelt/out/index.js","../src/strings.ts","../src/js-env.ts","../src/type-tools.ts"],"names":["require_out","__commonJSMin","isNode","cssKebabCase","__name","str","kebabCase","cssVarName","name","escapeRegEx","string","containsString","haystack","needle","needleNormalized","capitalizeFirstLetter","upperFirst","isFirstLetterCapital","upperCamelCase","camelCase","pascalCase","base64ToString","b64","stringToBase64","isBase64","src","s","stringHasSpaces","removeNpmScope","pkgName","isUrl","url","emailMatcher","isEmail","email","getDomainFromEmail","decodeBasicAuth","auth","username","password","parseNumberWithUnit","value","stringValue","unitRegex","match","numberValue","unit","unitIndex","startsWithLetter","removeWrappingQuotes","getShortName","default","nameParts","shortNameParts","part","key"],"mappings":"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","file":"strings.mjs","sourcesContent":["","import camelCase from 'lodash/camelCase.js';\nimport kebabCase from 'just-kebab-case'; // Why not lodash/kebabCase? https://github.com/lodash/lodash/issues/2843#issuecomment-262255270\nimport upperFirst from 'lodash/upperFirst.js';\nimport { isNode } from './js-env';\nimport { isEmpty } from './type-tools';\n\nexport { default as snakeCase } from 'lodash/snakeCase.js';\nexport { default as capitalize } from 'lodash/capitalize.js';\nexport { camelCase, kebabCase, kebabCase as paramCase };\n\n/**\n * Lower and split on dots, that's it. Do NOT split standalone strings on\n * numbers, caps, etc. Note that we split/join specifically to process each\n * segment of a token name, ie if `color.primary`, we process 'color' and 'primary'\n * individually\n */\nexport const cssKebabCase = (str: string) =>\n str.split('.').map(kebabCase).join('-');\nexport const cssVarName = (name: string) => `--${cssKebabCase(name)}`;\n\n/**\n * This function takes a string and escapes any regex related characters\n * Intended to be used to \"cleanse\" user input of regex that causes failures when using string operators\n */\nexport function escapeRegEx(string: string): string {\n return string.replace(/[*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\n/**\n * Basic \"fuzzy\" search of one string within another.\n * Both the haystack and needle are escaped for regex characters, then converted to lower case\n * If the needle appears in the haystack, will return true, otherwise returns false\n * @param {string} haystack - string to seach within\n * @param {string} needle - string being searched for\n * @returns {boolean}\n */\nexport function containsString(haystack: string, needle: string): boolean {\n const needleNormalized = escapeRegEx(needle).toLowerCase();\n const haystackNormalized = escapeRegEx(haystack).toLowerCase();\n return haystackNormalized.search(needleNormalized) !== -1;\n}\n\nexport function capitalizeFirstLetter(string: string): string {\n return upperFirst(string);\n}\n\nexport function isFirstLetterCapital(str: string): boolean {\n if (!str || str.length === 0) return false;\n return str[0] === str[0].toUpperCase();\n}\n\n/**\n * Transform into a string of capitalized words without separators. How React Component names are transformed.\n * aka PascalCase\n */\nexport function upperCamelCase(str: string): string {\n return capitalizeFirstLetter(camelCase(str));\n}\nexport const pascalCase = upperCamelCase;\n\nexport function base64ToString(b64: string): string {\n return isNode ? Buffer.from(b64, 'base64').toString() : atob(b64);\n}\n\nexport function stringToBase64(string: string): string {\n return isNode ? Buffer.from(string).toString('base64') : btoa(string);\n}\n\n/**\n * check if a value is a valid Base64 string\n */\nexport function isBase64(src: unknown): src is string {\n if (typeof src !== 'string') return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n}\n\nexport function stringHasSpaces(string: string): boolean {\n return string.indexOf(' ') !== -1;\n}\n\n/**\n * Removes the NPM \"@scope\" in pkg names\n * `@scope/name` => `name`\n * `name` => `name`\n */\nexport function removeNpmScope(pkgName: string): string {\n if (!pkgName.startsWith('@') && !pkgName.includes('/')) {\n return pkgName;\n }\n const [, name] = pkgName.split('/');\n if (!name) return pkgName;\n return name;\n}\n\nexport function isUrl(url: unknown): url is string {\n if (typeof url !== 'string') return false;\n try {\n const _u = new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n// RFC 5322 spec, https://emailregex.com/\nconst emailMatcher =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/**\n * Check that email is < 320 chars (according to spec), then if passes regex.\n * @link https://www.rfc-editor.org/errata/eid1690#:~:text=It%20should%20say%3A-,In%20addition%20to%20restrictions%20on%20syntax%2C%20there%20is%20a%20length,total%20length%20of%20320%20characters.\n */\nexport const isEmail = (email: unknown): email is string =>\n typeof email === 'string' && email.length <= 320 && emailMatcher.test(email);\n\n/**\n * Returns \"knapsack.cloud\" from \"bloom@knapsack.cloud\", if valid email\n */\nexport const getDomainFromEmail = (email: string): string | null =>\n isEmail(email) ? email.substring(email.indexOf('@') + 1) : null;\n\n/**\n * Basic auth headers are username:password in base64, decode and compare\n */\nexport const decodeBasicAuth = (\n auth: string,\n): { username: string; password: string } => {\n const [username, password] = base64ToString(auth).split(':');\n return { username, password };\n};\n\n/**\n * Parse a string that may contain a unit, like \"10px\" or \"10%\"\n */\nexport function parseNumberWithUnit(value: string | number): {\n value: number;\n unit?: string;\n} {\n const stringValue = String(value).trim();\n const unitRegex = /([a-zA-Z%])+$/;\n const match = stringValue.match(unitRegex);\n\n let numberValue: number;\n let unit: string;\n\n if (match) {\n const unitIndex = match.index;\n numberValue = parseFloat(stringValue.slice(0, unitIndex));\n [unit] = match;\n } else {\n numberValue = parseFloat(stringValue);\n unit = '';\n }\n if (Number.isNaN(numberValue)) {\n throw new Error(`Invalid value, not a number: ${value}`);\n }\n\n return { value: numberValue, unit };\n}\n\n/**\n * Check if a strings first character is a letter\n */\nexport function startsWithLetter(str: string): boolean {\n return /^[a-zA-Z]/.test(str);\n}\n\n/**\n * Removes wrapping single or double quotes from a string\n */\nexport function removeWrappingQuotes(str: string): string {\n if (!str || typeof str !== 'string') return str;\n return (\n str\n // remove double quotes\n .replace(/^\"(.*)\"$/, '$1')\n // remove single quotes\n .replace(/^'(.*)'$/, '$1')\n );\n}\n\n/**\n * Transforms a name string containing key-value pairs into a shortened version.\n *\n * Example:\n * Input: \"mode=dark, status=on, debug=false\"\n * Output: \"dark, status\"\n */\nexport const getShortName = (name: string) => {\n if (!name || isEmpty(name)) return;\n\n if (!name.includes('=')) {\n return name;\n }\n\n const nameParts = name.split(',');\n const shortNameParts: string[] = [];\n\n nameParts.forEach((part) => {\n const [key, value] = part.split('=');\n\n if (!value || ['false', 'off', 'no'].includes(value)) {\n return;\n }\n if (['true', 'on', 'yes'].includes(value)) {\n return shortNameParts.push(key);\n }\n return shortNameParts.push(value);\n });\n return shortNameParts.join(', ');\n};\n","/* global window self */\n\n// Thanks! https://github.com/flexdinesh/browser-or-node/blob/master/src/index.js\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n/* eslint-disable no-restricted-globals */\nexport const isWebWorker =\n typeof self === 'object' &&\n self.constructor &&\n self.constructor.name === 'DedicatedWorkerGlobalScope';\n/* eslint-enable no-restricted-globals */\n\nexport const isNode =\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null;\n\n/**\n * @see https://github.com/jsdom/jsdom/releases/tag/12.0.0\n * @see https://github.com/jsdom/jsdom/issues/1537\n */\n/* eslint-disable no-undef */\nexport const isJsDom = () =>\n (typeof window !== 'undefined' && window.name === 'nodejs') ||\n navigator.userAgent.includes('Node.js') ||\n navigator.userAgent.includes('jsdom');\n","import type { FC, Component } from 'react';\nimport type {\n PackageJson as PackageJsonBase,\n TsConfigJson as TsConfigJsonBase,\n} from 'type-fest';\n\nexport { expectNever, expectType } from 'ts-expect';\nexport type { TypeEqual, TypeOf } from 'ts-expect';\nexport type {\n Except,\n Simplify,\n Merge,\n SetRequired,\n SetOptional,\n AsyncReturnType,\n PartialDeep,\n} from 'type-fest';\n// https://github.com/millsp/ts-toolbelt\nexport * as TsToolbelt from 'ts-toolbelt';\nexport { default as isEmpty } from 'lodash/isEmpty.js';\n\n/**\n * Turns `() => Promise<string>` into `string`\n */\nexport type PromiseResult<T> = T extends (...args: unknown[]) => unknown\n ? Awaited<ReturnType<T>>\n : never;\n\n/**\n * Opposite of `keyof`\n * @example\n * type Foo = { a: string; b: number; c: boolean };\n * type Bar = ValueOf<Foo>; // string | number | boolean\n */\nexport type ValueOf<T> = T[keyof T];\n\nexport type GetValueOrAsyncReturnValue<X> = X extends (\n ...args: unknown[]\n) => unknown\n ? Awaited<X>\n : X;\n\n/**\n * @template V would get `string` if passed in either `string` or `() => Promise<string>`\n */\nexport type ValueOrGetValue<V> = V extends (\n ...args: unknown[]\n) => Promise<infer X>\n ? X\n : V;\n\n/**\n * Typesafe `Object.keys()` that returns better than `string[]`\n */\nexport function keys<O extends Record<string, unknown>>(\n obj: O,\n): Array<keyof O> {\n return Object.keys(obj) as Array<keyof O>;\n}\n\n/**\n * Typesafe `Object.entries()` that retains the keys actual string value instead of just `string`\n */\nexport function entries<O extends Record<string, unknown>>(\n obj: O,\n): Array<[keyof O, O[keyof O]]> {\n return Object.entries(obj) as Array<[keyof O, O[keyof O]]>;\n}\n\n/**\n * Typesafe way to check if a key is in an object\n */\nexport function isObjKey<T extends Record<string | number | symbol, unknown>>(\n key: string | number | symbol,\n obj: T,\n): key is keyof T {\n return key in obj;\n}\n\n/**\n * Check whether a value is defined (non-nullable), meaning it is neither `null`\n * or `undefined`. This can be useful as a type-guard, as for example:\n * `[1, null].filter(Boolean)` does not always type-guard correctly.\n * @example\n * ```\n * import {isDefined} from 'ts-extras';\n * [1, null, 2, undefined].filter(isDefined); // => [1, 2]\n *\n```\n*/\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Get Props from a React Component\n * @example\n * type Props = PropsFrom<typeof Button>;\n */\nexport type PropsFrom<TheComponent> = TheComponent extends FC<infer Props>\n ? Props\n : TheComponent extends Component<infer Props>\n ? Props\n : never;\n\nexport interface PackageJson extends PackageJsonBase, Record<string, unknown> {\n scripts?: {\n [scriptName: string]: string;\n };\n exports?: {\n [key: string]: PackageJsonBase.Exports;\n };\n}\n\nexport interface TsConfigJson\n extends TsConfigJsonBase,\n Record<string, unknown> {}\n\n/**\n * Expands object types recursively\n * @link https://stackoverflow.com/a/57683652\n * @deprecated Use `Simplify` instead\n */\nexport type ExpandRecursively<T> = T extends Record<string, unknown>\n ? T extends infer O\n ? { [K in keyof O]: ExpandRecursively<O[K]> }\n : never\n : T;\n\n/**\n * Workaround to allow typed info to work with Object.entries\n */\nexport type Entries<T> = {\n [K in keyof T]: [K, T[K]];\n}[keyof T][];\n\ndeclare const __brandKey: unique symbol;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/ts-toolbelt@9.6.0/node_modules/ts-toolbelt/out/index.js","../src/js-env.ts","../src/type-tools.ts","../src/strings.ts"],"names":["require_out","__commonJSMin","isNode","cssKebabCase","__name","str","kebabCase","cssVarName","name","escapeRegEx","string","containsString","haystack","needle","needleNormalized","capitalizeFirstLetter","upperFirst","isFirstLetterCapital","upperCamelCase","camelCase","pascalCase","base64ToString","b64","stringToBase64","isBase64","src","s","stringHasSpaces","removeNpmScope","pkgName","isUrl","url","emailMatcher","isEmail","email","getDomainFromEmail","decodeBasicAuth","auth","username","password","parseNumberWithUnit","value","stringValue","unitRegex","match","numberValue","unit","unitIndex","startsWithLetter","removeWrappingQuotes","getShortName","default","nameParts","shortNameParts","part","key"],"mappings":"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","file":"strings.mjs","sourcesContent":["","/* global window self */\n\n// Thanks! https://github.com/flexdinesh/browser-or-node/blob/master/src/index.js\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n/* eslint-disable no-restricted-globals */\nexport const isWebWorker =\n typeof self === 'object' &&\n self.constructor &&\n self.constructor.name === 'DedicatedWorkerGlobalScope';\n/* eslint-enable no-restricted-globals */\n\nexport const isNode =\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null;\n\n/**\n * @see https://github.com/jsdom/jsdom/releases/tag/12.0.0\n * @see https://github.com/jsdom/jsdom/issues/1537\n */\n/* eslint-disable no-undef */\nexport const isJsDom = () =>\n (typeof window !== 'undefined' && window.name === 'nodejs') ||\n navigator.userAgent.includes('Node.js') ||\n navigator.userAgent.includes('jsdom');\n","import type { FC, Component } from 'react';\nimport type {\n PackageJson as PackageJsonBase,\n TsConfigJson as TsConfigJsonBase,\n} from 'type-fest';\n\nexport { expectNever, expectType } from 'ts-expect';\nexport type { TypeEqual, TypeOf } from 'ts-expect';\nexport type {\n Except,\n Simplify,\n Merge,\n SetRequired,\n SetOptional,\n AsyncReturnType,\n PartialDeep,\n} from 'type-fest';\n// https://github.com/millsp/ts-toolbelt\nexport * as TsToolbelt from 'ts-toolbelt';\nexport { default as isEmpty } from 'lodash/isEmpty.js';\n\n/**\n * Turns `() => Promise<string>` into `string`\n */\nexport type PromiseResult<T> = T extends (...args: unknown[]) => unknown\n ? Awaited<ReturnType<T>>\n : never;\n\n/**\n * Opposite of `keyof`\n * @example\n * type Foo = { a: string; b: number; c: boolean };\n * type Bar = ValueOf<Foo>; // string | number | boolean\n */\nexport type ValueOf<T> = T[keyof T];\n\nexport type GetValueOrAsyncReturnValue<X> = X extends (\n ...args: unknown[]\n) => unknown\n ? Awaited<X>\n : X;\n\n/**\n * @template V would get `string` if passed in either `string` or `() => Promise<string>`\n */\nexport type ValueOrGetValue<V> = V extends (\n ...args: unknown[]\n) => Promise<infer X>\n ? X\n : V;\n\n/**\n * Typesafe `Object.keys()` that returns better than `string[]`\n */\nexport function keys<O extends Record<string, unknown>>(\n obj: O,\n): Array<keyof O> {\n return Object.keys(obj) as Array<keyof O>;\n}\n\n/**\n * Typesafe `Object.entries()` that retains the keys actual string value instead of just `string`\n */\nexport function entries<O extends Record<string, unknown>>(\n obj: O,\n): Array<[keyof O, O[keyof O]]> {\n return Object.entries(obj) as Array<[keyof O, O[keyof O]]>;\n}\n\n/**\n * Typesafe way to check if a key is in an object\n */\nexport function isObjKey<T extends Record<string | number | symbol, unknown>>(\n key: string | number | symbol,\n obj: T,\n): key is keyof T {\n return key in obj;\n}\n\n/**\n * Check whether a value is defined (non-nullable), meaning it is neither `null`\n * or `undefined`. This can be useful as a type-guard, as for example:\n * `[1, null].filter(Boolean)` does not always type-guard correctly.\n * @example\n * ```\n * import {isDefined} from 'ts-extras';\n * [1, null, 2, undefined].filter(isDefined); // => [1, 2]\n *\n```\n*/\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Get Props from a React Component\n * @example\n * type Props = PropsFrom<typeof Button>;\n */\nexport type PropsFrom<TheComponent> =\n TheComponent extends FC<infer Props>\n ? Props\n : TheComponent extends Component<infer Props>\n ? Props\n : never;\n\nexport interface PackageJson extends PackageJsonBase, Record<string, unknown> {\n scripts?: {\n [scriptName: string]: string;\n };\n exports?: {\n [key: string]: PackageJsonBase.Exports;\n };\n}\n\nexport interface TsConfigJson\n extends TsConfigJsonBase, Record<string, unknown> {}\n\n/**\n * Expands object types recursively\n * @link https://stackoverflow.com/a/57683652\n * @deprecated Use `Simplify` instead\n */\nexport type ExpandRecursively<T> =\n T extends Record<string, unknown>\n ? T extends infer O\n ? { [K in keyof O]: ExpandRecursively<O[K]> }\n : never\n : T;\n\n/**\n * Workaround to allow typed info to work with Object.entries\n */\nexport type Entries<T> = {\n [K in keyof T]: [K, T[K]];\n}[keyof T][];\n\ndeclare const __brandKey: unique symbol;\n","import camelCase from 'lodash/camelCase.js';\nimport kebabCase from 'just-kebab-case'; // Why not lodash/kebabCase? https://github.com/lodash/lodash/issues/2843#issuecomment-262255270\nimport upperFirst from 'lodash/upperFirst.js';\nimport { isNode } from './js-env';\nimport { isEmpty } from './type-tools';\n\nexport { default as snakeCase } from 'lodash/snakeCase.js';\nexport { default as capitalize } from 'lodash/capitalize.js';\nexport { camelCase, kebabCase, kebabCase as paramCase };\n\n/**\n * Lower and split on dots, that's it. Do NOT split standalone strings on\n * numbers, caps, etc. Note that we split/join specifically to process each\n * segment of a token name, ie if `color.primary`, we process 'color' and 'primary'\n * individually\n */\nexport const cssKebabCase = (str: string) =>\n str.split('.').map(kebabCase).join('-');\nexport const cssVarName = (name: string) => `--${cssKebabCase(name)}`;\n\n/**\n * This function takes a string and escapes any regex related characters\n * Intended to be used to \"cleanse\" user input of regex that causes failures when using string operators\n */\nexport function escapeRegEx(string: string): string {\n return string.replace(/[*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\n/**\n * Basic \"fuzzy\" search of one string within another.\n * Both the haystack and needle are escaped for regex characters, then converted to lower case\n * If the needle appears in the haystack, will return true, otherwise returns false\n * @param {string} haystack - string to seach within\n * @param {string} needle - string being searched for\n * @returns {boolean}\n */\nexport function containsString(haystack: string, needle: string): boolean {\n const needleNormalized = escapeRegEx(needle).toLowerCase();\n const haystackNormalized = escapeRegEx(haystack).toLowerCase();\n return haystackNormalized.search(needleNormalized) !== -1;\n}\n\nexport function capitalizeFirstLetter(string: string): string {\n return upperFirst(string);\n}\n\nexport function isFirstLetterCapital(str: string): boolean {\n if (!str || str.length === 0) return false;\n return str[0] === str[0].toUpperCase();\n}\n\n/**\n * Transform into a string of capitalized words without separators. How React Component names are transformed.\n * aka PascalCase\n */\nexport function upperCamelCase(str: string): string {\n return capitalizeFirstLetter(camelCase(str));\n}\nexport const pascalCase = upperCamelCase;\n\nexport function base64ToString(b64: string): string {\n return isNode ? Buffer.from(b64, 'base64').toString() : atob(b64);\n}\n\nexport function stringToBase64(string: string): string {\n return isNode ? Buffer.from(string).toString('base64') : btoa(string);\n}\n\n/**\n * check if a value is a valid Base64 string\n */\nexport function isBase64(src: unknown): src is string {\n if (typeof src !== 'string') return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n}\n\nexport function stringHasSpaces(string: string): boolean {\n return string.indexOf(' ') !== -1;\n}\n\n/**\n * Removes the NPM \"@scope\" in pkg names\n * `@scope/name` => `name`\n * `name` => `name`\n */\nexport function removeNpmScope(pkgName: string): string {\n if (!pkgName.startsWith('@') && !pkgName.includes('/')) {\n return pkgName;\n }\n const [, name] = pkgName.split('/');\n if (!name) return pkgName;\n return name;\n}\n\nexport function isUrl(url: unknown): url is string {\n if (typeof url !== 'string') return false;\n try {\n const _u = new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n// RFC 5322 spec, https://emailregex.com/\nconst emailMatcher =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/**\n * Check that email is < 320 chars (according to spec), then if passes regex.\n * @link https://www.rfc-editor.org/errata/eid1690#:~:text=It%20should%20say%3A-,In%20addition%20to%20restrictions%20on%20syntax%2C%20there%20is%20a%20length,total%20length%20of%20320%20characters.\n */\nexport const isEmail = (email: unknown): email is string =>\n typeof email === 'string' && email.length <= 320 && emailMatcher.test(email);\n\n/**\n * Returns \"knapsack.cloud\" from \"bloom@knapsack.cloud\", if valid email\n */\nexport const getDomainFromEmail = (email: string): string | null =>\n isEmail(email) ? email.substring(email.indexOf('@') + 1) : null;\n\n/**\n * Basic auth headers are username:password in base64, decode and compare\n */\nexport const decodeBasicAuth = (\n auth: string,\n): { username: string; password: string } => {\n const [username, password] = base64ToString(auth).split(':');\n return { username, password };\n};\n\n/**\n * Parse a string that may contain a unit, like \"10px\" or \"10%\"\n */\nexport function parseNumberWithUnit(value: string | number): {\n value: number;\n unit?: string;\n} {\n const stringValue = String(value).trim();\n const unitRegex = /([a-zA-Z%])+$/;\n const match = stringValue.match(unitRegex);\n\n let numberValue: number;\n let unit: string;\n\n if (match) {\n const unitIndex = match.index;\n numberValue = parseFloat(stringValue.slice(0, unitIndex));\n [unit] = match;\n } else {\n numberValue = parseFloat(stringValue);\n unit = '';\n }\n if (Number.isNaN(numberValue)) {\n throw new Error(`Invalid value, not a number: ${value}`);\n }\n\n return { value: numberValue, unit };\n}\n\n/**\n * Check if a strings first character is a letter\n */\nexport function startsWithLetter(str: string): boolean {\n return /^[a-zA-Z]/.test(str);\n}\n\n/**\n * Removes wrapping single or double quotes from a string\n */\nexport function removeWrappingQuotes(str: string): string {\n if (!str || typeof str !== 'string') return str;\n return (\n str\n // remove double quotes\n .replace(/^\"(.*)\"$/, '$1')\n // remove single quotes\n .replace(/^'(.*)'$/, '$1')\n );\n}\n\n/**\n * Transforms a name string containing key-value pairs into a shortened version.\n *\n * Example:\n * Input: \"mode=dark, status=on, debug=false\"\n * Output: \"dark, status\"\n */\nexport const getShortName = (name: string) => {\n if (!name || isEmpty(name)) return;\n\n if (!name.includes('=')) {\n return name;\n }\n\n const nameParts = name.split(',');\n const shortNameParts: string[] = [];\n\n nameParts.forEach((part) => {\n const [key, value] = part.split('=');\n\n if (!value || ['false', 'off', 'no'].includes(value)) {\n return;\n }\n if (['true', 'on', 'yes'].includes(value)) {\n return shortNameParts.push(key);\n }\n return shortNameParts.push(value);\n });\n return shortNameParts.join(', ');\n};\n"]}
|
package/dist/type-tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-tools.d.ts","sourceRoot":"","sources":["../src/type-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EACV,WAAW,IAAI,eAAe,EAC9B,YAAY,IAAI,gBAAgB,EACjC,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnD,YAAY,EACV,MAAM,EACN,QAAQ,EACR,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GACpE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GACtB,KAAK,CAAC;AAEV;;;;;GAKG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpC,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI,CAAC,SAAS,CACpD,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,OAAO,GACR,OAAO,CAAC,CAAC,CAAC,GACV,CAAC,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,CACzC,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,CAAC,GACjB,CAAC,GACD,CAAC,CAAC;AAEN;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,GAAG,EAAE,CAAC,GACL,KAAK,CAAC,MAAM,CAAC,CAAC,CAEhB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvD,GAAG,EAAE,CAAC,GACL,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAE9B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAC1E,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAC7B,GAAG,EAAE,CAAC,GACL,GAAG,IAAI,MAAM,CAAC,CAEhB;AAED;;;;;;;;;;EAUE;AACF,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC,CAEpE;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"type-tools.d.ts","sourceRoot":"","sources":["../src/type-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/type-tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/ts-toolbelt@9.6.0/node_modules/ts-toolbelt/out/index.js","../src/type-tools.ts"],"names":["require_out","__commonJSMin","TsToolbelt","keys","obj","__name","entries","isObjKey","key","isDefined","value"],"mappings":"yNAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,UAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAAA,CAAAC,CAAAA,
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/ts-toolbelt@9.6.0/node_modules/ts-toolbelt/out/index.js","../src/type-tools.ts"],"names":["require_out","__commonJSMin","TsToolbelt","keys","obj","__name","entries","isObjKey","key","isDefined","value"],"mappings":"yNAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,UAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAAA,CAAAA,CAAAC,CAAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CCkBA,IAAAC,CAAAA,CAA4B,CAAA,CAAA,CAAA,EAAA,EAoCrB,SAASC,CAAAA,CACdC,CAAAA,CACgB,CAChB,OAAO,MAAA,CAAO,IAAA,CAAKA,CAAG,CACxB,CAJgBC,CAAAA,CAAAF,CAAAA,CAAA,QAST,SAASG,CAAAA,CACdF,CAAAA,CAC8B,CAC9B,OAAO,MAAA,CAAO,OAAA,CAAQA,CAAG,CAC3B,CAJgBC,CAAAA,CAAAC,CAAAA,CAAA,SAAA,CAAA,CAST,SAASC,CAAAA,CACdC,CAAAA,CACAJ,EACgB,CAChB,OAAOI,CAAAA,IAAOJ,CAChB,CALgBC,CAAAA,CAAAE,CAAAA,CAAA,UAAA,CAAA,CAkBT,SAASE,CAAAA,CAAaC,CAAAA,CAAyC,CACpE,OAAOA,CAAAA,EAAU,IACnB,CAFgBL,EAAAI,CAAAA,CAAA,WAAA,CAAA","file":"type-tools.js","sourcesContent":["","import type { FC, Component } from 'react';\nimport type {\n PackageJson as PackageJsonBase,\n TsConfigJson as TsConfigJsonBase,\n} from 'type-fest';\n\nexport { expectNever, expectType } from 'ts-expect';\nexport type { TypeEqual, TypeOf } from 'ts-expect';\nexport type {\n Except,\n Simplify,\n Merge,\n SetRequired,\n SetOptional,\n AsyncReturnType,\n PartialDeep,\n} from 'type-fest';\n// https://github.com/millsp/ts-toolbelt\nexport * as TsToolbelt from 'ts-toolbelt';\nexport { default as isEmpty } from 'lodash/isEmpty.js';\n\n/**\n * Turns `() => Promise<string>` into `string`\n */\nexport type PromiseResult<T> = T extends (...args: unknown[]) => unknown\n ? Awaited<ReturnType<T>>\n : never;\n\n/**\n * Opposite of `keyof`\n * @example\n * type Foo = { a: string; b: number; c: boolean };\n * type Bar = ValueOf<Foo>; // string | number | boolean\n */\nexport type ValueOf<T> = T[keyof T];\n\nexport type GetValueOrAsyncReturnValue<X> = X extends (\n ...args: unknown[]\n) => unknown\n ? Awaited<X>\n : X;\n\n/**\n * @template V would get `string` if passed in either `string` or `() => Promise<string>`\n */\nexport type ValueOrGetValue<V> = V extends (\n ...args: unknown[]\n) => Promise<infer X>\n ? X\n : V;\n\n/**\n * Typesafe `Object.keys()` that returns better than `string[]`\n */\nexport function keys<O extends Record<string, unknown>>(\n obj: O,\n): Array<keyof O> {\n return Object.keys(obj) as Array<keyof O>;\n}\n\n/**\n * Typesafe `Object.entries()` that retains the keys actual string value instead of just `string`\n */\nexport function entries<O extends Record<string, unknown>>(\n obj: O,\n): Array<[keyof O, O[keyof O]]> {\n return Object.entries(obj) as Array<[keyof O, O[keyof O]]>;\n}\n\n/**\n * Typesafe way to check if a key is in an object\n */\nexport function isObjKey<T extends Record<string | number | symbol, unknown>>(\n key: string | number | symbol,\n obj: T,\n): key is keyof T {\n return key in obj;\n}\n\n/**\n * Check whether a value is defined (non-nullable), meaning it is neither `null`\n * or `undefined`. This can be useful as a type-guard, as for example:\n * `[1, null].filter(Boolean)` does not always type-guard correctly.\n * @example\n * ```\n * import {isDefined} from 'ts-extras';\n * [1, null, 2, undefined].filter(isDefined); // => [1, 2]\n *\n```\n*/\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Get Props from a React Component\n * @example\n * type Props = PropsFrom<typeof Button>;\n */\nexport type PropsFrom<TheComponent> =\n TheComponent extends FC<infer Props>\n ? Props\n : TheComponent extends Component<infer Props>\n ? Props\n : never;\n\nexport interface PackageJson extends PackageJsonBase, Record<string, unknown> {\n scripts?: {\n [scriptName: string]: string;\n };\n exports?: {\n [key: string]: PackageJsonBase.Exports;\n };\n}\n\nexport interface TsConfigJson\n extends TsConfigJsonBase, Record<string, unknown> {}\n\n/**\n * Expands object types recursively\n * @link https://stackoverflow.com/a/57683652\n * @deprecated Use `Simplify` instead\n */\nexport type ExpandRecursively<T> =\n T extends Record<string, unknown>\n ? T extends infer O\n ? { [K in keyof O]: ExpandRecursively<O[K]> }\n : never\n : T;\n\n/**\n * Workaround to allow typed info to work with Object.entries\n */\nexport type Entries<T> = {\n [K in keyof T]: [K, T[K]];\n}[keyof T][];\n\ndeclare const __brandKey: unique symbol;\n"]}
|
package/dist/type-tools.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/ts-toolbelt@9.6.0/node_modules/ts-toolbelt/out/index.js","../src/type-tools.ts"],"names":["require_out","__commonJSMin","TsToolbelt","keys","obj","__name","entries","isObjKey","key","isDefined","value"],"mappings":"gGAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,UAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAAA,CAAAC,CAAAA,
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/ts-toolbelt@9.6.0/node_modules/ts-toolbelt/out/index.js","../src/type-tools.ts"],"names":["require_out","__commonJSMin","TsToolbelt","keys","obj","__name","entries","isObjKey","key","isDefined","value"],"mappings":"gGAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,UAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAAA,CAAAA,CAAAC,CAAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CCkBA,IAAAC,CAAAA,CAA4B,CAAA,CAAA,CAAA,EAAA,EAoCrB,SAASC,CAAAA,CACdC,CAAAA,CACgB,CAChB,OAAO,MAAA,CAAO,IAAA,CAAKA,CAAG,CACxB,CAJgBC,CAAAA,CAAAF,CAAAA,CAAA,QAST,SAASG,CAAAA,CACdF,CAAAA,CAC8B,CAC9B,OAAO,MAAA,CAAO,OAAA,CAAQA,CAAG,CAC3B,CAJgBC,CAAAA,CAAAC,CAAAA,CAAA,SAAA,CAAA,CAST,SAASC,CAAAA,CACdC,CAAAA,CACAJ,EACgB,CAChB,OAAOI,CAAAA,IAAOJ,CAChB,CALgBC,CAAAA,CAAAE,CAAAA,CAAA,UAAA,CAAA,CAkBT,SAASE,CAAAA,CAAaC,CAAAA,CAAyC,CACpE,OAAOA,CAAAA,EAAU,IACnB,CAFgBL,EAAAI,CAAAA,CAAA,WAAA,CAAA","file":"type-tools.mjs","sourcesContent":["","import type { FC, Component } from 'react';\nimport type {\n PackageJson as PackageJsonBase,\n TsConfigJson as TsConfigJsonBase,\n} from 'type-fest';\n\nexport { expectNever, expectType } from 'ts-expect';\nexport type { TypeEqual, TypeOf } from 'ts-expect';\nexport type {\n Except,\n Simplify,\n Merge,\n SetRequired,\n SetOptional,\n AsyncReturnType,\n PartialDeep,\n} from 'type-fest';\n// https://github.com/millsp/ts-toolbelt\nexport * as TsToolbelt from 'ts-toolbelt';\nexport { default as isEmpty } from 'lodash/isEmpty.js';\n\n/**\n * Turns `() => Promise<string>` into `string`\n */\nexport type PromiseResult<T> = T extends (...args: unknown[]) => unknown\n ? Awaited<ReturnType<T>>\n : never;\n\n/**\n * Opposite of `keyof`\n * @example\n * type Foo = { a: string; b: number; c: boolean };\n * type Bar = ValueOf<Foo>; // string | number | boolean\n */\nexport type ValueOf<T> = T[keyof T];\n\nexport type GetValueOrAsyncReturnValue<X> = X extends (\n ...args: unknown[]\n) => unknown\n ? Awaited<X>\n : X;\n\n/**\n * @template V would get `string` if passed in either `string` or `() => Promise<string>`\n */\nexport type ValueOrGetValue<V> = V extends (\n ...args: unknown[]\n) => Promise<infer X>\n ? X\n : V;\n\n/**\n * Typesafe `Object.keys()` that returns better than `string[]`\n */\nexport function keys<O extends Record<string, unknown>>(\n obj: O,\n): Array<keyof O> {\n return Object.keys(obj) as Array<keyof O>;\n}\n\n/**\n * Typesafe `Object.entries()` that retains the keys actual string value instead of just `string`\n */\nexport function entries<O extends Record<string, unknown>>(\n obj: O,\n): Array<[keyof O, O[keyof O]]> {\n return Object.entries(obj) as Array<[keyof O, O[keyof O]]>;\n}\n\n/**\n * Typesafe way to check if a key is in an object\n */\nexport function isObjKey<T extends Record<string | number | symbol, unknown>>(\n key: string | number | symbol,\n obj: T,\n): key is keyof T {\n return key in obj;\n}\n\n/**\n * Check whether a value is defined (non-nullable), meaning it is neither `null`\n * or `undefined`. This can be useful as a type-guard, as for example:\n * `[1, null].filter(Boolean)` does not always type-guard correctly.\n * @example\n * ```\n * import {isDefined} from 'ts-extras';\n * [1, null, 2, undefined].filter(isDefined); // => [1, 2]\n *\n```\n*/\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Get Props from a React Component\n * @example\n * type Props = PropsFrom<typeof Button>;\n */\nexport type PropsFrom<TheComponent> =\n TheComponent extends FC<infer Props>\n ? Props\n : TheComponent extends Component<infer Props>\n ? Props\n : never;\n\nexport interface PackageJson extends PackageJsonBase, Record<string, unknown> {\n scripts?: {\n [scriptName: string]: string;\n };\n exports?: {\n [key: string]: PackageJsonBase.Exports;\n };\n}\n\nexport interface TsConfigJson\n extends TsConfigJsonBase, Record<string, unknown> {}\n\n/**\n * Expands object types recursively\n * @link https://stackoverflow.com/a/57683652\n * @deprecated Use `Simplify` instead\n */\nexport type ExpandRecursively<T> =\n T extends Record<string, unknown>\n ? T extends infer O\n ? { [K in keyof O]: ExpandRecursively<O[K]> }\n : never\n : T;\n\n/**\n * Workaround to allow typed info to work with Object.entries\n */\nexport type Entries<T> = {\n [K in keyof T]: [K, T[K]];\n}[keyof T][];\n\ndeclare const __brandKey: unique symbol;\n"]}
|
package/dist/urls.d.ts
CHANGED
|
@@ -110,4 +110,16 @@ export declare function parseFigmaUrl(figmaUrl: string): {
|
|
|
110
110
|
* Does not include leading `?`
|
|
111
111
|
*/
|
|
112
112
|
export declare function createQueryParams(params: Record<string, string | number | boolean | undefined | null>): string;
|
|
113
|
+
/**
|
|
114
|
+
* Creates a safe filename by slugifying the filename and removing any special characters
|
|
115
|
+
* Will throw if the filename does not exist or is just an extension (e.g. '.jpg')
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* createSafeFilename({ filename: 'test.jpg' }) // => 'test.jpg'
|
|
119
|
+
* createSafeFilename({ filename: 'test.jpg.png' }) // => 'testjpg.png'
|
|
120
|
+
* createSafeFilename({ filename: 'test jpg.pdf' }) // => 'test-jpg.pdf'
|
|
121
|
+
*/
|
|
122
|
+
export declare function createSafeFilename({ filename }: {
|
|
123
|
+
filename: string;
|
|
124
|
+
}): string;
|
|
113
125
|
//# sourceMappingURL=urls.d.ts.map
|
package/dist/urls.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG,MAAM,CACnC,MAAM,EACN,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,GAAG,GAAG,CAC9D,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,gBAAgB,EAAE,EAC9D,MAAM,EACN,eAAe,GAChB,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC,mBAcA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,gBAAgB,EAAE;AACnE,yFAAyF;AACzF,GAAG;AACH,kDAAkD;AAClD,MAAM;AACN;;;;GAIG;AACH,WAAW,GACZ,EAAE;IACD;;OAEG;IACH,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,OAgBA;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,WAE7D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAchD;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,YAAY,MAAM,KAAG,OACf,CAAC;AAEjC,eAAO,MAAM,OAAO,GAClB,KACI,MAAM,GACN;IACE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,KACJ,MAWF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAAM,EAAE,GAAG,IAQ1D,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B,UAYA;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC/C,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,UAoBrE"}
|
|
1
|
+
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG,MAAM,CACnC,MAAM,EACN,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,GAAG,GAAG,CAC9D,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,gBAAgB,EAAE,EAC9D,MAAM,EACN,eAAe,GAChB,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC,mBAcA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,gBAAgB,EAAE;AACnE,yFAAyF;AACzF,GAAG;AACH,kDAAkD;AAClD,MAAM;AACN;;;;GAIG;AACH,WAAW,GACZ,EAAE;IACD;;OAEG;IACH,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,OAgBA;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,WAE7D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAchD;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,YAAY,MAAM,KAAG,OACf,CAAC;AAEjC,eAAO,MAAM,OAAO,GAClB,KACI,MAAM,GACN;IACE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,KACJ,MAWF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAAM,EAAE,GAAG,IAQ1D,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B,UAYA;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC/C,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,UAoBrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAS7E"}
|