{"id":32860565,"url":"https://github.com/fajarnugraha37/nope","last_synced_at":"2026-05-08T06:16:48.115Z","repository":{"id":323044513,"uuid":"1091967945","full_name":"fajarnugraha37/nope","owner":"fajarnugraha37","description":"TypeScript-first utilities for working with objects, strings, and time in modern Node.js and Bun runtimes. The library ships both ESM and CommonJS builds, complete with type declarations, so you can drop the helpers straight into any toolchain.","archived":false,"fork":false,"pushed_at":"2025-11-07T20:19:40.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-07T20:21:16.014Z","etag":null,"topics":["async","bun","generator","nodejs","reactive","typescript","utility"],"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/fajarnugraha37.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-07T19:38:45.000Z","updated_at":"2025-11-07T20:19:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fajarnugraha37/nope","commit_stats":null,"previous_names":["fajarnugraha37/nope"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/fajarnugraha37/nope","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajarnugraha37%2Fnope","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajarnugraha37%2Fnope/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajarnugraha37%2Fnope/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajarnugraha37%2Fnope/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fajarnugraha37","download_url":"https://codeload.github.com/fajarnugraha37/nope/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajarnugraha37%2Fnope/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":283410684,"owners_count":26831444,"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","status":"online","status_checked_at":"2025-11-08T02:00:06.281Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["async","bun","generator","nodejs","reactive","typescript","utility"],"created_at":"2025-11-08T20:00:27.516Z","updated_at":"2026-05-08T06:16:48.076Z","avatar_url":"https://github.com/fajarnugraha37.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nope\n\n_Normalized Ops \u0026 Predicate Ecosystem_\n\n\u003e Bun-first toolchain for building, validating, and executing portable expressions with a supporting set of async, caching, and reactive utilities.\n\n## Highlights\n- Multi-package Bun workspace where `@fajarnugraha37/expression` sits on top of reusable validators, caches, and shared helpers.\n- Batteries-included developer UX: Bun test runner, tsup builds, Changesets for releases, and workspace linking by default.\n- Every package ships typed source, ESM/CJS bundles, and `bun test` coverage so you can embed pieces individually or wire them together.\n- Shared utilities avoid duplication: `@fajarnugraha37/validator` uses the caching primitives, the expression builder reuses the validator, and the reactive helpers lean on `@fajarnugraha37/common`.\n\n## Packages\n| Name | npm | Folder | Purpose |\n| --- | --- | --- | --- |\n| `@fajarnugraha37/expression` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/expression.svg)](https://www.npmjs.com/package/@fajarnugraha37/expression) | `packages/expression` | Expression schema types, fluent builders, analyzers, and the json-logic powered evaluator with caching plus debugging helpers. |\n| `@fajarnugraha37/validator` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/validator.svg)](https://www.npmjs.com/package/@fajarnugraha37/validator) | `packages/validator` | AJV-based schema registry with a fluent builder DSL, JSON import/export helpers, cache-aware schema loading, and shortcuts for type-specific validators. |\n| `@fajarnugraha37/specification` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/specification.svg)](https://www.npmjs.com/package/@fajarnugraha37/specification) | `packages/specification` | Extensible specification-pattern toolkit with strong typing, fluent builders, JSON AST serialization, database adapters (Prisma/MongoDB), and plugin system for composable business rules. |\n| `@fajarnugraha37/pattern-matching` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/pattern-matching.svg)](https://www.npmjs.com/package/@fajarnugraha37/pattern-matching) | `packages/pattern-matching` | Type-safe pattern matching primitives with ergonomic collection guards and recursive helpers. |\n| `@fajarnugraha37/common` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/common.svg)](https://www.npmjs.com/package/@fajarnugraha37/common) | `shareds/common` | Typed errors, ULID helpers, guards, regex/string utilities, and structural object helpers shared everywhere else. |\n| `@fajarnugraha37/cache` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/cache.svg)](https://www.npmjs.com/package/@fajarnugraha37/cache) | `shareds/cache` | LRU+TTL caches, singleflight, memoization, idempotent execution helpers, and read-through/write-through adapters. |\n| `@fajarnugraha37/async` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/async.svg)](https://www.npmjs.com/package/@fajarnugraha37/async) | `shareds/async` | Concurrency primitives (channels, semaphores, thread pools), event emitters, async iterators, and resilient `try/retry` utilities. |\n| `@fajarnugraha37/error` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/error.svg)](https://www.npmjs.com/package/@fajarnugraha37/error) | `shareds/error` | Structured error handling with error codes, context preservation, error wrapping, serialization, and type-safe error factories. |\n| `@fajarnugraha37/reactive` | [![npm](https://img.shields.io/npm/v/@fajarnugraha37/reactive.svg)](https://www.npmjs.com/package/@fajarnugraha37/reactive) | `shareds/reactive` | Observable/Stream implementation with plugins, operators (map/combine/throttle/…), and immutable state helpers on top of `limu`. |\n| `apps/*` | — | `apps` | Reserved for demo or integration apps that consume the workspace packages. |\n\n## Repository layout\n| Path | Notes |\n| --- | --- |\n| `packages/` | Feature-facing packages (currently `expression`, `validator`, `specification`, and `pattern-matching`). |\n| `shareds/` | Foundational libraries that are versioned just like packages but grouped under a single folder. |\n| `apps/` | Example/front-end consumers (empty today). |\n| `scripts/` | Reusable automation (CI, release, validation). |\n| `.github/` | Actions workflows for validation/publish (mirrors the `action:*` scripts). |\n| `tsconfig.json`, `tsup.config.ts`, `bunfig.toml` | Shared TypeScript + build configuration. |\n\n## Installation\n\nEach package is published to npm and can be installed individually:\n\n```bash\n# Node.js with npm\nnpm install @fajarnugraha37/expression\nnpm install @fajarnugraha37/validator\nnpm install @fajarnugraha37/specification\nnpm install @fajarnugraha37/pattern-matching\nnpm install @fajarnugraha37/common\nnpm install @fajarnugraha37/cache\nnpm install @fajarnugraha37/async\nnpm install @fajarnugraha37/error\nnpm install @fajarnugraha37/reactive\n\n# Node.js with pnpm\npnpm add @fajarnugraha37/expression\n\n# Node.js with yarn\nyarn add @fajarnugraha37/expression\n\n# Bun\nbun add @fajarnugraha37/expression\n\n# Deno\ndeno add npm:@fajarnugraha37/expression\n```\n\nSee individual package READMEs for detailed usage instructions.\n\n## Quick start (for contributors)\n1. Install [Bun ≥ 1.1](https://bun.sh) and Node ≥ 18 (Node is only required for some tooling).\n2. Install dependencies once from the repo root:\n\n   ```bash\n   bun install\n   ```\n\n3. Pick a package, then run its scripts either with `bun run --filter` or by `cd`-ing into the folder.\n\n   ```bash\n   # Build and test the expression engine\n   bun run --filter @fajarnugraha37/expression build\n   bun run --filter @fajarnugraha37/expression test\n\n   # Same idea for the validator\n   cd packages/validator \u0026\u0026 bun run test\n   ```\n\n## Developing packages\n- **Build:** `bun run --filter \u003cpackage\u003e build` runs `tsc` + `tsup` for that workspace (each package publishes ESM, CJS, and `.d.ts` files).\n- **Test:** `bun run --filter \u003cpackage\u003e test` executes the Bun test suite under `tests/`. Use `bun run --filter \u003cpackage\u003e test:watch` for focused runs.\n- **Coverage:** open the HTML report with `bun run --filter \u003cpackage\u003e coverage:view` after a test run.\n- **Cross-package links:** Bun automatically links workspace dependencies (for example `@fajarnugraha37/expression` depends on `@fajarnugraha37/validator`, which in turn depends on `@fajarnugraha37/cache` and `@fajarnugraha37/common`).\n\nWhen making sweeping changes it is handy to run every test suite:\n\n```bash\nbun workspaces run test        # Bun ≥ 1.1\n# or manually iterate\nfor pkg in packages/* shareds/*; do (cd \"$pkg\" \u0026\u0026 bun test); done\n```\n\n## Release \u0026 publishing\nThis repo uses [Changesets](https://github.com/changesets/changesets):\n\n```bash\nbunx changeset          # choose the packages to bump\nbun run version         # applies the version + changelog updates\nbun run release         # publishes (CI uses the same action)\n```\n\nCI workflows live in `.github/workflows` and can be executed locally with the `action:*` scripts via [`act`](https://github.com/nektos/act).\n\n## Conventions\n- All source is TypeScript (`\"type\": \"module\"` everywhere) and compiled through `tsup`.\n- Tests live next to the package under `tests/*.test.ts` and use Bun's `bun:test` runner.\n- Keep README files in sync with the code (this document summarizes the whole workspace; each package ships its own README for deep dives).\n- Prefer the shared helpers in `@fajarnugraha37/common`, `@fajarnugraha37/cache`, `@fajarnugraha37/async`, and `@fajarnugraha37/error` instead of re-implementing them inside feature packages.\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffajarnugraha37%2Fnope","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffajarnugraha37%2Fnope","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffajarnugraha37%2Fnope/lists"}