-
Notifications
You must be signed in to change notification settings - Fork 99
fix: replace SysLink
& MetaLinkProps
with Link<T>
to improve type safety [CFISO-2344]
#2590
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
Conversation
@andipaetzold my thoughts to your questions: About how to write the type - I don't have a preference :) |
lib/common-types.ts
Outdated
id: string | ||
} | ||
/** | ||
* @deprecated Use more specific `Link<T>` instead |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
❤️ for proper deprecation
SysLink
& MetaLinkProps
with Link<T>
to improve type safetySysLink
& MetaLinkProps
with Link<T>
to improve type safety [CFISO-2344]
Good idea. I went through the list and updated the PR to match the App SDK capabilities |
I did notice a subtle difference between these two options:
I prefer if (link.sys.linkType === 'User') {
// Now TypeScript knows it's a Link<'User'>
} |
As we agreed to release this in a new major version, I made a change to completely remove |
* BREAKING CHANGE: full ESM support (#2472) * fix: clean dependencies, delete unused file, migrated overlooked tests from last merge * refactor: build process now supports TS, ESM, CJS and browser * build: upgrade to ESM version of contentful-sdk-core * test: reduce bundle size limits thanks to our optimizations * build: clean up depdency changes * chore: typos * feat: this SDK now also includes its version number in its bundles * test: fix output integration tests * build: npm dedupe * build: latest rollup dependencies * fix: use with keyword instead of assert to mark import as json * build: update depndencies related to this branch * build: make npm happy to resolve our dependencies without --force * test: ensure new failing typescript lint rules throw warnings only - still should be resolved at some point * test: fix import paths * build: ensure json-patch is available for typescript in projects using this api client * ci: update node version * fix: adjust import path * style: ensure prettier doesnt fail on our rollup config file * style: format code to make prettier lint happy * style: format code to make prettier lint happy #2 * ci: update circleci config to match our new setup * ci: cleanup * test: slightly increase bundle size limits * feat: introduce MIGRATION.md file * docs: readme cleanup * fix: move types definition to top of exports as demanded by node docs * fix: disable linting on inject-env file * docs: fix wrong link --------- Co-authored-by: Lisa White <[email protected]> * fix: replace `SysLink` & `MetaLinkProps` with `Link<T>` to improve type safety [CFISO-2344] (#2590) * fix: replace `SysLink` & `MetaLinkProps` with `Link<T>` to improve type safety * chore: prettier * fix: more specific types for subject links * fix: snapshots are created by users * fix: webhook health is created by webhook defs * fix: webhook call is created by webhook defs * chore: formatting * fix: update AiAction links * fix: `createdBy` etc should be a union, not an object * fix: remove unused types * fix: remove import * feat: narrow `sys.type` to a string literal type for better type safety (#2611) * feat: narrow `sys.type` to a string literal type for better type safety * fix: types for `Usage` * chore: prettier * feat: align taxonomy update methods with standard [NONE] (#2478) * fix: make version param required for entry patch method of plain client [DX-34] (#2610) --------- Co-authored-by: Benedikt Rötsch <[email protected]> Co-authored-by: Andi Pätzold <[email protected]> Co-authored-by: LiamStokingerContentful <[email protected]>
SysLink
is a frequently used type within CMA.js. Unfortunately,sys.type
andsys.linkType
are typed asstring
instead of"Link"
and the expected entity name.In this PR,
SysLink
is replaced withLink<T>
.MetaLinkProps
is adjusted accordingly. I also added a generic toMetaSysProps
andBasicMetaSysProps
to clearly define whethercreatedBy
etc is only a user or could also be an app.With
Link<T>
we gain additional type safety assys.type
is typed as"Link"
andsys.linkType
is typed asT
.SysLink
andMetaLinkProps
aredeprecated and it's recommended to always useLink<T>
.I am not 100% confident on all link types. After an initial reviewed, I'd share this PR internally in case a team spots an inconsistency.
Open questions:
sys.createdBy
)Link<'User'> | Link<'AppDefinition'>
? Or check one by one whether that entity can be accessed by an app?Link<'User'> | Link<'AppDefinition'>
orLink<'User' | 'AppDefinition'>
? The result of the type checking should be identical.This will be released as a breaking change in CMA.js v12