feat: move model migrate and initModel to database#9796
Conversation
✅ Circular References ReportGenerated at: 2026-04-13T06:15:56.382Z Summary
Click to view all circular references in PR (20)Click to view all circular references in base branch (20)Analysis✅ No Change: This PR does not introduce or remove any circular references. This report was generated automatically by comparing against the |
There was a problem hiding this comment.
Pull request overview
This PR refactors Insomnia’s data-layer boundaries by moving model initialization/migration logic into the insomnia-data database layer, and updating app code/tests to prefer ~/insomnia-data models/services imports over legacy ~/models init APIs.
Changes:
- Move
initModeland several legacy per-modelmigrate()implementations intopackages/insomnia/src/insomnia-data/node-src/database/init-model/*. - Rework
insomnia-datamodel exports (introducingdb-models.tsand exportingmodelsas a namespace) and update downstream imports/usages. - Update various services/tests to use
services.*.create()instead ofmodels.initModel()where applicable.
Reviewed changes
Copilot reviewed 57 out of 57 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/insomnia/src/sync/vcs/pull-backend-project.ts | Switches workspace creation from legacy initModel usage to services.workspace.create() while pulling backend projects. |
| packages/insomnia/src/plugins/context/tests/response.test.ts | Updates response construction in tests to use services.response.create(). |
| packages/insomnia/src/network/o-auth-2/get-token.ts | Replaces ephemeral request construction with services.request.create() during OAuth token exchange. |
| packages/insomnia/src/models/index.ts | Removes legacy initModel/manual all() list in favor of ~/insomnia-data model exports. |
| packages/insomnia/src/models/tests/request.test.ts | Unifies request type imports to come from ~/insomnia-data. |
| packages/insomnia/src/insomnia-data/src/models/workspace.ts | Removes migration logic from the model module. |
| packages/insomnia/src/insomnia-data/src/models/settings.ts | Removes settings migration logic from the model module. |
| packages/insomnia/src/insomnia-data/src/models/response.ts | Removes response migration logic from the model module. |
| packages/insomnia/src/insomnia-data/src/models/request.ts | Removes request migration logic from the model module. |
| packages/insomnia/src/insomnia-data/src/models/index.ts | Changes model export structure; adds all()/types() based on db-models. |
| packages/insomnia/src/insomnia-data/src/models/db-models.ts | New barrel exporting only DB-backed model modules. |
| packages/insomnia/src/insomnia-data/src/models/cookie-jar.ts | Removes cookie-jar migration logic from the model module. |
| packages/insomnia/src/insomnia-data/src/index.ts | Exports models as a namespace (export * as models). |
| packages/insomnia/src/insomnia-data/node-src/services/workspace.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/workspace-meta.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/websocket-response.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/websocket-request.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/websocket-payload.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/user-session.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/unit-test.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/unit-test-suite.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/unit-test-result.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/stats.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/socket-io-response.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/socket-io-request.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/socket-io-payload.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/runner-test-result.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/proto-file.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/proto-directory.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/project.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/plugin-data.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/o-auth-2-token.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/mock-server.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/mock-route.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/mcp-response.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/mcp-request.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/mcp-payload.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/grpc-request.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/grpc-request-meta.ts | Unifies imports and sources isGrpcRequestId from models.grpcRequest. |
| packages/insomnia/src/insomnia-data/node-src/services/git-repository.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/git-credentials.ts | Simplifies imports; uses ~/insomnia-data for db/models. |
| packages/insomnia/src/insomnia-data/node-src/services/environment.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/cookie-jar.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/cloud-credential.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/client-certificate.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/ca-certificate.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/services/api-spec.ts | Unifies imports to use ~/insomnia-data exports. |
| packages/insomnia/src/insomnia-data/node-src/database/init-model/workspace.ts | New workspace migration module extracted from model layer. |
| packages/insomnia/src/insomnia-data/node-src/database/init-model/workspace.test.ts | Updates tests to call the new workspace migration entrypoint. |
| packages/insomnia/src/insomnia-data/node-src/database/init-model/settings.ts | New settings migration module extracted from model layer. |
| packages/insomnia/src/insomnia-data/node-src/database/init-model/response.ts | New response migration module extracted from model layer. |
| packages/insomnia/src/insomnia-data/node-src/database/init-model/response.test.ts | Updates tests to use new initModel entrypoint. |
| packages/insomnia/src/insomnia-data/node-src/database/init-model/request.ts | New request migration module extracted from model layer. |
| packages/insomnia/src/insomnia-data/node-src/database/init-model/index.ts | New centralized initModel responsible for defaults, pruning, and calling migrations. |
| packages/insomnia/src/insomnia-data/node-src/database/init-model/cookie-jar.ts | New cookie-jar migration module extracted from model layer. |
| packages/insomnia/src/insomnia-data/node-src/database/database.test.ts | Updates tests to reflect buffered change callback typing and new migration import. |
| packages/insomnia/src/insomnia-data/node-src/database/database-nedb.ts | Switches DB init/migration path to use the new init-model implementation. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 57 out of 57 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (2)
packages/insomnia/src/insomnia-data/node-src/database/init-model/workspace.test.ts:79
- These test fixtures intentionally set legacy/invalid
scopevalues ('spec','debug',null,'something'), butservices.workspace.createis typed asPartial<Workspace>wherescopeis only'design' | 'collection' | 'mock-server' | 'environment' | 'mcp'. This will fail TypeScript compilation unless you re-add// @ts-expect-error(or cast the patch) for these cases.
packages/insomnia/src/sync/vcs/pull-backend-project.ts:38 services.workspace.create(...)already persists the workspace viadb.docCreate. Callingdatabase.update(workspace)immediately after is redundant and triggers an extra write/change event. Consider removing thedatabase.updatecall here and just return the created workspace (or switch back to a pure initializer if you don’t want persistence at this point).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| scope: 'collection', | ||
| modified: Date.now(), | ||
| created: Date.now(), | ||
| isPrivate: false, |
There was a problem hiding this comment.
Yes, it's using the update API, and these fields are necessary. I think the API is not reasonable, but I don't want to make any changes to the business code.
| if (defaultBranchMissing) { | ||
| const workspace = await models.initModel<Workspace>(models.workspace.type, { | ||
| const workspace = await database.update<Workspace>({ | ||
| ...models.workspace.init(), |
There was a problem hiding this comment.
I suggest we don't call model.init() directly outside the initModel function, because we need to add these model-unrelated fields like modified/created manually. It's easy to miss some of these fields.
| const newRequest: Request = { | ||
| ...models.request.init(), | ||
| // Do not inherit authentication from parent request or group since this is a special request | ||
| authentication: { | ||
| type: 'none', | ||
| disabled: false, | ||
| }, | ||
| { | ||
| _id: requestOrGroupId + '.other', | ||
| parentId: requestOrGroupId, | ||
| headers: [...defaultHeaders, ...headers], | ||
| url: setDefaultProtocol(authentication.accessTokenUrl), | ||
| method: 'POST', | ||
| body: { | ||
| mimeType: 'application/x-www-form-urlencoded', | ||
| params, | ||
| }, | ||
| ); | ||
| _id: requestOrGroupId + '.other', | ||
| parentId: requestOrGroupId, | ||
| type: models.request.type, | ||
| modified: Date.now(), | ||
| created: Date.now(), | ||
| }; |
Changes