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.
Files changed (39) hide show
  1. package/README.md +142 -2
  2. package/package.json +7 -4
  3. package/dist/configure.d.ts +0 -10
  4. package/dist/configure.d.ts.map +0 -1
  5. package/dist/index.d.ts +0 -4
  6. package/dist/index.d.ts.map +0 -1
  7. package/dist/index.es.js +0 -1211
  8. package/dist/model/index.d.ts +0 -7
  9. package/dist/model/index.d.ts.map +0 -1
  10. package/dist/model/types.d.ts +0 -26
  11. package/dist/model/types.d.ts.map +0 -1
  12. package/dist/models.d.ts +0 -3
  13. package/dist/models.d.ts.map +0 -1
  14. package/dist/schema/base-schema.d.ts +0 -21
  15. package/dist/schema/base-schema.d.ts.map +0 -1
  16. package/dist/schema/index.d.ts +0 -32
  17. package/dist/schema/index.d.ts.map +0 -1
  18. package/dist/schema/non-primitive/array/index.d.ts +0 -12
  19. package/dist/schema/non-primitive/array/index.d.ts.map +0 -1
  20. package/dist/schema/non-primitive/ref/index.d.ts +0 -17
  21. package/dist/schema/non-primitive/ref/index.d.ts.map +0 -1
  22. package/dist/schema/non-primitive/ref-array/index.d.ts +0 -15
  23. package/dist/schema/non-primitive/ref-array/index.d.ts.map +0 -1
  24. package/dist/schema/primitive/number.ts/index.d.ts +0 -9
  25. package/dist/schema/primitive/number.ts/index.d.ts.map +0 -1
  26. package/dist/schema/primitive/string.ts/index.d.ts +0 -5
  27. package/dist/schema/primitive/string.ts/index.d.ts.map +0 -1
  28. package/dist/schema/types.d.ts +0 -9
  29. package/dist/schema/types.d.ts.map +0 -1
  30. package/dist/schema/validation-rule/min.d.ts +0 -11
  31. package/dist/schema/validation-rule/min.d.ts.map +0 -1
  32. package/dist/schema/validation-rule/required.d.ts +0 -5
  33. package/dist/schema/validation-rule/required.d.ts.map +0 -1
  34. package/dist/schema/validation-rule/type.d.ts +0 -13
  35. package/dist/schema/validation-rule/type.d.ts.map +0 -1
  36. package/dist/test.d.ts +0 -2
  37. package/dist/test.d.ts.map +0 -1
  38. package/dist/types.d.ts +0 -2
  39. package/dist/types.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,4 +1,144 @@
1
- # iodm package
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
- - [Documentation](./docs/pages/index.md)
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.3",
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.6"
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",
@@ -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
@@ -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
@@ -1,4 +0,0 @@
1
- export { AbstractModel, model } from './model/index';
2
- export { Schema } from './schema/index';
3
- export { configureIDB } from './configure';
4
- //# sourceMappingURL=index.d.ts.map
@@ -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"}