@wavemaker/foundation-css 11.15.1-rc.6451 → 11.15.2-rc.64737

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/cjs/foundation-css.cjs +1260 -12
  2. package/cjs/src_tokens_mobile_components_accordion-pane_accordion-pane_json.foundation-css.cjs +14 -0
  3. package/cjs/src_tokens_mobile_components_accordion_accordion_json.foundation-css.cjs +1 -1
  4. package/cjs/src_tokens_mobile_components_anchor_anchor_json.foundation-css.cjs +1 -1
  5. package/cjs/src_tokens_mobile_components_barcodescanner_barcodescanner_json.foundation-css.cjs +1 -1
  6. package/cjs/src_tokens_mobile_components_bottomsheet_bottomsheet_json.foundation-css.cjs +1 -1
  7. package/cjs/src_tokens_mobile_components_button_button_json.foundation-css.cjs +1 -1
  8. package/cjs/src_tokens_mobile_components_calendar_calendar_json.foundation-css.cjs +1 -1
  9. package/cjs/src_tokens_mobile_components_camera_camera_json.foundation-css.cjs +1 -1
  10. package/cjs/src_tokens_mobile_components_cards_cards_json.foundation-css.cjs +1 -1
  11. package/cjs/src_tokens_mobile_components_carousel_carousel_json.foundation-css.cjs +1 -1
  12. package/cjs/src_tokens_mobile_components_checkboxset_checkboxset_json.foundation-css.cjs +1 -1
  13. package/cjs/src_tokens_mobile_components_chips_chips_json.foundation-css.cjs +1 -1
  14. package/cjs/src_tokens_mobile_components_container_container_json.foundation-css.cjs +1 -1
  15. package/cjs/src_tokens_mobile_components_currency_currency_json.foundation-css.cjs +1 -1
  16. package/cjs/src_tokens_mobile_components_dropdown-menu_dropdown-menu_json.foundation-css.cjs +1 -1
  17. package/cjs/src_tokens_mobile_components_form-controls_form-controls_json.foundation-css.cjs +1 -1
  18. package/cjs/src_tokens_mobile_components_form-wrapper_form-wrapper_json.foundation-css.cjs +1 -1
  19. package/cjs/src_tokens_mobile_components_label_label_json.foundation-css.cjs +1 -1
  20. package/cjs/src_tokens_mobile_components_list_list_json.foundation-css.cjs +1 -1
  21. package/cjs/src_tokens_mobile_components_login_login_json.foundation-css.cjs +1 -1
  22. package/cjs/src_tokens_mobile_components_lottie_lottie_json.foundation-css.cjs +1 -1
  23. package/cjs/src_tokens_mobile_components_message_message_json.foundation-css.cjs +1 -1
  24. package/cjs/src_tokens_mobile_components_modal-dialog_modal-dialog_json.foundation-css.cjs +1 -1
  25. package/cjs/src_tokens_mobile_components_nav_nav_json.foundation-css.cjs +1 -1
  26. package/cjs/src_tokens_mobile_components_navbar_navbar_json.foundation-css.cjs +1 -1
  27. package/cjs/src_tokens_mobile_components_navitem_navitem_json.foundation-css.cjs +1 -1
  28. package/cjs/src_tokens_mobile_components_page-left-nav_page-left-nav_json.foundation-css.cjs +14 -0
  29. package/cjs/src_tokens_mobile_components_panel_panel_json.foundation-css.cjs +1 -1
  30. package/cjs/src_tokens_mobile_components_partial-container_partial-container_json.foundation-css.cjs +14 -0
  31. package/cjs/src_tokens_mobile_components_picture_picture_json.foundation-css.cjs +1 -1
  32. package/cjs/src_tokens_mobile_components_popover_popover_json.foundation-css.cjs +1 -1
  33. package/cjs/src_tokens_mobile_components_progress-bar_progress-bar_json.foundation-css.cjs +1 -1
  34. package/cjs/src_tokens_mobile_components_radioset_radioset_json.foundation-css.cjs +1 -1
  35. package/cjs/src_tokens_mobile_components_rating_rating_json.foundation-css.cjs +1 -1
  36. package/cjs/src_tokens_mobile_components_search_search_json.foundation-css.cjs +1 -1
  37. package/cjs/src_tokens_mobile_components_select_select_json.foundation-css.cjs +1 -1
  38. package/cjs/src_tokens_mobile_components_spinner_spinner_json.foundation-css.cjs +1 -1
  39. package/cjs/src_tokens_mobile_components_switch_switch_json.foundation-css.cjs +1 -1
  40. package/cjs/src_tokens_mobile_components_tabbar_tabbar_json.foundation-css.cjs +1 -1
  41. package/cjs/src_tokens_mobile_components_tabs_tabs_json.foundation-css.cjs +1 -1
  42. package/cjs/src_tokens_mobile_components_tile_tile_json.foundation-css.cjs +1 -1
  43. package/cjs/src_tokens_mobile_components_webview_webview_json.foundation-css.cjs +1 -1
  44. package/cjs/src_tokens_mobile_components_wizard_wizard_json.foundation-css.cjs +1 -1
  45. package/index.d.ts +1 -0
  46. package/index.js +1 -0
  47. package/index.js.map +1 -1
  48. package/native_mobile.index.d.ts +17 -0
  49. package/native_mobile.index.js +17 -5
  50. package/native_mobile.index.js.map +1 -1
  51. package/npm-shrinkwrap.json +95 -117
  52. package/package-lock.json +95 -117
  53. package/package.json +13 -4
  54. package/src/node/index.d.ts +1 -0
  55. package/src/node/index.js +2 -0
  56. package/src/node/index.js.map +1 -0
  57. package/src/styles/mobile/components/advanced/carousel.less +6 -12
  58. package/src/styles/mobile/components/advanced/login.less +1 -4
  59. package/src/styles/mobile/components/advanced/webview.less +1 -4
  60. package/src/styles/mobile/components/basic/anchor.less +2 -2
  61. package/src/styles/mobile/components/basic/bottomsheet.less +5 -12
  62. package/src/styles/mobile/components/basic/button.less +3 -12
  63. package/src/styles/mobile/components/basic/buttongroup.less +3 -12
  64. package/src/styles/mobile/components/basic/label.less +7 -4
  65. package/src/styles/mobile/components/basic/lottie.less +7 -4
  66. package/src/styles/mobile/components/basic/message.less +6 -10
  67. package/src/styles/mobile/components/basic/picture.less +4 -16
  68. package/src/styles/mobile/components/basic/progress-bar.less +0 -1
  69. package/src/styles/mobile/components/basic/search.less +5 -20
  70. package/src/styles/mobile/components/basic/spinner.less +1 -1
  71. package/src/styles/mobile/components/container/accordion/accordionpane.less +6 -0
  72. package/src/styles/mobile/components/container/accordion.less +35 -3
  73. package/src/styles/mobile/components/container/panel.less +0 -5
  74. package/src/styles/mobile/components/container/tabs/tab-header.less +14 -3
  75. package/src/styles/mobile/components/container/tile.less +1 -4
  76. package/src/styles/mobile/components/container/wizard.less +3 -9
  77. package/src/styles/mobile/components/container.less +8 -32
  78. package/src/styles/mobile/components/data/card.less +1 -4
  79. package/src/styles/mobile/components/data/form.less +143 -37
  80. package/src/styles/mobile/components/data/list.less +1 -4
  81. package/src/styles/mobile/components/device/barcodescanner.less +2 -5
  82. package/src/styles/mobile/components/device/camera.less +1 -4
  83. package/src/styles/mobile/components/dialogs/dialog.less +17 -4
  84. package/src/styles/mobile/components/input/calendar.less +46 -38
  85. package/src/styles/mobile/components/input/checkboxset.less +1 -2
  86. package/src/styles/mobile/components/input/chips.less +8 -19
  87. package/src/styles/mobile/components/input/currency.less +14 -17
  88. package/src/styles/mobile/components/input/radioset.less +1 -2
  89. package/src/styles/mobile/components/input/rating.less +1 -1
  90. package/src/styles/mobile/components/input/select.less +26 -64
  91. package/src/styles/mobile/components/input/switch.less +1 -2
  92. package/src/styles/mobile/components/input/toggle.less +1 -1
  93. package/src/styles/mobile/components/navigation/appnavbar.less +11 -15
  94. package/src/styles/mobile/components/navigation/menu.less +3 -11
  95. package/src/styles/mobile/components/navigation/popover.less +22 -15
  96. package/src/styles/mobile/components/page/left-panel.less +0 -1
  97. package/src/styles/mobile/components/page/partial-container.less +1 -0
  98. package/src/styles/mobile/components/page/tabbar.less +9 -8
  99. package/src/styles/mobile/components/tokens.dark.css +25 -9
  100. package/src/styles/mobile/components/tokens.light.css +198 -241
  101. package/src/styles/mobile/components/variables/accordion.variant.less +4 -0
  102. package/src/styles/mobile/components/variables/button.variant.less +19 -79
  103. package/src/styles/mobile/components/variables/carousel.variant.less +2 -3
  104. package/src/styles/mobile/components/variables/container.variant.less +6 -24
  105. package/src/styles/mobile/components/variables/form-controls.variant.less +9 -8
  106. package/src/styles/mobile/components/variables/picture.variant.less +3 -12
  107. package/src/styles/mobile/components/variables/tabbar.variant.less +1 -0
  108. package/src/styles/mobile/components/variables/tabs.variant.less +7 -0
  109. package/src/styles/mobile/studio/advanced/carousel.less +4 -2
  110. package/src/styles/mobile/studio/advanced/login.less +1 -4
  111. package/src/styles/mobile/studio/advanced/webview.less +1 -4
  112. package/src/styles/mobile/studio/basic/label.less +0 -8
  113. package/src/styles/mobile/studio/basic/message.less +1 -2
  114. package/src/styles/mobile/studio/container/accordion.less +1 -4
  115. package/src/styles/mobile/studio/container/container.less +2 -8
  116. package/src/styles/mobile/studio/container/tabs.less +10 -2
  117. package/src/styles/mobile/studio/data/card.less +1 -1
  118. package/src/styles/mobile/studio/device/barcode.less +2 -8
  119. package/src/styles/mobile/studio/input/calendar.less +66 -6
  120. package/src/styles/mobile/studio/input/checkboxset.less +21 -6
  121. package/src/styles/mobile/studio/input/currency.less +9 -1
  122. package/src/styles/mobile/studio/input/form.less +10 -40
  123. package/src/styles/mobile/studio/input/rating.less +1 -1
  124. package/src/styles/mobile/studio/input/select.less +33 -0
  125. package/src/styles/mobile/studio/input/toggle.less +3 -2
  126. package/src/styles/mobile/studio/layouts/tabbar.less +4 -5
  127. package/src/styles/mobile/studio/navigation/nav.less +0 -17
  128. package/src/styles/mobile/studio/navigation/popover.less +2 -5
  129. package/src/token-validation/component-token-schema.d.ts +169 -0
  130. package/src/token-validation/component-token-schema.js +146 -0
  131. package/src/token-validation/component-token-schema.js.map +1 -0
  132. package/src/token-validation/constants.d.ts +41 -0
  133. package/src/token-validation/constants.js +54 -0
  134. package/src/token-validation/constants.js.map +1 -0
  135. package/src/token-validation/global-token-schema.d.ts +37 -0
  136. package/src/token-validation/global-token-schema.js +41 -0
  137. package/src/token-validation/global-token-schema.js.map +1 -0
  138. package/src/token-validation/validate-token.d.ts +72 -0
  139. package/src/token-validation/validate-token.js +939 -0
  140. package/src/token-validation/validate-token.js.map +1 -0
  141. package/src/token-validation/validate-value.d.ts +13 -0
  142. package/src/token-validation/validate-value.js +57 -0
  143. package/src/token-validation/validate-value.js.map +1 -0
  144. package/src/token-validation/validator-utils/common/constants.d.ts +172 -0
  145. package/src/token-validation/validator-utils/common/constants.js +258 -0
  146. package/src/token-validation/validator-utils/common/constants.js.map +1 -0
  147. package/src/token-validation/validator-utils/common/primitives.d.ts +14 -0
  148. package/src/token-validation/validator-utils/common/primitives.js +35 -0
  149. package/src/token-validation/validator-utils/common/primitives.js.map +1 -0
  150. package/src/token-validation/validator-utils/common/utils.d.ts +152 -0
  151. package/src/token-validation/validator-utils/common/utils.js +316 -0
  152. package/src/token-validation/validator-utils/common/utils.js.map +1 -0
  153. package/src/token-validation/validator-utils/native_mobile.d.ts +1 -0
  154. package/src/token-validation/validator-utils/native_mobile.js +120 -0
  155. package/src/token-validation/validator-utils/native_mobile.js.map +1 -0
  156. package/src/token-validation/validator-utils/web.d.ts +1 -0
  157. package/src/token-validation/validator-utils/web.js +72 -0
  158. package/src/token-validation/validator-utils/web.js.map +1 -0
  159. package/src/tokens/mobile/components/accordion/accordion.json +172 -4
  160. package/src/tokens/mobile/components/accordion-pane/accordion-pane.json +65 -0
  161. package/src/tokens/mobile/components/anchor/anchor.json +5 -15
  162. package/src/tokens/mobile/components/barcodescanner/barcodescanner.json +10 -38
  163. package/src/tokens/mobile/components/bottomsheet/bottomsheet.json +28 -92
  164. package/src/tokens/mobile/components/button/button.json +24 -121
  165. package/src/tokens/mobile/components/calendar/calendar.json +262 -158
  166. package/src/tokens/mobile/components/camera/camera.json +5 -31
  167. package/src/tokens/mobile/components/cards/cards.json +1 -27
  168. package/src/tokens/mobile/components/carousel/carousel.json +25 -69
  169. package/src/tokens/mobile/components/checkboxset/checkboxset.json +6 -16
  170. package/src/tokens/mobile/components/chips/chips.json +8 -80
  171. package/src/tokens/mobile/components/container/container.json +22 -158
  172. package/src/tokens/mobile/components/currency/currency.json +89 -5
  173. package/src/tokens/mobile/components/dropdown-menu/dropdown-menu.json +15 -87
  174. package/src/tokens/mobile/components/form-controls/form-controls.json +140 -142
  175. package/src/tokens/mobile/components/form-wrapper/form-wrapper.json +0 -8
  176. package/src/tokens/mobile/components/label/label.json +0 -34
  177. package/src/tokens/mobile/components/list/list.json +5 -31
  178. package/src/tokens/mobile/components/login/login.json +5 -31
  179. package/src/tokens/mobile/components/lottie/lottie.json +23 -29
  180. package/src/tokens/mobile/components/message/message.json +37 -61
  181. package/src/tokens/mobile/components/modal-dialog/modal-dialog.json +54 -8
  182. package/src/tokens/mobile/components/nav/nav.json +1 -48
  183. package/src/tokens/mobile/components/navbar/navbar.json +61 -95
  184. package/src/tokens/mobile/components/navitem/navitem.json +4 -4
  185. package/src/tokens/mobile/components/{left-nav/left-nav.json → page-left-nav/page-left-nav.json} +1 -9
  186. package/src/tokens/mobile/components/panel/panel.json +0 -10
  187. package/src/tokens/mobile/components/partial-container/partial-container.json +23 -0
  188. package/src/tokens/mobile/components/picture/picture.json +9 -63
  189. package/src/tokens/mobile/components/popover/popover.json +105 -97
  190. package/src/tokens/mobile/components/progress-bar/progress-bar.json +0 -8
  191. package/src/tokens/mobile/components/radioset/radioset.json +5 -15
  192. package/src/tokens/mobile/components/rating/rating.json +5 -7
  193. package/src/tokens/mobile/components/search/search.json +25 -155
  194. package/src/tokens/mobile/components/select/select.json +223 -165
  195. package/src/tokens/mobile/components/spinner/spinner.json +5 -7
  196. package/src/tokens/mobile/components/switch/switch.json +5 -15
  197. package/src/tokens/mobile/components/tabbar/tabbar.json +48 -54
  198. package/src/tokens/mobile/components/tabs/tabs.json +113 -5
  199. package/src/tokens/mobile/components/tile/tile.json +5 -31
  200. package/src/tokens/mobile/components/webview/webview.json +5 -31
  201. package/src/tokens/mobile/components/wizard/wizard.json +8 -56
  202. package/cjs/src_tokens_mobile_components_left-nav_left-nav_json.foundation-css.cjs +0 -14
  203. package/src/styles/mobile/components/input/epoch/date.less +0 -44
  204. package/src/styles/mobile/components/input/epoch/datetime.less +0 -38
  205. package/src/styles/mobile/components/input/epoch/time.less +0 -38
  206. package/src/styles/mobile/components/input/number.less +0 -40
  207. package/src/styles/mobile/components/input/text.less +0 -69
  208. package/src/styles/mobile/components/input/textarea.less +0 -63
  209. package/src/styles/mobile/components/variables/select.variant.less +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-token.js","sourceRoot":"./","sources":["src/token-validation/validate-token.js"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport Ajv from \"ajv\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nimport geComponentTokenSchema from \"./component-token-schema.js\";\nimport getGlobalTokenSchema from \"./global-token-schema.js\";\nimport {\n VALIDATION_RULES,\n ERROR_TYPES,\n TOKEN_TYPES,\n ALLOWED_PROPERTIES_BY_CONTEXT,\n VALIDATION_SCOPE,\n VALUE_RELATED_KEYWORDS,\n PLATFORM,\n FOLDER_TYPE\n} from \"./constants.js\";\n\n\n//Maps each token type to its validation schema and the rules enabled during validation.\nconst TOKEN_TYPE_CONFIG = {\n [TOKEN_TYPES.GLOBAL]: {\n getSchema: () => getGlobalTokenSchema(),\n resolveRules: () => ({\n [VALIDATION_RULES.STRUCTURE]: false,\n [VALIDATION_RULES.METADATA]: false,\n [VALIDATION_RULES.REFERENCES]: true,\n [VALIDATION_RULES.OVERRIDES]: false\n })\n },\n\n [TOKEN_TYPES.COMPONENT]: {\n getSchema: (enabledRules) => geComponentTokenSchema(enabledRules),\n resolveRules: (validationOptions) =>\n resolveEnabledValidationRules(validationOptions)\n }\n};\n\n/*\n * Normalizes and stores a validation error.\n * Inputs:\n * - errorType: category of validation error\n * - fieldName: dot-separated path of the invalid field\n * - message: human-readable error message\n * - fileName: name of the file being validated (optional)\n * - allowedValues: list of allowed values for the field (optional)\n * Output: - Adds a normalized error object to the internal validation error list\n */\nconst pushError = ({ errorType, fieldName, message, fileName, allowedValues, actualValue }, validationErrors) => {\n const error = { errorType, fieldName, message };\n if (allowedValues) error.allowedValues = allowedValues;\n if (fileName) error.fileName = fileName;\n if(actualValue !== undefined) error.actualValue = actualValue;\n\n validationErrors.push(error);\n};\n\n/*\n * Validates that leaf token nodes define a valid string value.\n * Inputs:\n * - _schema: AJV keyword schema value (not used)\n * - node: token node being validated\n * - ctx: AJV validation context containing the instance path\n * Output:\n * - Returns true if node is valid or not applicable\n * - Returns false and reports validation errors if leaf token is invalid\n */\nfunction leafMustHaveValueValidate(_schema, node, ctx) {\n // Skip meta subtree\n if (\n ctx.instancePath?.includes(\"/meta\") ||\n ctx.instancePath?.includes(\"/attributes\") ||\n ctx.instancePath?.endsWith(\"/type\")\n ) {\n return true;\n }\n\n // Primitive string leaf\n if (typeof node === \"string\") {\n leafMustHaveValueValidate.errors = [\n {\n keyword: \"leafMustHaveValue\",\n message:\n `Invalid token definition.\\n` +\n `Leaf tokens must be objects with a \"value\" property.\\n\\n` +\n `Expected format: { \"value\": \"16px\" }`\n }\n ];\n return false;\n }\n\n // null node\n if (node === null) {\n leafMustHaveValueValidate.errors = [\n {\n keyword: \"leafMustHaveValue\",\n message:\n `Invalid token definition.\\n` +\n `Token cannot be null.\\n\\n` +\n `Expected format: { \"value\": \"16px\" }`\n }\n ];\n return false;\n }\n\n //Ignore meta keys when deciding leaf\n const TOKEN_META_KEYS = new Set([\"value\",\"type\",\"attributes\",\"meta\"]);\n\n const childKeys = Object.keys(node).filter(\n k => !TOKEN_META_KEYS.has(k)\n );\n\n const hasNestedTokenChildren = childKeys.length > 0 && childKeys.some(k => node[k] && typeof node[k] === \"object\");\n const hasValue = \"value\" in node;\n\n //nodes with \"value\" cannot have nested token children\n if (hasValue && hasNestedTokenChildren) {\n leafMustHaveValueValidate.errors = [\n {\n keyword: \"leafMustHaveValue\",\n message:\n `Invalid token structure.\\n` +\n `A token that defines \"value\" cannot contain nested token objects.\\n` +\n `Move nested tokens to a separate level.`\n }\n ];\n return false;\n }\n // Object leaf without value\n if (!hasNestedTokenChildren && !hasValue) {\n leafMustHaveValueValidate.errors = [\n {\n keyword: \"leafMustHaveValue\",\n message:\n `Invalid token definition.\\n` +\n `Leaf tokens must be objects with a \"value\" property.\\n` +\n `Expected format: { \"value\": \"16px\" }`\n }\n ];\n return false;\n }\n\n // Invalid string literals\n const INVALID_STRING_LITERALS = new Set([\"null\", \"undefined\", \"nan\"]);\n\n if (\n typeof node.value === \"string\" &&\n INVALID_STRING_LITERALS.has(node.value.trim().toLowerCase())\n ) {\n leafMustHaveValueValidate.errors = [\n {\n keyword: \"leafMustHaveValue\",\n message:\n `Invalid token value.\\n` +\n `\"${node.value}\" is not allowed as a token value.`\n }\n ];\n return false;\n }\n\n return true;\n}\n\n/*\n * Validates token string values for reference placeholders.\n * Inputs:\n * - _schema: AJV keyword schema value (not used, required by AJV signature)\n * - tokenValue: string token value being validated\n * Output:\n * - Returns true if all references are valid or rule is disabled\n * - Returns false and attaches validation errors if any reference is invalid\n */\nfunction validateTokenReference(_unusedSchema, tokenValue) {\n const { enabledRules, globalTokenRegistry } = this.context;\n validateTokenReference.errors = null;\n if (!enabledRules?.[VALIDATION_RULES.REFERENCES]) return true;\n\n const referencePlaceholders =\n typeof tokenValue === \"string\" ? tokenValue.match(/{[^}]+}/g) : null;\n\n if (!referencePlaceholders) return true;\n\n const invalidReference = referencePlaceholders.find(referenceExpression => {\n const rawReferencePath = referenceExpression.replace(/[{}]/g, \"\")?.trim();\n\n // Reject empty references\n if (!rawReferencePath) {\n validateTokenReference.errors = [\n {\n keyword: \"refExists\",\n message: `Empty reference is not allowed → ${referenceExpression}`\n }\n ];\n return true;\n }\n\n // Ensure reference ends with `.value`\n if (!rawReferencePath.endsWith(\".value\")) {\n validateTokenReference.errors = [\n {\n keyword: \"refExists\",\n message: `Reference must end with .value → ${referenceExpression}`\n }\n ];\n return true;\n }\n\n const resolvedTokenPath = rawReferencePath.replace(/\\.value$/, \"\");\n // Ensure referenced token exists globally\n return !globalTokenRegistry[resolvedTokenPath];\n });\n\n if (invalidReference) {\n if (!validateTokenReference.errors) {\n validateTokenReference.errors = [\n {\n keyword: \"refExists\",\n message: `Reference does not exist → ${invalidReference}`\n }\n ];\n }\n return false;\n }\n\n return true;\n}\n\n/*\n * Creates the override validation function used by the overrideContext AJV keyword.\n * Inputs:\n * - _schema: AJV keyword schema value (not used)\n * - _parentSchema: parent schema (not used)\n * Output:\n * - Returns a validator function that AJV executes during validation\n */\nfunction compileOverrideKeyword() {\n return function validateOverrideAgainstBaseMapping(overrideNode, ctx) {\n const { enabledRules, foundationMappingRegistry } = this.context;\n //STOP — do not run override validation on primitives\n if (overrideNode === null || typeof overrideNode !== \"object\") {\n return true;\n }\n\n //STOP — do not run override validation on token leaf\n if (\"value\" in overrideNode) {\n return true;\n }\n\n // Rule disabled\n if (!enabledRules?.[VALIDATION_RULES.OVERRIDES]) return true;\n\n const instancePath = ctx.instancePath;\n\n const isOverrideRoot =\n instancePath.endsWith(\"/mapping\") ||\n instancePath.match(/\\/states\\/[^/]+$/) ||\n instancePath.match(/\\/variantGroups\\/[^/]+\\/[^/]+$/) ||\n instancePath.match(/\\/variantGroups\\/[^/]+\\/[^/]+\\/states\\/[^/]+$/);\n\n if (!isOverrideRoot) return true;\n\n const root = ctx.rootData;\n\n // Component name from override JSON\n const componentName = Object.keys(root)[0];\n\n // BASE STRUCTURE MUST COME FROM FOUNDATION\n const baseStructure = foundationMappingRegistry[componentName];\n\n // If foundation has no mapping, skip validation\n if (!baseStructure) return true;\n\n const overrideErrors = [];\n const basePath = deriveBasePath(componentName, instancePath);\n\n validateOverridePathRecursively(\n overrideNode,\n baseStructure,\n basePath,\n overrideErrors,\n instancePath\n );\n\n if (overrideErrors.length) {\n validateOverrideAgainstBaseMapping.errors = overrideErrors.map(e => ({\n instancePath: e.instancePath,\n keyword: \"overrideContext\",\n message: e.message\n }));\n return false;\n }\n\n return true;\n };\n}\n\n// Resolves the root directory of foundation tokens.\nfunction resolveFoundationTokenRootDir(platform = PLATFORM.WEB) {\n if(!Object.values(PLATFORM).includes(platform)) {\n throw new Error(\n \"Platform property is invalid, allowed properties are \" +\n Object.values(PLATFORM).join(\", \")\n );\n }\n\n // Full path of this file (validate-token.js)\n const currentFilePath = fileURLToPath(import.meta.url);\n\n // Directory containing this file (scripts/)\n const currentDirPath = path.dirname(currentFilePath);\n const folder = platform == PLATFORM.MOBILE ? FOLDER_TYPE.MOBILE : FOLDER_TYPE.WEB;\n return path.resolve(\n currentDirPath,\n \"../../src/tokens\",\n folder\n );\n}\n\n/*\n * Validates override paths against the foundation component mapping recursively.\n * Inputs:\n * - overrideNode: override token node being validated\n * - baseNode: corresponding foundation mapping node\n * - path: dot-separated path representing the current base mapping location\n * - overrideErrors: array used to collect override validation errors\n * - instancePath: AJV instance path of the current override node\n * Output:\n * - Populates the overrideErrors array with invalid override path errors\n */\nfunction validateOverridePathRecursively(\n overrideNode,\n baseNode,\n path,\n overrideErrors,\n instancePath\n) {\n\n if (path.endsWith(\".states\")) {\n return;\n }\n\n //stop recursion at token leaf object\n if (\n overrideNode &&\n typeof overrideNode === \"object\" &&\n (\"value\" in overrideNode || \"type\" in overrideNode || \"attributes\" in overrideNode)\n ) {\n return;\n }\n\n // Base missing\n if (!baseNode) {\n overrideErrors.push({\n instancePath,\n message: `Override path does NOT exist in base mapping → ${path}`\n });\n return;\n }\n\n // Override must be object\n if (overrideNode === null || typeof overrideNode !== \"object\") {\n return;\n }\n\n // BASE IS LEAF\n if (baseNode.__leaf) {\n\n for (const key of Object.keys(overrideNode || {})) {\n if (![\"value\", \"type\", \"attributes\"].includes(key)) {\n overrideErrors.push({\n instancePath: `${instancePath}/${key}`,\n message: `Override path does NOT exist in base mapping → ${path}.${key}`\n });\n }\n }\n\n return;\n }\n\n for (const key of Object.keys(overrideNode)) {\n // NEVER validate \"states\" structurally\n if (key === \"states\") {\n continue;\n }\n\n if (!baseNode[key]) {\n overrideErrors.push({\n instancePath: `${instancePath}/${key}`,\n message: `Override path does NOT exist in base mapping → ${path}.${key}`\n });\n continue;\n }\n\n validateOverridePathRecursively(\n overrideNode[key],\n baseNode[key],\n `${path}.${key}`,\n overrideErrors,\n `${instancePath}/${key}`\n );\n }\n}\n\n/*\n * Registers all token paths that define a concrete value by traversing a token JSON tree.\n * Inputs:\n * - tokenNode: token JSON object to traverse\n * - parentPath: dot-separated parent token path (used during recursion)\n * Output:\n * - Populates the global token registry with resolved token paths\n */\nfunction registerTokenDefinitionsRecursively(tokenNode,registry, parentPath = \"\") {\n if (!tokenNode || typeof tokenNode !== \"object\") return;\n\n Object.keys(tokenNode).forEach(tokenKey => {\n const currentTokenPath = parentPath\n ? `${parentPath}.${tokenKey}`\n : tokenKey;\n\n const tokenValue = tokenNode[tokenKey];\n\n // Register tokens that define a concrete value\n if (\n tokenValue &&\n typeof tokenValue === \"object\" &&\n \"value\" in tokenValue\n ) {\n if (!registry[currentTokenPath]) {\n registry[currentTokenPath] = true;\n }\n }\n\n // Continue traversal for nested token objects\n if (tokenValue && typeof tokenValue === \"object\") {\n registerTokenDefinitionsRecursively(tokenValue,registry, currentTokenPath);\n }\n });\n}\n\n/*\n * Registers all discovered token definitions into the global token registry.\n * Inputs:\n * - directoryPath: root directory to scan for token JSON files\n * Output:\n * - Registers all discovered token definitions into the global token registry\n */\nfunction collectAllTokenDefinitionsFromDir(directoryPath,registry) {\n fs.readdirSync(directoryPath).forEach(entryName => {\n const entryPath = path.join(directoryPath, entryName);\n const entryStats = fs.statSync(entryPath);\n\n // Recurse into subdirectories\n if (entryStats.isDirectory()) {\n return collectAllTokenDefinitionsFromDir(entryPath,registry);\n }\n\n // Process only JSON token files\n if (!entryName.endsWith(\".json\")) return;\n\n const tokenFileContent = JSON.parse(\n fs.readFileSync(entryPath, \"utf8\")\n );\n registerTokenDefinitionsRecursively(tokenFileContent,registry);\n });\n}\n\n//Builds the foundation global tokens directory path and passes it for token definition collection.\nfunction collectFoundationGlobalTokens(foundationRootDir) {\n const registry = {};\n const globalDir = path.join(foundationRootDir, \"global\");\n collectAllTokenDefinitionsFromDir(globalDir,registry);\n return registry;\n}\n\n//Builds the foundation components directory path and collects component mapping structures for override validation.\nfunction collectFoundationComponentMappings(foundationRootDir) {\n const registry = {};\n const componentsDir = path.join(foundationRootDir, \"components\");\n collectFoundationMappings(componentsDir, registry);\n return registry;\n}\n\n/*\n * Determines which properties are allowed for a given JSON path.\n * Inputs:\n * - instancePath: AJV instance path of the current validation error\n * Output:\n * - Returns a list of allowed property names for the path\n * - Returns undefined if no specific rule applies\n */\nfunction resolveAllowedProperties(instancePath) {\n const normalizedPath = instancePath\n ? instancePath.replace(/^\\//, \"\").replace(/\\//g, \".\")\n : \"\";\n\n for (const rule of ALLOWED_PROPERTIES_BY_CONTEXT) {\n if (rule.match(normalizedPath)) {\n return rule.allowed;\n }\n }\n\n return undefined;\n}\n\n/*\n * Resolves which validation rules are enabled for the current validation run.\n * Inputs: - validationOptions: configuration that may specify enabled validation rules\n * Output: - Returns an object mapping each validation rule to a boolean flag\n */\nfunction resolveEnabledValidationRules({ rules = [], isFoundationValidation = false } = {}) {\n const allAvailableRules = Object.values(VALIDATION_RULES);\n \n // Define rules when no rules are set explicitly \n const defaultEnabledRules = new Set([VALIDATION_RULES.STRUCTURE, VALIDATION_RULES.METADATA]);\n\n return Object.fromEntries(\n allAvailableRules.map(rule => {\n if (isFoundationValidation) {\n //Excluding reference rule for foundation css\n if (rule === VALIDATION_RULES.REFERENCES) {\n return [rule, false];\n }\n return [rule, true];\n }\n\n //If rules set explicity then enable only those rules\n if (rules.length > 0) return [rule, rules.includes(rule)];\n\n //Enable only if NOT in the default enabled set of rules for component validation\n return [rule, !defaultEnabledRules.has(rule)];\n })\n );\n}\n\n/*\n * Processes AJV validation errors and converts them into normalized validation errors.\n * Inputs:\n * - validate: compiled AJV validation function containing validation errors\n * - filePath: path of the JSON file being validated (optional)\n*/\nfunction handleValidationErrors({ validate, filePath }, validationErrors) {\n\n const fileName = filePath ? filePath.split(\"/\").pop() : undefined;\n\n if(validate.errors) {\n validate.errors.forEach(ajvError => {\n const { fieldName, errorMessage, errorMetadata } = extractValidationErrorDetails(ajvError);\n\n // Default error object\n let errorObj = {\n errorType: ERROR_TYPES.INVALID_VALUE,\n fieldName,\n message: errorMessage,\n fileName\n };\n\n switch (ajvError.keyword) {\n\n // RULE-3 → Reference errors\n case \"refExists\":\n errorObj.errorType = ERROR_TYPES.INVALID_REFERENCE;\n break;\n\n // RULE-4 → Invalid override fields\n case \"overrideContext\":\n errorObj.errorType = ERROR_TYPES.INVALID_FIELD;\n break;\n\n // Leaf / enum value validation\n case \"leafMustHaveValue\":\n case \"enum\":\n if (errorMetadata.allowedValues) {\n errorObj.allowedValues = errorMetadata.allowedValues;\n }\n break;\n\n // TYPE errors → structure or value\n case \"type\": {\n const expectedType = ajvError.params?.type;\n const actualType = Array.isArray(ajvError.data)\n ? \"array\"\n : typeof ajvError.data;\n\n if (expectedType === \"object\") {\n errorObj.errorType = ERROR_TYPES.INVALID_STRUCTURE;\n errorObj.message = `Expected a token object, but found ${actualType}`;\n }\n break;\n }\n\n // JSON structure issues\n case \"required\":\n case \"minProperties\":\n case \"maxProperties\":\n errorObj.errorType = ERROR_TYPES.INVALID_STRUCTURE;\n break;\n\n case \"additionalProperties\":\n errorObj.errorType = ERROR_TYPES.INVALID_STRUCTURE;\n const allowedValues = resolveAllowedProperties(ajvError.instancePath);\n if (allowedValues) {\n errorObj.allowedValues = allowedValues;\n }\n break;\n\n default:\n // RULE-2 → Missing metadata\n if (errorMessage.includes('must match \"then\" schema')) {\n errorObj.errorType = ERROR_TYPES.MISSING_FIELD;\n errorObj.message =\n \"Missing required metadata: type, attributes.subtype, attributes.description\";\n }\n }\n if (VALUE_RELATED_KEYWORDS.has(ajvError.keyword)) {\n errorObj.actualValue = ajvError.data;\n }\n\n pushError(errorObj, validationErrors);\n });\n }\n}\n\n/*\n * Extracts readable validation error details from an AJV error object.\n *\n * Input:\n * - ajvError: a single validation error produced by AJV\n *\n * Output:\n * - fieldName: dot-separated path of the invalid field\n * - errorMessage: human-readable validation message\n * - errorMetadata: additional details such as allowed values (when applicable)\n */\nfunction extractValidationErrorDetails(ajvError) {\n const fieldName =\n ajvError.instancePath\n ? ajvError.instancePath.replace(/^\\//, \"\").replace(/\\//g, \".\")\n : \"(root)\";\n\n const errorMessage = ajvError.message || \"Invalid token value\";\n\n const errorMetadata = {};\n\n // ENUM-specific metadata\n if (ajvError.keyword === \"enum\" && Array.isArray(ajvError.params?.allowedValues)) {\n errorMetadata.allowedValues = ajvError.params.allowedValues;\n }\n\n return {\n fieldName,\n errorMessage,\n errorMetadata\n };\n}\n\n//Validates the token type against supported values and normalizes it.\nfunction validateAndNormalizeTokenType(tokenType) {\n if (typeof tokenType !== \"string\") {\n throw new Error(`tokenType must be a string`);\n }\n\n const normalizedTokenType = tokenType.toLowerCase();\n\n if (!TOKEN_TYPE_CONFIG[normalizedTokenType]) {\n throw new Error(\n `Invalid tokenType \"${tokenType}\". Allowed values: ${Object.keys(TOKEN_TYPE_CONFIG).join(\", \")}`\n );\n }\n\n return normalizedTokenType;\n}\n\n/*\n * Collects structural mapping definitions for all foundation components.\n * Input:\n * - directoryPath: root directory containing foundation component token files\n *\n * Output:\n * - Populates the foundation mapping registry with structure-only representations of each component’s mapping\n */\nfunction collectFoundationMappings(directoryPath,componentsMappingregistry = {}) {\n // Read all entries(files + folders ) in the directory\n fs.readdirSync(directoryPath).forEach(entryName => {\n\n // Absolute path to the current entry\n const entryPath = path.join(directoryPath, entryName);\n\n // File system metadata (file or directory)\n const entryStats = fs.statSync(entryPath);\n\n // Recurse into subdirectories\n if (entryStats.isDirectory()) {\n collectFoundationMappings(entryPath, componentsMappingregistry);\n return;\n }\n\n if (!entryName.endsWith(\".json\")) return;\n\n const componentJson = JSON.parse(fs.readFileSync(entryPath, \"utf8\"));\n\n for (const componentName of Object.keys(componentJson)) {\n const mapping = componentJson[componentName]?.mapping;\n if (!mapping) continue;\n\n componentsMappingregistry[componentName] = extractMappingStructure(mapping);\n }\n });\n return componentsMappingregistry;\n}\n\n/*\n * Extracts the structural shape of a foundation component mapping for override validation.\n *\n * Input:\n * - componentMapping / node: the `mapping` object of a foundation component token\n *\n * Output:\n * - Returns a structure-only representation of the mapping\n * - Leaf nodes are marked to indicate valid override endpoints\n */\nfunction extractMappingStructure(node) {\n if (!node || typeof node !== \"object\") {\n return { __leaf: true };\n }\n\n const keys = Object.keys(node).filter(\n k => ![\"value\", \"type\", \"attributes\", \"states\"].includes(k)\n );\n\n // LEAF TOKEN\n if (keys.length === 0) {\n return { __leaf: true };\n }\n\n const structure = {};\n\n for (const key of keys) {\n structure[key] = extractMappingStructure(node[key]);\n }\n\n return structure;\n}\n\n//Finds the correct starting point for validating an override.\nfunction deriveBasePath(componentName, instancePath) {\n if (instancePath.includes(\"/variantGroups\")) {\n return `${componentName}.variantGroups`;\n }\n if (instancePath.includes(\"/states\")) {\n return `${componentName}.states`;\n }\n return `${componentName}.mapping`;\n}\n\n/*\n * Collects token definitions from an array of JSON objects.\n * Inputs: - jsonArray: an array of token JSON objects\n * Output: Registers all token paths that define a concrete value into the internal global token registry\n */\nfunction collectTokenDefinitionsFromJsonArray(registry, jsonArray = []) {\n if (!Array.isArray(jsonArray)) return;\n\n jsonArray.forEach((json) => {\n if (!json || typeof json !== \"object\") return;\n\n registerTokenDefinitionsRecursively(json,registry);\n });\n}\n\n/*\n * Validates a single token JSON object (global or component).\n * Inputs:\n * - json: The token JSON object to validate.\n * - tokenType: The type of token being validated (\"global\" or \"component\").\n * - validationConfig:Controls which validation rules are enabled for this run.\n * - rules: optional list of rule names to enable explicitly\n * - isFoundationValidation: when true, all rules are enabled\n * - externalGlobalTokenJsons: Optional additional global token JSONs whose token values can be referenced during validation.\n * Output:Validation errors are collected internally and can be retrieved using getValidationErrors().\n * - In the next iteration, project directory overrides will be used instead of externalGlobalTokenJsons.\n */\nexport class TokenValidator {\n constructor(args) {\n this.externalGlobalTokenJsons = args.externalGlobalTokenJsons || [];\n this.validationErrors = [];\n this.ajvEngine = new TokenAjvEngine();\n this.ajv = this.ajvEngine.getValidatorEngine();\n this.platform = args.platform ?? PLATFORM.WEB;\n this.foundationTokensDir = resolveFoundationTokenRootDir(this.platform);\n const globalTokenRegistry = collectFoundationGlobalTokens(this.foundationTokensDir);\n if (Array.isArray(this.externalGlobalTokenJsons)) {\n collectTokenDefinitionsFromJsonArray(globalTokenRegistry,this.externalGlobalTokenJsons);\n }\n this.ajv.context.globalTokenRegistry = globalTokenRegistry;\n }\n // Validates a token JSON object against the appropriate schema and rules based on its type.\n validateTokenJson({ json, validationConfig = {}, tokenType }) {\n if (!json || typeof json !== \"object\") {\n throw new Error(\"validateTokenJson requires a valid JSON object\");\n }\n\n // Reset validation errors for each run\n this.validationErrors.length = 0;\n const resolvedTokenType = validateAndNormalizeTokenType(tokenType);\n const tokenConfig = TOKEN_TYPE_CONFIG[resolvedTokenType];\n this.ajv.context.enabledRules = tokenConfig.resolveRules(validationConfig);\n this.ajv.context.foundationMappingRegistry = {};\n if(tokenType === TOKEN_TYPES.COMPONENT) {\n this.ajv.context.foundationMappingRegistry = collectFoundationComponentMappings(this.foundationTokensDir);\n }\n const schema = tokenConfig.getSchema(this.ajv.context.enabledRules);\n const validate = this.ajv.compile(schema);\n validate(json);\n handleValidationErrors({ validate}, this.validationErrors);\n }\n\n getValidationErrors() {\n return this.validationErrors;\n }\n}\n\n// Custom AJV engine class to encapsulate validator instance and custom keyword registrations\n class TokenAjvEngine {\n constructor() {\n this.validatorEngine = new Ajv({ allErrors: true, verbose: true, allowMatchingProperties: true });\n\n this.validatorEngine.context = {\n enabledRules: null,\n globalTokenRegistry: {},\n foundationMappingRegistry: {},\n \n }\n this.registerCustomValidations();\n }\n \n registerCustomValidations() {\n const CUSTOM_VALIDATIONS = [\n {\n keyword: \"refExists\",\n type: \"string\",\n errors: true,\n validate: validateTokenReference\n },\n {\n keyword: \"overrideContext\",\n type: \"object\",\n errors: true,\n compile: compileOverrideKeyword\n },\n {\n keyword: \"leafMustHaveValue\",\n type: [\"object\", \"string\"],\n errors: true,\n validate: leafMustHaveValueValidate\n }\n ];\n CUSTOM_VALIDATIONS.forEach(k => this.validatorEngine.addKeyword(k));\n }\n getValidatorEngine() {\n return this.validatorEngine;\n }\n}\n/*\n Validates an entire folder hierarchy of token JSON files.\n * Constructor inputs:\n * 1) validationScope:\n * - Determines the validation mode.\n * - Possible values:\n * - VALIDATION_SCOPE.FOUNDATION → validates foundation CSS tokens\n * - VALIDATION_SCOPE.PROJECT → validates project override tokens\n *\n * 2) projectOverrideDirs - Exact directories where project token validation should run.\n *\n * 3) isWebFolder:\n * - Indicates whether validation should target the web or mobile\n * foundation token folder.\n * - Used to resolve the correct foundation token root directory.\n *\n*/\nexport class TokenFolderValidator {\n constructor(args) {\n this.validationScope = args.validationScope || VALIDATION_SCOPE.PROJECT;\n this.projectOverrideDirs = args.projectOverrideDirs || [];\n this.validationErrors = [];\n this.ajvEngine = new TokenAjvEngine();\n this.ajv = this.ajvEngine.getValidatorEngine();\n this.platform = args.platform ?? PLATFORM.WEB;\n this.foundationTokensDir = resolveFoundationTokenRootDir(this.platform);\n this.createAjvContext();\n this.resolvedValidationTargets = this.resolveValidationTargets();\n }\n\n createAjvContext() {\n this.isFoundation = this.validationScope === VALIDATION_SCOPE.FOUNDATION;\n this.isProject = this.validationScope === VALIDATION_SCOPE.PROJECT;\n if (this.isProject && this.projectOverrideDirs.length === 0) {\n pushError({\n errorType: ERROR_TYPES.BUILD_ERROR,\n fieldName: \"Root\",\n message: \"Project validation requires at least one project override directory, but none were provided.\"\n }, this.validationErrors);\n return;\n }\n\n this.ajv.context.foundationMappingRegistry = collectFoundationComponentMappings(this.foundationTokensDir);\n const globalTokenRegistry = collectFoundationGlobalTokens(this.foundationTokensDir);\n\n if (this.isProject) {\n this.projectOverrideDirs.forEach(projectDir => {\n const { globalDir } = this.resolveProjectOverrideDirs(projectDir);\n if (globalDir && fs.existsSync(globalDir)) {\n collectAllTokenDefinitionsFromDir(globalDir, globalTokenRegistry);\n }\n });\n }\n\n this.ajv.context.globalTokenRegistry = globalTokenRegistry;\n }\n\n // Resolves which folders should be validated.\n resolveValidationTargets() {\n const validationTargets = [];\n\n if (this.isProject) {\n this.projectOverrideDirs.forEach(projectDir => {\n if (!fs.existsSync(projectDir)) return;\n\n const { globalDir, componentsDir } = this.resolveProjectOverrideDirs(projectDir);\n\n if (globalDir && fs.existsSync(globalDir)) {\n validationTargets.push({ type: TOKEN_TYPES.GLOBAL, dir: globalDir });\n }\n\n if (componentsDir && fs.existsSync(componentsDir)) {\n validationTargets.push({ type: TOKEN_TYPES.COMPONENT, dir: componentsDir });\n }\n });\n }\n\n //Resolve folders to validate\n if (this.isFoundation) {\n const globalDir = path.join(this.foundationTokensDir, \"global\");\n const componentsDir = path.join(this.foundationTokensDir, \"components\");\n validationTargets.push({ type: TOKEN_TYPES.GLOBAL, dir: globalDir });\n validationTargets.push({ type: TOKEN_TYPES.COMPONENT, dir: componentsDir });\n }\n\n return validationTargets;\n }\n\n /* Main entry point that validates all token JSON files in the resolved folders \n Inputs : \n 1) validationConfig:Controls which validation rules are enabled for this run.\n * - rules: optional list of rule names to enable explicitly\n * - isFoundationValidation: when true, all rules are enabled\n */\n validateFolder(validationConfig = {}) {\n // Nothing to validate\n if (this.isProject && this.projectOverrideDirs.length === 0) {\n return;\n }\n\n // Clear previous errors\n this.validationErrors.length = 0;\n\n this.resolvedValidationTargets.forEach(({ type, dir }) => {\n const tokenConfig = TOKEN_TYPE_CONFIG[type];\n\n // Enable rules for this run\n this.ajv.context.enabledRules = tokenConfig.resolveRules(\n {\n ...validationConfig,\n isFoundationValidation: this.isFoundation\n });\n\n const schema = tokenConfig.getSchema(this.ajv.context.enabledRules);\n\n const validate = this.ajv.compile(schema);\n\n this.traverseAndValidateJsonFiles(dir, validate);\n });\n }\n\n // Returns all collected validation errors.\n getValidationErrors() {\n return this.validationErrors;\n }\n\n //Resolves the available global and component override directories for a project.\n resolveProjectOverrideDirs(overridesDir) {\n const globalDir = path.join(overridesDir, \"global\");\n const componentsDir = path.join(overridesDir, \"components\");\n\n return {\n globalDir: fs.existsSync(globalDir) ? globalDir : null,\n componentsDir: fs.existsSync(componentsDir) ? componentsDir : null\n };\n }\n\n /*\n * Validates a single JSON file using schema and custom validation rules.\n * Inputs:\n * - filePath: path to the JSON file being validated\n * - validate: compiled AJV validation function\n * Output:\n * - Parses and validates the file\n * - Collects validation errors if any are found\n */\n validateFile(filePath, validate) {\n\n const { ok, json, error } = this.parseJsonSafely(filePath);\n const file = path.basename(filePath);\n\n //JSON STRUCTURE VALIDATION\n if (!ok) {\n pushError({\n errorType: ERROR_TYPES.INVALID_JSON,\n fieldName: \"(root)\",\n message: error.message,\n fileName: file\n }\n );\n return; // don't run AJV\n }\n\n validate(json);\n\n handleValidationErrors({\n validate,\n filePath\n }, this.validationErrors);\n }\n\n /*\n * Safely reads and parses a JSON file without throwing runtime errors.\n * Inputs: filePath: path to the JSON file\n * Output: Returns an object with either the parsed JSON or the parsing error\n */\n parseJsonSafely(filePath) {\n try {\n const content = fs.readFileSync(filePath, \"utf8\");\n return { ok: true, json: JSON.parse(content) };\n } catch (err) {\n return { ok: false, error: err };\n }\n }\n\n /*\n * Recursively traverses a directory and validates all JSON files found.\n * Inputs:\n * - dir: root directory to traverse\n * - validate: compiled AJV validation function\n * Output: - Validates each JSON file and collects validation errors\n */\n traverseAndValidateJsonFiles(dir, validate, visitedSet = new Set()) {\n // Resolve the real path of the current directory\n const realDir = fs.realpathSync(dir);\n\n // If we’ve already visited this path, skip it to avoid cycles\n if (visitedSet.has(realDir)) return;\n visitedSet.add(realDir);\n\n // Read directory contents\n fs.readdirSync(dir).forEach(name => {\n const full = path.join(dir, name);\n let stat;\n try {\n stat = fs.statSync(full);\n } catch (err) {\n console.warn(`Skipping inaccessible file: ${full}`);\n return;\n }\n\n if (stat.isDirectory()) {\n this.traverseAndValidateJsonFiles(full, validate, visitedSet);\n } else if (name.endsWith(\".json\")) {\n this.validateFile(full, validate);\n }\n });\n }\n\n /**\n * Generates a Markdown validation report summarizing all errors.\n * Output:\n * - Creates a README-style markdown file listing validation errors in generated folder\n */\n generateValidationReport(outputDir) {\n // Default to <project-root>/generated if outputDir is not provided\n const baseDir = outputDir || path.join(process.cwd(), \"generated\");\n\n // Ensure folder exists\n if (!fs.existsSync(baseDir)) {\n fs.mkdirSync(baseDir, { recursive: true });\n }\n\n if (!this.validationErrors.length) {\n const content = `# Token Validation Report\\n\\n No validation errors found.\\n`;\n fs.writeFileSync(path.join(baseDir, \"VALIDATION_REPORT.md\"), content);\n return;\n }\n\n const groupedByFile = {};\n\n // Group errors by file\n this.validationErrors.forEach(err => {\n const file = err.fileName || \"(unknown file)\";\n if (!groupedByFile[file]) groupedByFile[file] = [];\n groupedByFile[file].push(err);\n });\n\n let md = `# Token Validation Report\\n\\n`;\n md += `Generated on: ${new Date().toLocaleString()}\\n\\n`;\n md += `Total Errors: **${this.validationErrors.length}**\\n\\n`;\n md += `---\\n`;\n\n Object.entries(groupedByFile).forEach(([file, errors]) => {\n md += `## ${file} – ${errors.length} error${errors.length > 1 ? \"s\" : \"\"}\\n\\n`;\n\n errors.forEach((err, index) => {\n md += `### ${index + 1}. ${err.errorType}\\n`;\n md += `- **Path**: \\`${err.fieldName}\\`\\n`;\n md += `- **Message**: ${err.message}\\n`;\n\n if (err.allowedValues) {\n md += `- **Allowed Values**: ${err.allowedValues.join(\", \")}\\n`;\n }\n if (err.actualValue) {\n md += `- **Actual value**: ${err.actualValue}\\n `;\n }\n\n md += `\\n`;\n });\n\n md += `---\\n`;\n });\n const reportName = this.platform === PLATFORM.MOBILE\n ? \"mobile_tokens_validation_report.md\"\n : \"web_tokens_validation_report.md\";\n fs.writeFileSync(\n path.join(baseDir, reportName),\n md,\n \"utf8\"\n );\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Validates a token value against platform and subtype rules.
3
+ *
4
+ * @param {string|number} value - The raw token value.
5
+ * @param {string} subtype - e.g. "font-size", "color", "space".
6
+ * @param {string} platform - "native_mobile" | "web"
7
+ * @returns {{ valid: boolean, errorObject?: object }}
8
+ */
9
+ export default function validateTokenValue(value: string | number, subtype: string, platform: string): {
10
+ valid: boolean;
11
+ errorObject?: object;
12
+ };
13
+ export function isTokenReference(value: any): boolean;
@@ -0,0 +1,57 @@
1
+ import { WEB_VALIDATION_RULES } from "./validator-utils/web.js";
2
+ import { MOBILE_RULES } from "./validator-utils/native_mobile.js";
3
+ import { createErrorResponse, createSuccessResponse, getRuleDescription } from "./validator-utils/common/utils.js";
4
+ import { PLATFORM } from "./constants.js";
5
+ const RULES_BY_PLATFORM = {
6
+ [PLATFORM.MOBILE]: MOBILE_RULES,
7
+ [PLATFORM.WEB]: WEB_VALIDATION_RULES,
8
+ };
9
+ /**
10
+ * Validates a value against the rule set for the given platform and subtype.
11
+ */
12
+ function validateValue(value, subtype, platform) {
13
+ const rules = RULES_BY_PLATFORM[platform];
14
+ const rule = rules?.[subtype];
15
+ if (!rule?.validate)
16
+ return createSuccessResponse();
17
+ const result = rule.validate(value, rule);
18
+ if (!result.valid) {
19
+ return createErrorResponse(subtype, value, getRuleDescription(rule), platform);
20
+ }
21
+ return createSuccessResponse();
22
+ }
23
+ /**
24
+ * Validates a token value against platform and subtype rules.
25
+ *
26
+ * @param {string|number} value - The raw token value.
27
+ * @param {string} subtype - e.g. "font-size", "color", "space".
28
+ * @param {string} platform - "native_mobile" | "web"
29
+ * @returns {{ valid: boolean, errorObject?: object }}
30
+ */
31
+ export default function validateTokenValue(value, subtype, platform) {
32
+ //Remove this for web
33
+ if (platform !== PLATFORM.MOBILE)
34
+ return { valid: true };
35
+ // TODO Handling empty values
36
+ if (value === undefined || value === null || value === "")
37
+ return { valid: true };
38
+ if (isTokenReference(value))
39
+ return { valid: true };
40
+ const normalised = typeof value === "string" ? value.trim() : String(value);
41
+ return validateValue(normalised, subtype, platform);
42
+ }
43
+ export const isTokenReference = (value) => {
44
+ //TODO add given token exists from existing implementation
45
+ if (typeof value !== "string")
46
+ return false;
47
+ const referencePlaceholders = value.match(/{[^}]+}/g);
48
+ if (!referencePlaceholders)
49
+ return false;
50
+ return referencePlaceholders.every((referenceExpression) => {
51
+ const rawReferencePath = referenceExpression.replace(/[{}]/g, "")?.trim();
52
+ if (!rawReferencePath)
53
+ return false;
54
+ return rawReferencePath.endsWith(".value");
55
+ });
56
+ };
57
+ //# sourceMappingURL=validate-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-value.js","sourceRoot":"./","sources":["src/token-validation/validate-value.js"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACnH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,iBAAiB,GAAG;IACtB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY;IAC/B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB;CACvC,CAAC;AAEF;;GAEG;AACH,SAAS,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ;IAC3C,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;IAE9B,IAAI,CAAC,IAAI,EAAE,QAAQ;QAAE,OAAO,qBAAqB,EAAE,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,qBAAqB,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ;IAC/D,qBAAqB;IACrB,IAAG,QAAQ,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAExD,6BAA6B;IAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAClF,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,OAAO,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,EAAE;IACtC,0DAA0D;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,qBAAqB,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,qBAAqB;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,EAAE;QACvD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;QAC1E,IAAI,CAAC,gBAAgB;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC","sourcesContent":["\nimport { WEB_VALIDATION_RULES } from \"./validator-utils/web.js\";\nimport { MOBILE_RULES } from \"./validator-utils/native_mobile.js\";\nimport { createErrorResponse, createSuccessResponse, getRuleDescription } from \"./validator-utils/common/utils.js\";\nimport { PLATFORM } from \"./constants.js\";\n\nconst RULES_BY_PLATFORM = {\n [PLATFORM.MOBILE]: MOBILE_RULES,\n [PLATFORM.WEB]: WEB_VALIDATION_RULES,\n};\n\n/**\n * Validates a value against the rule set for the given platform and subtype.\n */\nfunction validateValue(value, subtype, platform) {\n const rules = RULES_BY_PLATFORM[platform];\n const rule = rules?.[subtype];\n\n if (!rule?.validate) return createSuccessResponse();\n\n const result = rule.validate(value, rule);\n if (!result.valid) {\n return createErrorResponse(subtype, value, getRuleDescription(rule), platform);\n }\n\n return createSuccessResponse();\n}\n\n/**\n * Validates a token value against platform and subtype rules.\n *\n * @param {string|number} value - The raw token value.\n * @param {string} subtype - e.g. \"font-size\", \"color\", \"space\".\n * @param {string} platform - \"native_mobile\" | \"web\"\n * @returns {{ valid: boolean, errorObject?: object }}\n */\nexport default function validateTokenValue(value, subtype, platform) {\n //Remove this for web\n if(platform !== PLATFORM.MOBILE) return { valid: true };\n\n // TODO Handling empty values\n if (value === undefined || value === null || value === \"\") return { valid: true };\n if (isTokenReference(value)) return { valid: true };\n const normalised = typeof value === \"string\" ? value.trim() : String(value);\n return validateValue(normalised, subtype, platform);\n}\n\nexport const isTokenReference = (value) => {\n //TODO add given token exists from existing implementation\n if (typeof value !== \"string\") return false;\n const referencePlaceholders = value.match(/{[^}]+}/g);\n if (!referencePlaceholders) return false;\n return referencePlaceholders.every((referenceExpression) => {\n const rawReferencePath = referenceExpression.replace(/[{}]/g, \"\")?.trim();\n if (!rawReferencePath) return false;\n return rawReferencePath.endsWith(\".value\");\n });\n};\n"]}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Generate platform-specific rule configuration
3
+ * @param {string} subtype - The subtype name
4
+ * @param {string} platform - Platform ('native_mobile' or 'web')
5
+ * @returns {Object} Platform-specific rule configuration
6
+ */
7
+ export function getPlatformRule(subtype: string, platform: string): any;
8
+ /**
9
+ * Resolve an executable validator function from rule type + subtype.
10
+ */
11
+ export function resolveRuleValidator(type: any, subtype: any, platform: any, validators: any): any;
12
+ export const BASE_SUBTYPE_CONFIGS: {
13
+ "border-style": {
14
+ type: string;
15
+ native_mobile: {
16
+ allowed: string[];
17
+ };
18
+ web: {
19
+ allowed: string[];
20
+ };
21
+ };
22
+ "border-width": {
23
+ type: string;
24
+ allowMultiValue: boolean;
25
+ native_mobile: {
26
+ allowedUnits: string[];
27
+ allowUnitless: boolean;
28
+ allowedKeywords: never[];
29
+ };
30
+ web: {
31
+ allowedUnits: string[];
32
+ allowUnitless: boolean;
33
+ allowedKeywords: string[];
34
+ };
35
+ };
36
+ "font-family": {
37
+ type: string;
38
+ customDescription: {
39
+ native_mobile: string;
40
+ web: string;
41
+ };
42
+ native_mobile: {
43
+ allowMultipleFonts: boolean;
44
+ separator: null;
45
+ maxFonts: number;
46
+ allowGenericFallbacks: boolean;
47
+ };
48
+ web: {
49
+ allowMultipleFonts: boolean;
50
+ separator: string;
51
+ maxFonts: null;
52
+ allowGenericFallbacks: boolean;
53
+ };
54
+ };
55
+ "font-size": {
56
+ type: string;
57
+ native_mobile: {
58
+ allowedUnits: string[];
59
+ allowUnitless: boolean;
60
+ allowedKeywords: never[];
61
+ };
62
+ web: {
63
+ allowedUnits: string[];
64
+ allowUnitless: boolean;
65
+ allowedKeywords: string[];
66
+ };
67
+ };
68
+ "font-weight": {
69
+ type: string;
70
+ range: number[];
71
+ stepSize: number;
72
+ native_mobile: {
73
+ keywords: string[];
74
+ };
75
+ web: {
76
+ keywords: string[];
77
+ };
78
+ };
79
+ "icon-size": {
80
+ type: string;
81
+ native_mobile: {
82
+ allowedUnits: string[];
83
+ allowUnitless: boolean;
84
+ };
85
+ web: {
86
+ allowedUnits: string[];
87
+ allowUnitless: boolean;
88
+ };
89
+ };
90
+ "letter-spacing": {
91
+ type: string;
92
+ native_mobile: {
93
+ allowedUnits: string[];
94
+ allowUnitless: boolean;
95
+ };
96
+ web: {
97
+ allowedUnits: string[];
98
+ allowUnitless: boolean;
99
+ allowedKeywords: string[];
100
+ allowNegative: boolean;
101
+ };
102
+ };
103
+ "line-height": {
104
+ type: string;
105
+ native_mobile: {
106
+ allowedUnits: string[];
107
+ allowUnitless: boolean;
108
+ };
109
+ web: {
110
+ allowedUnits: string[];
111
+ allowUnitless: boolean;
112
+ allowedKeywords: string[];
113
+ };
114
+ };
115
+ opacity: {
116
+ type: string;
117
+ min: number;
118
+ max: number;
119
+ };
120
+ radius: {
121
+ type: string;
122
+ allowMultiValue: boolean;
123
+ allowPercent: boolean;
124
+ native_mobile: {
125
+ allowedUnits: string[];
126
+ allowUnitless: boolean;
127
+ };
128
+ web: {
129
+ allowedUnits: string[];
130
+ allowUnitless: boolean;
131
+ };
132
+ };
133
+ space: {
134
+ type: string;
135
+ allowMultiValue: boolean;
136
+ allowAuto: boolean;
137
+ allowPercent: boolean;
138
+ native_mobile: {
139
+ allowedUnits: string[];
140
+ allowUnitless: boolean;
141
+ };
142
+ web: {
143
+ allowedUnits: string[];
144
+ allowUnitless: boolean;
145
+ };
146
+ };
147
+ margin: {
148
+ type: string;
149
+ allowMultiValue: boolean;
150
+ allowAuto: boolean;
151
+ allowNegative: boolean;
152
+ native_mobile: {
153
+ allowedUnits: string[];
154
+ allowUnitless: boolean;
155
+ };
156
+ web: {
157
+ allowedUnits: string[];
158
+ allowUnitless: boolean;
159
+ };
160
+ };
161
+ spacer: {
162
+ type: string;
163
+ native_mobile: {
164
+ allowedUnits: string[];
165
+ allowUnitless: boolean;
166
+ };
167
+ web: {
168
+ allowedUnits: string[];
169
+ allowUnitless: boolean;
170
+ };
171
+ };
172
+ };
@@ -0,0 +1,258 @@
1
+ // Base validation rule configurations shared across platforms
2
+ //TODO segregation of units
3
+ const WEB_SIZES = [
4
+ // Absolute Lengths
5
+ "px", "cm", "mm", "Q", "in", "pc", "pt",
6
+ // Font-Relative (Local)
7
+ "em", "ex", "ch", "cap", "ic", "lh",
8
+ // Font-Relative (Root)
9
+ "rem", "rex", "rch", "rcap", "ric", "rlh",
10
+ // Standard Viewport
11
+ "vw", "vh", "vi", "vb", "vmin", "vmax",
12
+ // Small Viewport (UA UI expanded)
13
+ "svw", "svh", "svi", "svb", "svmin", "svmax",
14
+ // Large Viewport (UA UI retracted)
15
+ "lvw", "lvh", "lvi", "lvb", "lvmin", "lvmax",
16
+ // Dynamic Viewport (UA UI changes)
17
+ "dvw", "dvh", "dvi", "dvb", "dvmin", "dvmax",
18
+ // Container Query Units
19
+ "cqw", "cqh", "cqi", "cqb", "cqmin", "cqmax",
20
+ // Percentage & Layout
21
+ "%", "fr"
22
+ ];
23
+ const MOBILE_SIZES = ['px', 'vh', 'vw'];
24
+ export const BASE_SUBTYPE_CONFIGS = {
25
+ "border-style": {
26
+ type: "allowed-list",
27
+ native_mobile: {
28
+ allowed: ["solid", "dashed", "dotted"]
29
+ },
30
+ web: {
31
+ allowed: ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
32
+ }
33
+ },
34
+ "border-width": {
35
+ type: "multi-size",
36
+ allowMultiValue: true,
37
+ native_mobile: {
38
+ allowedUnits: MOBILE_SIZES,
39
+ allowUnitless: true,
40
+ allowedKeywords: []
41
+ },
42
+ web: {
43
+ allowedUnits: WEB_SIZES,
44
+ allowUnitless: true,
45
+ allowedKeywords: ["thin", "medium", "thick"]
46
+ }
47
+ },
48
+ // "box-shadow": {
49
+ // type: "custom",
50
+ // customDescription: {
51
+ // native_mobile: 'px-based shadow: "<x> <y> [blur] [spread] <color>"',
52
+ // web: 'CSS shadow: "[inset] <x> <y> [blur] [spread] <color>" with CSS units and colors'
53
+ // }
54
+ // },
55
+ // "elevation": {
56
+ // type: "custom",
57
+ // customDescription: {
58
+ // native_mobile: '[inset] <offsetX> <offsetY> [blurRadius≥0] [spreadDistance] [color] — px or 0; color: #hex, rgb(), rgba(), named; comma-separate multiple shadows',
59
+ // web: '[inset] <offsetX> <offsetY> [blurRadius≥0] [spreadDistance] [color] — CSS units; color: #hex, rgb(), rgba(), hsl(), hsla(), named; comma-separate multiple shadows'
60
+ // }
61
+ // },
62
+ "font-family": {
63
+ type: "custom",
64
+ customDescription: {
65
+ native_mobile: "only one font name",
66
+ web: "valid font family name or comma-separated font stack"
67
+ },
68
+ native_mobile: {
69
+ allowMultipleFonts: false,
70
+ separator: null,
71
+ maxFonts: 1,
72
+ allowGenericFallbacks: false
73
+ },
74
+ web: {
75
+ allowMultipleFonts: true,
76
+ separator: ",",
77
+ maxFonts: null,
78
+ allowGenericFallbacks: true
79
+ }
80
+ },
81
+ "font-size": {
82
+ type: "size",
83
+ native_mobile: {
84
+ allowedUnits: MOBILE_SIZES,
85
+ allowUnitless: true,
86
+ allowedKeywords: []
87
+ },
88
+ web: {
89
+ allowedUnits: WEB_SIZES,
90
+ allowUnitless: true,
91
+ allowedKeywords: ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "smaller", "larger"]
92
+ }
93
+ },
94
+ "font-weight": {
95
+ type: "range-with-keywords",
96
+ range: [100, 900],
97
+ stepSize: 100,
98
+ native_mobile: {
99
+ keywords: ["normal", "bold"]
100
+ },
101
+ web: {
102
+ keywords: ["normal", "bold", "bolder", "lighter"]
103
+ }
104
+ },
105
+ "icon-size": {
106
+ type: "size",
107
+ native_mobile: {
108
+ allowedUnits: MOBILE_SIZES,
109
+ allowUnitless: true
110
+ },
111
+ web: {
112
+ allowedUnits: WEB_SIZES,
113
+ allowUnitless: true
114
+ }
115
+ },
116
+ "letter-spacing": {
117
+ type: "size",
118
+ native_mobile: {
119
+ allowedUnits: MOBILE_SIZES,
120
+ allowUnitless: true
121
+ },
122
+ web: {
123
+ allowedUnits: WEB_SIZES,
124
+ allowUnitless: true,
125
+ allowedKeywords: ['normal'],
126
+ allowNegative: true
127
+ }
128
+ },
129
+ "line-height": {
130
+ type: "size",
131
+ native_mobile: {
132
+ allowedUnits: MOBILE_SIZES,
133
+ allowUnitless: true
134
+ },
135
+ web: {
136
+ allowedUnits: WEB_SIZES,
137
+ allowUnitless: true,
138
+ allowedKeywords: ['normal']
139
+ }
140
+ },
141
+ "opacity": {
142
+ type: "range",
143
+ min: 0,
144
+ max: 1
145
+ },
146
+ "radius": {
147
+ type: "multi-size",
148
+ allowMultiValue: true,
149
+ allowPercent: true,
150
+ native_mobile: {
151
+ allowedUnits: MOBILE_SIZES,
152
+ allowUnitless: true
153
+ },
154
+ web: {
155
+ allowedUnits: WEB_SIZES,
156
+ allowUnitless: true
157
+ }
158
+ },
159
+ "space": {
160
+ type: "multi-size",
161
+ allowMultiValue: true,
162
+ allowAuto: true,
163
+ allowPercent: true,
164
+ native_mobile: {
165
+ allowedUnits: MOBILE_SIZES,
166
+ allowUnitless: true
167
+ },
168
+ web: {
169
+ allowedUnits: WEB_SIZES,
170
+ allowUnitless: true
171
+ }
172
+ },
173
+ "margin": {
174
+ type: "multi-size",
175
+ allowMultiValue: true,
176
+ allowAuto: true,
177
+ allowNegative: true,
178
+ native_mobile: {
179
+ allowedUnits: MOBILE_SIZES,
180
+ allowUnitless: true
181
+ },
182
+ web: {
183
+ allowedUnits: WEB_SIZES,
184
+ allowUnitless: true
185
+ }
186
+ },
187
+ "spacer": {
188
+ type: "size",
189
+ native_mobile: {
190
+ allowedUnits: MOBILE_SIZES,
191
+ allowUnitless: true
192
+ },
193
+ web: {
194
+ allowedUnits: WEB_SIZES,
195
+ allowUnitless: true
196
+ }
197
+ }
198
+ };
199
+ /**
200
+ * Generate platform-specific rule configuration
201
+ * @param {string} subtype - The subtype name
202
+ * @param {string} platform - Platform ('native_mobile' or 'web')
203
+ * @returns {Object} Platform-specific rule configuration
204
+ */
205
+ export function getPlatformRule(subtype, platform) {
206
+ const baseConfig = BASE_SUBTYPE_CONFIGS[subtype];
207
+ if (!baseConfig)
208
+ return null;
209
+ // Merge base config with platform-specific overrides
210
+ const platformConfig = baseConfig[platform] || {};
211
+ const rule = { ...baseConfig, ...platformConfig };
212
+ // Handle platform-specific custom descriptions
213
+ if (rule.customDescription && typeof rule.customDescription === 'object') {
214
+ rule.customDescription = rule.customDescription[platform] || rule.customDescription;
215
+ }
216
+ // Remove platform-specific sections from the final rule
217
+ delete rule.native_mobile;
218
+ delete rule.web;
219
+ delete rule.validator;
220
+ return rule;
221
+ }
222
+ /**
223
+ * Resolve an executable validator function from rule type + subtype.
224
+ */
225
+ export function resolveRuleValidator(type, subtype, platform, validators) {
226
+ const platformDefaults = {
227
+ native_mobile: MOBILE_SIZES,
228
+ web: WEB_SIZES
229
+ };
230
+ const defaultUnits = platformDefaults[platform];
231
+ switch (type) {
232
+ case "allowed-list":
233
+ return (value, rule) => validators.validateFromAllowedList(value, rule.allowed);
234
+ case "size":
235
+ return (value, rule) => validators.validatePlatformSizeValue(value, rule, defaultUnits);
236
+ case "multi-size":
237
+ return (value, rule) => validators.validatePlatformSpaceValue(value, rule, defaultUnits);
238
+ case "string":
239
+ return validators.validateFontFamily;
240
+ case "range":
241
+ return validators.validateOpacity;
242
+ case "range-with-keywords":
243
+ return platform === 'native_mobile'
244
+ ? (value, rule) => validators.validateFontWeight(value, rule, true)
245
+ : validators.validateFontWeight;
246
+ case "custom":
247
+ if (subtype === "font-family") {
248
+ return (value, rule) => validators.validateFontFamily(value, rule);
249
+ }
250
+ if (subtype === "box-shadow" || subtype === "elevation") {
251
+ return validators.validateBoxShadow;
252
+ }
253
+ return null;
254
+ default:
255
+ return null;
256
+ }
257
+ }
258
+ //# sourceMappingURL=constants.js.map