iodm 0.0.4 → 1.0.0-rc.1
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/dist/configure.d.ts +50 -2
- package/dist/configure.d.ts.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +2155 -722
- package/dist/iodm.d.ts +68 -0
- package/dist/iodm.d.ts.map +1 -0
- package/dist/model/helpers.d.ts +11 -0
- package/dist/model/helpers.d.ts.map +1 -0
- package/dist/model/index.d.ts +362 -4
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/types.d.ts +40 -13
- package/dist/model/types.d.ts.map +1 -1
- package/dist/plugins/timestamps-plugin.d.ts +7 -0
- package/dist/plugins/timestamps-plugin.d.ts.map +1 -0
- package/dist/schema/base-schema.d.ts +24 -8
- package/dist/schema/base-schema.d.ts.map +1 -1
- package/dist/schema/constants.d.ts +6 -0
- package/dist/schema/constants.d.ts.map +1 -0
- package/dist/schema/custom-middleware-executor.d.ts +12 -0
- package/dist/schema/custom-middleware-executor.d.ts.map +1 -0
- package/dist/schema/helpers.d.ts.map +1 -1
- package/dist/schema/index.d.ts +299 -21
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/non-primitive/array/index.d.ts +2 -1
- package/dist/schema/non-primitive/array/index.d.ts.map +1 -1
- package/dist/schema/non-primitive/date/index.d.ts +13 -0
- package/dist/schema/non-primitive/date/index.d.ts.map +1 -0
- package/dist/schema/non-primitive/map/index.d.ts +6 -0
- package/dist/schema/non-primitive/map/index.d.ts.map +1 -0
- package/dist/schema/non-primitive/ref/index.d.ts +5 -5
- package/dist/schema/non-primitive/ref/index.d.ts.map +1 -1
- package/dist/schema/non-primitive/ref-array/index.d.ts +6 -8
- package/dist/schema/non-primitive/ref-array/index.d.ts.map +1 -1
- package/dist/schema/non-primitive/set/index.d.ts +6 -0
- package/dist/schema/non-primitive/set/index.d.ts.map +1 -0
- package/dist/schema/primitive/boolean/index.d.ts +6 -0
- package/dist/schema/primitive/boolean/index.d.ts.map +1 -0
- package/dist/schema/primitive/number/index.d.ts +18 -0
- package/dist/schema/primitive/number/index.d.ts.map +1 -0
- package/dist/schema/primitive/string/index.d.ts +19 -0
- package/dist/schema/primitive/string/index.d.ts.map +1 -0
- package/dist/schema/types.d.ts +42 -3
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/validation-rule/date/max-date.d.ts +11 -0
- package/dist/schema/validation-rule/date/max-date.d.ts.map +1 -0
- package/dist/schema/validation-rule/date/min-date.d.ts +11 -0
- package/dist/schema/validation-rule/date/min-date.d.ts.map +1 -0
- package/dist/schema/validation-rule/enum.d.ts +11 -0
- package/dist/schema/validation-rule/enum.d.ts.map +1 -0
- package/dist/schema/validation-rule/number/max.d.ts +11 -0
- package/dist/schema/validation-rule/number/max.d.ts.map +1 -0
- package/dist/schema/validation-rule/{min.d.ts → number/min.d.ts} +1 -1
- package/dist/schema/validation-rule/number/min.d.ts.map +1 -0
- package/dist/schema/validation-rule/required.d.ts +1 -1
- package/dist/schema/validation-rule/required.d.ts.map +1 -1
- package/dist/schema/validation-rule/string/match.d.ts +11 -0
- package/dist/schema/validation-rule/string/match.d.ts.map +1 -0
- package/dist/schema/validation-rule/string/max-length.d.ts +11 -0
- package/dist/schema/validation-rule/string/max-length.d.ts.map +1 -0
- package/dist/schema/validation-rule/string/min-length.d.ts +11 -0
- package/dist/schema/validation-rule/string/min-length.d.ts.map +1 -0
- package/dist/schema/validation-rule/validate.d.ts +16 -0
- package/dist/schema/validation-rule/validate.d.ts.map +1 -0
- package/dist/schema/virtual-type/VirtualType.d.ts +19 -0
- package/dist/schema/virtual-type/VirtualType.d.ts.map +1 -0
- package/package.json +7 -4
- package/dist/models.d.ts +0 -3
- package/dist/models.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/validation-rule/min.d.ts.map +0 -1
- package/dist/schema/validation-rule/type.d.ts +0 -10
- package/dist/schema/validation-rule/type.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/dist/configure.d.ts
CHANGED
|
@@ -1,11 +1,59 @@
|
|
|
1
1
|
import { IModel } from './model/types';
|
|
2
|
-
interface ConfigureIndexedDBProps {
|
|
2
|
+
export interface ConfigureIndexedDBProps {
|
|
3
3
|
db: string;
|
|
4
4
|
version: number;
|
|
5
5
|
models: Array<IModel<any, any, any>>;
|
|
6
6
|
onUpgradeNeededPre?: (event: IDBOpenDBRequest) => any;
|
|
7
7
|
onUpgradeNeededPost?: (event: IDBOpenDBRequest) => any;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Configures the IndexedDB database to be used by the models.
|
|
11
|
+
* This function should be called before using any models to ensure that the database is properly set up.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { createRoot } from 'react-dom/client';
|
|
16
|
+
* import { configureIDB } from 'iodm';
|
|
17
|
+
* import UserModel from './models/UserModel';
|
|
18
|
+
* import App from './App';
|
|
19
|
+
*
|
|
20
|
+
* const config = {
|
|
21
|
+
* db: 'MyDB',
|
|
22
|
+
* version: 1,
|
|
23
|
+
* models: [UserModel],
|
|
24
|
+
* };
|
|
25
|
+
*
|
|
26
|
+
* configureIDB(config).then((db) => {
|
|
27
|
+
* createRoot(document.getElementById('app')!).render(<App />);
|
|
28
|
+
* }).catch((error) => {
|
|
29
|
+
* createRoot(document.getElementById('app')!).render(<div>Error configuring database</div>);
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* // Using the returned promise directly in a React component with Suspense
|
|
36
|
+
* import { use } from 'react';
|
|
37
|
+
* import { configureIDB } from 'iodm';
|
|
38
|
+
* import UserModel from './models/UserModel';
|
|
39
|
+
*
|
|
40
|
+
* const config = {
|
|
41
|
+
* db: 'MyDB',
|
|
42
|
+
* version: 1,
|
|
43
|
+
* models: [UserModel],
|
|
44
|
+
* };
|
|
45
|
+
*
|
|
46
|
+
* const dbPromise = configureIDB(config);
|
|
47
|
+
*
|
|
48
|
+
* function App() {
|
|
49
|
+
* use(dbPromise);
|
|
50
|
+
*
|
|
51
|
+
* // rest of the app
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @param config - The configuration object for setting up the IndexedDB database. It includes the name and version of the database, the models to be used, and optional callbacks for handling the upgrade process.
|
|
56
|
+
* @returns A promise that resolves to the configured IDBDatabase instance once the database is successfully opened and configured.
|
|
57
|
+
*/
|
|
9
58
|
export declare const configureIDB: (config: ConfigureIndexedDBProps) => Promise<IDBDatabase>;
|
|
10
|
-
export {};
|
|
11
59
|
//# sourceMappingURL=configure.d.ts.map
|
package/dist/configure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,GAAG,CAAC;IACtD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,GAAG,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,eAAO,MAAM,YAAY,GACvB,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,WAAW,CA2BrB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export type { QueryFindOptions, QueryExecutorGetCommonOptions, QueryFindByIdAndUpdateOptions, QueryOpenCursorOptions, QueryDeleteOneOptions, QueryFindByIdOptions, QueryFindByIdAndDeleteOptions, QueryInsertOneOptions, QueryReplaceOneOptions, QueryUpdateManyOptions, QueryUpdateOneOptions, QueryDeleteManyOptions, QueryCountDocumentsOptions, QueryExecutorUpdateManyUpdater, QueryRootFilter } from 'iodm-query';
|
|
2
|
+
export type { SchemaDefinition, BroadcastEnabledEventsOptions, FindMiddlewareContext, InjectFunctionContext, PluginFn, SchemaDefinitionValue, SchemaMethodOptions, SchemaOptions, SchemaSaveMethodOptions, SchemaDefinitionDateValue, SchemaDefinitionNumberValue, SchemaDefinitionStringValue, } from './schema/types.ts';
|
|
3
|
+
export type { IModel, ModelInstance, ModelOptions, ModelSaveOptions, } from './model/types';
|
|
4
|
+
export type { ConfigureIndexedDBProps } from './configure';
|
|
5
|
+
export { default, Iodm } from './iodm';
|
|
3
6
|
export { configureIDB } from './configure';
|
|
7
|
+
export { AbstractModel, AbstractModelClass } from './model/index';
|
|
8
|
+
export { default as CustomMiddlewareExecutor } from './schema/custom-middleware-executor';
|
|
9
|
+
export { Schema } from './schema/index';
|
|
4
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,gBAAgB,EAChB,6BAA6B,EAC7B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,EAC9B,eAAe,EAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EACR,gBAAgB,EAChB,6BAA6B,EAC7B,qBAAqB,EACrB,qBAAqB,EACrB,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACR,MAAM,EACN,aAAa,EACb,YAAY,EACZ,gBAAgB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
|