0.2.229 • Published 2 days ago

mufasa v0.2.229

Weekly downloads
3
License
MIT
Repository
github
Last release
2 days ago

Mufasa (Monode's Fullstack Store)

An easy way to connect your database to your UI. (A local-first, class-based ORM) Very much a work in progress.

Features:

  • Fully Reactive
  • Supports both documents and files
  • Changes made offline will be synced later
  • Provides good defaults but is highly customizable
  • Should work with any front-end, back-end, or platform (only tested with Solid JS, Firebase, and Capacitor JS so far)

Quick Start

Set Up Mufasa

Install Mufasa via npm i mufasa. To update to the latest version run npm i mufasa@latest.

Import and initialize Mufasa anywhere in your app.

import { initializeMufasa } from "mufasa";
import { solidPersister } from "mufasa/solid-js";
import { capacitorPersister } from "mufasa/capacitor";
import { firebasePersister } from "mufasa/firebase";

export const mfs = initializeMufasa({
  sessionPersister: solidPersister(),
  // Device and cloud persisters are optional.
  devicePersister: capacitorPersister(),
  cloudPersister: firebasePersister(),
});

Define Document Types

Define your document types in any file.

import { prop, list, formula } from "mufasa";

export class Course extends mfs.Doc(`Course`) {
  // Use `prop(TypeClass)` to specify a property that will be saved to the database
  name = prop(String);

  // An initial value can be specified
  description = prop(String, ``);

  // Props can reference document types
  teacher = prop(Teacher);

  // Use `[TypeClass, null]` to define a nullable prop
  teachersAssistant = prop([Student, null], null);

  // Use `list(DocClass)` to define a document list
  readonly students = list(Student);
}

export class Teacher extends mfs.Doc(`Teacher`) {
  firstName = prop(String);
  lastName = prop(String);
  // Use formula to make reactive, read-only props
  readonly fullName = formula(() => `${this.firstName} ${this.lastName}`);

  // `list(DocClass, "propName") can be used to define one-to-many lists
  readonly courses = list(Course, `teacher`);
}

export class Student extends mfs.Doc(`Student`) {
  firstName = prop(String);
  lastName = prop(String);
  readonly fullName = formula(() => `${this.firstName} ${this.lastName}`);

  // `list(DocClass, "propName") to define many-to-many lists
  readonly courses = list(Course, `students`);
}

Use Documents in your UI

import { Teacher } from "./Teacher";
import { Course } from "./Course";
import { For } from "solid-js";

function TeacherUI(teacher: Teacher) {
  return (
    <div>
      {/* Will automatically update when this device or any other device renames the teacher. */}
      <h1>{teacher.fullName}</h1>
      <button
        onClick={() => {
          // Documents must be created using the `create` method
          Course.create({
            name: `Math 101`,
            teacher: teacher,
          });
        }}
      >
        Add Course
      </button>
      <button
        onClick={() => {
          /* Simply assign to a prop and the update will be sent to the database
           * and then to any other mobile devices that are listening. */
          student.lastName = ``;
        }}
      >
        Change Last Name
      </button>
      <For each={teacher.courses}>{(course) => <li>{course.name}</li>}</For>
    </div>
  );
}

See More

That should be enough to get you something useful. For more take a look at the "Deep Dive" section.

Deep Dive

0.2.229

2 days ago

0.2.228

2 days ago

0.2.227

2 days ago

0.2.226

2 days ago

0.2.225

2 days ago

0.2.224

2 days ago

0.2.223

2 days ago

0.2.222

2 days ago

0.2.221

3 days ago

0.2.220

3 days ago

0.2.219

3 days ago

0.2.218

3 days ago

0.2.217

3 days ago

0.2.216

3 days ago

0.2.215

3 days ago

0.2.214

5 days ago

0.2.213

5 days ago

0.2.212

5 days ago

0.2.211

5 days ago

0.2.210

6 days ago

0.2.209

6 days ago

0.2.208

6 days ago

0.2.207

6 days ago

0.2.206

6 days ago

0.2.205

6 days ago

0.2.204

6 days ago

0.2.203

6 days ago

0.2.202

6 days ago

0.2.201

6 days ago

0.2.199

6 days ago

0.2.198

6 days ago

0.2.197

6 days ago

0.2.196

6 days ago

0.2.195

6 days ago

0.2.194

7 days ago

0.2.193

7 days ago

0.2.200

6 days ago

0.2.192

8 days ago

0.2.189

12 days ago

0.2.188

12 days ago

0.2.187

12 days ago

0.2.186

13 days ago

0.2.185

13 days ago

0.2.190

12 days ago

0.2.184

14 days ago

0.2.183

15 days ago

0.2.182

19 days ago

0.2.181

21 days ago

0.2.180

24 days ago

0.2.179

26 days ago

0.2.178

26 days ago

0.2.177

27 days ago

0.2.176

27 days ago

0.2.175

27 days ago

0.2.174

29 days ago

0.2.173

1 month ago

0.2.172

1 month ago

0.2.171

1 month ago

0.2.170

1 month ago

0.2.169

1 month ago

0.2.168

1 month ago

0.2.167

1 month ago

0.2.166

1 month ago

0.2.165

1 month ago

0.2.164

1 month ago

0.2.163

1 month ago

0.2.162

1 month ago

0.2.161

1 month ago

0.2.160

1 month ago

0.2.159

1 month ago

0.2.158

1 month ago

0.2.157

1 month ago

0.2.156

1 month ago

0.2.155

1 month ago

0.2.154

1 month ago

0.2.153

1 month ago

0.2.152

1 month ago

0.2.151

1 month ago

0.2.150

1 month ago

0.2.149

1 month ago

0.2.148

1 month ago

0.2.147

1 month ago

0.2.146

1 month ago

0.2.145

1 month ago

0.2.144

1 month ago

0.2.143

1 month ago

0.2.141

1 month ago

0.2.140

1 month ago

0.2.139

1 month ago

0.2.138

1 month ago

0.2.137

1 month ago

0.2.136

1 month ago

0.2.135

1 month ago

0.2.132

1 month ago

0.2.131

1 month ago

0.2.130

1 month ago

0.2.129

1 month ago

0.2.128

1 month ago

0.2.127

1 month ago

0.2.126

1 month ago

0.2.125

1 month ago

0.2.124

1 month ago

0.2.123

1 month ago

0.2.122

1 month ago

0.2.121

1 month ago

0.2.120

1 month ago

0.2.118

1 month ago

0.2.117

1 month ago

0.2.116

1 month ago

0.2.115

1 month ago

0.2.114

1 month ago

0.2.113

1 month ago

0.2.112

1 month ago

0.2.111

1 month ago

0.2.110

1 month ago

0.2.109

1 month ago

0.2.108

1 month ago

0.2.107

1 month ago

0.2.106

1 month ago

0.2.105

1 month ago

0.2.104

1 month ago

0.2.103

1 month ago

0.2.102

1 month ago

0.2.96

1 month ago

0.2.99

1 month ago

0.2.98

1 month ago

0.2.97

1 month ago

0.2.101

1 month ago

0.2.100

1 month ago

0.2.95

2 months ago

0.2.94

2 months ago

0.2.93

2 months ago

0.2.92

2 months ago

0.2.91

2 months ago

0.2.90

2 months ago

0.2.89

2 months ago

0.2.88

2 months ago

0.2.87

2 months ago

0.2.85

2 months ago

0.2.86

2 months ago

0.2.83

2 months ago

0.2.82

2 months ago

0.2.81

2 months ago

0.2.80

2 months ago

0.2.79

2 months ago

0.2.78

2 months ago

0.2.77

2 months ago

0.2.76

2 months ago

0.2.74

2 months ago

0.2.73

2 months ago

0.2.72

2 months ago

0.2.71

2 months ago

0.2.70

2 months ago

0.2.75

2 months ago

0.2.63

2 months ago

0.2.62

2 months ago

0.2.61

2 months ago

0.2.60

2 months ago

0.2.69

2 months ago

0.2.68

2 months ago

0.2.67

2 months ago

0.2.66

2 months ago

0.2.65

2 months ago

0.2.64

2 months ago

0.2.52

2 months ago

0.2.51

2 months ago

0.2.50

2 months ago

0.2.59

2 months ago

0.2.58

2 months ago

0.2.57

2 months ago

0.2.56

2 months ago

0.2.55

2 months ago

0.2.54

2 months ago

0.2.53

2 months ago

0.2.41

2 months ago

0.2.40

2 months ago

0.2.49

2 months ago

0.2.48

2 months ago

0.2.47

2 months ago

0.2.46

2 months ago

0.2.45

2 months ago

0.2.44

2 months ago

0.2.43

2 months ago

0.2.42

2 months ago

0.2.39

2 months ago

0.2.30

2 months ago

0.2.38

2 months ago

0.2.37

2 months ago

0.2.36

2 months ago

0.2.34

2 months ago

0.2.33

2 months ago

0.2.32

2 months ago

0.2.31

2 months ago

0.2.27

2 months ago

0.2.26

2 months ago

0.2.25

2 months ago

0.2.24

2 months ago

0.2.23

2 months ago

0.2.22

2 months ago

0.2.21

2 months ago

0.2.20

2 months ago

0.2.19

2 months ago

0.2.18

2 months ago

0.2.17

2 months ago

0.0.205

2 months ago

0.0.204

2 months ago

0.0.203

2 months ago

0.0.202

2 months ago

0.0.209

2 months ago

0.0.208

2 months ago

0.0.207

2 months ago

0.0.206

2 months ago

0.2.16

2 months ago

0.2.15

2 months ago

0.2.14

2 months ago

0.2.13

2 months ago

0.2.12

2 months ago

0.0.201

2 months ago

0.2.11

2 months ago

0.0.200

2 months ago

0.2.10

2 months ago

0.0.214

2 months ago

0.0.213

2 months ago

0.0.212

2 months ago

0.0.211

2 months ago

0.0.197

2 months ago

0.0.196

2 months ago

0.0.195

2 months ago

0.0.194

2 months ago

0.0.199

2 months ago

0.0.198

2 months ago

0.2.1

2 months ago

0.2.0

2 months ago

0.2.29

2 months ago

0.2.28

2 months ago

0.2.7

2 months ago

0.2.6

2 months ago

0.2.9

2 months ago

0.2.8

2 months ago

0.2.3

2 months ago

0.2.2

2 months ago

0.2.5

2 months ago

0.2.4

2 months ago

0.0.193

3 months ago

0.0.192

4 months ago

0.0.191

4 months ago

0.0.190

4 months ago

0.0.189

4 months ago

0.0.188

4 months ago

0.0.187

4 months ago

0.0.159

7 months ago

0.0.158

7 months ago

0.0.153

7 months ago

0.0.152

7 months ago

0.0.151

7 months ago

0.0.150

7 months ago

0.0.157

7 months ago

0.0.156

7 months ago

0.0.155

7 months ago

0.0.154

7 months ago

0.0.128

7 months ago

0.0.127

7 months ago

0.0.126

7 months ago

0.0.169

7 months ago

0.0.125

7 months ago

0.0.164

7 months ago

0.0.163

7 months ago

0.0.162

7 months ago

0.0.161

7 months ago

0.0.168

7 months ago

0.0.167

7 months ago

0.0.166

7 months ago

0.0.165

7 months ago

0.0.160

7 months ago

0.0.139

7 months ago

0.0.138

7 months ago

0.0.137

7 months ago

0.0.136

7 months ago

0.0.175

5 months ago

0.0.131

7 months ago

0.0.174

5 months ago

0.0.130

7 months ago

0.0.173

5 months ago

0.0.172

7 months ago

0.0.179

5 months ago

0.0.135

7 months ago

0.0.178

5 months ago

0.0.134

7 months ago

0.0.177

5 months ago

0.0.133

7 months ago

0.0.176

5 months ago

0.0.132

7 months ago

0.0.171

7 months ago

0.0.170

7 months ago

0.0.148

7 months ago

0.0.147

7 months ago

0.0.186

5 months ago

0.0.142

7 months ago

0.0.185

5 months ago

0.0.141

7 months ago

0.0.184

5 months ago

0.0.140

7 months ago

0.0.183

5 months ago

0.0.146

7 months ago

0.0.145

7 months ago

0.0.144

7 months ago

0.0.143

7 months ago

0.0.182

5 months ago

0.0.181

5 months ago

0.0.180

5 months ago

0.0.117

8 months ago

0.0.116

8 months ago

0.0.115

8 months ago

0.0.114

8 months ago

0.0.119

8 months ago

0.0.118

8 months ago

0.0.113

8 months ago

0.0.112

8 months ago

0.0.111

8 months ago

0.0.110

8 months ago

0.0.106

8 months ago

0.0.105

8 months ago

0.0.104

8 months ago

0.0.103

8 months ago

0.0.109

8 months ago

0.0.108

8 months ago

0.0.107

8 months ago

0.0.102

8 months ago

0.0.101

8 months ago

0.0.100

8 months ago

0.0.98

8 months ago

0.0.99

8 months ago

0.0.80

9 months ago

0.0.3

8 years ago

0.0.2

8 years ago