Frontmatter
| id | 9543 |
| title | Store Pipeline Instantiation and Legacy Parser Compatibility |
| state | Closed |
| labels | enhancementaiarchitecturecore |
| assignees | tobiu |
| createdAt | Mar 24, 2026, 5:07 PM |
| updatedAt | Mar 24, 2026, 7:39 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9543 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 9449 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Mar 24, 2026, 7:39 PM |
Store Pipeline Instantiation and Legacy Parser Compatibility
tobiu added parent issue #9449 on Mar 24, 2026, 5:08 PM
tobiu assigned to @tobiu on Mar 24, 2026, 5:10 PM

tobiu
Mar 24, 2026, 7:39 PM
Input from Gemini 3.1 Pro:
✦ I have addressed the pipeline instantiation and legacy parser compatibility issues within
Store.mjs.Key Changes:
- Legacy Bridge: Implemented an override for
mergeConfig()inStore.mjsthat intercepts legacyparserandurlconfigs. It dynamically maps these into the newpipeline: { connection: {...}, parser: {...} }format before thebeforeSetPipelinelifecycle hook executes.- Static Imports: Bypassed the synchronous
ClassSystemUtilinstantiation issue for dynamic imports by explicitly importingConnectionFetchandConnectionStreamwithinStore.mjs. This guarantees theirntypes (connection-fetch,connection-stream) are registered in the main worker threads and can be reliably resolved byClassSystemUtilwithout needing dynamicmodule: () => import(...).- Pipeline Event Propagation: Updated
Pipeline.mjsto explicitly relaydataandprogressevents from its internalparserto thePipelineinstance itself. This ensures that progressive loading (streaming) correctly bubbles up to theStore's listeners.- Unit Tests: Updated
test/playwright/unit/data/StoreParser.spec.mjsto reflect the new nested pipeline object structure. All unit tests, includingStoreFilterProfile.spec.mjs, now pass successfully.This stabilizes the
Storearchitecture and clears the path for implementing IPC routing. I will now close this sub-issue.
tobiu closed this issue on Mar 24, 2026, 7:39 PM
Goal
Address the architectural friction introduced in
#9452when migrating existing Stores to the newPipelinearchitecture, specifically resolving the class instantiation issues withinNeo.data.Store.Context
During the completion of
#9452(Connection Foundation and Parser Refactoring), we successfully separated network logic from parsers. However, applying this to live stores (likeapps/devindex/store/Contributors.mjs) revealed two major bottlenecks:Store.mjs): ThebeforeSetPipelinemethod inNeo.data.Storecurrently attempts to useClassSystemUtil.beforeSetInstance(value, null, ...). Because it passesnullas the default class, supplying a rawpipeline: { connection: {...}, parser: {...} }config object fails to instantiate aNeo.data.Pipelineclass, crashing with "missing className or module property".connection.Stream), attempting to use dynamic importsmodule: () => import(...)inside the Store'spipelineconfig fails synchronously duringClassSystemUtilinstantiation.Neo.data.Storestill contains many references tostore.parserandstore.url.Acceptance Criteria
src/data/Store.mjsto correctly resolve and instantiateNeo.data.PipelineinbeforeSetPipeline().PipelineintoStore(or vice versa) does not create unresolved circular dependencies during framework boot.Store.mjsthat detects legacyparser: {}andurl: ''configs and automatically wraps them into apipeline: {}config beforebeforeSetPipelineexecutes.test/playwright/unit/app/devindex/StoreFilterProfile.spec.mjsandtest/playwright/unit/data/StoreParser.spec.mjspass cleanly with the new architecture.Next Steps
This issue must be resolved to stabilize the codebase before proceeding with IPC routing (#9453).