diff --git a/tools/diff-generator/src/lib/deprecated-token-detection.js b/tools/diff-generator/src/lib/deprecated-token-detection.js index a970b38c..c1cd7ca5 100644 --- a/tools/diff-generator/src/lib/deprecated-token-detection.js +++ b/tools/diff-generator/src/lib/deprecated-token-detection.js @@ -26,7 +26,7 @@ export default function detectDeprecatedTokens(renamedTokens, changes) { const possibleMistakenRevert = { ...changes.deleted }; Object.keys(changes.added).forEach((token) => { if ( - (token !== undefined && !deprecatedTokens[token].deprecated) || + (token !== undefined && !isDeprecated(deprecatedTokens[token])) || renamedTokens[token] !== undefined ) { delete deprecatedTokens[token]; @@ -34,11 +34,45 @@ export default function detectDeprecatedTokens(renamedTokens, changes) { }); Object.keys(changes.deleted).forEach((token) => { const t = possibleMistakenRevert[token]; // a token marked as deleted - if (t === undefined || (typeof t !== "string" && !("deprecated" in t))) { + if (t === undefined || !wasUndeprecated(t)) { delete possibleMistakenRevert[token]; + } else { + delete changes.deleted[token]; } }); result.deprecated = deprecatedTokens; result.reverted = possibleMistakenRevert; return result; } + +function isDeprecated(tokenObj) { + if (typeof tokenObj !== "object") { + return false; + } else if (tokenObj.deprecated) { + return true; + } else { + let result = false; + + Object.keys(tokenObj).forEach((property) => { + result = result || isDeprecated(tokenObj[property]); + }); + + return result; + } +} + +function wasUndeprecated(tokenObj) { + if (typeof tokenObj !== "object") { + return false; + } else if ("deprecated" in tokenObj && tokenObj.deprecated === undefined) { + return true; + } else { + let result = false; + + Object.keys(tokenObj).forEach((property) => { + result = result || wasUndeprecated(tokenObj[property]); + }); + + return result; + } +} diff --git a/tools/diff-generator/test/addedToken.test.js b/tools/diff-generator/test/addedToken.test.js index 11b7e4c9..7e37b7e6 100644 --- a/tools/diff-generator/test/addedToken.test.js +++ b/tools/diff-generator/test/addedToken.test.js @@ -167,9 +167,6 @@ const expectedSeveralAddedSetTokens = { $schema: "https://opensource.adobe.com/spectrum-tokens/schemas/token-types/alias.json", value: "{gray-800}", - deprecated: true, - deprecated_comment: - "Express will merge with Spectrum with the release of Spectrum 2.", uuid: "60caae29-d389-421e-a574-b26bcaeed3bf", }, }, diff --git a/tools/diff-generator/test/test-schemas/added-set-tokens-out-of-order.json b/tools/diff-generator/test/test-schemas/added-set-tokens-out-of-order.json index 01e07447..dca132d1 100644 --- a/tools/diff-generator/test/test-schemas/added-set-tokens-out-of-order.json +++ b/tools/diff-generator/test/test-schemas/added-set-tokens-out-of-order.json @@ -78,8 +78,6 @@ "express": { "$schema": "https://opensource.adobe.com/spectrum-tokens/schemas/token-types/alias.json", "value": "{gray-800}", - "deprecated": true, - "deprecated_comment": "Express will merge with Spectrum with the release of Spectrum 2.", "uuid": "60caae29-d389-421e-a574-b26bcaeed3bf" } }