{"id":23878288,"url":"https://github.com/waelio/waelio-utils","last_synced_at":"2025-09-09T04:32:42.676Z","repository":{"id":54660265,"uuid":"318742920","full_name":"waelio/waelio-utils","owner":"waelio","description":"Helper Utils often used in all waelio websites","archived":false,"fork":false,"pushed_at":"2024-05-18T14:08:52.000Z","size":5437,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2024-12-30T01:20:04.843Z","etag":null,"topics":["angular","helpers","javascript","quasar","react","utilities"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/waelio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-05T08:52:26.000Z","updated_at":"2024-05-18T14:08:54.000Z","dependencies_parsed_at":"2023-01-21T02:17:33.758Z","dependency_job_id":null,"html_url":"https://github.com/waelio/waelio-utils","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waelio%2Fwaelio-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waelio%2Fwaelio-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waelio%2Fwaelio-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waelio%2Fwaelio-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/waelio","download_url":"https://codeload.github.com/waelio/waelio-utils/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232395158,"owners_count":18516595,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","helpers","javascript","quasar","react","utilities"],"created_at":"2025-01-03T21:18:10.183Z","updated_at":"2025-01-03T21:18:11.016Z","avatar_url":"https://github.com/waelio.png","language":"TypeScript","funding_links":["https://paypal.me/waelio?locale.x=en_US"],"categories":[],"sub_categories":[],"readme":"# Waelio Utilities\n\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/waelio?locale.x=en_US) [![NPM version](https://img.shields.io/npm/v/waelio-utils.svg?style=flat\u0026color=red\u0026label=NPM)](https://www.npmjs.com/package/waelio-utils) [![NPM monthly downloads](https://img.shields.io/npm/dm/waelio-utils.svg?style=flat)](https://npmjs.org/package/waelio-utils) [![NPM total downloads](https://img.shields.io/npm/dt/waelio-utils.svg?style=flat\u0026color=purple\u0026label=Downloads)](https://npmjs.org/package/waelio-utils) [![Join the chat at https://discord.gg/tBZ2Fmdb7E](https://img.shields.io/badge/chat-on%20discord-7289da.svg)](https://discord.gg/tBZ2Fmdb7E)\n\n### The [WaelioUtils](https://github.com/waelio/waelio-utils) exported as a Javascript modules.\n\n\n# docs\n\n\n\u003col\u003e\n  \u003cli\u003eRecently Added/Updated\u003c/li\u003e\n\u003ctable\u003e  \n  \u003ctr\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#config\"\u003e MOVED!! _ config\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#encrypt\"\u003e_encrypt\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#decrypt\"\u003e_decrypt\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr /\u003e\n\u003cli\u003eStrings\u003c/li\u003e\n\u003ctable\u003e\n  \u003ctr\u003e  \n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#jsontoquerystring\"\u003e _jsonToQueryString\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#querystringtojson\"\u003e _queryStringToJson\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#resetstring\"\u003e _resetString\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#snaketocamel\"\u003e _snakeToCamel\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#cameltosnake\"\u003e _camelToSnake\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#tobase64\"\u003e _toBase64\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#generateid\"\u003e _generateId\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#sniffid\"\u003e _sniffId\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#a_or_an\"\u003e_a_or_an\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#encrypt\"\u003e_encrypt\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#decrypt\"\u003e_decrypt\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003chr /\u003e\n\u003cli\u003eArrays\u003c/li\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#hiderandom\"\u003e_hideRandom\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#rotatearray\"\u003e_rotateArray\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#equals\"\u003e _equals\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#repeat\"\u003e _repeat\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#encrypt\"\u003e_encrypt\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#decrypt\"\u003e_decrypt\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr /\u003e\n\u003cli\u003eObjects\u003c/li\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#sniffid\"\u003e _sniffId\u003c/a\u003e\u003c/div\u003e \u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#cleanresponse\"\u003e_cleanResponse\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#encrypt\"\u003e_encrypt\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#decrypt\"\u003e_decrypt\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr /\u003e\n\u003cli\u003eOther\u003c/li\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e_calculateClockDrift\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#notifyme\"\u003e _notifyMe\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#meta\"\u003e _meta\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#to\"\u003e_to\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e    \n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#a_or_an\"\u003e_a_or_an\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cdiv style=\"padding:.25rem; width: 150px;\"\u003e\u003ca href=\"#config\"\u003e_config\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr /\u003e\n\u003c/ol\u003e\n\n# Installation\n\nIn terminal:\nPick your flavor, types included\n\n```bash\nnpm i -S waelio-utils\npnpm add -S waelio-utils\nyarn add -S waelio-utils\n```\nOR\n\nIn browser:\n\n```html\n\u003cscript src=\"https://unpkg.com/waelio-utils@latest/lib/waelioUtils.js\"\u003e\u003c/script\u003e\n```\n\nOr in terminal add indvidual packagees\n\n```javascript\n// ES6\nimport { _snakeToCamel, _notifyMe } from 'waelio-utils';\n\n// NodeJS\nconst { _snakeToCamel, _notifyMe } = require('waelio-utils');\n```\n\n#\n\n# jsonToQueryString\n\n`Function` that converts a `JSON` to URL Query `String`\n@param `{}` JSON payload\n_Returns_ `String`\n#### Example: In your `.js` or `.ts` file:\n\n```javascript\nimport { _jsonToQueryString } from 'waelio-utils';\nconst payload = { first: 'John', last: 'Smith' };\nconst Result = jsonToQueryString(payload);\n```\n\n#### Result:\n\n```javascript\n'name=John\u0026last=smith';\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# queryStringToJson\n\nFunction that converts a URL Query String to JSON\n@param `payload` Type `@param {string}` as String\n _Returns_ `JSON || Object`\n\n#### Example: In your `.js` or `.ts` file:\n\n```javascript\nimport { _queryStringToJson } from 'waelio-utils';\nconst query = (name = 'John\u0026last=smith');\nconst Result = queryStringToJson(query);\n```\n\n#### Result:\n\n```javascript\n{ first: 'John', last: 'Smith' }\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# resetString\n\n```javascript\nimport { _resetString } from 'waelio-utils';\n\nconst payload = 'https%3A%2F%2Fwaelio.com';\nconst Result = resetString(payload);\n\nResult === 'https://waelio.com';\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# snakeToCamel\n\nFunction that converts snake_case or snake-case to camelCase \"snakeCase\"\n@name snakeToCamel\n\n@param {string} `payload` QueryString\n\n_Returns_ `{string}`\n\n#### Example: In your `.js` or `.ts` file:\n\n```javascript\nimport { _snakeToCamel } from 'waelio-utils';\nconst payload = 'north-west_meta';\nconst Result = snakeToCamel(payload);\n```\n\n#### Result:\n\n```javascript\n'northWestMeta';\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# camelToSnake\n\nFunction that converts camelCase to snake_case or snake-case \"snake-case\"\n\n@param {string} payload\n\n@param {boolean} hyphenated controls the delimiter: true = \"-\" / false = \"\\_\"\n\n_Returns_ `{string}`\n\n#### Example: In your `.js` or `.ts` file:\n\n```javascript\nimport { _camelToSnake } from 'waelio-utils';\nconst payload = 'northWestMeta';\nconst Result = camelToSnake(payload);\n```\n\n#### Result 1- `camelToSnake( payload )`\n\n```javascript\n'north_west_meta';\n```\n\n#### Result 2- `camelToSnake( payload, true )`\n\n```javascript\n'north-west-meta';\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# toBase64\n\nConverts a string to `Base64`\n\n#### Example: In your `.js` or `.ts` file:\n\n```javascript\nimport { _toBase64 } from 'waelio-utils';\nconst payload = 'north-west_meta';\nconst Result = Base64(payload);\n```\n\n#### Result:\n\n```javascript\n'bm9ydGgtd2VzdF9tZXRh';\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# reParseString\n\nSimple object Standardization\n\nOR object Deep Cloning \u003c- **_Not best practice_**\n\n**_Warning_:** Watchout for `null`s, `undefined`, `NaN` and `date`s\n\n_Returns_ `JSON.parse(JSON.stringify(payload))`\n\n#### Example: In your `.js` or `.ts` file:\n\n```javascript\nimport { _reParseString } from 'waelio-utils';\n\n// No magic here, use wisely\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# generateId\n\nGenerate random string/id\n\n@param `{number}` start `2` **_OPTIONAL_**\n\n@param `{number}` len `9` **_OPTIONAL_**\n\n_Returns_ `{string}`\n\n#### Example: In your `.js` or `.ts` file:\n\n```javascript\nimport { _generateId } from 'waelio-utils';\nconst result = generateId();\n```\n\n#### Result: (random)\n\n```javascript\n// result === '3uqi11wg9'\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# Quasar/Vue JS Stuff:\n\n### Will be relocated to `@waelio\\utils` in the future\n\n#### Perfect when Using [Quasar Framework](https://quasar.dev/quasar-plugins/meta)\n\n# meta\n\n### Example:\n\n### in `quasar.conf.js`\n\n```javascript\n// quasar.conf.js\nreturn {\n  framework: {\n    plugins: ['Meta'],\n  },\n};\n```\n\n#### In a `.vue` file\n\n```javascript\n\u003cscript\u003e\n  import { _meta } from 'waelio-utils'\n  export default {\n    name:'foo',\n    data () {\n      return {\n        metaTags: {\n          title: 'Site Title',\n          description: 'Website Utilities',\n          url: 'https://github.com/waelio/waelio-utils',\n          image: 'nwm_logo.png'\n        }\n      }\n    },\n    meta\n  }\n\u003c/script\u003e\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# notifyMe\n\n#### Send PWA Notifications to Site\n\n#### Works only in **Browser**\n\n#### `@param {string}` to send\n\n#### Example: In your `.js` or `.ts` file:\n\n```javascript\nimport { _notifyMe } from 'waelio-utils';\nnotifyMe('Hello World!');\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# sniffid\n\n### Deconstruct `id,Id,_Id,id` from Object\n\nExample:\n\n```javascript\nvar response = { _id: 1234, name: 'John' };\nvar newId = sniffId(response);\n// newId === 1234\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# hiderandom\n\n### Hide random array indexes\n\n```\n@params array\n@params difficulty = 3\n@params replacement = ''\n```\n\nExample:\n\n```javascript\nimport { _hideRandom } from 'waelio-utils';\nconst arr = [\n  [1, 2, 3],\n  [1, 2, 3],\n  [1, 2, 3],\n];\nconst test = _hideRandom(arr, 3);\n\n/* random\n\n  [1, 2, \"\"]\n  [\"\", 2, \"\"]\n  [\"\", \"\", 3]\n\n*/\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# rotatearray\n## Rotate array\n\n```js\nimport { _rotateArray } from 'waelio-utils';\nconst testArray = [\n  [1, 2, 3],\n  [1, 2, 3],\n  [1, 2, 3],\n];\n\nconst test1 = _rotateArray(testArray);\n/* \n  [1, 1, 1],\n  [2, 2, 2],\n  [3, 3, 3]\n*/\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# repeat\n\n### Repeat function N times\n\n### Example:\n\n```javascript\nimport { _repeat } from 'waelio-utils';\nlet counter = 0;\nconst f1 = () =\u003e counter++;\n\n_repeat(5)(f1);\n\n// counter === 5\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# equals\n\n### Example:\n\n```javascript\nimport { _equals } from 'waelio-utils';\nconst arr1 = [1, 2, 3, 4, 5];\nconst arr2 = [1, 2, 3, 4, 5];\nconst arr3 = [1, 2, 3, 4, 5, 6];\n\n_equals(arr1, arr2); // true\n_equals(arr1, arr3); // false\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# cleanresponse\n\n### Example:\n\n```js\nimport { _cleanResponse } from 'waelio-utils';\n\nconst demoRes = {\n  total: 1,\n  limit: 10,\n  skip: 0,\n  data: [\n    {\n      _id: '650937936xc8b143d8c575d2a',\n      name: 'Some Data',\n      user: '679363c6dc8b123d8c575d29',\n      createdAt: '2021-05-06T06:14:09.209Z',\n      updatedAt: '2021-05-06T06:14:09.209Z',\n      __v: 0,\n    },\n  ],\n};\n\nconst cleanRes = _cleanResponse(demoRes);\n/* [ \n      {\n        \"_id\": \"650937936xc8b143d8c575d2a\",\n        \"name\": \"Some Data\",\n        \"user\": \"679363c6dc8b123d8c575d29\",\n        \"createdAt\": \"2021-05-06T06:14:09.209Z\",\n        \"updatedAt\": \"2021-05-06T06:14:09.209Z\",\n        \"__v\": 0\n      }\n    ]\n  */\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# to\n\nTurn any function to Promise\n\n```javascript\n[null, resolve][(reject, null)]; // resolve // reject\n```\n\nExample:\n\n```javascript\nimport { _To } from 'waelio-utils';\nimport axios = 'axios';\nconst testEndpoint = 'https://api.picmymenu.com/restaurants';\nconst response = await _To(axios(testEndpoint));\nconst [ reject, resolve ] = response;\n\nexpect(response).toBeTruthy() // true\nexpect(resolve).toBeTruthy() // true\nexpect(reject).not.toBeTruthy() //true\nexpect(resolve.data.length).toBeTruthy(); //true\n\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# a_or_an\n\n### Example:\n\n```js\nimport { _a_or_an } from 'waelio-utils'\nconst payload1 = \"apple\";\nconst payload2 = \"bananas\";\nconst payload3 = \"orange\";\n\na_or_an(payload1 // an\na_or_an(payload2) // a\na_or_an(payload3) // an\n\n```\n\n#\n\n[Back to TOP](#docs)\n\n#\n\n# encrypt\n\n## Possible payloads `string`, `object` \u0026 `array` , `number`\n\n### \\_encrypt: `_encrypt(payload, salt?)`\n\nIf **_`salt`_** is not provided it will revert to the string `\"salt\"` as the default **_`salt`_**.\n\n#### \u003chr /\u003e\n\n# decrypt\n\n### \\_decrypt: `_decrypt(payload, salt)`\n\nIf **_`salt`_** is not provided and `asFunction` is `false` it will revert to the string `\"salt\"` as the default **_`salt`_**\n\n#### \u003chr /\u003e\n\n#### \\_decrypt: `_decrypt(payload, salt?)`\n\n#### \u003chr /\u003e\n\n### Example:\n\n```js\nimport { _encrypt, _decrypt, _generateId, _equal } from 'waelio-utils';\n\nconst salt = generateId(); // \"g9rlygzjd\"\nconst payload1 = 'What ever you want';\nconst payload2 = { message: 'What ever you want' };\n\nconst encrypted1 = _encrypt(payload1);\nconst decrypted2 = _decrypt(encrypted1); // \"What ever you want\"\n\nconst encrypted2 = _encrypt(payload2, salt);\nconst decrypted3 = _decrypt(encrypted2, salt); // {\"message\":\"What ever you want\"}\n\n// Test\nconst dblCheck = _equal(payload2, JSON.parse(decrypted2)); // true\n```\n\n#\n\n[Back to TOP](#docs)\n\n# config\n\n### Moved to new home  [@waelio/ustore ](https://www.npmjs.com/package/@waelio/ustore)\n\n\n\n[Back to TOP](#docs)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaelio%2Fwaelio-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwaelio%2Fwaelio-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaelio%2Fwaelio-utils/lists"}