@gallop.software/canon 2.26.0 → 2.29.0

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.
@@ -0,0 +1,6 @@
1
+ import type { CanonTemplateConfig } from '../types/config.js';
2
+ /**
3
+ * Load canon.config.json from the current working directory.
4
+ * Returns null if no config file is found.
5
+ */
6
+ export declare function loadConfig(cwd?: string): CanonTemplateConfig | null;
@@ -0,0 +1,17 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ const CONFIG_FILENAME = 'canon.config.json';
4
+ /**
5
+ * Load canon.config.json from the current working directory.
6
+ * Returns null if no config file is found.
7
+ */
8
+ export function loadConfig(cwd) {
9
+ const dir = cwd || process.cwd();
10
+ const configPath = path.join(dir, CONFIG_FILENAME);
11
+ if (!fs.existsSync(configPath)) {
12
+ return null;
13
+ }
14
+ const raw = fs.readFileSync(configPath, 'utf-8');
15
+ return JSON.parse(raw);
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDeEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFHNUIsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUE7QUFFM0M7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFZO0lBQ3JDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFFbEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUF3QixDQUFBO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB0eXBlIHsgQ2Fub25UZW1wbGF0ZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZy5qcydcblxuY29uc3QgQ09ORklHX0ZJTEVOQU1FID0gJ2Nhbm9uLmNvbmZpZy5qc29uJ1xuXG4vKipcbiAqIExvYWQgY2Fub24uY29uZmlnLmpzb24gZnJvbSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBjb25maWcgZmlsZSBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWcoY3dkPzogc3RyaW5nKTogQ2Fub25UZW1wbGF0ZUNvbmZpZyB8IG51bGwge1xuICBjb25zdCBkaXIgPSBjd2QgfHwgcHJvY2Vzcy5jd2QoKVxuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKGRpciwgQ09ORklHX0ZJTEVOQU1FKVxuXG4gIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdQYXRoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0Zi04JylcbiAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBDYW5vblRlbXBsYXRlQ29uZmlnXG59XG4iXX0=
package/dist/cli/index.js CHANGED
@@ -26,7 +26,7 @@ ${colors.bold}Usage:${colors.reset}
26
26
 
27
27
  ${colors.bold}Commands:${colors.reset}
28
28
  audit [path] Check Canon compliance (default: src/blocks/)
29
- generate [output] Generate AI rules from Canon (default: .cursorrules)
29
+ generate [output] Generate AI rules from Canon
30
30
  version Show version information
31
31
  help Show this help message
32
32
 
@@ -35,13 +35,18 @@ ${colors.bold}Audit Options:${colors.reset}
35
35
  --json Output as JSON
36
36
 
37
37
  ${colors.bold}Generate Options:${colors.reset}
38
- --output, -o Output file path (default: .cursorrules)
38
+ gallop generate Generate all files (.cursorrules, CLAUDE.md, copilot-instructions.md)
39
+ gallop generate .cursorrules Generate .cursorrules only
40
+ gallop generate CLAUDE.md Generate CLAUDE.md only
41
+ gallop generate .github/copilot-instructions.md
42
+ --output, -o Output file path
39
43
 
40
44
  ${colors.bold}Examples:${colors.reset}
41
45
  gallop audit
42
46
  gallop audit src/blocks/ --strict
43
47
  gallop generate
44
48
  gallop generate .cursorrules
49
+ gallop generate CLAUDE.md
45
50
  gallop generate --output .github/copilot-instructions.md
46
51
  `);
47
52
  }
@@ -49,6 +54,17 @@ function showVersion() {
49
54
  console.log(`Gallop CLI v1.0.0`);
50
55
  console.log(`Canon v${version}`);
51
56
  }
57
+ /**
58
+ * Detect output format from filename
59
+ */
60
+ function detectFormat(filename) {
61
+ const lower = filename.toLowerCase();
62
+ if (lower.endsWith('claude.md'))
63
+ return 'claude';
64
+ if (lower.endsWith('copilot-instructions.md'))
65
+ return 'copilot';
66
+ return 'cursorrules';
67
+ }
52
68
  async function main() {
53
69
  switch (command) {
54
70
  case 'audit':
@@ -60,11 +76,11 @@ async function main() {
60
76
  };
61
77
  await audit(auditPath, auditOptions);
62
78
  break;
63
- case 'generate':
79
+ case 'generate': {
64
80
  // Find output path from args
65
- let outputPath = '.cursorrules';
66
81
  const outputIndex = args.indexOf('--output');
67
82
  const outputIndexShort = args.indexOf('-o');
83
+ let outputPath = null;
68
84
  if (outputIndex !== -1 && args[outputIndex + 1]) {
69
85
  outputPath = args[outputIndex + 1];
70
86
  }
@@ -74,12 +90,22 @@ async function main() {
74
90
  else if (args[1] && !args[1].startsWith('--')) {
75
91
  outputPath = args[1];
76
92
  }
77
- const generateOptions = {
78
- output: outputPath,
79
- format: 'cursorrules',
80
- };
81
- await generate(generateOptions);
93
+ if (outputPath) {
94
+ // Single-file generation
95
+ await generate({
96
+ output: outputPath,
97
+ format: detectFormat(outputPath),
98
+ });
99
+ }
100
+ else {
101
+ // No args → generate all files
102
+ await generate({
103
+ output: 'all',
104
+ format: 'cursorrules', // unused when output is 'all'
105
+ });
106
+ }
82
107
  break;
108
+ }
83
109
  case 'version':
84
110
  case '-v':
85
111
  case '--version':
@@ -101,4 +127,4 @@ main().catch((error) => {
101
127
  console.error('Error:', error.message);
102
128
  process.exit(1);
103
129
  });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRXZCLDZCQUE2QjtBQUM3QixNQUFNLE1BQU0sR0FBRztJQUNiLEtBQUssRUFBRSxTQUFTO0lBQ2hCLElBQUksRUFBRSxTQUFTO0lBQ2YsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsVUFBVTtJQUNmLEtBQUssRUFBRSxVQUFVO0lBQ2pCLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLElBQUksRUFBRSxVQUFVO0lBQ2hCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLElBQUksRUFBRSxVQUFVO0NBQ2pCLENBQUE7QUFFRCxTQUFTLFFBQVE7SUFDZixPQUFPLENBQUMsR0FBRyxDQUFDO0VBQ1osTUFBTSxDQUFDLElBQUksYUFBYSxNQUFNLENBQUMsS0FBSztFQUNwQyxNQUFNLENBQUMsR0FBRyxrQkFBa0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLOztFQUVsRCxNQUFNLENBQUMsSUFBSSxTQUFTLE1BQU0sQ0FBQyxLQUFLOzs7RUFHaEMsTUFBTSxDQUFDLElBQUksWUFBWSxNQUFNLENBQUMsS0FBSzs7Ozs7O0VBTW5DLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixNQUFNLENBQUMsS0FBSzs7OztFQUl4QyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsTUFBTSxDQUFDLEtBQUs7OztFQUczQyxNQUFN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QUMsT0FBTyxDQUFDLENBQUE7SUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqQixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgYXVkaXQgfSBmcm9tICcuL2NvbW1hbmRzL2F1ZGl0LmpzJ1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuL2NvbW1hbmRzL2dlbmVyYXRlLmpzJ1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL2luZGV4LmpzJ1xuXG5jb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpXG5jb25zdCBjb21tYW5kID0gYXJnc1swXVxuXG4vLyBDb2xvcnMgZm9yIHRlcm1pbmFsIG91dHB1dFxuY29uc3QgY29sb3JzID0ge1xuICByZXNldDogJ1xceDFiWzBtJyxcbiAgYm9sZDogJ1xceDFiWzFtJyxcbiAgZGltOiAnXFx4MWJbMm0nLFxuICByZWQ6ICdcXHgxYlszMW0nLFxuICBncmVlbjogJ1xceDFiWzMybScsXG4gIHllbGxvdzogJ1xceDFiWzMzbScsXG4gIGJsdWU6ICdcXHgxYlszNG0nLFxuICBtYWdlbnRhOiAnXFx4MWJbMzVtJyxcbiAgY3lhbjogJ1xceDFiWzM2bScsXG59XG5cbmZ1bmN0aW9uIHNob3dIZWxwKCkge1xuICBjb25zb2xlLmxvZyhgXG4ke2NvbG9ycy5ib2xkfUdhbGxvcCBDTEkke2NvbG9ycy5yZXNldH0gLSBDYW5vbiBDb21wbGlhbmNlIFRvb2xpbmdcbiR7Y29sb3JzLmRpbX1DYW5vbiBWZXJzaW9uOiAke3ZlcnNpb259JHtjb2xvcnMucmVzZXR9XG5cbiR7Y29sb3JzLmJvbGR9VXNhZ2U6JHtjb2xvcnMucmVzZXR9XG4gIGdhbGxvcCA8Y29tbWFuZD4gW29wdGlvbnNdXG5cbiR7Y29sb3JzLmJvbGR9Q29tbWFuZHM6JHtjb2xvcnMucmVzZXR9XG4gIGF1ZGl0IFtwYXRoXSAgICAgICBDaGVjayBDYW5vbiBjb21wbGlhbmNlIChkZWZhdWx0OiBzcmMvYmxvY2tzLylcbiAgZ2VuZXJhdGUgW291dHB1dF0gIEdlbmVyYXRlIEFJIHJ1bGVzIGZyb20gQ2Fub24gKGRlZmF1bHQ6IC5jdXJzb3JydWxlcylcbiAgdmVyc2lvbiAgICAgICAgICAgIFNob3cgdmVyc2lvbiBpbmZvcm1hdGlvblxuICBoZWxwICAgICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZVxuXG4ke2NvbG9ycy5ib2xkfUF1ZGl0IE9wdGlvbnM6JHtjb2xvcnMucmVzZXR9XG4gIC0tc3RyaWN0ICAgICAgICAgICBFeGl0IHdpdGggZXJyb3IgY29kZSBvbiB2aW9sYXRpb25zXG4gIC0tanNvbiAgICAgICAgICAgICBPdXRwdXQgYXMgSlNPTlxuXG4ke2NvbG9ycy5ib2xkfUdlbmVyYXRlIE9wdGlvbnM6JHtjb2xvcnMucmVzZXR9XG4gIC0tb3V0cHV0LCAtbyAgICAgICBPdXRwdXQgZmlsZSBwYXRoIChkZWZhdWx0OiAuY3Vyc29ycnVsZXMpXG5cbiR7Y29sb3JzLmJvbGR9RXhhbXBsZXM6JHtjb2xvcnMucmVzZXR9XG4gIGdhbGxvcCBhdWRpdFxuICBnYWxsb3AgYXVkaXQgc3JjL2Jsb2Nrcy8gLS1zdHJpY3RcbiAgZ2FsbG9wIGdlbmVyYXRlXG4gIGdhbGxvcCBnZW5lcmF0ZSAuY3Vyc29ycnVsZXNcbiAgZ2FsbG9wIGdlbmVyYXRlIC0tb3V0cHV0IC5naXRodWIvY29waWxvdC1pbnN0cnVjdGlvbnMubWRcbmApXG59XG5cbmZ1bmN0aW9uIHNob3dWZXJzaW9uKCkge1xuICBjb25zb2xlLmxvZyhgR2FsbG9wIENMSSB2MS4wLjBgKVxuICBjb25zb2xlLmxvZyhgQ2Fub24gdiR7dmVyc2lvbn1gKVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBzd2l0Y2ggKGNvbW1hbmQpIHtcbiAgICBjYXNlICdhdWRpdCc6XG4gICAgICBjb25zdCBhdWRpdFBhdGggPVxuICAgICAgICBhcmdzWzFdICYmICFhcmdzWzFdLnN0YXJ0c1dpdGgoJy0tJykgPyBhcmdzWzFdIDogJ3NyYy9ibG9ja3MvJ1xuICAgICAgY29uc3QgYXVkaXRPcHRpb25zID0ge1xuICAgICAgICBzdHJpY3Q6IGFyZ3MuaW5jbHVkZXMoJy0tc3RyaWN0JyksXG4gICAgICAgIGpzb246IGFyZ3MuaW5jbHVkZXMoJy0tanNvbicpLFxuICAgICAgICBmaXg6IGFyZ3MuaW5jbHVkZXMoJy0tZml4JyksXG4gICAgICB9XG4gICAgICBhd2FpdCBhdWRpdChhdWRpdFBhdGgsIGF1ZGl0T3B0aW9ucylcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlICdnZW5lcmF0ZSc6XG4gICAgICAvLyBGaW5kIG91dHB1dCBwYXRoIGZyb20gYXJnc1xuICAgICAgbGV0IG91dHB1dFBhdGggPSAnLmN1cnNvcnJ1bGVzJ1xuICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSBhcmdzLmluZGV4T2YoJy0tb3V0cHV0JylcbiAgICAgIGNvbnN0IG91dHB1dEluZGV4U2hvcnQgPSBhcmdzLmluZGV4T2YoJy1vJylcbiAgICAgIGlmIChvdXRwdXRJbmRleCAhPT0gLTEgJiYgYXJnc1tvdXRwdXRJbmRleCArIDFdKSB7XG4gICAgICAgIG91dHB1dFBhdGggPSBhcmdzW291dHB1dEluZGV4ICsgMV1cbiAgICAgIH0gZWxzZSBpZiAob3V0cHV0SW5kZXhTaG9ydCAhPT0gLTEgJiYgYXJnc1tvdXRwdXRJbmRleFNob3J0ICsgMV0pIHtcbiAgICAgICAgb3V0cHV0UGF0aCA9IGFyZ3Nbb3V0cHV0SW5kZXhTaG9ydCArIDFdXG4gICAgICB9IGVsc2UgaWYgKGFyZ3NbMV0gJiYgIWFyZ3NbMV0uc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICBvdXRwdXRQYXRoID0gYXJnc1sxXVxuICAgICAgfVxuICAgICAgY29uc3QgZ2VuZXJhdGVPcHRpb25zID0ge1xuICAgICAgICBvdXRwdXQ6IG91dHB1dFBhdGgsXG4gICAgICAgIGZvcm1hdDogJ2N1cnNvcnJ1bGVzJyBhcyBjb25zdCxcbiAgICAgIH1cbiAgICAgIGF3YWl0IGdlbmVyYXRlKGdlbmVyYXRlT3B0aW9ucylcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlICd2ZXJzaW9uJzpcbiAgICBjYXNlICctdic6XG4gICAgY2FzZSAnLS12ZXJzaW9uJzpcbiAgICAgIHNob3dWZXJzaW9uKClcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlICdoZWxwJzpcbiAgICBjYXNlICctaCc6XG4gICAgY2FzZSAnLS1oZWxwJzpcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIHNob3dIZWxwKClcbiAgICAgIGJyZWFrXG5cbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YClcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFJ1biAnZ2FsbG9wIGhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi5gKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cblxubWFpbigpLmNhdGNoKChlcnJvcikgPT4ge1xuICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvci5tZXNzYWdlKVxuICBwcm9jZXNzLmV4aXQoMSlcbn0pXG4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRXZCLDZCQUE2QjtBQUM3QixNQUFNLE1BQU0sR0FBRztJQUNiLEtBQUssRUFBRSxTQUFTO0lBQ2hCLElBQUksRUFBRSxTQUFTO0lBQ2YsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsVUFBVTtJQUNmLEtBQUssRUFBRSxVQUFVO0lBQ2pCLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLElBQUksRUFBRSxVQUFVO0lBQ2hCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLElBQUksRUFBRSxVQUFVO0NBQ2pCLENBQUE7QUFFRCxTQUFTLFFBQVE7SUFDZixPQUFPLENBQUMsR0FBRyxDQUFDO0VBQ1osTUFBTSxDQUFDLElBQUksYUFBYSxNQUFNLENBQUMsS0FBSztFQUNwQyxNQUFNLENBQUMsR0FBRyxrQkFBa0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLOztFQUVsRCxNQUFNLENBQUMsSUFBSSxTQUFTLE1BQU0sQ0FBQyxLQUFLOzs7RUFHaEMsTUFBTSxDQUFDLElBQUksWUFBWSxNQUFNLENBQUMsS0FBSzs7Ozs7O0VBTW5DLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixNQUFNLENBQUMsS0FBSzs7OztFQUl4QyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsTUFBTSxDQUFDLEtBQUs7Ozs7Ozs7RUFPM0Ms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LENBQUM7UUFDZixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssV0FBVztZQUNkLFdBQVcsRUFBRSxDQUFBO1lBQ2IsTUFBSztRQUVQLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssU0FBUztZQUNaLFFBQVEsRUFBRSxDQUFBO1lBQ1YsTUFBSztRQUVQO1lBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7WUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2pCLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBhdWRpdCB9IGZyb20gJy4vY29tbWFuZHMvYXVkaXQuanMnXG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4vY29tbWFuZHMvZ2VuZXJhdGUuanMnXG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vaW5kZXguanMnXG5cbmNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMilcbmNvbnN0IGNvbW1hbmQgPSBhcmdzWzBdXG5cbi8vIENvbG9ycyBmb3IgdGVybWluYWwgb3V0cHV0XG5jb25zdCBjb2xvcnMgPSB7XG4gIHJlc2V0OiAnXFx4MWJbMG0nLFxuICBib2xkOiAnXFx4MWJbMW0nLFxuICBkaW06ICdcXHgxYlsybScsXG4gIHJlZDogJ1xceDFiWzMxbScsXG4gIGdyZWVuOiAnXFx4MWJbMzJtJyxcbiAgeWVsbG93OiAnXFx4MWJbMzNtJyxcbiAgYmx1ZTogJ1xceDFiWzM0bScsXG4gIG1hZ2VudGE6ICdcXHgxYlszNW0nLFxuICBjeWFuOiAnXFx4MWJbMzZtJyxcbn1cblxuZnVuY3Rpb24gc2hvd0hlbHAoKSB7XG4gIGNvbnNvbGUubG9nKGBcbiR7Y29sb3JzLmJvbGR9R2FsbG9wIENMSSR7Y29sb3JzLnJlc2V0fSAtIENhbm9uIENvbXBsaWFuY2UgVG9vbGluZ1xuJHtjb2xvcnMuZGltfUNhbm9uIFZlcnNpb246ICR7dmVyc2lvbn0ke2NvbG9ycy5yZXNldH1cblxuJHtjb2xvcnMuYm9sZH1Vc2FnZToke2NvbG9ycy5yZXNldH1cbiAgZ2FsbG9wIDxjb21tYW5kPiBbb3B0aW9uc11cblxuJHtjb2xvcnMuYm9sZH1Db21tYW5kczoke2NvbG9ycy5yZXNldH1cbiAgYXVkaXQgW3BhdGhdICAgICAgIENoZWNrIENhbm9uIGNvbXBsaWFuY2UgKGRlZmF1bHQ6IHNyYy9ibG9ja3MvKVxuICBnZW5lcmF0ZSBbb3V0cHV0XSAgR2VuZXJhdGUgQUkgcnVsZXMgZnJvbSBDYW5vblxuICB2ZXJzaW9uICAgICAgICAgICAgU2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uXG4gIGhlbHAgICAgICAgICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlXG5cbiR7Y29sb3JzLmJvbGR9QXVkaXQgT3B0aW9uczoke2NvbG9ycy5yZXNldH1cbiAgLS1zdHJpY3QgICAgICAgICAgIEV4aXQgd2l0aCBlcnJvciBjb2RlIG9uIHZpb2xhdGlvbnNcbiAgLS1qc29uICAgICAgICAgICAgIE91dHB1dCBhcyBKU09OXG5cbiR7Y29sb3JzLmJvbGR9R2VuZXJhdGUgT3B0aW9uczoke2NvbG9ycy5yZXNldH1cbiAgZ2FsbG9wIGdlbmVyYXRlICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgYWxsIGZpbGVzICguY3Vyc29ycnVsZXMsIENMQVVERS5tZCwgY29waWxvdC1pbnN0cnVjdGlvbnMubWQpXG4gIGdhbGxvcCBnZW5lcmF0ZSAuY3Vyc29ycnVsZXMgICAgIEdlbmVyYXRlIC5jdXJzb3JydWxlcyBvbmx5XG4gIGdhbGxvcCBnZW5lcmF0ZSBDTEFVREUubWQgICAgICAgIEdlbmVyYXRlIENMQVVERS5tZCBvbmx5XG4gIGdhbGxvcCBnZW5lcmF0ZSAuZ2l0aHViL2NvcGlsb3QtaW5zdHJ1Y3Rpb25zLm1kXG4gIC0tb3V0cHV0LCAtbyAgICAgICBPdXRwdXQgZmlsZSBwYXRoXG5cbiR7Y29sb3JzLmJvbGR9RXhhbXBsZXM6JHtjb2xvcnMucmVzZXR9XG4gIGdhbGxvcCBhdWRpdFxuICBnYWxsb3AgYXVkaXQgc3JjL2Jsb2Nrcy8gLS1zdHJpY3RcbiAgZ2FsbG9wIGdlbmVyYXRlXG4gIGdhbGxvcCBnZW5lcmF0ZSAuY3Vyc29ycnVsZXNcbiAgZ2FsbG9wIGdlbmVyYXRlIENMQVVERS5tZFxuICBnYWxsb3AgZ2VuZXJhdGUgLS1vdXRwdXQgLmdpdGh1Yi9jb3BpbG90LWluc3RydWN0aW9ucy5tZFxuYClcbn1cblxuZnVuY3Rpb24gc2hvd1ZlcnNpb24oKSB7XG4gIGNvbnNvbGUubG9nKGBHYWxsb3AgQ0xJIHYxLjAuMGApXG4gIGNvbnNvbGUubG9nKGBDYW5vbiB2JHt2ZXJzaW9ufWApXG59XG5cbi8qKlxuICogRGV0ZWN0IG91dHB1dCBmb3JtYXQgZnJvbSBmaWxlbmFtZVxuICovXG5mdW5jdGlvbiBkZXRlY3RGb3JtYXQoZmlsZW5hbWU6IHN0cmluZyk6ICdjdXJzb3JydWxlcycgfCAnY2xhdWRlJyB8ICdjb3BpbG90JyB7XG4gIGNvbnN0IGxvd2VyID0gZmlsZW5hbWUudG9Mb3dlckNhc2UoKVxuICBpZiAobG93ZXIuZW5kc1dpdGgoJ2NsYXVkZS5tZCcpKSByZXR1cm4gJ2NsYXVkZSdcbiAgaWYgKGxvd2VyLmVuZHNXaXRoKCdjb3BpbG90LWluc3RydWN0aW9ucy5tZCcpKSByZXR1cm4gJ2NvcGlsb3QnXG4gIHJldHVybiAnY3Vyc29ycnVsZXMnXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIHN3aXRjaCAoY29tbWFuZCkge1xuICAgIGNhc2UgJ2F1ZGl0JzpcbiAgICAgIGNvbnN0IGF1ZGl0UGF0aCA9XG4gICAgICAgIGFyZ3NbMV0gJiYgIWFyZ3NbMV0uc3RhcnRzV2l0aCgnLS0nKSA/IGFyZ3NbMV0gOiAnc3JjL2Jsb2Nrcy8nXG4gICAgICBjb25zdCBhdWRpdE9wdGlvbnMgPSB7XG4gICAgICAgIHN0cmljdDogYXJncy5pbmNsdWRlcygnLS1zdHJpY3QnKSxcbiAgICAgICAganNvbjogYXJncy5pbmNsdWRlcygnLS1qc29uJyksXG4gICAgICAgIGZpeDogYXJncy5pbmNsdWRlcygnLS1maXgnKSxcbiAgICAgIH1cbiAgICAgIGF3YWl0IGF1ZGl0KGF1ZGl0UGF0aCwgYXVkaXRPcHRpb25zKVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ2dlbmVyYXRlJzoge1xuICAgICAgLy8gRmluZCBvdXRwdXQgcGF0aCBmcm9tIGFyZ3NcbiAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gYXJncy5pbmRleE9mKCctLW91dHB1dCcpXG4gICAgICBjb25zdCBvdXRwdXRJbmRleFNob3J0ID0gYXJncy5pbmRleE9mKCctbycpXG4gICAgICBsZXQgb3V0cHV0UGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKG91dHB1dEluZGV4ICE9PSAtMSAmJiBhcmdzW291dHB1dEluZGV4ICsgMV0pIHtcbiAgICAgICAgb3V0cHV0UGF0aCA9IGFyZ3Nbb3V0cHV0SW5kZXggKyAxXVxuICAgICAgfSBlbHNlIGlmIChvdXRwdXRJbmRleFNob3J0ICE9PSAtMSAmJiBhcmdzW291dHB1dEluZGV4U2hvcnQgKyAxXSkge1xuICAgICAgICBvdXRwdXRQYXRoID0gYXJnc1tvdXRwdXRJbmRleFNob3J0ICsgMV1cbiAgICAgIH0gZWxzZSBpZiAoYXJnc1sxXSAmJiAhYXJnc1sxXS5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIG91dHB1dFBhdGggPSBhcmdzWzFdXG4gICAgICB9XG5cbiAgICAgIGlmIChvdXRwdXRQYXRoKSB7XG4gICAgICAgIC8vIFNpbmdsZS1maWxlIGdlbmVyYXRpb25cbiAgICAgICAgYXdhaXQgZ2VuZXJhdGUoe1xuICAgICAgICAgIG91dHB1dDogb3V0cHV0UGF0aCxcbiAgICAgICAgICBmb3JtYXQ6IGRldGVjdEZvcm1hdChvdXRwdXRQYXRoKSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIGFyZ3Mg4oaSIGdlbmVyYXRlIGFsbCBmaWxlc1xuICAgICAgICBhd2FpdCBnZW5lcmF0ZSh7XG4gICAgICAgICAgb3V0cHV0OiAnYWxsJyxcbiAgICAgICAgICBmb3JtYXQ6ICdjdXJzb3JydWxlcycsIC8vIHVudXNlZCB3aGVuIG91dHB1dCBpcyAnYWxsJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICd2ZXJzaW9uJzpcbiAgICBjYXNlICctdic6XG4gICAgY2FzZSAnLS12ZXJzaW9uJzpcbiAgICAgIHNob3dWZXJzaW9uKClcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlICdoZWxwJzpcbiAgICBjYXNlICctaCc6XG4gICAgY2FzZSAnLS1oZWxwJzpcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIHNob3dIZWxwKClcbiAgICAgIGJyZWFrXG5cbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YClcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFJ1biAnZ2FsbG9wIGhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi5gKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cblxubWFpbigpLmNhdGNoKChlcnJvcikgPT4ge1xuICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvci5tZXNzYWdlKVxuICBwcm9jZXNzLmV4aXQoMSlcbn0pXG4iXX0=
@@ -21,6 +21,7 @@ declare const plugin: {
21
21
  'no-arbitrary-colors': import("@typescript-eslint/utils/ts-eslint").RuleModule<"noArbitraryColors", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
22
22
  name: string;
23
23
  };
24
+ 'no-raw-colors': import("eslint").Rule.RuleModule;
24
25
  'no-cross-zone-imports': import("@typescript-eslint/utils/ts-eslint").RuleModule<"blocksImportBlocks" | "componentsImportBlocks" | "runtimeImportScripts", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
25
26
  name: string;
26
27
  };
@@ -29,6 +30,9 @@ declare const plugin: {
29
30
  'prefer-list-components': import("eslint").Rule.RuleModule;
30
31
  'no-native-date': import("eslint").Rule.RuleModule;
31
32
  'require-canon-setup': import("eslint").Rule.RuleModule;
33
+ 'no-classnames-package': import("eslint").Rule.RuleModule;
34
+ 'prefer-alias-imports': import("eslint").Rule.RuleModule;
35
+ 'no-inline-svg': import("eslint").Rule.RuleModule;
32
36
  };
33
37
  /**
34
38
  * Recommended rule configurations - spread into your ESLint config
@@ -42,12 +46,16 @@ declare const plugin: {
42
46
  readonly 'gallop/prefer-typography-components': "warn";
43
47
  readonly 'gallop/prefer-layout-components': "warn";
44
48
  readonly 'gallop/no-arbitrary-colors': "warn";
49
+ readonly 'gallop/no-raw-colors': "warn";
45
50
  readonly 'gallop/no-cross-zone-imports': "warn";
46
51
  readonly 'gallop/no-native-intersection-observer': "warn";
47
52
  readonly 'gallop/no-component-in-blocks': "warn";
48
53
  readonly 'gallop/prefer-list-components': "warn";
49
54
  readonly 'gallop/no-native-date': "warn";
50
55
  readonly 'gallop/require-canon-setup': "warn";
56
+ readonly 'gallop/no-classnames-package': "warn";
57
+ readonly 'gallop/prefer-alias-imports': "warn";
58
+ readonly 'gallop/no-inline-svg': "warn";
51
59
  };
52
60
  };
53
61
  export default plugin;
@@ -4,6 +4,7 @@ import preferComponentProps from './rules/prefer-component-props.js';
4
4
  import preferTypographyComponents from './rules/prefer-typography-components.js';
5
5
  import preferLayoutComponents from './rules/prefer-layout-components.js';
6
6
  import noArbitraryColors from './rules/no-arbitrary-colors.js';
7
+ import noRawColors from './rules/no-raw-colors.js';
7
8
  import noCrossZoneImports from './rules/no-cross-zone-imports.js';
8
9
  import noNativeIntersectionObserver from './rules/no-native-intersection-observer.js';
9
10
  import noComponentInBlocks from './rules/no-component-in-blocks.js';
@@ -11,6 +12,9 @@ import preferListComponents from './rules/prefer-list-components.js';
11
12
  import noNativeDate from './rules/no-native-date.js';
12
13
  import blockNamingConvention from './rules/block-naming-convention.js';
13
14
  import requireCanonSetup from './rules/require-canon-setup.js';
15
+ import noClassnamesPackage from './rules/no-classnames-package.js';
16
+ import preferAliasImports from './rules/prefer-alias-imports.js';
17
+ import noInlineSvg from './rules/no-inline-svg.js';
14
18
  /**
15
19
  * All Canon ESLint rules with recommended severity levels
16
20
  */
@@ -22,12 +26,16 @@ const recommended = {
22
26
  'gallop/prefer-typography-components': 'warn',
23
27
  'gallop/prefer-layout-components': 'warn',
24
28
  'gallop/no-arbitrary-colors': 'warn',
29
+ 'gallop/no-raw-colors': 'warn',
25
30
  'gallop/no-cross-zone-imports': 'warn',
26
31
  'gallop/no-native-intersection-observer': 'warn',
27
32
  'gallop/no-component-in-blocks': 'warn',
28
33
  'gallop/prefer-list-components': 'warn',
29
34
  'gallop/no-native-date': 'warn',
30
35
  'gallop/require-canon-setup': 'warn',
36
+ 'gallop/no-classnames-package': 'warn',
37
+ 'gallop/prefer-alias-imports': 'warn',
38
+ 'gallop/no-inline-svg': 'warn',
31
39
  };
32
40
  const plugin = {
33
41
  meta: {
@@ -42,12 +50,16 @@ const plugin = {
42
50
  'prefer-typography-components': preferTypographyComponents,
43
51
  'prefer-layout-components': preferLayoutComponents,
44
52
  'no-arbitrary-colors': noArbitraryColors,
53
+ 'no-raw-colors': noRawColors,
45
54
  'no-cross-zone-imports': noCrossZoneImports,
46
55
  'no-native-intersection-observer': noNativeIntersectionObserver,
47
56
  'no-component-in-blocks': noComponentInBlocks,
48
57
  'prefer-list-components': preferListComponents,
49
58
  'no-native-date': noNativeDate,
50
59
  'require-canon-setup': requireCanonSetup,
60
+ 'no-classnames-package': noClassnamesPackage,
61
+ 'prefer-alias-imports': preferAliasImports,
62
+ 'no-inline-svg': noInlineSvg,
51
63
  },
52
64
  /**
53
65
  * Recommended rule configurations - spread into your ESLint config
@@ -56,4 +68,4 @@ const plugin = {
56
68
  recommended,
57
69
  };
58
70
  export default plugin;
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXNsaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFBO0FBQ3hELE9BQU8sb0JBQW9CLE1BQU0sb0NBQW9DLENBQUE7QUFDckUsT0FBTyxvQkFBb0IsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNwRSxPQUFPLDBCQUEwQixNQUFNLHlDQUF5QyxDQUFBO0FBQ2hGLE9BQU8sc0JBQXNCLE1BQU0scUNBQXFDLENBQUE7QUFDeEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLGtCQUFrQixNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sNEJBQTRCLE1BQU0sNENBQTRDLENBQUE7QUFDckYsT0FBTyxtQkFBbUIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNuRSxPQUFPLG9CQUFvQixNQUFNLG1DQUFtQyxDQUFBO0FBQ3BFLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8scUJBQXFCLE1BQU0sb0NBQW9DLENBQUE7QUFDdEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUU5RDs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHO0lBQ2xCLHlCQUF5QixFQUFFLE1BQU07SUFDakMsZ0NBQWdDLEVBQUUsTUFBTTtJQUN4QyxnQ0FBZ0MsRUFBRSxNQUFNO0lBQ3hDLCtCQUErQixFQUFFLE1BQU07SUFDdkMscUNBQXFDLEVBQUUsTUFBTTtJQUM3QyxpQ0FBaUMsRUFBRSxNQUFNO0lBQ3pDLDRCQUE0QixFQUFFLE1BQU07SUFDcEMsOEJBQThCLEVBQUUsTUFBTTtJQUN0Qyx3Q0FBd0MsRUFBRSxNQUFNO0lBQ2hELCtCQUErQixFQUFFLE1BQU07SUFDdkMsK0JBQStCLEVBQUUsTUFBTTtJQUN2Qyx1QkFBdUIsRUFBRSxNQUFNO0lBQy9CLDRCQUE0QixFQUFFLE1BQU07Q0FDNUIsQ0FBQTtBQUVWLE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixPQUFPLEVBQUUsUUFBUTtLQUNsQjtJQUNELEtBQUssRUFBRTtRQUNMLGtCQUFrQixFQUFFLGNBQWM7UUFDbEMseUJBQXlCLEVBQUUscUJBQXFCO1FBQ2hELHlCQUF5QixFQUFFLG9CQUFvQjtRQUMvQyx3QkFBd0IsRUFBRSxvQkFBb0I7UUFDOUMsOEJBQThCLEVBQUUsMEJBQTBCO1FBQzFELDBCQUEwQixFQUFFLHNCQUFzQjtRQUNsRCxxQkFBcUIsRUFBRSxpQkFBaUI7UUFDeEMsdUJBQXVCLEVBQUUsa0JBQWtCO1FBQzNDLGlDQUFpQyxFQUFFLDRCQUE0QjtRQUMvRCx3QkFBd0IsRUFBRSxtQkFBbUI7UUFDN0Msd0JBQXdCLEVBQUUsb0JBQW9CO1FBQzlDLGdCQUFnQixFQUFFLFlBQVk7UUFDOUIscUJBQXFCLEVBQUUsaUJBQWlCO0tBQ3pDO0lBQ0Q7OztPQUdHO0lBQ0gsV0FBVztDQUNaLENBQUE7QUFFRCxlQUFlLE1BQU0sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub0NsaWVudEJsb2NrcyBmcm9tICcuL3J1bGVzL25vLWNsaWVudC1ibG9ja3MuanMnXG5pbXBvcnQgbm9Db250YWluZXJJblNlY3Rpb24gZnJvbSAnLi9ydWxlcy9uby1jb250YWluZXItaW4tc2VjdGlvbi5qcydcbmltcG9ydCBwcmVmZXJDb21wb25lbnRQcm9wcyBmcm9tICcuL3J1bGVzL3ByZWZlci1jb21wb25lbnQtcHJvcHMuanMnXG5pbXBvcnQgcHJlZmVyVHlwb2dyYXBoeUNvbXBvbmVudHMgZnJvbSAnLi9ydWxlcy9wcmVmZXItdHlwb2dyYXBoeS1jb21wb25lbnRzLmpzJ1xuaW1wb3J0IHByZWZlckxheW91dENvbXBvbmVudHMgZnJvbSAnLi9ydWxlcy9wcmVmZXItbGF5b3V0LWNvbXBvbmVudHMuanMnXG5pbXBvcnQgbm9BcmJpdHJhcnlDb2xvcnMgZnJvbSAnLi9ydWxlcy9uby1hcmJpdHJhcnktY29sb3JzLmpzJ1xuaW1wb3J0IG5vQ3Jvc3Nab25lSW1wb3J0cyBmcm9tICcuL3J1bGVzL25vLWNyb3NzLXpvbmUtaW1wb3J0cy5qcydcbmltcG9ydCBub05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyIGZyb20gJy4vcnVsZXMvbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlci5qcydcbmltcG9ydCBub0NvbXBvbmVudEluQmxvY2tzIGZyb20gJy4vcnVsZXMvbm8tY29tcG9uZW50LWluLWJsb2Nrcy5qcydcbmltcG9ydCBwcmVmZXJMaXN0Q29tcG9uZW50cyBmcm9tICcuL3J1bGVzL3ByZWZlci1saXN0LWNvbXBvbmVudHMuanMnXG5pbXBvcnQgbm9OYXRpdmVEYXRlIGZyb20gJy4vcnVsZXMvbm8tbmF0aXZlLWRhdGUuanMnXG5pbXBvcnQgYmxvY2tOYW1pbmdDb252ZW50aW9uIGZyb20gJy4vcnVsZXMvYmxvY2stbmFtaW5nLWNvbnZlbnRpb24uanMnXG5pbXBvcnQgcmVxdWlyZUNhbm9uU2V0dXAgZnJvbSAnLi9ydWxlcy9yZXF1aXJlLWNhbm9uLXNldHVwLmpzJ1xuXG4vKipcbiAqIEFsbCBDYW5vbiBFU0xpbnQgcnVsZXMgd2l0aCByZWNvbW1lbmRlZCBzZXZlcml0eSBsZXZlbHNcbiAqL1xuY29uc3QgcmVjb21tZW5kZWQgPSB7XG4gICdnYWxsb3Avbm8tY2xpZW50LWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9ibG9jay1uYW1pbmctY29udmVudGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jb250YWluZXItaW4tc2VjdGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItY29tcG9uZW50LXByb3BzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMnOiAnd2FybicsXG4gICdnYWxsb3AvcHJlZmVyLWxheW91dC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLWFyYml0cmFyeS1jb2xvcnMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tY3Jvc3Mtem9uZS1pbXBvcnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInOiAnd2FybicsXG4gICdnYWxsb3Avbm8tY29tcG9uZW50LWluLWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItbGlzdC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLW5hdGl2ZS1kYXRlJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3JlcXVpcmUtY2Fub24tc2V0dXAnOiAnd2FybicsXG59IGFzIGNvbnN0XG5cbmNvbnN0IHBsdWdpbiA9IHtcbiAgbWV0YToge1xuICAgIG5hbWU6ICdlc2xpbnQtcGx1Z2luLWdhbGxvcCcsXG4gICAgdmVyc2lvbjogJzIuMTIuMCcsXG4gIH0sXG4gIHJ1bGVzOiB7XG4gICAgJ25vLWNsaWVudC1ibG9ja3MnOiBub0NsaWVudEJsb2NrcyxcbiAgICAnYmxvY2stbmFtaW5nLWNvbnZlbnRpb24nOiBibG9ja05hbWluZ0NvbnZlbnRpb24sXG4gICAgJ25vLWNvbnRhaW5lci1pbi1zZWN0aW9uJzogbm9Db250YWluZXJJblNlY3Rpb24sXG4gICAgJ3ByZWZlci1jb21wb25lbnQtcHJvcHMnOiBwcmVmZXJDb21wb25lbnRQcm9wcyxcbiAgICAncHJlZmVyLXR5cG9ncmFwaHktY29tcG9uZW50cyc6IHByZWZlclR5cG9ncmFwaHlDb21wb25lbnRzLFxuICAgICdwcmVmZXItbGF5b3V0LWNvbXBvbmVudHMnOiBwcmVmZXJMYXlvdXRDb21wb25lbnRzLFxuICAgICduby1hcmJpdHJhcnktY29sb3JzJzogbm9BcmJpdHJhcnlDb2xvcnMsXG4gICAgJ25vLWNyb3NzLXpvbmUtaW1wb3J0cyc6IG5vQ3Jvc3Nab25lSW1wb3J0cyxcbiAgICAnbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlcic6IG5vTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsXG4gICAgJ25vLWNvbXBvbmVudC1pbi1ibG9ja3MnOiBub0NvbXBvbmVudEluQmxvY2tzLFxuICAgICdwcmVmZXItbGlzdC1jb21wb25lbnRzJzogcHJlZmVyTGlzdENvbXBvbmVudHMsXG4gICAgJ25vLW5hdGl2ZS1kYXRlJzogbm9OYXRpdmVEYXRlLFxuICAgICdyZXF1aXJlLWNhbm9uLXNldHVwJzogcmVxdWlyZUNhbm9uU2V0dXAsXG4gIH0sXG4gIC8qKlxuICAgKiBSZWNvbW1lbmRlZCBydWxlIGNvbmZpZ3VyYXRpb25zIC0gc3ByZWFkIGludG8geW91ciBFU0xpbnQgY29uZmlnXG4gICAqIEBleGFtcGxlIHJ1bGVzOiB7IC4uLmdhbGxvcC5yZWNvbW1lbmRlZCB9XG4gICAqL1xuICByZWNvbW1lbmRlZCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luXG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXNsaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFBO0FBQ3hELE9BQU8sb0JBQW9CLE1BQU0sb0NBQW9DLENBQUE7QUFDckUsT0FBTyxvQkFBb0IsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNwRSxPQUFPLDBCQUEwQixNQUFNLHlDQUF5QyxDQUFBO0FBQ2hGLE9BQU8sc0JBQXNCLE1BQU0scUNBQXFDLENBQUE7QUFDeEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLFdBQVcsTUFBTSwwQkFBMEIsQ0FBQTtBQUNsRCxPQUFPLGtCQUFrQixNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sNEJBQTRCLE1BQU0sNENBQTRDLENBQUE7QUFDckYsT0FBTyxtQkFBbUIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNuRSxPQUFPLG9CQUFvQixNQUFNLG1DQUFtQyxDQUFBO0FBQ3BFLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8scUJBQXFCLE1BQU0sb0NBQW9DLENBQUE7QUFDdEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLG1CQUFtQixNQUFNLGtDQUFrQyxDQUFBO0FBQ2xFLE9BQU8sa0JBQWtCLE1BQU0saUNBQWlDLENBQUE7QUFDaEUsT0FBTyxXQUFXLE1BQU0sMEJBQTBCLENBQUE7QUFFbEQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNsQix5QkFBeUIsRUFBRSxNQUFNO0lBQ2pDLGdDQUFnQyxFQUFFLE1BQU07SUFDeEMsZ0NBQWdDLEVBQUUsTUFBTTtJQUN4QywrQkFBK0IsRUFBRSxNQUFNO0lBQ3ZDLHFDQUFxQyxFQUFFLE1BQU07SUFDN0MsaUNBQWlDLEVBQUUsTUFBTTtJQUN6Qyw0QkFBNEIsRUFBRSxNQUFNO0lBQ3BDLHNCQUFzQixFQUFFLE1BQU07SUFDOUIsOEJBQThCLEVBQUUsTUFBTTtJQUN0Qyx3Q0FBd0MsRUFBRSxNQUFNO0lBQ2hELCtCQUErQixFQUFFLE1BQU07SUFDdkMsK0JBQStCLEVBQUUsTUFBTTtJQUN2Qyx1QkFBdUIsRUFBRSxNQUFNO0lBQy9CLDRCQUE0QixFQUFFLE1BQU07SUFDcEMsOEJBQThCLEVBQUUsTUFBTTtJQUN0Qyw2QkFBNkIsRUFBRSxNQUFNO0lBQ3JDLHNCQUFzQixFQUFFLE1BQU07Q0FDdEIsQ0FBQTtBQUVWLE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixPQUFPLEVBQUUsUUFBUTtLQUNsQjtJQUNELEtBQUssRUFBRTtRQUNMLGtCQUFrQixFQUFFLGNBQWM7UUFDbEMseUJBQXlCLEVBQUUscUJBQXFCO1FBQ2hELHlCQUF5QixFQUFFLG9CQUFvQjtRQUMvQyx3QkFBd0IsRUFBRSxvQkFBb0I7UUFDOUMsOEJBQThCLEVBQUUsMEJBQTBCO1FBQzFELDBCQUEwQixFQUFFLHNCQUFzQjtRQUNsRCxxQkFBcUIsRUFBRSxpQkFBaUI7UUFDeEMsZUFBZSxFQUFFLFdBQVc7UUFDNUIsdUJBQXVCLEVBQUUsa0JBQWtCO1FBQzNDLGlDQUFpQyxFQUFFLDRCQUE0QjtRQUMvRCx3QkFBd0IsRUFBRSxtQkFBbUI7UUFDN0Msd0JBQXdCLEVBQUUsb0JBQW9CO1FBQzlDLGdCQUFnQixFQUFFLFlBQVk7UUFDOUIscUJBQXFCLEVBQUUsaUJBQWlCO1FBQ3hDLHVCQUF1QixFQUFFLG1CQUFtQjtRQUM1QyxzQkFBc0IsRUFBRSxrQkFBa0I7UUFDMUMsZUFBZSxFQUFFLFdBQVc7S0FDN0I7SUFDRDs7O09BR0c7SUFDSCxXQUFXO0NBQ1osQ0FBQTtBQUVELGVBQWUsTUFBTSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vQ2xpZW50QmxvY2tzIGZyb20gJy4vcnVsZXMvbm8tY2xpZW50LWJsb2Nrcy5qcydcbmltcG9ydCBub0NvbnRhaW5lckluU2VjdGlvbiBmcm9tICcuL3J1bGVzL25vLWNvbnRhaW5lci1pbi1zZWN0aW9uLmpzJ1xuaW1wb3J0IHByZWZlckNvbXBvbmVudFByb3BzIGZyb20gJy4vcnVsZXMvcHJlZmVyLWNvbXBvbmVudC1wcm9wcy5qcydcbmltcG9ydCBwcmVmZXJUeXBvZ3JhcGh5Q29tcG9uZW50cyBmcm9tICcuL3J1bGVzL3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMuanMnXG5pbXBvcnQgcHJlZmVyTGF5b3V0Q29tcG9uZW50cyBmcm9tICcuL3J1bGVzL3ByZWZlci1sYXlvdXQtY29tcG9uZW50cy5qcydcbmltcG9ydCBub0FyYml0cmFyeUNvbG9ycyBmcm9tICcuL3J1bGVzL25vLWFyYml0cmFyeS1jb2xvcnMuanMnXG5pbXBvcnQgbm9SYXdDb2xvcnMgZnJvbSAnLi9ydWxlcy9uby1yYXctY29sb3JzLmpzJ1xuaW1wb3J0IG5vQ3Jvc3Nab25lSW1wb3J0cyBmcm9tICcuL3J1bGVzL25vLWNyb3NzLXpvbmUtaW1wb3J0cy5qcydcbmltcG9ydCBub05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyIGZyb20gJy4vcnVsZXMvbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlci5qcydcbmltcG9ydCBub0NvbXBvbmVudEluQmxvY2tzIGZyb20gJy4vcnVsZXMvbm8tY29tcG9uZW50LWluLWJsb2Nrcy5qcydcbmltcG9ydCBwcmVmZXJMaXN0Q29tcG9uZW50cyBmcm9tICcuL3J1bGVzL3ByZWZlci1saXN0LWNvbXBvbmVudHMuanMnXG5pbXBvcnQgbm9OYXRpdmVEYXRlIGZyb20gJy4vcnVsZXMvbm8tbmF0aXZlLWRhdGUuanMnXG5pbXBvcnQgYmxvY2tOYW1pbmdDb252ZW50aW9uIGZyb20gJy4vcnVsZXMvYmxvY2stbmFtaW5nLWNvbnZlbnRpb24uanMnXG5pbXBvcnQgcmVxdWlyZUNhbm9uU2V0dXAgZnJvbSAnLi9ydWxlcy9yZXF1aXJlLWNhbm9uLXNldHVwLmpzJ1xuaW1wb3J0IG5vQ2xhc3NuYW1lc1BhY2thZ2UgZnJvbSAnLi9ydWxlcy9uby1jbGFzc25hbWVzLXBhY2thZ2UuanMnXG5pbXBvcnQgcHJlZmVyQWxpYXNJbXBvcnRzIGZyb20gJy4vcnVsZXMvcHJlZmVyLWFsaWFzLWltcG9ydHMuanMnXG5pbXBvcnQgbm9JbmxpbmVTdmcgZnJvbSAnLi9ydWxlcy9uby1pbmxpbmUtc3ZnLmpzJ1xuXG4vKipcbiAqIEFsbCBDYW5vbiBFU0xpbnQgcnVsZXMgd2l0aCByZWNvbW1lbmRlZCBzZXZlcml0eSBsZXZlbHNcbiAqL1xuY29uc3QgcmVjb21tZW5kZWQgPSB7XG4gICdnYWxsb3Avbm8tY2xpZW50LWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9ibG9jay1uYW1pbmctY29udmVudGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jb250YWluZXItaW4tc2VjdGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItY29tcG9uZW50LXByb3BzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMnOiAnd2FybicsXG4gICdnYWxsb3AvcHJlZmVyLWxheW91dC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLWFyYml0cmFyeS1jb2xvcnMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tcmF3LWNvbG9ycyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jcm9zcy16b25lLWltcG9ydHMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlcic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jb21wb25lbnQtaW4tYmxvY2tzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3ByZWZlci1saXN0LWNvbXBvbmVudHMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tbmF0aXZlLWRhdGUnOiAnd2FybicsXG4gICdnYWxsb3AvcmVxdWlyZS1jYW5vbi1zZXR1cCc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jbGFzc25hbWVzLXBhY2thZ2UnOiAnd2FybicsXG4gICdnYWxsb3AvcHJlZmVyLWFsaWFzLWltcG9ydHMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8taW5saW5lLXN2Zyc6ICd3YXJuJyxcbn0gYXMgY29uc3RcblxuY29uc3QgcGx1Z2luID0ge1xuICBtZXRhOiB7XG4gICAgbmFtZTogJ2VzbGludC1wbHVnaW4tZ2FsbG9wJyxcbiAgICB2ZXJzaW9uOiAnMi4xMi4wJyxcbiAgfSxcbiAgcnVsZXM6IHtcbiAgICAnbm8tY2xpZW50LWJsb2Nrcyc6IG5vQ2xpZW50QmxvY2tzLFxuICAgICdibG9jay1uYW1pbmctY29udmVudGlvbic6IGJsb2NrTmFtaW5nQ29udmVudGlvbixcbiAgICAnbm8tY29udGFpbmVyLWluLXNlY3Rpb24nOiBub0NvbnRhaW5lckluU2VjdGlvbixcbiAgICAncHJlZmVyLWNvbXBvbmVudC1wcm9wcyc6IHByZWZlckNvbXBvbmVudFByb3BzLFxuICAgICdwcmVmZXItdHlwb2dyYXBoeS1jb21wb25lbnRzJzogcHJlZmVyVHlwb2dyYXBoeUNvbXBvbmVudHMsXG4gICAgJ3ByZWZlci1sYXlvdXQtY29tcG9uZW50cyc6IHByZWZlckxheW91dENvbXBvbmVudHMsXG4gICAgJ25vLWFyYml0cmFyeS1jb2xvcnMnOiBub0FyYml0cmFyeUNvbG9ycyxcbiAgICAnbm8tcmF3LWNvbG9ycyc6IG5vUmF3Q29sb3JzLFxuICAgICduby1jcm9zcy16b25lLWltcG9ydHMnOiBub0Nyb3NzWm9uZUltcG9ydHMsXG4gICAgJ25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInOiBub05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyLFxuICAgICduby1jb21wb25lbnQtaW4tYmxvY2tzJzogbm9Db21wb25lbnRJbkJsb2NrcyxcbiAgICAncHJlZmVyLWxpc3QtY29tcG9uZW50cyc6IHByZWZlckxpc3RDb21wb25lbnRzLFxuICAgICduby1uYXRpdmUtZGF0ZSc6IG5vTmF0aXZlRGF0ZSxcbiAgICAncmVxdWlyZS1jYW5vbi1zZXR1cCc6IHJlcXVpcmVDYW5vblNldHVwLFxuICAgICduby1jbGFzc25hbWVzLXBhY2thZ2UnOiBub0NsYXNzbmFtZXNQYWNrYWdlLFxuICAgICdwcmVmZXItYWxpYXMtaW1wb3J0cyc6IHByZWZlckFsaWFzSW1wb3J0cyxcbiAgICAnbm8taW5saW5lLXN2Zyc6IG5vSW5saW5lU3ZnLFxuICB9LFxuICAvKipcbiAgICogUmVjb21tZW5kZWQgcnVsZSBjb25maWd1cmF0aW9ucyAtIHNwcmVhZCBpbnRvIHlvdXIgRVNMaW50IGNvbmZpZ1xuICAgKiBAZXhhbXBsZSBydWxlczogeyAuLi5nYWxsb3AucmVjb21tZW5kZWQgfVxuICAgKi9cbiAgcmVjb21tZW5kZWQsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpblxuIl19
@@ -0,0 +1,3 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export default rule;
@@ -0,0 +1,46 @@
1
+ import { getCanonUrl, getCanonPattern } from '../utils/canon.js';
2
+ const RULE_NAME = 'no-classnames-package';
3
+ const pattern = getCanonPattern(RULE_NAME);
4
+ const CLASSNAMES_SOURCES = ['classnames', 'classnames/bind', 'classnames/dedupe'];
5
+ const rule = {
6
+ meta: {
7
+ type: 'suggestion',
8
+ docs: {
9
+ description: pattern?.summary || 'Use clsx instead of classnames',
10
+ recommended: true,
11
+ url: getCanonUrl(RULE_NAME),
12
+ },
13
+ messages: {
14
+ noClassnames: `[Canon ${pattern?.id || '014'}] Use "clsx" instead of "classnames". Import: import { clsx } from "clsx"`,
15
+ },
16
+ schema: [],
17
+ },
18
+ create(context) {
19
+ return {
20
+ ImportDeclaration(node) {
21
+ const source = node.source?.value;
22
+ if (typeof source === 'string' && CLASSNAMES_SOURCES.includes(source)) {
23
+ context.report({
24
+ node,
25
+ messageId: 'noClassnames',
26
+ });
27
+ }
28
+ },
29
+ CallExpression(node) {
30
+ // Check for require('classnames')
31
+ if (node.callee?.name === 'require' &&
32
+ node.arguments?.length === 1 &&
33
+ node.arguments[0]?.type === 'Literal' &&
34
+ typeof node.arguments[0].value === 'string' &&
35
+ CLASSNAMES_SOURCES.includes(node.arguments[0].value)) {
36
+ context.report({
37
+ node,
38
+ messageId: 'noClassnames',
39
+ });
40
+ }
41
+ },
42
+ };
43
+ },
44
+ };
45
+ export default rule;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tY2xhc3NuYW1lcy1wYWNrYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VzbGludC9ydWxlcy9uby1jbGFzc25hbWVzLXBhY2thZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVoRSxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQTtBQUN6QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFMUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO0FBRWpGLE1BQU0sSUFBSSxHQUFvQjtJQUM1QixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsWUFBWTtRQUNsQixJQUFJLEVBQUU7WUFDSixXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxnQ0FBZ0M7WUFDakUsV0FBVyxFQUFFLElBQUk7WUFDakIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUM7U0FDNUI7UUFDRCxRQUFRLEVBQUU7WUFDUixZQUFZLEVBQUUsVUFBVSxPQUFPLEVBQUUsRUFBRSxJQUFJLEtBQUssMkVBQTJFO1NBQ3hIO1FBQ0QsTUFBTSxFQUFFLEVBQUU7S0FDWDtJQUVELE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTztZQUNMLGlCQUFpQixDQUFDLElBQVM7Z0JBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFBO2dCQUNqQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDdEUsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDYixJQUFJO3dCQUNKLFNBQVMsRUFBRSxjQUFjO3FCQUMxQixDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxjQUFjLENBQUMsSUFBUztnQkFDdEIsa0NBQWtDO2dCQUNsQyxJQUNFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLFNBQVM7b0JBQy9CLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxLQUFLLENBQUM7b0JBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLFNBQVM7b0JBQ3JDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUTtvQkFDM0Msa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ3BELENBQUM7b0JBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDYixJQUFJO3dCQUNKLFNBQVMsRUFBRSxjQUFjO3FCQUMxQixDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFFRCxlQUFlLElBQUksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCdcbmltcG9ydCB7IGdldENhbm9uVXJsLCBnZXRDYW5vblBhdHRlcm4gfSBmcm9tICcuLi91dGlscy9jYW5vbi5qcydcblxuY29uc3QgUlVMRV9OQU1FID0gJ25vLWNsYXNzbmFtZXMtcGFja2FnZSdcbmNvbnN0IHBhdHRlcm4gPSBnZXRDYW5vblBhdHRlcm4oUlVMRV9OQU1FKVxuXG5jb25zdCBDTEFTU05BTUVTX1NPVVJDRVMgPSBbJ2NsYXNzbmFtZXMnLCAnY2xhc3NuYW1lcy9iaW5kJywgJ2NsYXNzbmFtZXMvZGVkdXBlJ11cblxuY29uc3QgcnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXR0ZXJuPy5zdW1tYXJ5IHx8ICdVc2UgY2xzeCBpbnN0ZWFkIG9mIGNsYXNzbmFtZXMnLFxuICAgICAgcmVjb21tZW5kZWQ6IHRydWUsXG4gICAgICB1cmw6IGdldENhbm9uVXJsKFJVTEVfTkFNRSksXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgbm9DbGFzc25hbWVzOiBgW0Nhbm9uICR7cGF0dGVybj8uaWQgfHwgJzAxNCd9XSBVc2UgXCJjbHN4XCIgaW5zdGVhZCBvZiBcImNsYXNzbmFtZXNcIi4gSW1wb3J0OiBpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcImAsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG5vZGU6IGFueSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBub2RlLnNvdXJjZT8udmFsdWVcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnICYmIENMQVNTTkFNRVNfU09VUkNFUy5pbmNsdWRlcyhzb3VyY2UpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogJ25vQ2xhc3NuYW1lcycsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGU6IGFueSkge1xuICAgICAgICAvLyBDaGVjayBmb3IgcmVxdWlyZSgnY2xhc3NuYW1lcycpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBub2RlLmNhbGxlZT8ubmFtZSA9PT0gJ3JlcXVpcmUnICYmXG4gICAgICAgICAgbm9kZS5hcmd1bWVudHM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdPy50eXBlID09PSAnTGl0ZXJhbCcgJiZcbiAgICAgICAgICB0eXBlb2Ygbm9kZS5hcmd1bWVudHNbMF0udmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgQ0xBU1NOQU1FU19TT1VSQ0VTLmluY2x1ZGVzKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiAnbm9DbGFzc25hbWVzJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH1cbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgcnVsZVxuIl19
@@ -0,0 +1,3 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export default rule;
@@ -0,0 +1,37 @@
1
+ import { getCanonUrl, getCanonPattern } from '../utils/canon.js';
2
+ const RULE_NAME = 'no-inline-svg';
3
+ const pattern = getCanonPattern(RULE_NAME);
4
+ const rule = {
5
+ meta: {
6
+ type: 'suggestion',
7
+ docs: {
8
+ description: pattern?.summary || 'Use Icon component instead of inline SVGs',
9
+ recommended: true,
10
+ url: getCanonUrl(RULE_NAME),
11
+ },
12
+ messages: {
13
+ noInlineSvg: `[Canon ${pattern?.id || '012'}] Use the Icon component with Iconify icons instead of inline <svg>. Import: import { Icon } from "@/components/icon"`,
14
+ },
15
+ schema: [],
16
+ },
17
+ create(context) {
18
+ const filename = context.filename || context.getFilename();
19
+ // Only apply to block files
20
+ if (!filename.includes('/blocks/')) {
21
+ return {};
22
+ }
23
+ return {
24
+ JSXOpeningElement(node) {
25
+ const elementName = node.name?.name;
26
+ if (elementName === 'svg') {
27
+ context.report({
28
+ node,
29
+ messageId: 'noInlineSvg',
30
+ });
31
+ }
32
+ },
33
+ };
34
+ },
35
+ };
36
+ export default rule;
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8taW5saW5lLXN2Zy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lc2xpbnQvcnVsZXMvbm8taW5saW5lLXN2Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhFLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQTtBQUNqQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFMUMsTUFBTSxJQUFJLEdBQW9CO0lBQzVCLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxZQUFZO1FBQ2xCLElBQUksRUFBRTtZQUNKLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLDJDQUEyQztZQUM1RSxXQUFXLEVBQUUsSUFBSTtZQUNqQixHQUFHLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQztTQUM1QjtRQUNELFFBQVEsRUFBRTtZQUNSLFdBQVcsRUFBRSxVQUFVLE9BQU8sRUFBRSxFQUFFLElBQUksS0FBSyx1SEFBdUg7U0FDbks7UUFDRCxNQUFNLEVBQUUsRUFBRTtLQUNYO0lBRUQsTUFBTSxDQUFDLE9BQU87UUFDWixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUUxRCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUM7UUFFRCxPQUFPO1lBQ0wsaUJBQWlCLENBQUMsSUFBUztnQkFDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUE7Z0JBRW5DLElBQUksV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO29CQUMxQixPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNiLElBQUk7d0JBQ0osU0FBUyxFQUFFLGFBQWE7cUJBQ3pCLENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQUVELGVBQWUsSUFBSSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50J1xuaW1wb3J0IHsgZ2V0Q2Fub25VcmwsIGdldENhbm9uUGF0dGVybiB9IGZyb20gJy4uL3V0aWxzL2Nhbm9uLmpzJ1xuXG5jb25zdCBSVUxFX05BTUUgPSAnbm8taW5saW5lLXN2ZydcbmNvbnN0IHBhdHRlcm4gPSBnZXRDYW5vblBhdHRlcm4oUlVMRV9OQU1FKVxuXG5jb25zdCBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246IHBhdHRlcm4/LnN1bW1hcnkgfHwgJ1VzZSBJY29uIGNvbXBvbmVudCBpbnN0ZWFkIG9mIGlubGluZSBTVkdzJyxcbiAgICAgIHJlY29tbWVuZGVkOiB0cnVlLFxuICAgICAgdXJsOiBnZXRDYW5vblVybChSVUxFX05BTUUpLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIG5vSW5saW5lU3ZnOiBgW0Nhbm9uICR7cGF0dGVybj8uaWQgfHwgJzAxMid9XSBVc2UgdGhlIEljb24gY29tcG9uZW50IHdpdGggSWNvbmlmeSBpY29ucyBpbnN0ZWFkIG9mIGlubGluZSA8c3ZnPi4gSW1wb3J0OiBpbXBvcnQgeyBJY29uIH0gZnJvbSBcIkAvY29tcG9uZW50cy9pY29uXCJgLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5maWxlbmFtZSB8fCBjb250ZXh0LmdldEZpbGVuYW1lKClcblxuICAgIC8vIE9ubHkgYXBwbHkgdG8gYmxvY2sgZmlsZXNcbiAgICBpZiAoIWZpbGVuYW1lLmluY2x1ZGVzKCcvYmxvY2tzLycpKSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSlNYT3BlbmluZ0VsZW1lbnQobm9kZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gbm9kZS5uYW1lPy5uYW1lXG5cbiAgICAgICAgaWYgKGVsZW1lbnROYW1lID09PSAnc3ZnJykge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6ICdub0lubGluZVN2ZycsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJ1bGVcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export default rule;
@@ -0,0 +1,139 @@
1
+ import { getCanonUrl, getCanonPattern } from '../utils/canon.js';
2
+ const RULE_NAME = 'no-raw-colors';
3
+ const pattern = getCanonPattern(RULE_NAME);
4
+ // Tailwind color prefixes (shared concept with no-arbitrary-colors)
5
+ const COLOR_PREFIXES = [
6
+ 'bg',
7
+ 'text',
8
+ 'border',
9
+ 'ring',
10
+ 'outline',
11
+ 'shadow',
12
+ 'accent',
13
+ 'caret',
14
+ 'fill',
15
+ 'stroke',
16
+ 'decoration',
17
+ 'divide',
18
+ 'from',
19
+ 'via',
20
+ 'to',
21
+ ];
22
+ // Standard Tailwind named color families
23
+ const DEFAULT_FORBIDDEN_FAMILIES = [
24
+ 'white',
25
+ 'black',
26
+ 'gray',
27
+ 'slate',
28
+ 'zinc',
29
+ 'neutral',
30
+ 'stone',
31
+ 'red',
32
+ 'orange',
33
+ 'amber',
34
+ 'yellow',
35
+ 'lime',
36
+ 'green',
37
+ 'emerald',
38
+ 'teal',
39
+ 'cyan',
40
+ 'sky',
41
+ 'blue',
42
+ 'indigo',
43
+ 'violet',
44
+ 'purple',
45
+ 'fuchsia',
46
+ 'pink',
47
+ 'rose',
48
+ ];
49
+ /**
50
+ * Build regex to match raw Tailwind color classes.
51
+ * Matches: text-white, bg-gray-500, border-slate-200, etc.
52
+ */
53
+ function buildRawColorRegex(families) {
54
+ const prefixes = COLOR_PREFIXES.join('|');
55
+ const familyGroup = families.join('|');
56
+ // Match {prefix}-{family} or {prefix}-{family}-{shade}
57
+ return new RegExp(`\\b(?:${prefixes})-(?:${familyGroup})(?:-\\d{1,3})?\\b`);
58
+ }
59
+ /**
60
+ * Extract all raw color class matches from a className string
61
+ */
62
+ function findRawColorClasses(classValue, families, allowedClasses) {
63
+ const prefixes = COLOR_PREFIXES.join('|');
64
+ const familyGroup = families.join('|');
65
+ const globalRegex = new RegExp(`\\b(?:${prefixes})-(?:${familyGroup})(?:-\\d{1,3})?\\b`, 'g');
66
+ const matches = [];
67
+ let match;
68
+ while ((match = globalRegex.exec(classValue)) !== null) {
69
+ if (!allowedClasses.includes(match[0])) {
70
+ matches.push(match[0]);
71
+ }
72
+ }
73
+ return matches;
74
+ }
75
+ const rule = {
76
+ meta: {
77
+ type: 'suggestion',
78
+ docs: {
79
+ description: pattern?.summary || 'Use semantic color tokens, not raw Tailwind colors',
80
+ recommended: true,
81
+ url: getCanonUrl(RULE_NAME),
82
+ },
83
+ messages: {
84
+ noRawColors: `[Canon ${pattern?.id || '009'}] Avoid raw Tailwind color "{{class}}". Use a semantic token instead.`,
85
+ },
86
+ schema: [
87
+ {
88
+ type: 'object',
89
+ properties: {
90
+ allowedClasses: {
91
+ type: 'array',
92
+ items: { type: 'string' },
93
+ },
94
+ },
95
+ additionalProperties: false,
96
+ },
97
+ ],
98
+ },
99
+ create(context) {
100
+ const options = context.options[0] || {};
101
+ const allowedClasses = options.allowedClasses || [];
102
+ return {
103
+ JSXAttribute(node) {
104
+ // Only check className attributes
105
+ if (node.name?.name !== 'className') {
106
+ return;
107
+ }
108
+ // Extract className value
109
+ let classValue = '';
110
+ if (node.value?.type === 'Literal' && typeof node.value.value === 'string') {
111
+ classValue = node.value.value;
112
+ }
113
+ else if (node.value?.type === 'JSXExpressionContainer' &&
114
+ node.value.expression?.type === 'Literal' &&
115
+ typeof node.value.expression.value === 'string') {
116
+ classValue = node.value.expression.value;
117
+ }
118
+ else if (node.value?.type === 'JSXExpressionContainer' &&
119
+ node.value.expression?.type === 'TemplateLiteral') {
120
+ classValue = node.value.expression.quasis
121
+ .map((quasi) => quasi.value.raw)
122
+ .join(' ');
123
+ }
124
+ if (!classValue)
125
+ return;
126
+ const matches = findRawColorClasses(classValue, DEFAULT_FORBIDDEN_FAMILIES, allowedClasses);
127
+ for (const cls of matches) {
128
+ context.report({
129
+ node,
130
+ messageId: 'noRawColors',
131
+ data: { class: cls },
132
+ });
133
+ }
134
+ },
135
+ };
136
+ },
137
+ };
138
+ export default rule;
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmF3LWNvbG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lc2xpbnQvcnVsZXMvbm8tcmF3LWNvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhFLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQTtBQUNqQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFMUMsb0VBQW9FO0FBQ3BFLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLElBQUk7SUFDSixNQUFNO0lBQ04sUUFBUTtJQUNSLE1BQU07SUFDTixTQUFTO0lBQ1QsUUFBUTtJQUNSLFFBQVE7SUFDUixPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixZQUFZO0lBQ1osUUFBUTtJQUNSLE1BQU07SUFDTixLQUFLO0lBQ0wsSUFBSTtDQUNMLENBQUE7QUFFRCx5Q0FBeUM7QUFDekMsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxPQUFPO0lBQ1AsT0FBTztJQUNQLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLFNBQVM7SUFDVCxPQUFPO0lBQ1AsS0FBSztJQUNMLFFBQVE7SUFDUixPQUFPO0lBQ1AsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsU0FBUztJQUNULE1BQU07SUFDTixNQUFNO0lBQ04sS0FBSztJQUNMLE1BQU07SUFDTixRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0lBQ1QsTUFBTTtJQUNOLE1BQU07Q0FDUCxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxRQUFrQjtJQUM1QyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3pDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFD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SUFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyx3QkFBd0I7b0JBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksS0FBSyxpQkFBaUIsRUFDakQsQ0FBQztvQkFDRCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTTt5QkFDdEMsR0FBRyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzt5QkFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNkLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFVBQVU7b0JBQUUsT0FBTTtnQkFFdkIsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxFQUFFLDBCQUEwQixFQUFFLGNBQWMsQ0FBQyxDQUFBO2dCQUMzRixLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUMxQixPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNiLElBQUk7d0JBQ0osU0FBUyxFQUFFLGFBQWE7d0JBQ3hCLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7cUJBQ3JCLENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQUVELGVBQWUsSUFBSSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50J1xuaW1wb3J0IHsgZ2V0Q2Fub25VcmwsIGdldENhbm9uUGF0dGVybiB9IGZyb20gJy4uL3V0aWxzL2Nhbm9uLmpzJ1xuXG5jb25zdCBSVUxFX05BTUUgPSAnbm8tcmF3LWNvbG9ycydcbmNvbnN0IHBhdHRlcm4gPSBnZXRDYW5vblBhdHRlcm4oUlVMRV9OQU1FKVxuXG4vLyBUYWlsd2luZCBjb2xvciBwcmVmaXhlcyAoc2hhcmVkIGNvbmNlcHQgd2l0aCBuby1hcmJpdHJhcnktY29sb3JzKVxuY29uc3QgQ09MT1JfUFJFRklYRVMgPSBbXG4gICdiZycsXG4gICd0ZXh0JyxcbiAgJ2JvcmRlcicsXG4gICdyaW5nJyxcbiAgJ291dGxpbmUnLFxuICAnc2hhZG93JyxcbiAgJ2FjY2VudCcsXG4gICdjYXJldCcsXG4gICdmaWxsJyxcbiAgJ3N0cm9rZScsXG4gICdkZWNvcmF0aW9uJyxcbiAgJ2RpdmlkZScsXG4gICdmcm9tJyxcbiAgJ3ZpYScsXG4gICd0bycsXG5dXG5cbi8vIFN0YW5kYXJkIFRhaWx3aW5kIG5hbWVkIGNvbG9yIGZhbWlsaWVzXG5jb25zdCBERUZBVUxUX0ZPUkJJRERFTl9GQU1JTElFUyA9IFtcbiAgJ3doaXRlJyxcbiAgJ2JsYWNrJyxcbiAgJ2dyYXknLFxuICAnc2xhdGUnLFxuICAnemluYycsXG4gICduZXV0cmFsJyxcbiAgJ3N0b25lJyxcbiAgJ3JlZCcsXG4gICdvcmFuZ2UnLFxuICAnYW1iZXInLFxuICAneWVsbG93JyxcbiAgJ2xpbWUnLFxuICAnZ3JlZW4nLFxuICAnZW1lcmFsZCcsXG4gICd0ZWFsJyxcbiAgJ2N5YW4nLFxuICAnc2t5JyxcbiAgJ2JsdWUnLFxuICAnaW5kaWdvJyxcbiAgJ3Zpb2xldCcsXG4gICdwdXJwbGUnLFxuICAnZnVjaHNpYScsXG4gICdwaW5rJyxcbiAgJ3Jvc2UnLFxuXVxuXG4vKipcbiAqIEJ1aWxkIHJlZ2V4IHRvIG1hdGNoIHJhdyBUYWlsd2luZCBjb2xvciBjbGFzc2VzLlxuICogTWF0Y2hlczogdGV4dC13aGl0ZSwgYmctZ3JheS01MDAsIGJvcmRlci1zbGF0ZS0yMDAsIGV0Yy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRSYXdDb2xvclJlZ2V4KGZhbWlsaWVzOiBzdHJpbmdbXSk6IFJlZ0V4cCB7XG4gIGNvbnN0IHByZWZpeGVzID0gQ09MT1JfUFJFRklYRVMuam9pbignfCcpXG4gIGNvbnN0IGZhbWlseUdyb3VwID0gZmFtaWxpZXMuam9pbignfCcpXG4gIC8vIE1hdGNoIHtwcmVmaXh9LXtmYW1pbHl9IG9yIHtwcmVmaXh9LXtmYW1pbHl9LXtzaGFkZX1cbiAgcmV0dXJuIG5ldyBSZWdFeHAoYFxcXFxiKD86JHtwcmVmaXhlc30pLSg/OiR7ZmFtaWx5R3JvdXB9KSg/Oi1cXFxcZHsxLDN9KT9cXFxcYmApXG59XG5cbi8qKlxuICogRXh0cmFjdCBhbGwgcmF3IGNvbG9yIGNsYXNzIG1hdGNoZXMgZnJvbSBhIGNsYXNzTmFtZSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZmluZFJhd0NvbG9yQ2xhc3NlcyhjbGFzc1ZhbHVlOiBzdHJpbmcsIGZhbWlsaWVzOiBzdHJpbmdbXSwgYWxsb3dlZENsYXNzZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBwcmVmaXhlcyA9IENPTE9SX1BSRUZJWEVTLmpvaW4oJ3wnKVxuICBjb25zdCBmYW1pbHlHcm91cCA9IGZhbWlsaWVzLmpvaW4oJ3wnKVxuICBjb25zdCBnbG9iYWxSZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxiKD86JHtwcmVmaXhlc30pLSg/OiR7ZmFtaWx5R3JvdXB9KSg/Oi1cXFxcZHsxLDN9KT9cXFxcYmAsICdnJylcbiAgY29uc3QgbWF0Y2hlczogc3RyaW5nW10gPSBbXVxuICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGxcbiAgd2hpbGUgKChtYXRjaCA9IGdsb2JhbFJlZ2V4LmV4ZWMoY2xhc3NWYWx1ZSkpICE9PSBudWxsKSB7XG4gICAgaWYgKCFhbGxvd2VkQ2xhc3Nlcy5pbmNsdWRlcyhtYXRjaFswXSkpIHtcbiAgICAgIG1hdGNoZXMucHVzaChtYXRjaFswXSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNcbn1cblxuY29uc3QgcnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXR0ZXJuPy5zdW1tYXJ5IHx8ICdVc2Ugc2VtYW50aWMgY29sb3IgdG9rZW5zLCBub3QgcmF3IFRhaWx3aW5kIGNvbG9ycycsXG4gICAgICByZWNvbW1lbmRlZDogdHJ1ZSxcbiAgICAgIHVybDogZ2V0Q2Fub25VcmwoUlVMRV9OQU1FKSxcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBub1Jhd0NvbG9yczogYFtDYW5vbiAke3BhdHRlcm4/LmlkIHx8ICcwMDknfV0gQXZvaWQgcmF3IFRhaWx3aW5kIGNvbG9yIFwie3tjbGFzc319XCIuIFVzZSBhIHNlbWFudGljIHRva2VuIGluc3RlYWQuYCxcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFsbG93ZWRDbGFzc2VzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9XG4gICAgY29uc3QgYWxsb3dlZENsYXNzZXM6IHN0cmluZ1tdID0gb3B0aW9ucy5hbGxvd2VkQ2xhc3NlcyB8fCBbXVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEpTWEF0dHJpYnV0ZShub2RlOiBhbnkpIHtcbiAgICAgICAgLy8gT25seSBjaGVjayBjbGFzc05hbWUgYXR0cmlidXRlc1xuICAgICAgICBpZiAobm9kZS5uYW1lPy5uYW1lICE9PSAnY2xhc3NOYW1lJykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFjdCBjbGFzc05hbWUgdmFsdWVcbiAgICAgICAgbGV0IGNsYXNzVmFsdWUgPSAnJ1xuXG4gICAgICAgIGlmIChub2RlLnZhbHVlPy50eXBlID09PSAnTGl0ZXJhbCcgJiYgdHlwZW9mIG5vZGUudmFsdWUudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY2xhc3NWYWx1ZSA9IG5vZGUudmFsdWUudmFsdWVcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlLnZhbHVlPy50eXBlID09PSAnSlNYRXhwcmVzc2lvbkNvbnRhaW5lcicgJiZcbiAgICAgICAgICBub2RlLnZhbHVlLmV4cHJlc3Npb24/LnR5cGUgPT09ICdMaXRlcmFsJyAmJlxuICAgICAgICAgIHR5cGVvZiBub2RlLnZhbHVlLmV4cHJlc3Npb24udmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICkge1xuICAgICAgICAgIGNsYXNzVmFsdWUgPSBub2RlLnZhbHVlLmV4cHJlc3Npb24udmFsdWVcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlLnZhbHVlPy50eXBlID09PSAnSlNYRXhwcmVzc2lvbkNvbnRhaW5lcicgJiZcbiAgICAgICAgICBub2RlLnZhbHVlLmV4cHJlc3Npb24/LnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnXG4gICAgICAgICkge1xuICAgICAgICAgIGNsYXNzVmFsdWUgPSBub2RlLnZhbHVlLmV4cHJlc3Npb24ucXVhc2lzXG4gICAgICAgICAgICAubWFwKChxdWFzaTogYW55KSA9PiBxdWFzaS52YWx1ZS5yYXcpXG4gICAgICAgICAgICAuam9pbignICcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsYXNzVmFsdWUpIHJldHVyblxuXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBmaW5kUmF3Q29sb3JDbGFzc2VzKGNsYXNzVmFsdWUsIERFRkFVTFRfRk9SQklEREVOX0ZBTUlMSUVTLCBhbGxvd2VkQ2xhc3NlcylcbiAgICAgICAgZm9yIChjb25zdCBjbHMgb2YgbWF0Y2hlcykge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6ICdub1Jhd0NvbG9ycycsXG4gICAgICAgICAgICBkYXRhOiB7IGNsYXNzOiBjbHMgfSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH1cbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgcnVsZVxuIl19
@@ -0,0 +1,3 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export default rule;