Repository navigation
Declare the references between objects by object type - #79
Merged
Merged
Conversation
Deploying create-cpu-c8345196-9409-4cce-afc4-389f413ad8ee with
|
| Latest commit: |
450e0a9
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://06e5a192.create-cpu-c8345196-9409-4cce-afc4-389f413ad8ee.pages.dev |
| Branch Preview URL: | https://object-type-references.create-cpu-c8345196-9409-4cce-afc4-389f413ad8ee.pages.dev |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Introduce object types as typed keys so that code can handle the five kinds of objects in the store generically, and use them to make
expectConsistentStorecheck every reference between objects. This is groundwork for copying part of the store with fresh ids, which needs to know which fields refer to other objects.src/store/types.tsdefines the object type keys (components,nodes,componentPins,nodePins,connections), the id of each object type asTagged<string, K>, andCCObjectStore<K>, the members of an object-specific store that do not depend on its object type.CCObjectStoreBaseand is parameterized by the object type key. Each store declaresreferences: the fields of its objects holding the id of another object, mapped to the object type of that id. Keeping it complete and correct is a convention documented in the README; the type checker does not enforce it.CCStore.getObjectStore(type)returns the store of an object type, typed per key.expectConsistentStorenow checks every declared reference instead of a hand-written list per object type. This adds checks forcomponentPins.implementationandconnections.parentComponentId, and dropscomponentPins.get(pin.id), which only looked up the pin itself. A failure names the broken reference, e.g.connections.from of <id>.Id tags change from names like
CCNodeIdto the object type keys. They only exist in types, so saved circuits are not affected.Validation:
npm run type-checknpm run checknpm test -- --runnpm run build