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 🙏

© 2024 – Pkg Stats / Ryan Hefner

pouchdb-mysql

v1.0.1

Published

Local persistent database with optional synchronization to and from MySQL.

Downloads

9

Readme

PouchDB + MySQL

Local persistent database with optional synchronization to and from MySQL.

Powered by PouchDB and PHP CRUD API.

🚨 No more maintenance - you can use https://github.com/scriptPilot/dexie-mysql-sync

Installation

  1. Install Docker and Node.js

  2. Create a new app project:

    npm create vite
  3. Add a PHP backend

    Optional, for authentication and synchronization features.

    npx add-php-backend
  4. Install the local database:

    npm install pouchdb-mysql
  5. Create or extend the vite.config.js file:

    export default {
      define: {
        global: {}
      }
    }

SQL Schema

Required columns and primary key for SQL tables which should be synchronized:

CREATE TABLE `tableName` (
  `$key` varchar(36) NOT NULL PRIMARY KEY,
  `$deleted` int(1) NOT NULL DEFAULT 0,
  `$updated` bigint(14) NOT NULL DEFAULT 0,
  `$synchronized` bigint(14) NOT NULL DEFAULT 0,
  ...
);

Usage

Import the module

import useDB from 'pouchdb-mysql'

Initialize a database

// Initialize with default database name and API endpoint
const db = useDB()

// Initialize with custom database name and default API endpoint
const db = useDB('customDatabaseName')

// Initialize with custom database name and API endpoint
const db = useDB('customDatabaseName', 'https://example.com/api.php')

Create collections

// Local only
const collection = db.collection('collection')

// Local with full sync to and from remote
const collection = db.collection('collection', 'table')

// Local with full sync to and filtered sync from remote
const collection = db.collection('collection', 'table?filter=column,eq,something')

// Local with full sync to and column filtered sync from remote
const collection = db.collection('collection', 'table?include=firstColumn,secondColumn')

// Local with full sync to remote
const collection = db.collection('collection', 'to:table')

// Local with full sync from remote
const collection = db.collection('collection', 'from:table')

// Local with filtered sync from remote
const collection = db.collection('collection', 'from:table?filter=column,eq,something')

Manage documents

// Add a new doc with given $key or automatic UUIDv4 key
const doc = await collection.add(docWithOrWithoutKey)

// Update a doc with given $key
const doc = await collection.update(key, updates)

// Remove a doc with a given $key
await collection.remove(keyOrDocWithKey)

List documents

// List all documents
const docs = await collection.list()

// List all documents
const docs = await collection.list()

// List all documents, callback initially and on any change
collection.list(onChangeCallback(docs))

// List all documents, with callback, include deleted documents
collection.list(onChangeCallback(docs), true)

// List all documents, no callback, include deleted documents
const docs = await collection.list(null, true)

// Document from a collection, returns null if not found or deleted
const doc = await collection.get(key)

// Document from a collection, returns null if not found
const doc = await collection.get(key, true)

Manage authentication

For the API configuration, please refer to the PHP CRUD API documentation.

// Get details for the current user
const user = await db.me()

// Register a new user
const user = await db.register(username, password)

// Login an existing user
const user = await db.login(username, password)

// Change the password
const user = await db.password(username, password, newPassword)

// Logout
await db.logout()

Development (this repository)

  • Apply changes
  • Run demo app with cd react && npm install && npm run dev
  • Commit changes with an issue (closure) reference
  • Run npm version patch | minor | major and push changes
  • Let the workflow manage the release to GitHub and NPM