desolid
    TypeScript icon, indicating that this package has built-in type declarations

    0.4.8¬†‚Äʬ†Public¬†‚Äʬ†Published

    ūü§Ė Desolid: Single file BaaS

    Downloads Version License License

    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:

    1. Install NodeJS

    2. Create a desolid schema file: schema.graphql

      extend enum UserGroup {
          Editor
          Author
      }
       
      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]
      }
    3. 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:
    ____                         _   _       _
    |  _ \    ___   ___    ___   | | (_)   __| |
    | | | |  / _ \ / __|  / _ \  | | | |  / _` |
    | |_| | |  __/ \__ \ | (_) | | | | | | (_| |
    |____/   \___| |___/  \___/  |_| |_|  \__,_|
     
    ūü§Ė¬†Desolid:¬†Single¬†file¬†self¬†hosted¬†backend¬†as¬†a¬†service
    ūüĒ•¬†v0.2.11¬†running¬†in¬†"win32"¬†on¬†"./home/user/app"
     
    [2020-05-20 10:38:57]  INFO  Compiling Schema ...
    [2020-05-20 10:38:57]  WARN  Authentication Secret value didn't set into configuration file. the genrated JWT tokens will expire on every restart.
    [2020-05-20 10:38:57]  INFO  Connecting to database ...
    [2020-05-20 10:38:57]  INFO  Connected to "sqlite://./databse.sqlite"
    [2020-05-20 10:38:57]  INFO  Starting server ...
    [2020-05-20 10:38:57]  INFO  Server is running on http://localhost:3000
    [2020-05-20¬†10:38:57]¬†¬†INFO¬†¬†ūüöĬ†in¬†488ms
    1. Open http://localhost:3000/ on your browser.

    Acknowledgement

    This project is based On these cool stuffs:

    Install

    npm i desolid

    DownloadsWeekly Downloads

    1

    Version

    0.4.8

    License

    MIT

    Unpacked Size

    857 kB

    Total Files

    128

    Last publish

    Collaborators

    • khorzu