1.2.1 • Published 9 months ago

@daveyplate/supabase-swr-entities v1.2.1

Weekly downloads
-
License
ISC
Repository
-
Last release
9 months ago

supabase-swr-entities

Installation

npm install @daveyplate/supabase-swr-entities

Usage

Entity Schema

Create schema JSON file in root directory:

`entity.schemas.json'

[
    {
        "table": "profiles",
        "authenticate": false,
        "disableList": false,
        "select": ["id", "full_name", "avatar_url", "created_at", "updated_at"],
        "defaultOrder": "-created_at",
        "defaultParams": {
            "full_name_neq": null
        },
        "requiredParams": {
            "deactivated": false
        }
    }
]

Pages Router Example

/pages/api/[entities]/[entity_id].js

import { entityRoute } from '@daveyplate/supabase-swr-entities/server'
import { createClient } from '@/utils/supabase/api'

export default async (req, res) => {
    const supabase = createClient(req, res)

    const response = await entityRoute({
        supabase,
        ...req
    })

    res.status(response.status).json(response.body)
}

/pages/api/[entities]/index.js

import { entitiesRoute } from '@daveyplate/supabase-swr-entities/server'
import { createClient } from '@/utils/supabase/api'

export default async (req, res) => {
    const supabase = createClient(req, res)

    const response = await entitiesRoute({
        supabase,
        ...req
    })

    res.status(response.status).json(response.body)
}

App Router Example

/app/api/[entities]/[entity_id]/route.js

import { entityRoute } from '@daveyplate/supabase-swr-entities/server'
import { createClient } from '@/utils/supabase/server'

async function handler(request, context) {
    const params = await context.params

    const { nextUrl: { search } } = request
    const urlSearchParams = new URLSearchParams(search)
    const query = Object.fromEntries(urlSearchParams.entries())

    const body = request.method == "POST" || request.method == "PATCH" ? await request.json() : null
    const supabase = createClient()

    const response = await entityRoute({
        supabase,
        method: request.method,
        headers: request.headers,
        query: { ...params, ...query },
        body
    })

    return Response.json(response.body, {
        status: response.status
    })
}

export async function GET(request, context) {
    return await handler(request, context)
}

export async function PATCH(request, context) {
    return await handler(request, context)
}

export async function DELETE(request, context) {
    return await handler(request, context)
}

/app/api/[entities]/route.js

import { entitiesRoute } from '@daveyplate/supabase-swr-entities/server'
import { createClient } from '@/utils/supabase/server'

async function handler(request, context) {
    const params = await context.params

    const { nextUrl: { search } } = request
    const urlSearchParams = new URLSearchParams(search)
    const query = Object.fromEntries(urlSearchParams.entries())

    const body = request.method == "POST" || request.method == "PATCH" ? await request.json() : null
    const supabase = createClient()

    console.log(search)
    const response = await entitiesRoute({
        supabase,
        method: request.method,
        headers: request.headers,
        query: { ...params, ...query },
        body
    })

    return Response.json(response.body, {
        status: response.status
    })
}

export async function GET(request, context) {
    return await handler(request, context)
}

export async function PATCH(request, context) {
    return await handler(request, context)
}

export async function POST(request, context) {
    return await handler(request, context)
}

export async function DELETE(request, context) {
    return await handler(request, context)
}
1.2.0

9 months ago

1.2.1

9 months ago

1.1.9

9 months ago

1.1.8

9 months ago

1.1.7

9 months ago

1.1.6

9 months ago

1.1.5

9 months ago

1.1.4

9 months ago

1.1.12

9 months ago

1.1.11

9 months ago

1.1.10

9 months ago

1.1.16

9 months ago

1.1.15

9 months ago

1.1.14

9 months ago

1.1.13

9 months ago

1.1.19

9 months ago

1.1.18

9 months ago

1.1.17

9 months ago

1.1.1

9 months ago

1.1.0

9 months ago

1.1.3

9 months ago

1.1.2

9 months ago

1.0.19

9 months ago

1.0.18

9 months ago

1.0.22

9 months ago

1.0.21

9 months ago

1.0.20

9 months ago

1.0.26

9 months ago

1.0.25

9 months ago

1.0.24

9 months ago

1.0.23

9 months ago

1.0.29

9 months ago

1.0.28

9 months ago

1.0.27

9 months ago

1.0.17

9 months ago

1.0.16

9 months ago

1.0.15

9 months ago

1.0.14

9 months ago

1.0.13

9 months ago

1.0.12

9 months ago

1.0.11

10 months ago

1.0.10

10 months ago

1.0.9

10 months ago

1.0.8

10 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago