{"id":13601642,"url":"https://github.com/lowlighter/libs","last_synced_at":"2025-05-16T11:06:39.869Z","repository":{"id":44772456,"uuid":"364400111","full_name":"lowlighter/libs","owner":"lowlighter","description":"🍱 Collection of carefully crafted TypeScript standalone libraries. Minimal, unbloated, convenient. ","archived":false,"fork":false,"pushed_at":"2024-12-18T04:06:51.000Z","size":8764,"stargazers_count":136,"open_issues_count":14,"forks_count":11,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-10T02:08:12.661Z","etag":null,"topics":["algorithms","bun","bundler","deno","diff","formatter","logging-library","minifier","nodejs","parser","patiencediff","qrcode-generator","reactivity","stringifier","totp-generator","typescript","typescript-library","typings","xml"],"latest_commit_sha":null,"homepage":"https://jsr.io/@libs","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/lowlighter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","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},"funding":{"github":"lowlighter"}},"created_at":"2021-05-04T22:18:23.000Z","updated_at":"2025-03-27T12:05:12.000Z","dependencies_parsed_at":"2024-01-17T16:08:30.994Z","dependency_job_id":"9a7d5a62-a068-42fd-8803-563d4e70dfb0","html_url":"https://github.com/lowlighter/libs","commit_stats":{"total_commits":988,"total_committers":10,"mean_commits":98.8,"dds":0.2935222672064778,"last_synced_commit":"01a5efa363a85b969481e688f06afda109d1cb37"},"previous_names":["lowlighter/xml"],"tags_count":302,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lowlighter%2Flibs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lowlighter%2Flibs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lowlighter%2Flibs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lowlighter%2Flibs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lowlighter","download_url":"https://codeload.github.com/lowlighter/libs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254518383,"owners_count":22084374,"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":["algorithms","bun","bundler","deno","diff","formatter","logging-library","minifier","nodejs","parser","patiencediff","qrcode-generator","reactivity","stringifier","totp-generator","typescript","typescript-library","typings","xml"],"created_at":"2024-08-01T18:01:05.577Z","updated_at":"2025-05-16T11:06:34.836Z","avatar_url":"https://github.com/lowlighter.png","language":"TypeScript","funding_links":["https://github.com/sponsors/lowlighter"],"categories":["algorithms"],"sub_categories":[],"readme":"# 🍱 Libraries\n\n[![JSR Scope](https://jsr.io/badges/@libs)](https://jsr.io/@libs) [![NPM](https://img.shields.io/badge/npm-%40lowlighter-0a3040?style=flat\u0026logo=npm\u0026labelColor=cb0000)](https://www.npmjs.com/search?q=@lowlighter)\n[![deno.land/x](https://img.shields.io/badge/deno.land%2Fx-libs-0a3040?style=flat\u0026logo=deno\u0026labelColor=black)](https://deno.land/x/libs) [![Playground](https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black)](https://libs.lecoq.io)\n[![ci](https://github.com/lowlighter/libs/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/lowlighter/libs/actions/workflows/ci.yml)\n\nThis is a collection of carefully crafted _TypeScript_ libraries.\nThey try to be as minimal, unbloated and convenient as possible.\n\nThey honor [web standards](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/The_web_and_web_standards) for maximum compatibility cross-runtime, which makes most of them compatible with [Deno](https://deno.com), [Node.js](https://nodejs.org),\n[Bun](https://bun.sh) and even browsers out of the box.\n\nSee table below for a list of available libraries and their features, compatibility, test coverage and playgrounds.\n\n\u003ctable\u003e\u003c!-- Generated by deno_readme.ts, do not edit manually --\u003e\u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/bundle\"\u003e\u003ccode\u003e📦 @libs/bundle\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/bundle\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/bundle\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"bundle\"\u003e\n  \u003cli\u003eLint, minify, license CSS code and check features compatibility against MDN data for each browser\u003c/li\u003e\n  \u003cli\u003e\n    Bundle, minify, anonymize local file paths, unmap imports, license and publish TypeScript code\n    \u003cul\u003e\n      \u003cli\u003e\n        Publish deno packages easily back to \u003ca href=\"https://www.npmjs.com\"\u003eNPM registries\u003c/a\u003e and \u003ca href=\"https://deno.land/x\"\u003edeno.land/x\u003c/a\u003e\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003eCompile Rust projects to Web assembly, hot-patch source in base64 and minify output\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#-cli-utilities\"\u003eCLI utilities\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/bundle\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/bundle\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/bundle/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/crypto\"\u003e\u003ccode\u003e🧮 @libs/crypto\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/crypto\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/crypto\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/cloudflare-workers.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/browsers.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"crypto\"\u003e\n  \u003cli\u003eEncrypt and decrypt data using a seed-salt derived private key\u003c/li\u003e\n  \u003cli\u003eGenerate time-based OTP secret key and verify tokens validity\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/crypto\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/crypto\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/crypto/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/diff\"\u003e\u003ccode\u003e➕ @libs/diff\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/diff\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/diff\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/cloudflare-workers.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/browsers.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"diff\"\u003e\n  \u003cli\u003eCompute unified patch between two strings\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/diff\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/diff\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/diff/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/dom\"\u003e\u003ccode\u003e🦊 @libs/dom\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/dom\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/dom\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"dom\"\u003e\n  \u003cli\u003eImplements typings from `lib.dom.d.ts` while following web standards\u003c/li\u003e\n  \u003cli\u003eReuse built-ins whenever possible\u003c/li\u003e\n  \u003cli\u003e\n    Ideal for:\n    \u003cul\u003e\n      \u003cli\u003eServer-Side Rendering\u003c/li\u003e\n      \u003cli\u003eUnit testing for browser support\u003c/li\u003e\n      \u003cli\u003eHTML parsing and scraping\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/dom\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/dom\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/dom/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/git\"\u003e\u003ccode\u003e🟰 @libs/git\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/git\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/git\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"git\"\u003e\n  \u003cli\u003ePerform \u003ccode\u003egit\u003c/code\u003e operation and manipulate outputs\u003c/li\u003e\n  \u003cli\u003eHelper to generate changelog and auto-bump your version file\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/git\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/git/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/logger\"\u003e\u003ccode\u003e📰 @libs/logger\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/logger\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/logger\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/cloudflare-workers.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/browsers.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"logger\"\u003e\n  \u003cli\u003e\n    Simple logger library with configurable log level and tags\n    \u003cul\u003e\n      \u003cli\u003eSupport date, time and delta stamps\u003c/li\u003e\n      \u003cli\u003eSupport caller info (file, name, line) using internal V8's \u003ccode\u003eError.prepareStackTrace\u003c/code\u003e API\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003eAutomatically reads \u003ccode\u003eLOG_LEVEL\u003c/code\u003e environment variable (if available)\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/logger\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/logger\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/logger/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/markdown\"\u003e\u003ccode\u003e🖨️ @libs/markdown\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/markdown\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/markdown\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/cloudflare-workers.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/browsers.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"markdown\"\u003e\n  \u003cli\u003e\n    Render markdown to HTML using the \u003ca href=\"https://unifiedjs.com\"\u003eunified ecosystem\u003c/a\u003e.\n    \u003cul\u003e\n      \u003cli\u003eStraightforward API for both basic markdown and extended markdown rendering\u003c/li\u003e\n      \u003cli\u003e\n        Offer a dozen of plugins to add extended markdown features (headings anchors, frontmatter, code highlighting, math, mermaid diagrams, wiki links, etc.)\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/markdown\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/markdown\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/markdown/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/orm\"\u003e\u003ccode\u003e💰 @libs/orm\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/orm\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/orm\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"orm\"\u003e\n  \u003cli\u003eManage resources using an agnostic storage inteface\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/orm\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/orm\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/orm/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/qrcode\"\u003e\u003ccode\u003e🔳 @libs/qrcode\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/qrcode\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/qrcode\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/cloudflare-workers.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/browsers.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"qrcode\"\u003e\n  \u003cli\u003eGenerate QR codes without external dependencies\u003c/li\u003e\n  \u003cli\u003eSupport console, array and SVG output (with customizable colors)\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/qrcode\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/qrcode\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/qrcode/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/reactive\"\u003e\u003ccode\u003e🎯 @libs/reactive\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/reactive\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/reactive\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/cloudflare-workers.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/browsers.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"reactive\"\u003e\n  \u003cli\u003eCreate observable contexts to track get, set, delete and call operations\u003c/li\u003e\n  \u003cli\u003eSupport inherited contexts\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/reactive\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/reactive\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/reactive/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/run\"\u003e\u003ccode\u003e⏯️ @libs/run\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/run\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/run\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"run\"\u003e\n  \u003cli\u003e\n    Wrapper around \u003ca href=\"https://deno.land/api?s=Deno.Command\"\u003e\u003ccode\u003eDeno.Command\u003c/code\u003e\u003c/a\u003e with improved streams managements\n    \u003cul\u003e\n      \u003cli\u003e\n        Add \u003ccode\u003estdio\u003c/code\u003e that register each \u003ccode\u003estdin\u003c/code\u003e, \u003ccode\u003estdout\u003c/code\u003e, \u003ccode\u003estderr\u003c/code\u003e entry with a timestamp for an accurate history\n      \u003c/li\u003e\n      \u003cli\u003eSupport \u003ccode\u003ebuffering\u003c/code\u003e to merge closely-timed entries from same channel together\u003c/li\u003e\n      \u003cli\u003e\n        Pass a \u003ccode\u003ecallback\u003c/code\u003e to react on output chanells and write to \u003ccode\u003estdin\u003c/code\u003e for interactive scripting\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    Support \u003ccode\u003ewinext\u003c/code\u003e to append an extension to binary when on Windows (e.g. \u003ccode\u003e.cmd\u003c/code\u003e, \u003ccode\u003e.exe\u003c/code\u003e, etc.)\n  \u003c/li\u003e\n  \u003cli\u003eSupport \u003ccode\u003edryrun\u003c/code\u003e to skip command execution (useful for test environments)\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://www.npmjs.com/package/@lowlighter/run\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@lowlighter%2Frun?logo=npm\u0026labelColor=cb0000\u0026color=183e4e\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/run\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/run\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/run/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/testing\"\u003e\u003ccode\u003e🧪 @libs/testing\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/testing\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/testing\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"testing\"\u003e\n  \u003cli\u003e\n    Cross-runtime testing framework\n    \u003cul\u003e\n      \u003cli\u003eSupport \u003ca href=\"https://deno.com\"\u003edeno\u003c/a\u003e natively\u003c/li\u003e\n      \u003cli\u003e\n        Support \u003ca href=\"https://nodejs.org\"\u003eNode.js\u003c/a\u003e through \u003ccode\u003enpx tsx --test\u003c/code\u003e\n      \u003c/li\u003e\n      \u003cli\u003e\n        Support \u003ca href=\"https://bun.sh\"\u003ebun\u003c/a\u003e through \u003ccode\u003ebun test\u003c/code\u003e\n      \u003c/li\u003e\n      \u003cli\u003e\u003ci\u003eNote: although tests are run on multiple runtimes, this library \u003cb\u003emust\u003c/b\u003e be run on deno\u003c/i\u003e\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003eAutomatically skip test cases when runtime is not available on current platform\u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/testing\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/testing/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/typing\"\u003e\u003ccode\u003e🧰 @libs/typing\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/typing\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/typing\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"4\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/cloudflare-workers.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/browsers.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"4\"\u003e\u003cul data-for=\"typing\"\u003e\n  \u003cli\u003e\n    Utility types such as \u003ccode\u003ePromisable\u003c/code\u003e, \u003ccode\u003eNullable\u003c/code\u003e, \u003ccode\u003eMapKey\u003c/code\u003e, \u003ccode\u003eMapValue\u003c/code\u003e, \u003ccode\u003eSetValue\u003c/code\u003e, etc.\n  \u003c/li\u003e\n  \u003cli\u003e\n    Functions constructors (\u003ccode\u003eAsyncFunction\u003c/code\u003e, \u003ccode\u003eGeneratorFunction\u003c/code\u003e, \u003ccode\u003eAsyncGeneratorFunction\u003c/code\u003e)\n  \u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/typing\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/typing/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003e\u003ch2\u003e\u003ca href=\"https://jsr.io/@libs/xml\"\u003e\u003ccode\u003e📃 @libs/xml\u003c/code\u003e\u003c/a\u003e\u003c/h2\u003eundefined\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\"\u003eMetadata and compatibility\u003c/th\u003e\u003cth\u003eFeatures\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://jsr.io/@libs/xml\"\u003e\u003cimg src=\"https://jsr.io/badges/@libs/xml\"\u003e\u003c/a\u003e\u003c/th\u003e\n    \u003cth rowspan=\"5\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/deno.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/node.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/bun.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/cloudflare-workers.svg\"\u003e\u003cimg height=\"18px\" src=\"https://jsr.io/logos/browsers.svg\"\u003e\u003c/th\u003e\n    \u003ctd rowspan=\"5\"\u003e\u003cul data-for=\"xml\"\u003e\n  \u003cli\u003e\n    Parse XML to JavaScript object\n    \u003cul\u003e\n      \u003cli\u003eSupport cleaning options to remove attributes, comments, XML doctype and processing instructions from output\u003c/li\u003e\n      \u003cli\u003eSupport flatten options to flatten node content when only attributes, text or nothing is present\u003c/li\u003e\n      \u003cli\u003eSupport reviving options to trim text, replace XML entities, revive booleans and numbers\u003c/li\u003e\n      \u003cli\u003eAlso support custom reviving function\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    Stringify JavaScript object to XML\n    \u003cul\u003e\n      \u003cli\u003eSupport formatting options to configure indentation and text break lines\u003c/li\u003e\n      \u003cli\u003eSupport replacing options to replace XML entities\u003c/li\u003e\n      \u003cli\u003eAlso support custom replacing function\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://deno.land/x/xml\"\u003e\u003cimg src=\"https://img.shields.io/badge/deno.land%2Fx-xml-0a3040?logo=deno\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs.lecoq.io/xml\"\u003e\u003cimg src=\"https://img.shields.io/badge/Playground--black?style=flat\u0026logo=windowsterminal\u0026labelColor=black\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth\u003e\u003ca href=\"https://libs-coverage.lecoq.io/xml\"\u003e\u003cimg src=\"https://libs-coverage.lecoq.io/xml/badge.svg\"\u003e\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\u003c/table\u003e\n\n\u003e Each package is versioned independently.\n\u003e Releases are fully automated and are published on every push to the `main` branch.\n\u003e Versioning follows [SemVer](https://semver.org) rules.\n\n## 🧑‍💻 CLI Utilities\n\nWe also provide a set of useful CLI scripts.\n\n\u003e [!WARNING]\n\u003e Please note that these only run on the Deno runtime.\n\n### TypeScript code coverage enhancer\n\nEnhance coverage reports generated with `deno coverage` by adding syntax highlighting and better styling using [matcha.css](https://github.com/lowlighter/matcha).\n\n```sh\ndeno run jsr:@libs/bundle/ts/cli/coverage --help\n```\n\n### TypeScript package publisher\n\nPublish a TypeScript package to an npm registry (transpilation to JavaScript and conversion from `deno.jsonc` to `package.json` will automatically be performed) or to [deno.land/x](https://deno.land/x) (webhooks must be configured beforehand).\n\n```sh\ndeno run jsr:@libs/bundle/ts/cli/publish --help\n```\n\n### CSS formatter\n\nFormat CSS code similarly to `prettier` or `deno fmt`.\nUse `--check` to validate that CSS code is correctly formatted.\n\n```sh\ndeno run jsr:@libs/bundle/css/cli/fmt --help\n```\n\n### CSS features compatibility checker\n\nPrint compatibility report for CSS features against MDN data for selected browsers.\n\n```sh\ndeno run jsr:@libs/bundle/css/cli/check --help\n```\n\n### Web assembly builder\n\nCompile a Rust project to Web assembly and minify output.\n\n```sh\ndeno run jsr:@libs/bundle/wasm/cli/build --help\n```\n\n## 🦮 Contributing\n\nContributions are welcome!\nPlease read our [contribution guide](https://github.com/lowlighter/libs/blob/main/CONTRIBUTING.md) first.\n\n## 📜 License\n\nThis work is licensed under the [MIT License](./LICENSE).\n\nIf you include a significant part of it in your own project, _**you must keep the license notice**_ with it, including the mention of the additional original authors if any.\n\n\u003e [!TIP]\n\u003e Love these bytes? Consider [`💝 sponsoring me`](https://github.com/sponsors/lowlighter), even one-time contributions are greatly appreciated!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flowlighter%2Flibs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flowlighter%2Flibs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flowlighter%2Flibs/lists"}