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

@tspvivek/baasix

v0.0.12

Published

A flexible headless CMS with dynamic schema management and CRUD API creation

Downloads

769

Readme

Baasix

A flexible headless CMS with dynamic schema management and CRUD API creation.

Features

  • 🔄 Dynamic Schema Management
  • 🔐 Built-in Authentication & Authorization
  • 📁 File Handling & Storage (Local/S3)
  • 🔍 Full-text Search
  • 🗺️ PostGIS Support
  • 💾 Redis Caching
  • 📧 Email Service
  • 🎣 Extensible Hook System
  • 🔌 REST API
  • 📚 Comprehensive Documentation

Installation

npm install baasix

Quick Start

import Baasix from 'baasix';

const config = {
  port: 3000,
  adminPath: '/admin',
  cacheTTL: 30000,
  redisUrl: 'redis://localhost:6379'
};

const cms = new Baasix(config);

cms.start()
   .then(() => console.log('Baasix CMS is running'))
   .catch(console.error);

Environment Variables

Create a .env file in your project root:

# Database
DATABASE_URL=postgresql://user:password@localhost:5432/baasix
DATABASE_POSTGIS=true

# Auth
SECRET_KEY=your-secret-key
ACCESS_TOKEN_EXPIRES_IN=3600
AUTH_APP_URL=http://localhost:3000

# Cache
CACHE_ENABLED=true
CACHE_TTL=30000
CACHE_REDIS_URL=redis://localhost:6379
CACHE_SIZE_GB=1

# Storage
STORAGE_SERVICES_ENABLED=local,s3
STORAGE_DEFAULT_SERVICE=local
LOCAL_STORAGE_PATH=./uploads
LOCAL_STORAGE_DRIVER=LOCAL

# S3 Configuration (if using)
S3_STORAGE_ACCESS_KEY_ID=your-access-key
S3_STORAGE_SECRET_ACCESS_KEY=your-secret-key
S3_STORAGE_REGION=your-region
S3_STORAGE_BUCKET=your-bucket
S3_STORAGE_ENDPOINT=your-endpoint

# Mail
MAIL_SENDERS_ENABLED=smtp
MAIL_DEFAULT_SENDER=smtp
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=your-email
SMTP_PASS=your-password
[email protected]

Documentation

Schema Management

Create a new schema:

const schema = {
  name: "Product",
  fields: {
    id: { type: "UUID", primaryKey: true, defaultValue: { type: "UUIDV4" } },
    name: { type: "String", allowNull: false },
    price: { type: "Double", allowNull: false },
    description: { type: "Text" },
    category: {
      type: "String",
      allowNull: false,
      relType: "BelongsTo",
      target: "categories"
    }
  }
};

await Baasix.Services.SchemaManager.updateModel('products', schema);

File Handling

const { StorageService } = Baasix.Services;

// Upload file
const fileData = {
  file: req.files.file,
  metadata: {
    title: 'My File',
    description: 'File description'
  }
};

const fileId = await StorageService.createOne(fileData);

Custom Hooks

const { HooksService } = Baasix.Services;

// Register a hook
HooksService.registerHook('products', 'items.create', async (data) => {
  // Modify data before creation
  data.createdAt = new Date();
  return data;
});

Contributing

Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.

License

This project is licensed under the MIT License - see the LICENSE file for details.