{"id":23366745,"url":"https://github.com/d8corp/innet-utils","last_synced_at":"2025-04-07T23:15:53.835Z","repository":{"id":57118747,"uuid":"461520859","full_name":"d8corp/innet-utils","owner":"d8corp","description":"Utils to easily create innet plugins","archived":false,"fork":false,"pushed_at":"2023-06-17T22:12:35.000Z","size":400,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-21T09:03:58.000Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/d8corp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-20T14:57:00.000Z","updated_at":"2023-05-08T14:12:55.000Z","dependencies_parsed_at":"2024-12-21T14:17:44.113Z","dependency_job_id":"8870e6ed-9d11-43b8-94f3-18ae3793ef26","html_url":"https://github.com/d8corp/innet-utils","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d8corp%2Finnet-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d8corp%2Finnet-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d8corp%2Finnet-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d8corp%2Finnet-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/d8corp","download_url":"https://codeload.github.com/d8corp/innet-utils/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247744328,"owners_count":20988783,"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":[],"created_at":"2024-12-21T14:17:34.063Z","updated_at":"2025-04-07T23:15:53.812Z","avatar_url":"https://github.com/d8corp.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://www.npmjs.com/package/innet\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/d8corp/innet/main/logo.svg\" align=\"left\" width=\"90\" height=\"90\" alt=\"InnetJs logo by Mikhail Lysikov\"\u003e\n\u003c/a\u003e\n\n# \u0026nbsp; @innet/utils\n\n\u0026nbsp;\n\n[![NPM](https://img.shields.io/npm/v/@innet/utils.svg)](https://www.npmjs.com/package/@innet/utils)\n[![downloads](https://img.shields.io/npm/dm/@innet/utils.svg)](https://www.npmtrends.com/@innet/utils)\n[![changelog](https://img.shields.io/badge/Changelog-⋮-brightgreen)](https://changelogs.xyz/@innet/utils)\n[![license](https://img.shields.io/npm/l/@innet/utils)](https://github.com/d8corp/innet-utils/blob/main/LICENSE)\n\n## Abstract\nHere you can find some utils to easily create [innet](https://www.npmjs.com/package/innet) plugins.\n\n[![stars](https://img.shields.io/github/stars/d8corp/innet-utils?style=social)](https://github.com/d8corp/innet-utils/stargazers)\n[![watchers](https://img.shields.io/github/watchers/d8corp/innet-utils?style=social)](https://github.com/d8corp/innet-utils/watchers)\n\n## Install\nnpm\n```bash\nnpm i @innet/utils\n```\nyarn\n```bash\nyarn add @innet/utils\n```\n\n## logger\nThis function helps to log your application.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { logger } from '@innet/utils'\n\nconst handler = createHandler([\n  logger(() =\u003e {\n    console.log(useApp())\n  }),\n])\n\ninnet(1, handler)\n// \u003e 1\n```\n\nYou can pass some function to the logger. You can use hooks inside the function.\n\n## createSubPlugin\nThis function helps to create a plugin which contains other plugins.\n\nFor example let's create `exist` plugin that uses sub-plugins if app is not `undefined` or `null`.\n\n```typescript\nimport innet, { NEXT, useApp, runPlugins } from 'innet'\nimport { createSubPlugin } from '@innet/utils'\n\nconst exist = createSubPlugin(\n  plugins =\u003e {\n    const app = useApp()\n\n    if (app === null || app === undefined) return NEXT\n\n    runPlugins(app, useHandler(), plugins)\n  },\n)\n```\n\nNow we can use it.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { logger } from '@innet/utils'\n\nconst handler = createHandler([\n  exist([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(null, handler)\ninnet(undefined, handler)\n// nothing happens\n\ninnet('test', handler)\n// \u003e 'test'\n```\n\n## createConditionPlugin\nThis function based on `createSubPlugin`, but has simplified interface.\nWith it, you can easily eject some types of applications.\n\nFor example let's create a plugin to eject numbers.\n\n```typescript\nimport { useApp } from \"innet\"\nimport { createConditionPlugin } from '@innet/utils'\n\nconst number = createConditionPlugin(() =\u003e typeof useApp() === 'number')\n```\n\n## number\nThis plugin is right from the last example.\nLet's take a look at usage.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { number, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  number([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(null, handler)\ninnet('test', handler)\ninnet('1', handler)\n// nothing happens\n\ninnet(1, handler)\n// \u003e 1\n```\n\n## string\nThis plugin handles only `string` values.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { string, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  string([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(null, handler)\ninnet(1, handler)\n// nothing happens\n\ninnet('1', handler)\n// \u003e '1'\n```\n\n## fn\nThis plugin handles only `function` values.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { fn, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  fn([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(null, handler)\ninnet(1, handler)\ninnet('1', handler)\n// nothing happens\n\ninnet(() =\u003e {}, handler)\n// \u003e () =\u003e {}\n```\n\n## node\nThis plugin handles only `Node` values.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { node, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  node([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(null, handler)\ninnet(1, handler)\ninnet('1', handler)\n// nothing happens\n\ninnet(document.createElement('div'), handler)\n// \u003e div\n```\n\n## promise\nThis plugin handles only `promise` values.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { promise, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  promise([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(null, handler)\ninnet(1, handler)\ninnet('1', handler)\n// nothing happens\n\ninnet(\n  new Promise(resolve =\u003e resolve()),\n  handler,\n)\n// \u003e promise\n```\n\n## async\nThis plugin helps to work with async, just an example:\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { async, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  async,\n  logger(() =\u003e console.log(useApp())),\n])\n\ninnet(1, handler)\n// \u003e 1\n\nconst app = new Promise(resolve =\u003e resolve('test'))\n\ninnet(app, handler)\n// nothing happens\n\nawait app\n// \u003e 'test'\n```\n\n## nullish\nYou can use it to eject `null`\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { logger, nullish } from '@innet/utils'\n\nconst handler = createHandler([\n  nullish([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(undefined, handler)\ninnet('test', handler)\n// nothing happens\n\ninnet(null, handler)\n// \u003e null\n```\n\n## object\nYou can use it to eject an object\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { object, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  object([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(undefined, handler)\ninnet('test', handler)\n// nothing happens\n\ninnet({}, handler)\n// \u003e {}\n\ninnet(null, handler)\n// \u003e null\n```\n\nBecause of `null` is an object, you get the last console log,\nto prevent it, you can combine the plugin with `nullish`.\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { object, logger, nullish } from '@innet/utils'\n\nconst handler = createHandler([\n  nullish([]),\n  object([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet(undefined, handler)\ninnet('test', handler)\ninnet(null, handler)\n// nothing happens\n\ninnet({}, handler)\n// \u003e {}\n\ninnet([], handler)\n// \u003e []\n```\n\n## array\nBecause of `array` is an object you get the last console log. To handle an array use plugin of `array`.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { array, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  array([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet('test', handler)\ninnet({}, handler)\n// nothing happens\n\ninnet([], handler)\n// \u003e []\n```\n\n### arraySync\nThis plugin helps to handle an array synchronously.\nIt runs the handler for each item of the array.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { arraySync, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  arraySync,\n  logger(() =\u003e console.log(useApp())),\n])\n\ninnet('test', handler)\n// \u003e 'test'.\n\ninnet(['test'], handler)\n// \u003e 'test'\n\ninnet(['test1', 'test2'], handler)\n// \u003e 'test1'\n// \u003e 'test2'\n\ninnet(['test1', ['test2', ['test3', 'test4']]], handler)\n// \u003e 'test1'\n// \u003e 'test2'\n// \u003e 'test3'\n// \u003e 'test4'\n```\n\n### iterable\nYou can use it to eject iterable objects.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { iterable, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  iterable([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet([1, 2, 3], handler)\n// [1, 2, 3]\ninnet(new Set([1, 2, 3]), handler)\n// Set([1, 2, 3])\n\ninnet({}, handler)\n// nothing happens\n```\n\n### asyncIterable\nYou can use it to eject async iterable objects.\n\n```typescript\nimport innet, { createHandler, useApp } from 'innet'\nimport { asyncIterable, logger } from '@innet/utils'\n\nconst handler = createHandler([\n  asyncIterable([\n    logger(() =\u003e console.log(useApp())),\n  ]),\n])\n\ninnet([1, 2, 3], handler)\ninnet(new Set([1, 2, 3]), handler)\n// nothing happens\n\nasync function * test () {}\n\ninnet(test(), handler)\n// Promise\n```\n\n## Issues\nIf you find a bug or have a suggestion, please file an issue on [GitHub](https://github.com/d8corp/innet-utils/issues).\n\n[![issues](https://img.shields.io/github/issues-raw/d8corp/innet-utils)](https://github.com/d8corp/innet-utils/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd8corp%2Finnet-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd8corp%2Finnet-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd8corp%2Finnet-utils/lists"}