-
Notifications
You must be signed in to change notification settings - Fork 566
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: allow deferring transitive transforms from the transformer #1069
Conversation
9864cba
to
f917666
Compare
I think this makes sense to me. I'm trying to think if there is another way to do it without having the transformer function return undefined. It makes sense, but it also seems kind of magical, like secret behavior. I can't really think of anything better at the moment. |
Yeah exactly, I agree, it's the best thing I could come up with even though it's a bit magical. I was also thinking about Rollup's hooks https://rollupjs.org/plugin-development/#resolveid for example their resolveId hook that can return false to treat a module as external or return null to defer the resolution to the next plugin. So I also considered returning false or null, but null and false might be somewhat valid token values, whereas undefined never is as far as I can tell. Anyway, I'll start wrapping up this PR and ping you when it's ready |
f917666
to
aec2fad
Compare
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.
LGTM!
* chore: re-enable & fix some tests * feat: allow deferring transitive transforms from the transformer
For a full list of changes see the CHANGELOG.md or the [migration guide](https://styledictionary.com/version-4/migration/) from version 3.x.x to version 4.0.0 * BREAKING: make style-dictionary ESM-only and browser-compatible (#1014) * Update docs (#1051) * chore: upgrade glob to latest, set posix:true, verify & fix Windows (#1070) * chore: fix glob usage in script (#1074) * fix: glob dependency (#1075) * chore: release (prerelease) (#1076) * feat: improve and test ref utils error handling (#1077) * feat: expose flattenTokens utility (#1079) * fix: resolved filepath, async parser await (#1083) * feat: allow deferring transitive transforms from the transformer (#1069) * feat: support w3c special properties (#1081) * feat: expose typeW3CDelegate util function (#1087) * fix: small bug with w3c type delegate util (#1088) * fix: only run postinstall scripts in non- prod-mode (#1091) * fix: publish missing script file to npm (#1093) * fix: dev scripts only run in sd cwd (#1095) * fix: escape double quotes for ts outputStringLiterals (#1097) * W3C Syntax refactor to allow value & type token names/groups (#1100) * feat: support async for all hooks (#1106) * fix: dtcg option not passed in some places (#1116) * fix: outputReferenceFallbacks for css/variables formatter (#1113) * fix: missing type imports (#1118) * feat: allow transforms to be added on top of transformGroup (#1120) * chore: fix ref docs mistakes, add DTCG option (#1122) * feat: remove reliance on CTI, add token type (#1123) * feat: redesign logging (#1125) * fix: outputReferences for DTCG spec tokens (#1127) * feat: allow passing Filesystem volumes to SD instance / extend method (#1128) * chore: update docs volumes (#1130) * fix: absolute paths in Node env (#1134) * feat: add warnings disabled option, fix logging issues (#1136) * fix(types): add missing type keyword for type export from index.d.ts (#1139) * Revamp docs (#1141) * feat: allow outputReferences function, publish filter util for it (#1145) * feat: move formatHelpers to utils entrypoint (breaking) (#1147) * chore: add migration docs (#1148) * Some small docs fixes, and removing docsify (#1149) * fix: change merging behavior for tokens to override (#1151) * fix: asset url handling in CSS format (#1153) * feat: add outputReferencesTransformed utility function (#1154) * fix: outputReferencesTransformed util handling object-value tokens, unfiltered (#1155) * chore: fix some docs links (#1159) * fix: logging to be in sequence per platform (#1161) * fix: get rid of lodash, refactor templates to ES6 (#1160) * Format options improvements (#1165) * feat: turn off generated timestamp by default in file headers (#1174) * Expand composites (#1169) * Align Hooks APIs (#1185) * feat: move fileHeader global prop to hooks.fileHeaders (#1177) * feat: move filter global prop to hooks.filters, rename matcher to filter (#1179) * feat: move action global prop to hooks.actions (#1180) * feat: move parsers global prop to hooks.parsers, apply explicitly (#1181) * feat: move transformGroup global prop to hooks.transformGroups (#1182) * feat: move transforms global prop to hooks.transforms, align api (#1183) * feat: move formats global prop to hooks.formats, align api (#1184) * fix: color filter now skips invalid colors (#995) (#1188) * chore: docs mentions extend twice, duplicate (#1192) * feat: add object-value CSS shorthand transforms (#1194) * feat: pass options to fileheaders and filters, add unfilteredAllTokens (#1205) * fix: pass options to transforms filters, live demo main page (#1208) * chore: allow preselecting playground file (#1209) * fix: typeDtcgDelegate at any position, size/rem apply to unitless values (#1210) * feat: add convert to DTCG spec utilities, file converter docs site (#1200) * chore: version inject for sd-playground on build (#1216) * docs(DTCG): Update DTCG docs with latest link and fix full name (#1215) * chore: add mermaid integration to docs, create architecture (#1221) * feat: add formatPlatform/formatAllPlatforms methods (#1222) * fix: allow register hooks override existing (#1223) * feat: pass dictionary options to preprocessors (#1224) * feat: pass ref path in getReferences util output (#1226) * chore: add missing changeset for SD format platform methods (#1227) * timingFunction and fontFamily props, optional border props (#1229) * fix: expand on platform level to adjust path prop (#1231) * fix: fix CLI, update basic example, fix android templates DTCG (#1235) * feat: allow not throwing on broken refs (#1240) * feat: recursively expand nested composite tokens (#1244) --------- Co-authored-by: Andreas Nordahl <[email protected]> Co-authored-by: tkgroot <[email protected]> Co-authored-by: Lukas Oppermann <[email protected]> Co-authored-by: Lukas Oppermann <[email protected]> Co-authored-by: Joren Broekema <[email protected]> Co-authored-by: Tom Pietrosanti <[email protected]> Co-authored-by: Kaelig Deloumeau-Prigent <[email protected]> Co-authored-by: Daan Vos de Wael <[email protected]> Co-authored-by: Abel van Beek <[email protected]>
Issue #, if available:
fixes #1073
Related: tokens-studio/sd-transforms#211
See test for use case, but in summary: support transitive transforms that rely on sibling props for metadata in order to do the transformation, and allowing references in them. For this, it's necessary to allow letting the transformer decide that a prop's transformation should be deferred until the next cycle of reference resolutions, since only the transformer has the context about why deferring is necessary. returning
undefined
seemed to make the most sense to me, it says "the transformation could not be defined, so try again later"I mostly created this draft PR to prove that it can work without breaking other behaviors or types.
TODO before merging:
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.