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

feat: schema type utils #9757

Merged
merged 6 commits into from
Mar 11, 2025
Merged

feat: schema type utils #9757

merged 6 commits into from
Mar 11, 2025

Conversation

runspired
Copy link
Contributor

@runspired runspired commented Mar 11, 2025

A small improvement to schema types and some new type utilities to help folks author schemas effectively

import { isResourceSchema, resourceSchema, objectSchema } from '@warp-drive/core-types/schema/fields';

const UserSchema = resourceSchema({ /* typechecked+autocompleted schema */ });
const MyObjectSchema = objectSchema({ /* typechecked+autocompleted object schema */ });

isResourceSchema(UserSchema); // true + narrows to ResourceSchema
isResourceSchema(MyObjectSchema); // false + narrows to ObjectSchema

note: consumers can also use satisfies to achieve this in an elegant way, but where satisfies requires typing the close of the object and then returning to fill the object out, the utils allow setting up the typing from the head of the object. Both are great, you what you like. Here's an example with satisfies that does the same thing as resourceSchema:

import type { ResourceSchema } from '@warp-drive/core-types/schema/fields';

// the below will error as it is missing required properties
// it will also deeply type-check field defs
const User = { type: 'user' } satisfies ResourceSchema;

// and the equivalent which will also error and deep-check
import { resourceSchema } from '@warp-drive/core-types/schema/fields';

const User = resourceSchema({ type: 'user' });

@runspired runspired added 🎯 canary PR is targeting canary (default) 🏷️ feat This PR introduces a new feature labels Mar 11, 2025
@runspired runspired merged commit ac072d9 into main Mar 11, 2025
22 checks passed
@runspired runspired deleted the small-fixups branch March 11, 2025 16:53
MehulKChaudhari pushed a commit to MehulKChaudhari/ember-data that referenced this pull request Mar 16, 2025
* minor type improvements

* chore: fixup types

* add api docs

* nice things

* account for schema presence

* cleanup test
gitKrystan pushed a commit that referenced this pull request Mar 21, 2025
* minor type improvements

* chore: fixup types

* add api docs

* nice things

* account for schema presence

* cleanup test
gitKrystan added a commit that referenced this pull request Mar 21, 2025
* feat: schema type utils (#9757)

* minor type improvements

* chore: fixup types

* add api docs

* nice things

* account for schema presence

* cleanup test

* chore: update contributing docs (#9758)

* chore: Improve contributing experience (#9759)

* chore: improve developing experience on local

* more

* temporarily deactivate some scenarios

* deactivate more lints

* deactivate more prod tests

* another

* chore: reduce simple Map/Set ops (#9761)

* perf: faster iteration of relationship payloads (#9762)

faster iteration of payloads

* chore: restructure SchemaRecord test file layout to make it easier to navigate (#9763)

* chore: simplify test file layout

* chore: move polaris test files to new structure

* docs: LinksMode and Polymorphic Relationship Guide, stubs out guide for LegacyMode vs PolarisMode (#9764)

* docs: stub out guides for SchemaRecord, LinksMode, PolarisMode etc.

* add linksmode guide

* fix annotation

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* Update guides/relationships/features/links-mode.md

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* cleanup op

* rewrite future thoughts

* stub out more of the guide

* add docs on polymorphism

* stub out guide

* add note on interop

* add reactivity overview

---------

Co-authored-by: Krystan HuffMenne <kmenne+github@gmail.com>

* feat: improve debuggability of SchemaRecord, RecordArray and Identifier (#9766)

* feat: improve debuggability of SchemaRecord, RecordArray and Identifier

* fix configurability

* fix keys

* feat: persist runtime config (#9767)

* feat: persist runtime config

* ensure fastboot works

* Don't set isDirty to true in diff callbacks (#9765)

* More overnotification fixes

* Fix DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE case

* feat: ensure objects behave amazeballs (#9768)

* feat: ensure objects behave amazeballs

* add tests for record iteration

* add more tests

* fix(deps): update dependency @babel/runtime to v7.26.10 [security] (#9760)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: remove restriction on new field kinds being used with legacy mode

* improve types

* Revert "improve types"

This reverts commit 84daef7.

* Revert "chore: remove restriction on new field kinds being used with legacy mode"

This reverts commit 3fd81bf.

* Widen Peer Range for ember-inflector (#9770)

* chore: remove restriction on new field kinds being used with legacy mode (#9769)

* chore: remove restriction on new field kinds being used with legacy mode

* chore: cleanup types

* fix

* fix test

* fix docs

* chore: cleanup @ember/service deprecation from shipped library code (#9773)

* Add: tests verify behavior mutating a record  (#9754)

* add: tests verify behavior mutating a related record from a checked-out record

* fix: lint

* fix: test

* fix: lint

* fix: better reordering detection when remoteClearsLocal is true (#9771)

* Fix DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE reordering detection

* add failing test

* notification tests

* implement fix

* cleanup console logs

* fix spurrious type issue

---------

Co-authored-by: Chris Thoburn <runspired@users.noreply.github.com>

* Fix some lint

---------

Co-authored-by: Chris Thoburn <runspired@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jon Johnson <jon.johnson@ucsf.edu>
Co-authored-by: Mehul Kiran Chaudhari <55375534+MehulKChaudhari@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🎯 canary PR is targeting canary (default) 🏷️ feat This PR introduces a new feature
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

1 participant