const fs = require('fs'); const pseudo = ['hover', 'active', 'focus'] const prefix = ['text', 'bg']; const colors = ['primary', 'secondary' , 'success' , 'error' , 'warning']; const intensity = ['50' , '100' , '200' , '300' , '400' , '500' , '600' , '700' , '800' , '900']; const fileContent = []; const p = (str) => fileContent.push(str); p('/* eslint-disable */'); p('// This file has been auto-generated! Do not modify directly!'); p('\n'); p('export type ThemeColor = {'); p(` colorName: '${colors.join("' | '")}';`); p(` pseudo?: '${pseudo.join("' | '")}';`); p(` prefix?: '${prefix.join("' | '")}';`); p(` intensity?: '${intensity.join("' | '")}';`); p('};'); p('\n'); p('/**'); p(' * Method is needed because of {@link https://tailwindcss.com/docs/content-configuration#dynamic-class-names}.'); p(' */'); p('export const pickColor = ({ colorName, prefix, pseudo, intensity }: ThemeColor) => {'); p(' if (intensity === undefined && pseudo === undefined && prefix === undefined) {'); p(` switch (colorName) {`); for (const color of colors) { p(` case '${color}':`); p(` return '${color}';`); } p(` default: return 'primary';`); p(` }`); p(' } else if (intensity !== undefined && pseudo === undefined && prefix === undefined) {'); p(` switch (colorName) {`); for (const color of colors) { p(` case '${color}':${color === 'primary' ? ' default: ': ''}`); p(` switch (intensity) {`); for (const i of intensity) { p(` case '${i}':`); p(` return '${color}-${i}';`); } p(` default: return 'primary'; // we can naively return primary here due to the DEFAULT in the color map`); p(` }`); } p(` }`); p(' } else if (intensity === undefined && pseudo === undefined && prefix !== undefined) {'); p(` switch (colorName) {`); for (const color of colors) { p(` case '${color}':${color === 'primary' ? ' default: ': ''}`); p(` switch (prefix) {`); for (const pre of prefix) { p(` case '${pre}':`); p(` return '${pre}-${color}';`); } p(` default: throw new Error(\`Runtime error: there is no prefix "\${prefix}"!\`);`); p(` }`); } p(` }`); p(' } else if (intensity === undefined && pseudo !== undefined && prefix === undefined) {'); p(` switch (colorName) {`); for (const color of colors) { p(` case '${color}':${color === 'primary' ? ' default: ': ''}`); p(` switch (pseudo) {`); for (const pseu of pseudo) { p(` case '${pseu}':`); p(` return '${pseu}:${color}';`); } p(` default: throw new Error(\`Runtime error: there is no pseudo "\${pseudo}"!\`);`); p(` }`); } p(` }`); p(' } else if (intensity !== undefined && pseudo !== undefined && prefix === undefined) {'); p(` switch (colorName) {`); for (const color of colors) { p(` case '${color}':${color === 'primary' ? ' default: ': ''}`); p(` switch (intensity) {`); for (const i of intensity) { p(` case '${i}':`); p(` switch (pseudo) {`); for (const pseu of pseudo) { p(` case '${pseu}':`); p(` return '${pseu}:${color}-${i}';`); } p(` default: throw new Error(\`Runtime error: there is no pseudo "\${pseudo}"!\`);`); p(` }`); } p(` default:`); p(` switch (pseudo) {`); for (const pseu of pseudo) { p(` case '${pseu}':`); p(` return '${pseu}:${color}';`); } p(` default: throw new Error(\`Runtime error: there is no pseudo "\${pseudo}" for unknown intensity "\${intensity}"!\`);`); p(` }`); p(` }`); } p(` }`); p(' } else if (intensity !== undefined && pseudo === undefined && prefix !== undefined) {'); p(` switch (colorName) {`); for (const color of colors) { p(` case '${color}':${color === 'primary' ? ' default: ': ''}`); p(` switch (intensity) {`); for (const i of intensity) { p(` case '${i}':`); p(` switch (prefix) {`); for (const pre of prefix) { p(` case '${pre}':`); p(` return '${pre}-${color}-${i}';`); } p(` default: throw new Error(\`Runtime error: there is no prefix "\${prefix}"!\`);`); p(` }`); } p(` default: throw new Error(\`Runtime error: there is no prefix "\${prefix}" for unknown intensity "\${intensity}"!\`);`); p(` }`); } p(` }`); p(' } else if (intensity === undefined && pseudo !== undefined && prefix !== undefined) {'); p(` switch (colorName) {`); for (const color of colors) { p(` case '${color}':${color === 'primary' ? ' default: ': ''}`); p(` switch (prefix) {`); for (const pre of prefix) { p(` case '${pre}':`); p(` switch (pseudo) {`); for (const pseu of pseudo) { p(` case '${pseu}':`); p(` return '${pseu}:${pre}-${color}';`); } p(` default: throw new Error(\`Runtime error: there is no pseudo "\${pseudo}"!\`);`); p(` }`); } p(` default: throw new Error(\`Runtime error: there is no pseudo "\${pseudo}" for unknown prefix "\${prefix}"!\`);`); p(` }`); } p(` }`); p(' } else if (intensity !== undefined && pseudo !== undefined && prefix !== undefined) {'); p(` switch (colorName) {`); for (const color of colors) { p(` case '${color}':${color === 'primary' ? ' default: ': ''}`); p(` switch (intensity) {`); for (const i of intensity) { p(` case '${i}':`); p(` switch (pseudo) {`); for (const pseu of pseudo) { p(` case '${pseu}':`); p(` switch (prefix) {`); for (const pre of prefix) { p(` case '${pre}':`); p(` return '${pseu}:${pre}-${color}-${i}';`); } p(` default: throw new Error(\`Runtime error: there is no prefix "\${prefix}"!\`);`); p(` }`); } p(` default: throw new Error(\`Runtime error: there is no prefix "\${prefix}" for unknown pseudo "\${pseudo}"!\`);`); p(` }`); } p(` default: throw new Error(\`Runtime error: there is no prefix "\${prefix}" and pseudo "\${pseudo}" for unknown intensity "\${intensity}"!\`);`); p(` }`); } p(` }`); p(` }`); p('};'); p(''); const generatedFile = fileContent.join('\n'); fs.writeFileSync('./gen-tailwind-colormap.ts', generatedFile);