npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

shakadb

v1.0.5

Published

Shaka Database

Downloads

32

Readme

ShakaDB — Prisma/MySQL package for the Shaka ecosystem

ShakaDB is a self-contained Prisma + MySQL data layer you can consume as an NPM package. It ships with a production-ready Prisma client, a normalized schema for surf destinations, ergonomic cleanup/seed helpers, ESM-friendly Jest setup, Docker compose for local MySQL, and CI that validates migrations, build, lint, and tests.

What’s inside

  • Prisma schema + generated client

    • Entities: SurfSpot, PhotoThumbnail (enum sizes), Influencer, Traveller, SurfBreakType
    • Pivots: SurfSpot_Influencer, SurfSpot_Traveller, SurfSpot_SurfBreakType
    • Indexed date fields for peak season queries; composite PKs for pivots
    • Multi-platform binaryTargets for CI/CD environments
  • Typed client export Import once, reuse everywhere:

    import prisma from "shakadb/lib/client";
  • Seed & data tooling

    • seed() with SKIP_CLEANUP switch for fast iterative runs
    • Safe deletion with retries/exponential backoff
    • “Quick or purge” utilities for small vs. large tables (batch deletes with paging)
  • Test harness (ESM)

    • Jest + ts-jest (ESM preset), global setup pushes schema & seeds DB
    • Example CRUD tests for SurfSpot
  • DX & quality gates

    • TypeScript strict mode, path aliases, incremental builds
    • ESLint (flat config) + Prettier + Husky + lint-staged
    • Commit hygiene (Commitlint, Commitizen)
  • Docker & CI

    • docker-compose with MySQL 8.3 and a one-shot seed job
    • GitHub Actions pipeline: install → prisma generate → build → test → lint

Quick start

  1. Install & configure
npm i shakadb
# provide DATABASE_URL, e.g.
# mysql://user:pass@localhost:3306/shaka
  1. Generate (only if you’re developing ShakaDB itself)
npm run prisma:generate
  1. Use the client
import prisma from "shakadb/lib/client";

const spots = await prisma.surfSpot.findMany({
  include: { Photo: { include: { Thumbnail: true } } },
});
  1. Seed data (optional)
# default: cleanup + seed
npm run prisma:db:seed
# skip cleanup for speed
SKIP_CLEANUP=true npm run prisma:db:seed

Scripts you’ll actually use

  • npm run dev – run the seed entry (prisma/main.ts) with env from .env.local
  • npm run build – compile TypeScript + fix path aliases
  • npm run test / test:ci – ESM-friendly Jest; globalSetup pushes schema & seeds
  • npm run prisma:db:push|seed|migrate:*|studio – Prisma workflows
  • npm run db:cleanup – invoke safe purge helpers

Docker (local DB in one command)

docker compose up --build
# The shakadb service will push the schema and seed then exit ("Done")

DATABASE_URL is wired to the internal MySQL service (mysql://root:shaka_root_pw@mysql:3306/shaka).

CI pipeline (GitHub Actions)

  • Spins up MySQL 8.3
  • Creates .env from secrets → prisma generate → build → test:ci → lint

Schema snapshot (high level)

  • SurfSpot ⟶ has many Photo
  • Photo ⟶ has many Thumbnail (small|large|full)
  • SurfSpotInfluencer (M:N)
  • SurfSpotTraveller (M:N)
  • SurfSpotSurfBreakType (M:N)

Utilities (purge/cleanup at scale)

import {
  quickOrPurgeById,
  quickOrPurgeByCompositeKey,
  asBasicDelegate,
  deleteSafely,
} from "shakadb/helpers";

// Example: purge a pivot table efficiently
await quickOrPurgeByCompositeKey(
  "surfspot_influencer",
  asBasicDelegate(prisma.surfSpot_Influencer),
  ["surf_spot_id", "influencer_id"],
  { smallThreshold: 20_000, deleteChunkSize: 800 }
);

Package entry points

  • shakadb or shakadb/lib/client → Prisma client (built)
  • shakadb/helpers → purge + seed helpers
  • shakadb/seedseed() function
  • shakadb/generated/prisma-client → raw generated client (types + JS)
  • shakadb/prisma/schema.prisma → schema source