@patternfly/design-tokens 1.14.6 → 1.14.7

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 (87) hide show
  1. package/build/css/tokens-charts-dark.scss +2 -2
  2. package/build/css/tokens-charts.scss +2 -2
  3. package/build/css/tokens-dark.scss +52 -4
  4. package/build/css/tokens-default.scss +68 -14
  5. package/build/css/tokens-glass-dark.scss +12 -0
  6. package/build/css/tokens-glass.scss +12 -0
  7. package/build/css/tokens-highcontrast-dark.scss +2 -2
  8. package/build/css/tokens-highcontrast.scss +2 -2
  9. package/build/css/tokens-palette.scss +2 -2
  10. package/build/css/tokens-redhat-dark.scss +14 -0
  11. package/build/css/tokens-redhat-glass-dark.scss +19 -0
  12. package/build/css/tokens-redhat-glass.scss +18 -0
  13. package/build/css/tokens-redhat-highcontrast-dark.scss +47 -0
  14. package/build/css/tokens-redhat-highcontrast.scss +127 -0
  15. package/build/css/tokens-redhat.scss +15 -0
  16. package/build.js +201 -13
  17. package/config.dark.json +1 -1
  18. package/config.default.json +1 -1
  19. package/config.glass.dark.json +23 -0
  20. package/config.glass.json +24 -0
  21. package/config.layers.glass-dark.json +19 -0
  22. package/config.layers.glass.json +19 -0
  23. package/config.layers.highcontrast-dark.json +19 -0
  24. package/config.layers.highcontrast.json +19 -0
  25. package/config.layers.redhat-dark.json +22 -0
  26. package/config.layers.redhat-glass-dark.json +22 -0
  27. package/config.layers.redhat-glass.json +22 -0
  28. package/config.layers.redhat-highcontrast-dark.json +22 -0
  29. package/config.layers.redhat-highcontrast.json +22 -0
  30. package/config.layers.redhat.json +22 -0
  31. package/config.redhat-dark.json +25 -0
  32. package/config.redhat-glass-dark.json +25 -0
  33. package/config.redhat-glass.json +26 -0
  34. package/config.redhat-highcontrast-dark.json +25 -0
  35. package/config.redhat-highcontrast.json +26 -0
  36. package/config.redhat.json +26 -0
  37. package/package.json +2 -2
  38. package/patternfly-docs/content/all-patternfly-tokens.md +24 -1
  39. package/patternfly-docs/content/token-layers-glass-dark.json +38562 -0
  40. package/patternfly-docs/content/token-layers-glass.json +41600 -0
  41. package/patternfly-docs/content/token-layers-highcontrast-dark.json +38385 -0
  42. package/patternfly-docs/content/token-layers-highcontrast.json +53091 -0
  43. package/patternfly-docs/content/token-layers-redhat-dark.json +48501 -0
  44. package/patternfly-docs/content/token-layers-redhat-glass-dark.json +38233 -0
  45. package/patternfly-docs/content/token-layers-redhat-glass.json +41282 -0
  46. package/patternfly-docs/content/token-layers-redhat-highcontrast-dark.json +38223 -0
  47. package/patternfly-docs/content/token-layers-redhat-highcontrast.json +52773 -0
  48. package/patternfly-docs/content/token-layers-redhat.json +65159 -0
  49. package/plugins/export-patternfly-tokens/dist/code.js +26 -10
  50. package/plugins/export-patternfly-tokens/dist/ui.html +65 -21
  51. package/plugins/export-patternfly-tokens/src/code.ts +29 -10
  52. package/plugins/export-patternfly-tokens/src/ui.tsx +65 -20
  53. package/tokens/{dark → default/dark}/base.dark.json +83 -43
  54. package/tokens/{highcontrast-dark → default/dark}/palette.color.json +8 -0
  55. package/tokens/{dark → default/dark}/semantic.dark.json +235 -12
  56. package/tokens/default/{base.dimension.json → glass/base.dimension.json} +12 -12
  57. package/tokens/{highcontrast → default/glass}/base.json +45 -5
  58. package/tokens/{dark → default/glass}/palette.color.json +8 -0
  59. package/tokens/default/glass/semantic.glass.json +1996 -0
  60. package/tokens/{highcontrast-dark → default/glass-dark}/base.dark.json +83 -43
  61. package/tokens/{highcontrast → default/glass-dark}/palette.color.json +8 -0
  62. package/tokens/default/glass-dark/semantic.glass.dark.json +1996 -0
  63. package/tokens/{highcontrast → default/highcontrast}/base.dimension.json +12 -12
  64. package/tokens/default/{base.json → highcontrast/base.json} +45 -5
  65. package/tokens/default/highcontrast/palette.color.json +335 -0
  66. package/tokens/{highcontrast → default/highcontrast}/semantic.dimension.highcontrast.json +92 -56
  67. package/tokens/{highcontrast → default/highcontrast}/semantic.highcontrast.json +246 -23
  68. package/tokens/default/highcontrast-dark/base.dark.json +473 -0
  69. package/tokens/default/{palette.color.json → highcontrast-dark/palette.color.json} +8 -0
  70. package/tokens/{highcontrast-dark → default/highcontrast-dark}/semantic.highcontrast.dark.json +234 -11
  71. package/tokens/default/light/base.dimension.json +387 -0
  72. package/tokens/default/light/base.json +611 -0
  73. package/tokens/default/light/palette.color.json +335 -0
  74. package/tokens/default/{semantic.dimension.json → light/semantic.dimension.json} +95 -59
  75. package/tokens/default/{semantic.json → light/semantic.json} +235 -12
  76. package/tokens/default/{semantic.motion.json → light/semantic.motion.json} +18 -18
  77. package/tokens/redhat/dark/redhat.color.dark.json +62 -0
  78. package/tokens/redhat/glass/redhat.color.glass.json +49 -0
  79. package/tokens/redhat/glass-dark/redhat.color.glass.dark.json +62 -0
  80. package/tokens/redhat/highcontrast/redhat.color.highcontrast.json +49 -0
  81. package/tokens/redhat/highcontrast/redhat.dimension.highcontrast.json +23 -0
  82. package/tokens/redhat/highcontrast-dark/redhat.color.highcontrast.dark.json +49 -0
  83. package/tokens/redhat/light/redhat.color.json +49 -0
  84. package/tokens/redhat/light/redhat.dimension.json +23 -0
  85. /package/tokens/{dark → default/dark}/charts.dark.json +0 -0
  86. /package/tokens/default/{base.motion.json → light/base.motion.json} +0 -0
  87. /package/tokens/default/{charts.json → light/charts.json} +0 -0
@@ -3,10 +3,8 @@ var __webpack_exports__ = {};
3
3
  /*!******************************************************!*\
4
4
  !*** ./plugins/export-patternfly-tokens/src/code.ts ***!
5
5
  \******************************************************/
6
- console.clear();
7
6
  /* MAIN function */
8
7
  figma.ui.onmessage = (e) => {
9
- console.log('code received message', e);
10
8
  if (e.type === 'EXPORT') {
11
9
  exportToJSON();
12
10
  }
@@ -27,19 +25,38 @@ function exportToJSON() {
27
25
  figma.ui.postMessage({ type: 'EXPORT_RESULT', files });
28
26
  }
29
27
  /* EXPORT - helper functions */
30
- function processCollection({ name, modes, variableIds }) {
28
+ function processCollection(collection) {
29
+ const { name, modes, variableIds } = collection;
31
30
  const files = [];
31
+ // Check if this is an extended collection
32
+ const isExtended = collection.parentVariableCollectionId !== undefined;
33
+ const variableOverrides = collection.variableOverrides || {};
32
34
  modes.forEach((mode) => {
33
35
  let file = { fileName: `${name}.${mode.name}.tokens.json`, body: {} };
34
- variableIds.forEach((variableId) => {
35
- const { name, resolvedType, valuesByMode, description } = figma.variables.getVariableById(variableId);
36
- if (name.includes('figma-only')) {
36
+ // For extended collections, only process overridden variables
37
+ const varsToProcess = isExtended ? Object.keys(variableOverrides) : variableIds;
38
+ varsToProcess.forEach((variableId) => {
39
+ const variable = figma.variables.getVariableById(variableId);
40
+ if (!variable) {
41
+ return;
42
+ }
43
+ const { name: varName, resolvedType, valuesByMode, description } = variable;
44
+ const varExcludePattern = /figma-only/i;
45
+ if (varExcludePattern.test(varName)) {
37
46
  return; // Skip this variable
38
47
  }
39
- const value = valuesByMode[mode.modeId];
48
+ // For extended collections, get the overridden value
49
+ let value;
50
+ if (isExtended) {
51
+ const overrides = variableOverrides[variableId];
52
+ value = overrides ? overrides[mode.modeId] : undefined;
53
+ }
54
+ else {
55
+ value = valuesByMode[mode.modeId];
56
+ }
40
57
  if (value !== undefined && ['COLOR', 'FLOAT', 'STRING'].includes(resolvedType)) {
41
58
  let obj = file.body;
42
- name.split('/').forEach((groupName) => {
59
+ varName.split('/').forEach((groupName) => {
43
60
  obj[groupName] = obj[groupName] || {};
44
61
  obj = obj[groupName];
45
62
  });
@@ -49,7 +66,6 @@ function processCollection({ name, modes, variableIds }) {
49
66
  if (value.type === 'VARIABLE_ALIAS') {
50
67
  obj.$type = resolvedType === 'COLOR' ? 'color' : 'number';
51
68
  obj.$value = `{${figma.variables.getVariableById(value.id).name.replace(/\//g, '.')}}`;
52
- console.log(value);
53
69
  }
54
70
  else if (resolvedType === 'COLOR') {
55
71
  obj.$type = 'color';
@@ -84,4 +100,4 @@ function rgbToHex(value) {
84
100
 
85
101
  /******/ })()
86
102
  ;
87
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDhCQUE4QjtBQUN6RDtBQUNBO0FBQ0EsNkJBQTZCLDBCQUEwQjtBQUN2RDtBQUNBO0FBQ0EscUJBQXFCLGFBQWEsS0FBSyxHQUFHLFVBQVU7QUFDcEQ7QUFDQSxvQkFBb0IsZ0RBQWdEO0FBQ3BFO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsRUFBRSxvRUFBb0U7QUFDekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFlBQVksYUFBYTtBQUN6QjtBQUNBLHVCQUF1QixxREFBcUQsSUFBSSxhQUFhO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BwYXR0ZXJuZmx5L2Rlc2lnbi10b2tlbnMvLi9wbHVnaW5zL2V4cG9ydC1wYXR0ZXJuZmx5LXRva2Vucy9zcmMvY29kZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zb2xlLmNsZWFyKCk7XG4vKiBNQUlOIGZ1bmN0aW9uICovXG5maWdtYS51aS5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdjb2RlIHJlY2VpdmVkIG1lc3NhZ2UnLCBlKTtcbiAgICBpZiAoZS50eXBlID09PSAnRVhQT1JUJykge1xuICAgICAgICBleHBvcnRUb0pTT04oKTtcbiAgICB9XG59O1xuaWYgKGZpZ21hLmNvbW1hbmQgPT09ICdleHBvcnQnKSB7XG4gICAgZmlnbWEuc2hvd1VJKF9faHRtbF9fLCB7XG4gICAgICAgIHdpZHRoOiA4MjAsXG4gICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICB0aGVtZUNvbG9yczogdHJ1ZVxuICAgIH0pO1xufVxuLyogRVhQT1JUIEZ1bmN0aW9uYWxpdHkgKi9cbi8qIEVYUE9SVCAtIG1haW4gZnVuY3Rpb24gKi9cbmZ1bmN0aW9uIGV4cG9ydFRvSlNPTigpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IGZpZ21hLnZhcmlhYmxlcy5nZXRMb2NhbFZhcmlhYmxlQ29sbGVjdGlvbnMoKTtcbiAgICBjb25zdCBmaWxlcyA9IFtdO1xuICAgIGNvbGxlY3Rpb25zLmZvckVhY2goKGNvbGxlY3Rpb24pID0+IGZpbGVzLnB1c2goLi4ucHJvY2Vzc0NvbGxlY3Rpb24oY29sbGVjdGlvbikpKTtcbiAgICBmaWdtYS51aS5wb3N0TWVzc2FnZSh7IHR5cGU6ICdFWFBPUlRfUkVTVUxUJywgZmlsZXMgfSk7XG59XG4vKiBFWFBPUlQgLSBoZWxwZXIgZnVuY3Rpb25zICovXG5mdW5jdGlvbiBwcm9jZXNzQ29sbGVjdGlvbih7IG5hbWUsIG1vZGVzLCB2YXJpYWJsZUlkcyB9KSB7XG4gICAgY29uc3QgZmlsZXMgPSBbXTtcbiAgICBtb2Rlcy5mb3JFYWNoKChtb2RlKSA9PiB7XG4gICAgICAgIGxldCBmaWxlID0geyBmaWxlTmFtZTogYCR7bmFtZX0uJHttb2RlLm5hbWV9LnRva2Vucy5qc29uYCwgYm9keToge30gfTtcbiAgICAgICAgdmFyaWFibGVJZHMuZm9yRWFjaCgodmFyaWFibGVJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCByZXNvbHZlZFR5cGUsIHZhbHVlc0J5TW9kZSwgZGVzY3JpcHRpb24gfSA9IGZpZ21hLnZhcmlhYmxlcy5nZXRWYXJpYWJsZUJ5SWQodmFyaWFibGVJZCk7XG4gICAgICAgICAgICBpZiAobmFtZS5pbmNsdWRlcygnZmlnbWEtb25seScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBTa2lwIHRoaXMgdmFyaWFibGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzQnlNb2RlW21vZGUubW9kZUlkXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIFsnQ09MT1InLCAnRkxPQVQnLCAnU1RSSU5HJ10uaW5jbHVkZXMocmVzb2x2ZWRUeXBlKSkge1xuICAgICAgICAgICAgICAgIGxldCBvYmogPSBmaWxlLmJvZHk7XG4gICAgICAgICAgICAgICAgbmFtZS5zcGxpdCgnLycpLmZvckVhY2goKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbZ3JvdXBOYW1lXSA9IG9ialtncm91cE5hbWVdIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBvYmogPSBvYmpbZ3JvdXBOYW1lXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnVkFSSUFCTEVfQUxJQVMnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai4kdHlwZSA9IHJlc29sdmVkVHlwZSA9PT0gJ0NPTE9SJyA/ICdjb2xvcicgOiAnbnVtYmVyJztcbiAgICAgICAgICAgICAgICAgICAgb2JqLiR2YWx1ZSA9IGB7JHtmaWdtYS52YXJpYWJsZXMuZ2V0VmFyaWFibGVCeUlkKHZhbHVlLmlkKS5uYW1lLnJlcGxhY2UoL1xcLy9nLCAnLicpfX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc29sdmVkVHlwZSA9PT0gJ0NPTE9SJykge1xuICAgICAgICAgICAgICAgICAgICBvYmouJHR5cGUgPSAnY29sb3InO1xuICAgICAgICAgICAgICAgICAgICBvYmouJHZhbHVlID0gcmdiVG9IZXgodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNvbHZlZFR5cGUgPT09ICdGTE9BVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLiR0eXBlID0gJ251bWJlcic7XG4gICAgICAgICAgICAgICAgICAgIG9iai4kdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzb2x2ZWRUeXBlID09PSAnU1RSSU5HJykge1xuICAgICAgICAgICAgICAgICAgICBvYmouJHR5cGUgPSAnc3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgb2JqLiR2YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbGVzO1xufVxuZnVuY3Rpb24gcmdiVG9IZXgodmFsdWUpIHtcbiAgICBjb25zdCB7IHIsIGcsIGIsIGEgfSA9IHZhbHVlO1xuICAgIGlmIChhICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBgcmdiYSgke1tyLCBnLCBiXS5tYXAoKG4pID0+IE1hdGgucm91bmQobiAqIDI1NSkpLmpvaW4oJywgJyl9LCAke2EudG9GaXhlZCg0KX0pYDtcbiAgICB9XG4gICAgY29uc3QgdG9IZXggPSAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgaGV4ID0gTWF0aC5yb3VuZCh2YWx1ZSAqIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcbiAgICB9O1xuICAgIGNvbnN0IGhleCA9IFt0b0hleChyKSwgdG9IZXgoZyksIHRvSGV4KGIpXS5qb2luKCcnKTtcbiAgICByZXR1cm4gYCMke2hleH1gO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
103
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsOEJBQThCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsYUFBYSxLQUFLLEdBQUcsVUFBVTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix5REFBeUQ7QUFDN0U7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxFQUFFLG9FQUFvRTtBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFlBQVksYUFBYTtBQUN6QjtBQUNBLHVCQUF1QixxREFBcUQsSUFBSSxhQUFhO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BwYXR0ZXJuZmx5L2Rlc2lnbi10b2tlbnMvLi9wbHVnaW5zL2V4cG9ydC1wYXR0ZXJuZmx5LXRva2Vucy9zcmMvY29kZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBNQUlOIGZ1bmN0aW9uICovXG5maWdtYS51aS5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICAgIGlmIChlLnR5cGUgPT09ICdFWFBPUlQnKSB7XG4gICAgICAgIGV4cG9ydFRvSlNPTigpO1xuICAgIH1cbn07XG5pZiAoZmlnbWEuY29tbWFuZCA9PT0gJ2V4cG9ydCcpIHtcbiAgICBmaWdtYS5zaG93VUkoX19odG1sX18sIHtcbiAgICAgICAgd2lkdGg6IDgyMCxcbiAgICAgICAgaGVpZ2h0OiA2MDAsXG4gICAgICAgIHRoZW1lQ29sb3JzOiB0cnVlXG4gICAgfSk7XG59XG4vKiBFWFBPUlQgRnVuY3Rpb25hbGl0eSAqL1xuLyogRVhQT1JUIC0gbWFpbiBmdW5jdGlvbiAqL1xuZnVuY3Rpb24gZXhwb3J0VG9KU09OKCkge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gZmlnbWEudmFyaWFibGVzLmdldExvY2FsVmFyaWFibGVDb2xsZWN0aW9ucygpO1xuICAgIGNvbnN0IGZpbGVzID0gW107XG4gICAgY29sbGVjdGlvbnMuZm9yRWFjaCgoY29sbGVjdGlvbikgPT4gZmlsZXMucHVzaCguLi5wcm9jZXNzQ29sbGVjdGlvbihjb2xsZWN0aW9uKSkpO1xuICAgIGZpZ21hLnVpLnBvc3RNZXNzYWdlKHsgdHlwZTogJ0VYUE9SVF9SRVNVTFQnLCBmaWxlcyB9KTtcbn1cbi8qIEVYUE9SVCAtIGhlbHBlciBmdW5jdGlvbnMgKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb2xsZWN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICBjb25zdCB7IG5hbWUsIG1vZGVzLCB2YXJpYWJsZUlkcyB9ID0gY29sbGVjdGlvbjtcbiAgICBjb25zdCBmaWxlcyA9IFtdO1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXh0ZW5kZWQgY29sbGVjdGlvblxuICAgIGNvbnN0IGlzRXh0ZW5kZWQgPSBjb2xsZWN0aW9uLnBhcmVudFZhcmlhYmxlQ29sbGVjdGlvbklkICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFyaWFibGVPdmVycmlkZXMgPSBjb2xsZWN0aW9uLnZhcmlhYmxlT3ZlcnJpZGVzIHx8IHt9O1xuICAgIG1vZGVzLmZvckVhY2goKG1vZGUpID0+IHtcbiAgICAgICAgbGV0IGZpbGUgPSB7IGZpbGVOYW1lOiBgJHtuYW1lfS4ke21vZGUubmFtZX0udG9rZW5zLmpzb25gLCBib2R5OiB7fSB9O1xuICAgICAgICAvLyBGb3IgZXh0ZW5kZWQgY29sbGVjdGlvbnMsIG9ubHkgcHJvY2VzcyBvdmVycmlkZGVuIHZhcmlhYmxlc1xuICAgICAgICBjb25zdCB2YXJzVG9Qcm9jZXNzID0gaXNFeHRlbmRlZCA/IE9iamVjdC5rZXlzKHZhcmlhYmxlT3ZlcnJpZGVzKSA6IHZhcmlhYmxlSWRzO1xuICAgICAgICB2YXJzVG9Qcm9jZXNzLmZvckVhY2goKHZhcmlhYmxlSWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlID0gZmlnbWEudmFyaWFibGVzLmdldFZhcmlhYmxlQnlJZCh2YXJpYWJsZUlkKTtcbiAgICAgICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IG5hbWU6IHZhck5hbWUsIHJlc29sdmVkVHlwZSwgdmFsdWVzQnlNb2RlLCBkZXNjcmlwdGlvbiB9ID0gdmFyaWFibGU7XG4gICAgICAgICAgICBjb25zdCB2YXJFeGNsdWRlUGF0dGVybiA9IC9maWdtYS1vbmx5L2k7XG4gICAgICAgICAgICBpZiAodmFyRXhjbHVkZVBhdHRlcm4udGVzdCh2YXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gU2tpcCB0aGlzIHZhcmlhYmxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGb3IgZXh0ZW5kZWQgY29sbGVjdGlvbnMsIGdldCB0aGUgb3ZlcnJpZGRlbiB2YWx1ZVxuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzRXh0ZW5kZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVycmlkZXMgPSB2YXJpYWJsZU92ZXJyaWRlc1t2YXJpYWJsZUlkXTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG92ZXJyaWRlcyA/IG92ZXJyaWRlc1ttb2RlLm1vZGVJZF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc0J5TW9kZVttb2RlLm1vZGVJZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiBbJ0NPTE9SJywgJ0ZMT0FUJywgJ1NUUklORyddLmluY2x1ZGVzKHJlc29sdmVkVHlwZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0gZmlsZS5ib2R5O1xuICAgICAgICAgICAgICAgIHZhck5hbWUuc3BsaXQoJy8nKS5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2dyb3VwTmFtZV0gPSBvYmpbZ3JvdXBOYW1lXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gb2JqW2dyb3VwTmFtZV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1ZBUklBQkxFX0FMSUFTJykge1xuICAgICAgICAgICAgICAgICAgICBvYmouJHR5cGUgPSByZXNvbHZlZFR5cGUgPT09ICdDT0xPUicgPyAnY29sb3InIDogJ251bWJlcic7XG4gICAgICAgICAgICAgICAgICAgIG9iai4kdmFsdWUgPSBgeyR7ZmlnbWEudmFyaWFibGVzLmdldFZhcmlhYmxlQnlJZCh2YWx1ZS5pZCkubmFtZS5yZXBsYWNlKC9cXC8vZywgJy4nKX19YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzb2x2ZWRUeXBlID09PSAnQ09MT1InKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai4kdHlwZSA9ICdjb2xvcic7XG4gICAgICAgICAgICAgICAgICAgIG9iai4kdmFsdWUgPSByZ2JUb0hleCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc29sdmVkVHlwZSA9PT0gJ0ZMT0FUJykge1xuICAgICAgICAgICAgICAgICAgICBvYmouJHR5cGUgPSAnbnVtYmVyJztcbiAgICAgICAgICAgICAgICAgICAgb2JqLiR2YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNvbHZlZFR5cGUgPT09ICdTVFJJTkcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai4kdHlwZSA9ICdzdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICBvYmouJHZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsZXM7XG59XG5mdW5jdGlvbiByZ2JUb0hleCh2YWx1ZSkge1xuICAgIGNvbnN0IHsgciwgZywgYiwgYSB9ID0gdmFsdWU7XG4gICAgaWYgKGEgIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGByZ2JhKCR7W3IsIGcsIGJdLm1hcCgobikgPT4gTWF0aC5yb3VuZChuICogMjU1KSkuam9pbignLCAnKX0sICR7YS50b0ZpeGVkKDQpfSlgO1xuICAgIH1cbiAgICBjb25zdCB0b0hleCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBoZXggPSBNYXRoLnJvdW5kKHZhbHVlICogMjU1KS50b1N0cmluZygxNik7XG4gICAgICAgIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gJzAnICsgaGV4IDogaGV4O1xuICAgIH07XG4gICAgY29uc3QgaGV4ID0gW3RvSGV4KHIpLCB0b0hleChnKSwgdG9IZXgoYildLmpvaW4oJycpO1xuICAgIHJldHVybiBgIyR7aGV4fWA7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=