Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

πŸ›€οΈ tracking: The Road to Polaris ✨ #9337

Open
runspired opened this issue Apr 8, 2024 · 4 comments
Open

πŸ›€οΈ tracking: The Road to Polaris ✨ #9337

runspired opened this issue Apr 8, 2024 · 4 comments
Assignees

Comments

@runspired
Copy link
Contributor

runspired commented Apr 8, 2024

🌌 Universal

Note

Universal also presumes that we ship SchemaRecord (in the WarpDrive section)
for full utility, and that tasks in the Vite section are done.

  • derisk decoupling EmberData from Ember's runloop

    • (upstream) Implement Render Aware Scheduler RFC
  • EmberData without EmberSource

    • deprecate Store extending EmberObject
    • hook @ember-data/tracking for arbitrary signal implementations
      • and/or adopt StarbeamJS
      • and/or adopt Reactive Primitives proposal from TC39
    • replace @ember/debug (assert) usage with something not tied to ember-source
    • replace @ember/debug (warn, deprecate) usage with something not tied to ember-source
    • Configuration point for @ember/test-waiters for non-ember projects
    • replace @ember/string usage with something lighter of our own

πŸš€ WarpDrive

  • SchemaService
    • RFC SchemaService upgrade needed for SchemaRecord
    • Implement RFC
    • Ship new implementation with 4.12 support
Schema DSL
  • Legacy
    • Can parse simple legacy attributes to JSON schema
    • Can parse complex legacy attributes to JSON schema
    • Can parse belongsTo to JSON schema
    • Can parse hasMany to JSON schema
    • Can parse ID field to JSON schema
    • Can parse derived field to JSON schema
    • Can parse local field to JSON schema
    • Traits are included in JSON schema
    • Can parse simple legacy attributes to read Type
    • Can parse complex legacy attributes to read Type
    • Can parse belongsTo to read Type
    • Can parse ID field to read Type
    • Can parse derived field to read Type
    • Can parse local field to read Type
    • Traits are included in read Type
    • Can parse hasMany to read Type
    • Can parse simple legacy attributes to update Type
    • Can parse complex legacy attributes to update Type
    • Can parse belongsTo to update Type
    • Can parse hasMany to update Type
    • Can parse ID field to update Type
    • Can parse derived field to update Type
    • Can parse local field to update Type
    • Traits are included in update Type
    • Can parse simple legacy attributes to create type
    • Can parse complex legacy attributes to create Type
    • Can parse belongsTo to create type
    • Can parse hasMany to create type
    • Can parse ID field to create Type
    • Can parse derived field to create Type
    • Can parse local field to create Type
    • Traits are included in create Type
  • Modern
    • Can parse generic fields to JSON schema
    • Can parse object fields to JSON schema
    • Can parse array fields to JSON schema
    • Can parse schema-object to JSON schema
    • Can parse schema-array to JSON schema
    • Can parse resource to JSON schema
    • Can parse collection to JSON schema
    • Can parse generic fields to read Type
    • Can parse object fields to read Type
    • Can parse array fields to read Type
    • Can parse schema-object to read Type
    • Can parse schema-array to read Type
    • Can parse resource to read Type
    • Can parse collection to read Type
    • Can parse generic fields to update Type
    • Can parse object fields to update Type
    • Can parse array fields to update Type
    • Can parse schema-object to update Type
    • Can parse schema-array to update Type
    • Can parse resource to update Type
    • Can parse collection to update Type
    • Can parse generic fields to create Type
    • Can parse object fields to create Type
    • Can parse array fields to create Type
    • Can parse schema-object to create Type
    • Can parse schema-array to create Type
    • Can parse resource to create Type
    • Can parse collection to create Type
SchemaRecord
  • Legacy
    • supports read on attr
    • supports read on belongsTo
    • supports read on hasMany
    • supports read on derivation
    • supports read on @local
    • supports read on @id
    • attr is reactive
    • belongsTo is reactive
    • hasMany is reactive
    • derivations are reactive
    • @local is reactive
    • @id is reactive
    • supports edit on attr
    • supports edit on belongsTo
    • supports edit on hasMany
    • errors for edit on derivation
    • supports edit on @local
    • supports edit on @id when record is new only
    • supports create on attr
    • supports create on belongsTo
    • supports create on hasMany
    • errors for create on derivation
    • [-] (MAYBE) supports create on @local
    • supports create on @id
    • supports LEGACY mode (no checkout required)
  • Modern
    • supports record.checkout
    • supports read on field
    • supports read on object
    • supports read on array
    • supports read on schema-object
    • supports read on schema-array
    • supports read on resource
    • supports read on sync collection
    • supports read on async collection (requires cache pagination support)
    • field is reactive
    • object is deeply reactive
    • array is deeply reactive
    • schema-object is deeply reactive
    • schema-array is deeply reactive
    • resource is reactive
    • collection is reactive
    • supports edit on field
    • supports edit on object
    • supports edit on array
    • supports edit on schema-object
    • supports edit on schema-array
    • supports edit on resource
    • supports edit on sync collection
    • supports edit on async collection (requires cache pagination support)
    • supports create on field
    • supports create on object
    • supports create on array
    • supports create on schema-object
    • supports create on schema-array
    • supports create on resource
    • supports create on sync collection
    • supports create on async collection (requires cache pagination support)
  • Cache/Graph
    • Supports Paginated Collections
    • Supports Explicitly Named Partials

🐹 Ember

  • Ship stable of @warp-drive/ember
    • Instrument legacy promises for eager promise cache population
    • Implement isRefreshing
    • Implement latestRequest abort/retry
    • Implement autorefresh
    • Implement Pagination Utils
    • Implement Pagination Component
    • consider adding a linked-list/tree component

🩻 Testing & Debugging

  • Inspector
    • Support RequestManager in Inspector
    • Support SchemaRecord in Inspector
    • Make it possible to activate logging during development
      without restarting build

Nice To Have

  • Mocking
    • Ship stable of @warp-drive/holodeck
      • Make it easy to toggle recording for the entire test-suite
      • Integrate recording toggle to testem and diagnostic options
      • Add docs for testem config
      • fix shutdown bug
    • http/3 ? (if Bun lands support)
    • Provide utils and docs around how to functionally compose mock data
      for holodeck
    • API Route Mocking

⚑️ Vite

Tip

This section might be one of the easiest to complete for someone that understands
a bit of tooling without needing to dig into EmberData's library code.

  • EmberData without EmberCLI
    • build config method
    • ship all packages in v2 format

Nice To Have

  • stand-alone macros plugin for vite

πŸ’š Typescript

Tip

This section might be one of the easiest to complete for someone that understands
typescript without needing to learn too much of EmberData's library code.

  • improve quality of types so we can mark them as stable

Nice To Have

  • rollup .d.ts files to reduce import surface area

πŸ’‘ API Documentation

  • 🚧 FILL ME OUT 🚧

πŸ”­ Guides

  • Ember Guides rewritten to Polaris EmberData patterns
  • SuperRentals tutorial rewritten to Polaris EmberData patterns
  • Find somewhere to publish the in-repo guides we've written

🚒 Onboarding

  • npx warp-drive|ember-data to run user through a flow that configures packages for them.
@lifeart
Copy link

lifeart commented Apr 8, 2024

Really inspiring list!

@runspired is any CRDT support planned (https://blog.notmyidea.org/a-comparison-of-javascript-crdts.html)?
@Baltazore said it's could be implemented on top of custom handler

@runspired
Copy link
Contributor Author

runspired commented Apr 8, 2024

@lifeart built-in support for CRDT is not planned, and likely never will be due to how it overlaps with JSON:API operations, but yes, it could be implemented overtop of a handler

@sandstrom
Copy link
Contributor

@lifeart If you have some free time, and would like to contribute to this roadmap, we'd be willing to sponsor your work on Ember Data.

Can discuss in more detail if you're interested (we're sponsoring runspired and rwjblue already).

@runspired runspired pinned this issue Apr 14, 2024
@runspired
Copy link
Contributor Author

a few polaris updates:

  • due to time constraints, we won't ship the schema-dsl
  • we won't ship store forking
  • we won't ship explicit partials (note, most of what folks want from partials works out of the box, explicit partials is a very niche feature addition)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: in progress
Status: In Progress
Development

No branches or pull requests

3 participants