iodm 0.0.3 → 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -2
- package/package.json +7 -4
- package/dist/configure.d.ts +0 -10
- package/dist/configure.d.ts.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +0 -1
- package/dist/index.es.js +0 -1211
- package/dist/model/index.d.ts +0 -7
- package/dist/model/index.d.ts.map +0 -1
- package/dist/model/types.d.ts +0 -26
- package/dist/model/types.d.ts.map +0 -1
- package/dist/models.d.ts +0 -3
- package/dist/models.d.ts.map +0 -1
- package/dist/schema/base-schema.d.ts +0 -21
- package/dist/schema/base-schema.d.ts.map +0 -1
- package/dist/schema/index.d.ts +0 -32
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/non-primitive/array/index.d.ts +0 -12
- package/dist/schema/non-primitive/array/index.d.ts.map +0 -1
- package/dist/schema/non-primitive/ref/index.d.ts +0 -17
- package/dist/schema/non-primitive/ref/index.d.ts.map +0 -1
- package/dist/schema/non-primitive/ref-array/index.d.ts +0 -15
- package/dist/schema/non-primitive/ref-array/index.d.ts.map +0 -1
- package/dist/schema/primitive/number.ts/index.d.ts +0 -9
- package/dist/schema/primitive/number.ts/index.d.ts.map +0 -1
- package/dist/schema/primitive/string.ts/index.d.ts +0 -5
- package/dist/schema/primitive/string.ts/index.d.ts.map +0 -1
- package/dist/schema/types.d.ts +0 -9
- package/dist/schema/types.d.ts.map +0 -1
- package/dist/schema/validation-rule/min.d.ts +0 -11
- package/dist/schema/validation-rule/min.d.ts.map +0 -1
- package/dist/schema/validation-rule/required.d.ts +0 -5
- package/dist/schema/validation-rule/required.d.ts.map +0 -1
- package/dist/schema/validation-rule/type.d.ts +0 -13
- package/dist/schema/validation-rule/type.d.ts.map +0 -1
- package/dist/test.d.ts +0 -2
- package/dist/test.d.ts.map +0 -1
- package/dist/types.d.ts +0 -2
- package/dist/types.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,4 +1,144 @@
|
|
|
1
|
-
# iodm
|
|
1
|
+
# iodm
|
|
2
2
|
|
|
3
|
+
`iodm` is an Object Data Modeling library for IndexedDB. It provides a schema-driven API for defining models, validating document shapes, and using IndexedDB as a persistent storage backend in browser applications.
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Schema-based model definition with primitives, arrays, references, dates, sets, maps, and virtuals
|
|
8
|
+
- IndexedDB initialization utility with upgrade hooks
|
|
9
|
+
- Model methods for insert, update, delete, find, and query operations
|
|
10
|
+
- Plugin support for schema extensions and behaviors
|
|
11
|
+
- Type-safe model definitions with TypeScript support
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install iodm
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick Start with React
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import React, { useEffect } from 'react';
|
|
23
|
+
import iodm, { Schema, configureIDB } from 'iodm';
|
|
24
|
+
|
|
25
|
+
interface User {
|
|
26
|
+
name?: string;
|
|
27
|
+
email: string;
|
|
28
|
+
age?: number;
|
|
29
|
+
isActive?: boolean;
|
|
30
|
+
createdAt?: Date;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const userSchema = new Schema<User>({
|
|
34
|
+
name: String,
|
|
35
|
+
email: { type: String, required: true },
|
|
36
|
+
age: { type: Number, min: 0 },
|
|
37
|
+
isActive: { type: Boolean, default: true },
|
|
38
|
+
createdAt: Date,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const UserModel = iodm.model('User', userSchema);
|
|
42
|
+
|
|
43
|
+
const configurePromise = configureIDB({
|
|
44
|
+
db: 'MyAppDB',
|
|
45
|
+
version: 1,
|
|
46
|
+
models: [UserModel],
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
configurePromise.then(() => {
|
|
50
|
+
createRoot(document.getElementById('root')!).render(<App />);
|
|
51
|
+
}).catch(() => {
|
|
52
|
+
createRoot(document.getElementById('root')!).render(<div>Error initializing database</div>);
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Quick Start with TypeScript
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import iodm, { Schema, configureIDB } from 'iodm';
|
|
60
|
+
|
|
61
|
+
interface User {
|
|
62
|
+
name?: string;
|
|
63
|
+
email: string;
|
|
64
|
+
age?: number;
|
|
65
|
+
isActive?: boolean;
|
|
66
|
+
createdAt?: Date;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const userSchema = new Schema<User>({
|
|
70
|
+
name: String,
|
|
71
|
+
email: { type: String, required: true },
|
|
72
|
+
age: { type: Number, min: 0 },
|
|
73
|
+
isActive: { type: Boolean, default: true },
|
|
74
|
+
createdAt: Date,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const UserModel = iodm.model('User', userSchema);
|
|
78
|
+
|
|
79
|
+
async function main() {
|
|
80
|
+
await configureIDB({
|
|
81
|
+
db: 'MyAppDB',
|
|
82
|
+
version: 1,
|
|
83
|
+
models: [UserModel],
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const newUser = await UserModel.insertOne({
|
|
87
|
+
name: 'Alice',
|
|
88
|
+
email: 'alice@example.com',
|
|
89
|
+
age: 28,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
console.log('Created user:', newUser);
|
|
93
|
+
|
|
94
|
+
const users = await UserModel.find({ isActive: true });
|
|
95
|
+
console.log('Active users:', users);
|
|
96
|
+
|
|
97
|
+
await UserModel.updateOne({ _id: newUser._id }, { age: 29 });
|
|
98
|
+
await UserModel.deleteOne({ _id: newUser._id });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
main().catch(console.error);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Model Definition
|
|
105
|
+
|
|
106
|
+
Use `new Schema()` to define the structure of your documents. Primitive fields can be specified directly, or with a configuration object for validation and default values.
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
const productSchema = new Schema({
|
|
110
|
+
title: { type: String, required: true },
|
|
111
|
+
price: { type: Number, min: 0 },
|
|
112
|
+
tags: [String],
|
|
113
|
+
publishedAt: Date,
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Database Configuration
|
|
118
|
+
|
|
119
|
+
`configureIDB()` opens the browser IndexedDB database and initializes each model. Call it before using your models in the app.
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
import { configureIDB } from 'iodm';
|
|
123
|
+
|
|
124
|
+
await configureIDB({
|
|
125
|
+
db: 'MyAppDB',
|
|
126
|
+
version: 1,
|
|
127
|
+
models: [UserModel],
|
|
128
|
+
});
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Optional hooks `onUpgradeNeededPre` and `onUpgradeNeededPost` can be supplied to run logic during database upgrades.
|
|
132
|
+
|
|
133
|
+
## API
|
|
134
|
+
|
|
135
|
+
### Exports
|
|
136
|
+
|
|
137
|
+
- `default` / `Iodm` — default ODM instance for creating models and registering plugins
|
|
138
|
+
- `Schema` — schema constructor for defining model structures
|
|
139
|
+
- `configureIDB` — IndexedDB setup helper
|
|
140
|
+
- `AbstractModel`, `AbstractModelClass` — base classes for advanced model use
|
|
141
|
+
|
|
142
|
+
## Documentation
|
|
143
|
+
|
|
144
|
+
Github [Documentation link](https://github.com/SanthoshKumar9028/idb-odm/blob/main/packages/iodm/docs/pages/iodm.md) for detailed API docs and advanced examples.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "iodm",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "1.0.0-rc.0",
|
|
5
5
|
"description": "Object Data Modeling library for IndexedDB",
|
|
6
6
|
"main": "dist/index.es.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
],
|
|
11
11
|
"keywords": [
|
|
12
12
|
"odm",
|
|
13
|
-
"indexeddb"
|
|
13
|
+
"indexeddb",
|
|
14
|
+
"browser"
|
|
14
15
|
],
|
|
15
16
|
"author": "Santhoshkumar",
|
|
16
17
|
"license": "MIT",
|
|
@@ -25,15 +26,17 @@
|
|
|
25
26
|
"api:documenter": "api-documenter markdown --input-folder temp --output-folder docs/pages",
|
|
26
27
|
"build:docs": "npm run api:extractor && npm run api:documenter",
|
|
27
28
|
"lint": "eslint .",
|
|
28
|
-
"test": "vitest"
|
|
29
|
+
"test": "vitest --coverage.enabled --coverage.reporter=text",
|
|
30
|
+
"test:coverage": "vitest run --coverage"
|
|
29
31
|
},
|
|
30
32
|
"dependencies": {
|
|
31
|
-
"iodm-query": "0.0.
|
|
33
|
+
"iodm-query": "1.0.0-rc.0"
|
|
32
34
|
},
|
|
33
35
|
"devDependencies": {
|
|
34
36
|
"@eslint/js": "^9.30.1",
|
|
35
37
|
"@microsoft/api-documenter": "^7.26.29",
|
|
36
38
|
"@microsoft/api-extractor": "^7.52.8",
|
|
39
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
37
40
|
"eslint": "^9.30.1",
|
|
38
41
|
"globals": "^16.3.0",
|
|
39
42
|
"typescript": "~5.8.3",
|
package/dist/configure.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { IModel } from './model/types';
|
|
2
|
-
interface ConfigureIndexedDBProps {
|
|
3
|
-
db: string;
|
|
4
|
-
version: number;
|
|
5
|
-
models: Array<IModel>;
|
|
6
|
-
onupgradeneeded?: (event: IDBOpenDBRequest) => any;
|
|
7
|
-
}
|
|
8
|
-
export declare const configureIDB: (config: ConfigureIndexedDBProps) => Promise<IDBDatabase>;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=configure.d.ts.map
|
package/dist/configure.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,UAAU,uBAAuB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,GAAG,CAAC;CACpD;AAED,eAAO,MAAM,YAAY,GACvB,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,WAAW,CAwBrB,CAAC"}
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|