@dolthub/web-utils 0.1.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/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @dolthub/web-utils
2
+
3
+ A library of useful utilities for the web.
4
+
5
+ ## Installation
6
+
7
+ ```
8
+ % yarn add @dolthub/web-utils
9
+ ```
10
+
11
+ or
12
+
13
+ ```
14
+ % npm install @dolthub/web-utils
15
+ ```
@@ -0,0 +1,2 @@
1
+ "use strict";exports.compareArray=function(r,t){if(r.length!==t.length)return!1;const e=r.sort(),n=t.sort();for(let t=0;t<r.length;t++)if(e[t]!==n[t])return!1;return!0},exports.dedupe=function(r){return Array.from(new Set(r))},exports.enumKeys=function(r){return Object.keys(r).filter((r=>Number.isNaN(+r))).map((r=>r))},exports.excerpt=(r,t=100)=>r.length<t?r:((r,t)=>`${r.slice(0,t-1)}…`)(r,t),exports.initialUppercase=function(r){const[t,...e]=r;return[t.toLocaleUpperCase(),...e].join("")},exports.nTimes=function(r,t,e=[]){const n=[];for(let o=0;o<r;o++)n.push(t(...e));return n},exports.nTimesWithIndex=function(r,t){const e=[];for(let n=0;n<r;n++)e.push(t(n));return e},exports.prettyJSON=function(r){try{return JSON.stringify(r,null,2)}catch(t){return console.error(t),`${r}`}},exports.prettyJSONText=function(r){try{return JSON.stringify(JSON.parse(r),null,2)}catch(t){return console.error(t),r}},exports.randomArrayItem=function(r){if(0===r.length)throw new Error("Can't take random element of empty array");return r[Math.floor(Math.random()*r.length)]},exports.safeJSONParse=function(r){try{return JSON.parse(r)}catch(t){return r}},exports.tuplify=function(...r){return r};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/compareArray.ts","../../src/dedupe.ts","../../src/enumKeys.ts","../../src/excerpt.ts","../../src/initialUppercase.ts","../../src/nTimes.ts","../../src/prettyJSON.ts","../../src/randomArrayItem.ts","../../src/safeJSONParse.ts","../../src/tuplify.ts"],"sourcesContent":["export default function compareArray(arr1: string[], arr2: string[]): boolean {\n if (arr1.length !== arr2.length) return false;\n const sortedArr1 = arr1.sort();\n const sortedArr2 = arr2.sort();\n for (let i = 0; i < arr1.length; i++) {\n if (sortedArr1[i] !== sortedArr2[i]) {\n return false;\n }\n }\n return true;\n}\n","// Removes duplicates from array for primitive types\nexport default function dedupe<T>(arr: T[]): T[] {\n return Array.from(new Set(arr));\n}\n","/**\n * enumKeys takes an enum and returns an array of strongly typed keys. Useful to iterate over string enums.\n * @param obj The enum\n * @returns An array of strong typed keys\n * @example\n *\n * enum MyEnum {\n * Key1 = \"value1\",\n * Key2 = \"value2\",\n * Key3 = \"value3\"\n * }\n *\n * // ks's type is (\"Key1\" || \"Key2\" || \"Key3\")[]\n * const ks = enumKeys(MyEnum);\n *\n * // keys' type is MyEnum[]\n * // Unfortunately, we can't do this inside enumKeys because there is no generic type constraint for enums.\n * const keys = ks.map(k => MyEnum[k])\n */\nfunction enumKeys<O extends object, K extends keyof O = keyof O>(obj: O): K[] {\n return Object.keys(obj)\n .filter(k => Number.isNaN(+k))\n .map(k => k as K);\n}\n\nexport default enumKeys;\n","const truncate = (str: string, len: number) => `${str.slice(0, len - 1)}…`;\n\nexport default (str: string, len = 100) =>\n str.length < len ? str : truncate(str, len);\n","export default function initialUppercase(s: string): string {\n const [first, ...rest] = s;\n return [first.toLocaleUpperCase(), ...rest].join(\"\");\n}\n","export default function nTimes<T>(\n n: number,\n operation: (...args: any[]) => T,\n args: Parameters<typeof operation> = [],\n): T[] {\n const collection = [];\n for (let i = 0; i < n; i++) {\n collection.push(operation(...args));\n }\n return collection;\n}\n\nexport function nTimesWithIndex<T>(n: number, operation: (n: number) => T) {\n const collection = [];\n for (let i = 0; i < n; i++) {\n collection.push(operation(i));\n }\n return collection;\n}\n","export default function (data: any): string {\n try {\n return JSON.stringify(data, null, 2);\n } catch (err) {\n console.error(err);\n return `${data}`;\n }\n}\n\nexport function prettyJSONText(text: string): string {\n try {\n return JSON.stringify(JSON.parse(text), null, 2);\n } catch (err) {\n console.error(err);\n return text;\n }\n}\n","export default function randomArrayItem<T>(arr: T[]): T {\n if (arr.length === 0) {\n throw new Error(\"Can't take random element of empty array\");\n }\n return arr[Math.floor(Math.random() * arr.length)];\n}\n","// safeJSONParse attempts to parse a JSON string, and if it fails returns the\n// original string instead of throwing an error\nexport default function safeJSONParse(text: string): any {\n try {\n return JSON.parse(text);\n } catch (_) {\n return text;\n }\n}\n","export default function tuplify<T extends any[]>(...elements: T) {\n return elements;\n}\n"],"names":["arr1","arr2","length","sortedArr1","sort","sortedArr2","i","arr","Array","from","Set","obj","Object","keys","filter","k","Number","isNaN","map","str","len","slice","truncate","s","first","rest","toLocaleUpperCase","join","n","operation","args","collection","push","data","JSON","stringify","err","console","error","text","parse","Error","Math","floor","random","_","elements"],"mappings":"kCAAc,SAAuBA,EAAgBC,GACnD,GAAID,EAAKE,SAAWD,EAAKC,OAAQ,OAAO,EACxC,MAAMC,EAAaH,EAAKI,OAClBC,EAAaJ,EAAKG,OACxB,IAAK,IAAIE,EAAI,EAAGA,EAAIN,EAAKE,OAAQI,IAC/B,GAAIH,EAAWG,KAAOD,EAAWC,GAC/B,OAAO,EAGX,OAAO,CACT,iBCTwB,SAAUC,GAChC,OAAOC,MAAMC,KAAK,IAAIC,IAAIH,GAC5B,mBCgBA,SAAiEI,GAC/D,OAAOC,OAAOC,KAAKF,GAChBG,QAAOC,GAAKC,OAAOC,OAAOF,KAC1BG,KAAIH,GAAKA,GACd,kBCrBe,CAACI,EAAaC,EAAM,MACjCD,EAAIjB,OAASkB,EAAMD,EAHJ,EAACA,EAAaC,IAAgB,GAAGD,EAAIE,MAAM,EAAGD,EAAM,MAG1CE,CAASH,EAAKC,4BCHjB,SAAiBG,GACvC,MAAOC,KAAUC,GAAQF,EACzB,MAAO,CAACC,EAAME,uBAAwBD,GAAME,KAAK,GACnD,iBCHc,SACZC,EACAC,EACAC,EAAqC,IAErC,MAAMC,EAAa,GACnB,IAAK,IAAIzB,EAAI,EAAGA,EAAIsB,EAAGtB,IACrByB,EAAWC,KAAKH,KAAaC,IAE/B,OAAOC,CACT,0BAEgB,SAAmBH,EAAWC,GAC5C,MAAME,EAAa,GACnB,IAAK,IAAIzB,EAAI,EAAGA,EAAIsB,EAAGtB,IACrByB,EAAWC,KAAKH,EAAUvB,IAE5B,OAAOyB,CACT,qBClBc,SAAWE,GACvB,IACE,OAAOC,KAAKC,UAAUF,EAAM,KAAM,EACnC,CAAC,MAAOG,GAEP,OADAC,QAAQC,MAAMF,GACP,GAAGH,GACX,CACH,yBAEM,SAAyBM,GAC7B,IACE,OAAOL,KAAKC,UAAUD,KAAKM,MAAMD,GAAO,KAAM,EAC/C,CAAC,MAAOH,GAEP,OADAC,QAAQC,MAAMF,GACPG,CACR,CACH,0BChBwB,SAAmBhC,GACzC,GAAmB,IAAfA,EAAIL,OACN,MAAM,IAAIuC,MAAM,4CAElB,OAAOlC,EAAImC,KAAKC,MAAMD,KAAKE,SAAWrC,EAAIL,QAC5C,wBCHwB,SAAcqC,GACpC,IACE,OAAOL,KAAKM,MAAMD,EACnB,CAAC,MAAOM,GACP,OAAON,CACR,CACH,kBCRc,YAAsCO,GAClD,OAAOA,CACT"}
@@ -0,0 +1,2 @@
1
+ function r(r,t){if(r.length!==t.length)return!1;const n=r.sort(),e=t.sort();for(let t=0;t<r.length;t++)if(n[t]!==e[t])return!1;return!0}function t(r){return Array.from(new Set(r))}function n(r){return Object.keys(r).filter((r=>Number.isNaN(+r))).map((r=>r))}var e=(r,t=100)=>r.length<t?r:((r,t)=>`${r.slice(0,t-1)}…`)(r,t);function o(r){const[t,...n]=r;return[t.toLocaleUpperCase(),...n].join("")}function u(r,t,n=[]){const e=[];for(let o=0;o<r;o++)e.push(t(...n));return e}function c(r,t){const n=[];for(let e=0;e<r;e++)n.push(t(e));return n}function f(r){try{return JSON.stringify(r,null,2)}catch(t){return console.error(t),`${r}`}}function i(r){try{return JSON.stringify(JSON.parse(r),null,2)}catch(t){return console.error(t),r}}function l(r){if(0===r.length)throw new Error("Can't take random element of empty array");return r[Math.floor(Math.random()*r.length)]}function a(r){try{return JSON.parse(r)}catch(t){return r}}function s(...r){return r}export{r as compareArray,t as dedupe,n as enumKeys,e as excerpt,o as initialUppercase,u as nTimes,c as nTimesWithIndex,f as prettyJSON,i as prettyJSONText,l as randomArrayItem,a as safeJSONParse,s as tuplify};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/compareArray.ts","../../src/dedupe.ts","../../src/enumKeys.ts","../../src/excerpt.ts","../../src/initialUppercase.ts","../../src/nTimes.ts","../../src/prettyJSON.ts","../../src/randomArrayItem.ts","../../src/safeJSONParse.ts","../../src/tuplify.ts"],"sourcesContent":["export default function compareArray(arr1: string[], arr2: string[]): boolean {\n if (arr1.length !== arr2.length) return false;\n const sortedArr1 = arr1.sort();\n const sortedArr2 = arr2.sort();\n for (let i = 0; i < arr1.length; i++) {\n if (sortedArr1[i] !== sortedArr2[i]) {\n return false;\n }\n }\n return true;\n}\n","// Removes duplicates from array for primitive types\nexport default function dedupe<T>(arr: T[]): T[] {\n return Array.from(new Set(arr));\n}\n","/**\n * enumKeys takes an enum and returns an array of strongly typed keys. Useful to iterate over string enums.\n * @param obj The enum\n * @returns An array of strong typed keys\n * @example\n *\n * enum MyEnum {\n * Key1 = \"value1\",\n * Key2 = \"value2\",\n * Key3 = \"value3\"\n * }\n *\n * // ks's type is (\"Key1\" || \"Key2\" || \"Key3\")[]\n * const ks = enumKeys(MyEnum);\n *\n * // keys' type is MyEnum[]\n * // Unfortunately, we can't do this inside enumKeys because there is no generic type constraint for enums.\n * const keys = ks.map(k => MyEnum[k])\n */\nfunction enumKeys<O extends object, K extends keyof O = keyof O>(obj: O): K[] {\n return Object.keys(obj)\n .filter(k => Number.isNaN(+k))\n .map(k => k as K);\n}\n\nexport default enumKeys;\n","const truncate = (str: string, len: number) => `${str.slice(0, len - 1)}…`;\n\nexport default (str: string, len = 100) =>\n str.length < len ? str : truncate(str, len);\n","export default function initialUppercase(s: string): string {\n const [first, ...rest] = s;\n return [first.toLocaleUpperCase(), ...rest].join(\"\");\n}\n","export default function nTimes<T>(\n n: number,\n operation: (...args: any[]) => T,\n args: Parameters<typeof operation> = [],\n): T[] {\n const collection = [];\n for (let i = 0; i < n; i++) {\n collection.push(operation(...args));\n }\n return collection;\n}\n\nexport function nTimesWithIndex<T>(n: number, operation: (n: number) => T) {\n const collection = [];\n for (let i = 0; i < n; i++) {\n collection.push(operation(i));\n }\n return collection;\n}\n","export default function (data: any): string {\n try {\n return JSON.stringify(data, null, 2);\n } catch (err) {\n console.error(err);\n return `${data}`;\n }\n}\n\nexport function prettyJSONText(text: string): string {\n try {\n return JSON.stringify(JSON.parse(text), null, 2);\n } catch (err) {\n console.error(err);\n return text;\n }\n}\n","export default function randomArrayItem<T>(arr: T[]): T {\n if (arr.length === 0) {\n throw new Error(\"Can't take random element of empty array\");\n }\n return arr[Math.floor(Math.random() * arr.length)];\n}\n","// safeJSONParse attempts to parse a JSON string, and if it fails returns the\n// original string instead of throwing an error\nexport default function safeJSONParse(text: string): any {\n try {\n return JSON.parse(text);\n } catch (_) {\n return text;\n }\n}\n","export default function tuplify<T extends any[]>(...elements: T) {\n return elements;\n}\n"],"names":["compareArray","arr1","arr2","length","sortedArr1","sort","sortedArr2","i","dedupe","arr","Array","from","Set","enumKeys","obj","Object","keys","filter","k","Number","isNaN","map","excerpt","str","len","slice","truncate","initialUppercase","s","first","rest","toLocaleUpperCase","join","nTimes","n","operation","args","collection","push","nTimesWithIndex","prettyJSON","data","JSON","stringify","err","console","error","prettyJSONText","text","parse","randomArrayItem","Error","Math","floor","random","safeJSONParse","_","tuplify","elements"],"mappings":"AAAc,SAAUA,EAAaC,EAAgBC,GACnD,GAAID,EAAKE,SAAWD,EAAKC,OAAQ,OAAO,EACxC,MAAMC,EAAaH,EAAKI,OAClBC,EAAaJ,EAAKG,OACxB,IAAK,IAAIE,EAAI,EAAGA,EAAIN,EAAKE,OAAQI,IAC/B,GAAIH,EAAWG,KAAOD,EAAWC,GAC/B,OAAO,EAGX,OAAO,CACT,CCTwB,SAAAC,EAAUC,GAChC,OAAOC,MAAMC,KAAK,IAAIC,IAAIH,GAC5B,CCgBA,SAASI,EAAwDC,GAC/D,OAAOC,OAAOC,KAAKF,GAChBG,QAAOC,GAAKC,OAAOC,OAAOF,KAC1BG,KAAIH,GAAKA,GACd,CCrBA,IAAeI,EAAA,CAACC,EAAaC,EAAM,MACjCD,EAAIpB,OAASqB,EAAMD,EAHJ,EAACA,EAAaC,IAAgB,GAAGD,EAAIE,MAAM,EAAGD,EAAM,MAG1CE,CAASH,EAAKC,GCHjB,SAAAG,EAAiBC,GACvC,MAAOC,KAAUC,GAAQF,EACzB,MAAO,CAACC,EAAME,uBAAwBD,GAAME,KAAK,GACnD,CCHc,SAAUC,EACtBC,EACAC,EACAC,EAAqC,IAErC,MAAMC,EAAa,GACnB,IAAK,IAAI9B,EAAI,EAAGA,EAAI2B,EAAG3B,IACrB8B,EAAWC,KAAKH,KAAaC,IAE/B,OAAOC,CACT,CAEgB,SAAAE,EAAmBL,EAAWC,GAC5C,MAAME,EAAa,GACnB,IAAK,IAAI9B,EAAI,EAAGA,EAAI2B,EAAG3B,IACrB8B,EAAWC,KAAKH,EAAU5B,IAE5B,OAAO8B,CACT,CClBc,SAAAG,EAAWC,GACvB,IACE,OAAOC,KAAKC,UAAUF,EAAM,KAAM,EACnC,CAAC,MAAOG,GAEP,OADAC,QAAQC,MAAMF,GACP,GAAGH,GACX,CACH,CAEM,SAAUM,EAAeC,GAC7B,IACE,OAAON,KAAKC,UAAUD,KAAKO,MAAMD,GAAO,KAAM,EAC/C,CAAC,MAAOJ,GAEP,OADAC,QAAQC,MAAMF,GACPI,CACR,CACH,CChBwB,SAAAE,EAAmBzC,GACzC,GAAmB,IAAfA,EAAIN,OACN,MAAM,IAAIgD,MAAM,4CAElB,OAAO1C,EAAI2C,KAAKC,MAAMD,KAAKE,SAAW7C,EAAIN,QAC5C,CCHwB,SAAAoD,EAAcP,GACpC,IACE,OAAON,KAAKO,MAAMD,EACnB,CAAC,MAAOQ,GACP,OAAOR,CACR,CACH,CCRc,SAAUS,KAA4BC,GAClD,OAAOA,CACT"}
@@ -0,0 +1,44 @@
1
+ type Maybe<T> = T | undefined | null;
2
+
3
+ declare function compareArray(arr1: string[], arr2: string[]): boolean;
4
+
5
+ declare function dedupe<T>(arr: T[]): T[];
6
+
7
+ /**
8
+ * enumKeys takes an enum and returns an array of strongly typed keys. Useful to iterate over string enums.
9
+ * @param obj The enum
10
+ * @returns An array of strong typed keys
11
+ * @example
12
+ *
13
+ * enum MyEnum {
14
+ * Key1 = "value1",
15
+ * Key2 = "value2",
16
+ * Key3 = "value3"
17
+ * }
18
+ *
19
+ * // ks's type is ("Key1" || "Key2" || "Key3")[]
20
+ * const ks = enumKeys(MyEnum);
21
+ *
22
+ * // keys' type is MyEnum[]
23
+ * // Unfortunately, we can't do this inside enumKeys because there is no generic type constraint for enums.
24
+ * const keys = ks.map(k => MyEnum[k])
25
+ */
26
+ declare function enumKeys<O extends object, K extends keyof O = keyof O>(obj: O): K[];
27
+
28
+ declare const _default: (str: string, len?: number) => string;
29
+
30
+ declare function initialUppercase(s: string): string;
31
+
32
+ declare function nTimes<T>(n: number, operation: (...args: any[]) => T, args?: Parameters<typeof operation>): T[];
33
+ declare function nTimesWithIndex<T>(n: number, operation: (n: number) => T): T[];
34
+
35
+ declare function export_default(data: any): string;
36
+ declare function prettyJSONText(text: string): string;
37
+
38
+ declare function randomArrayItem<T>(arr: T[]): T;
39
+
40
+ declare function safeJSONParse(text: string): any;
41
+
42
+ declare function tuplify<T extends any[]>(...elements: T): T;
43
+
44
+ export { type Maybe, compareArray, dedupe, enumKeys, _default as excerpt, initialUppercase, nTimes, nTimesWithIndex, export_default as prettyJSON, prettyJSONText, randomArrayItem, safeJSONParse, tuplify };
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@dolthub/web-utils",
3
+ "author": "DoltHub",
4
+ "version": "0.1.0",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "keywords": [
12
+ "web",
13
+ "utils",
14
+ "frontend"
15
+ ],
16
+ "packageManager": "yarn@4.0.2",
17
+ "scripts": {
18
+ "compile": "tsc -b",
19
+ "build": "rollup -c --bundleConfigAsCjs",
20
+ "dbuild": "yarn compile && yarn build",
21
+ "lint": "eslint --cache --ext .ts,.js,.tsx,.jsx src",
22
+ "prettier": "prettier --check 'src/**/*.{js,ts}'",
23
+ "prettier-fix": "prettier --write 'src/**/*.{js,ts}'",
24
+ "publish": "yarn dbuild && npm publish",
25
+ "test": "jest",
26
+ "yalc:publish": "yarn dbuild && yalc publish",
27
+ "yalc:push": "yarn dbuild && yalc push"
28
+ },
29
+ "devDependencies": {
30
+ "@babel/core": "^7.23.7",
31
+ "@babel/preset-env": "^7.23.8",
32
+ "@babel/preset-typescript": "^7.23.3",
33
+ "@rollup/plugin-commonjs": "^25.0.7",
34
+ "@rollup/plugin-node-resolve": "^15.2.3",
35
+ "@rollup/plugin-typescript": "^11.1.5",
36
+ "@types/eslint": "^8",
37
+ "@types/jest": "^29.5.11",
38
+ "@types/rollup-plugin-peer-deps-external": "^2",
39
+ "@typescript-eslint/eslint-plugin": "^6.18.1",
40
+ "@typescript-eslint/parser": "^6.18.1",
41
+ "babel-jest": "^29.7.0",
42
+ "eslint": "^8.56.0",
43
+ "jest": "^29.7.0",
44
+ "prettier": "^3.1.0",
45
+ "rollup": "^4.9.4",
46
+ "rollup-plugin-dts": "^6.1.0",
47
+ "rollup-plugin-peer-deps-external": "^2.2.4",
48
+ "rollup-plugin-terser": "^7.0.2",
49
+ "typescript": "^5.3.3",
50
+ "yalc": "^1.0.0-pre.53"
51
+ },
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/dolthub/react-library.git"
55
+ },
56
+ "bugs": {
57
+ "url": "https://github.com/dolthub/react-library/issues"
58
+ }
59
+ }