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.
Files changed (77) hide show
  1. package/README.md +142 -2
  2. package/dist/configure.d.ts +50 -2
  3. package/dist/configure.d.ts.map +1 -1
  4. package/dist/index.d.ts +8 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.es.js +2155 -722
  7. package/dist/iodm.d.ts +68 -0
  8. package/dist/iodm.d.ts.map +1 -0
  9. package/dist/model/helpers.d.ts +11 -0
  10. package/dist/model/helpers.d.ts.map +1 -0
  11. package/dist/model/index.d.ts +362 -4
  12. package/dist/model/index.d.ts.map +1 -1
  13. package/dist/model/types.d.ts +40 -13
  14. package/dist/model/types.d.ts.map +1 -1
  15. package/dist/plugins/timestamps-plugin.d.ts +7 -0
  16. package/dist/plugins/timestamps-plugin.d.ts.map +1 -0
  17. package/dist/schema/base-schema.d.ts +24 -8
  18. package/dist/schema/base-schema.d.ts.map +1 -1
  19. package/dist/schema/constants.d.ts +6 -0
  20. package/dist/schema/constants.d.ts.map +1 -0
  21. package/dist/schema/custom-middleware-executor.d.ts +12 -0
  22. package/dist/schema/custom-middleware-executor.d.ts.map +1 -0
  23. package/dist/schema/helpers.d.ts.map +1 -1
  24. package/dist/schema/index.d.ts +299 -21
  25. package/dist/schema/index.d.ts.map +1 -1
  26. package/dist/schema/non-primitive/array/index.d.ts +2 -1
  27. package/dist/schema/non-primitive/array/index.d.ts.map +1 -1
  28. package/dist/schema/non-primitive/date/index.d.ts +13 -0
  29. package/dist/schema/non-primitive/date/index.d.ts.map +1 -0
  30. package/dist/schema/non-primitive/map/index.d.ts +6 -0
  31. package/dist/schema/non-primitive/map/index.d.ts.map +1 -0
  32. package/dist/schema/non-primitive/ref/index.d.ts +5 -5
  33. package/dist/schema/non-primitive/ref/index.d.ts.map +1 -1
  34. package/dist/schema/non-primitive/ref-array/index.d.ts +6 -8
  35. package/dist/schema/non-primitive/ref-array/index.d.ts.map +1 -1
  36. package/dist/schema/non-primitive/set/index.d.ts +6 -0
  37. package/dist/schema/non-primitive/set/index.d.ts.map +1 -0
  38. package/dist/schema/primitive/boolean/index.d.ts +6 -0
  39. package/dist/schema/primitive/boolean/index.d.ts.map +1 -0
  40. package/dist/schema/primitive/number/index.d.ts +18 -0
  41. package/dist/schema/primitive/number/index.d.ts.map +1 -0
  42. package/dist/schema/primitive/string/index.d.ts +19 -0
  43. package/dist/schema/primitive/string/index.d.ts.map +1 -0
  44. package/dist/schema/types.d.ts +42 -3
  45. package/dist/schema/types.d.ts.map +1 -1
  46. package/dist/schema/validation-rule/date/max-date.d.ts +11 -0
  47. package/dist/schema/validation-rule/date/max-date.d.ts.map +1 -0
  48. package/dist/schema/validation-rule/date/min-date.d.ts +11 -0
  49. package/dist/schema/validation-rule/date/min-date.d.ts.map +1 -0
  50. package/dist/schema/validation-rule/enum.d.ts +11 -0
  51. package/dist/schema/validation-rule/enum.d.ts.map +1 -0
  52. package/dist/schema/validation-rule/number/max.d.ts +11 -0
  53. package/dist/schema/validation-rule/number/max.d.ts.map +1 -0
  54. package/dist/schema/validation-rule/{min.d.ts → number/min.d.ts} +1 -1
  55. package/dist/schema/validation-rule/number/min.d.ts.map +1 -0
  56. package/dist/schema/validation-rule/required.d.ts +1 -1
  57. package/dist/schema/validation-rule/required.d.ts.map +1 -1
  58. package/dist/schema/validation-rule/string/match.d.ts +11 -0
  59. package/dist/schema/validation-rule/string/match.d.ts.map +1 -0
  60. package/dist/schema/validation-rule/string/max-length.d.ts +11 -0
  61. package/dist/schema/validation-rule/string/max-length.d.ts.map +1 -0
  62. package/dist/schema/validation-rule/string/min-length.d.ts +11 -0
  63. package/dist/schema/validation-rule/string/min-length.d.ts.map +1 -0
  64. package/dist/schema/validation-rule/validate.d.ts +16 -0
  65. package/dist/schema/validation-rule/validate.d.ts.map +1 -0
  66. package/dist/schema/virtual-type/VirtualType.d.ts +19 -0
  67. package/dist/schema/virtual-type/VirtualType.d.ts.map +1 -0
  68. package/package.json +7 -4
  69. package/dist/models.d.ts +0 -3
  70. package/dist/models.d.ts.map +0 -1
  71. package/dist/schema/primitive/number.ts/index.d.ts +0 -9
  72. package/dist/schema/primitive/number.ts/index.d.ts.map +0 -1
  73. package/dist/schema/primitive/string.ts/index.d.ts +0 -5
  74. package/dist/schema/primitive/string.ts/index.d.ts.map +0 -1
  75. package/dist/schema/validation-rule/min.d.ts.map +0 -1
  76. package/dist/schema/validation-rule/type.d.ts +0 -10
  77. package/dist/schema/validation-rule/type.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.
@@ -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
@@ -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,UAAU,uBAAuB;IAC/B,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,eAAO,MAAM,YAAY,GACvB,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,WAAW,CA2BrB,CAAC"}
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 { AbstractModel, model } from './model/index';
2
- export { Schema } from './schema/index';
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
@@ -1 +1 @@
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"}
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"}