🤖 Desolid: Single file BaaS
Open source, single file, self hosted, Backend as a service.
Documentation: https://desolid.netlify.app/
Blog: https://dev.to/desolid
Features
- GraphQL API: CRUDs
- Authentication & Authorization: inline definition
- File storage: Local and S3 support
- Database agnostic: SQLite, MariaDB, PostgreSQL, MS SQL Server
Quick start
Let's create an api for a blog service:
-
Install NodeJS
-
Create a desolid schema file:
schema.graphql
extend enum UserGroup {EditorAuthor}extend type User@model@authorization(CREATE: [Admin, Editor]READ: [Admin, "$user.id == {{id}}"]UPDATE: [Admin, "$user.id == {{id}}"]DELETE: [Admin] #) {avatar: File @upload(accept: ["image/jpeg"], size: { max: "5", min: "0.1" })}"""This is a description of a Post"""type Post@model@authorization(READ: [Admin, Editor, "{{published}} || $user.id == {{author.id}}"]CREATE: [Admin, Editor, "$user.group == 'Author' && !$input.published"]UPDATE: [Admin, Editor, "$user.id == {{author.id}} && !$input.published"]DELETE: [Admin, Editor, "!{{published}} && $user.id == {{author.id}}"] #) {id: ID!createdAt: DateTime!updatedAt: DateTime!author: User!title: String!content: String!published: Boolean!categories: [Category]}"""This is a description of a Category"""type Category@model@authorization(CREATE: [Admin, Editor]UPDATE: [Admin, Editor]DELETE: [Admin, Editor] #) {id: ID!createdAt: DateTime!updatedAt: DateTime!name: String!posts: [Post]} -
Run this command on your terminal
npx desolid- Compiles the schema and creates CRUDs
- Creates and uses by default a SQLite database on the root
./database.sqlite
- Stores files under
./upload
directory - Logs errors and warnings on
./desolid.log
file - Must output something like this:
____ _ _ _| _ \ ___ ___ ___ | | __| || | | | / _ \ / __| / _ \ | | | | / _` || |_| | | __/ \__ \ | | | | | | |
- Open http://localhost:3000/ on your browser.
Acknowledgement
This project is based On these cool stuffs:
- TypeScript: https://github.com/Microsoft/TypeScript
- Sequlize: https://github.com/sequelize/sequelize
- Nexus Schema: https://github.com/graphql-nexus/schema
- GraphQL Yoga: https://github.com/prisma-labs/graphql-yoga
- FlyDrive: https://github.com/Slynova-Org/flydrive