@gallop.software/canon 2.31.0 → 2.32.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.
- package/README.md +12 -23
- package/dist/cli/index.js +1 -55
- package/dist/eslint/index.js +2 -2
- package/dist/eslint/rules/require-canon-setup.js +1 -9
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -1
- package/package.json +1 -5
- package/patterns/005-page-structure.md +4 -4
- package/patterns/006-block-naming.md +31 -33
- package/schema.json +1 -1
- package/dist/cli/commands/generate.d.ts +0 -7
- package/dist/cli/commands/generate.js +0 -512
- package/dist/cli/config.d.ts +0 -6
- package/dist/cli/config.js +0 -17
- package/dist/types/config.d.ts +0 -36
- package/dist/types/config.js +0 -2
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ import gallop from '@gallop.software/canon/eslint'
|
|
|
28
28
|
export default [
|
|
29
29
|
...nextConfig,
|
|
30
30
|
{
|
|
31
|
-
files: ['src/
|
|
31
|
+
files: ['src/app/**/_blocks/**/*.tsx', 'src/components/**/*.tsx'],
|
|
32
32
|
plugins: {
|
|
33
33
|
gallop,
|
|
34
34
|
},
|
|
@@ -66,43 +66,32 @@ rules: {
|
|
|
66
66
|
| Rule | Description |
|
|
67
67
|
|------|-------------|
|
|
68
68
|
| `gallop/no-client-blocks` | Blocks must be server components |
|
|
69
|
+
| `gallop/block-naming-convention` | Block export names must match filename |
|
|
69
70
|
| `gallop/no-container-in-section` | No Container inside Section |
|
|
70
71
|
| `gallop/prefer-component-props` | Use props over className for styles |
|
|
71
72
|
| `gallop/prefer-typography-components` | Use Paragraph/Span, not raw tags |
|
|
72
73
|
| `gallop/prefer-layout-components` | Use Grid/Columns, not raw div |
|
|
73
|
-
| `gallop/background-image-rounded` | Background images need rounded prop |
|
|
74
|
-
| `gallop/no-inline-styles` | No style attribute, use Tailwind |
|
|
75
74
|
| `gallop/no-arbitrary-colors` | Use color tokens, not arbitrary values |
|
|
75
|
+
| `gallop/no-raw-colors` | Use semantic color tokens |
|
|
76
76
|
| `gallop/no-cross-zone-imports` | Enforce import boundaries |
|
|
77
|
-
| `gallop/no-
|
|
77
|
+
| `gallop/no-native-intersection-observer` | Use react-intersection-observer |
|
|
78
|
+
| `gallop/no-component-in-blocks` | Exported components belong in /components |
|
|
79
|
+
| `gallop/prefer-list-components` | Use List/Li, not raw ul/li |
|
|
80
|
+
| `gallop/no-native-date` | Use Luxon, not native Date |
|
|
81
|
+
| `gallop/require-canon-setup` | Validate Canon ESLint configuration |
|
|
82
|
+
| `gallop/no-classnames-package` | Use clsx, not classnames |
|
|
83
|
+
| `gallop/prefer-alias-imports` | Use @/ aliases for imports |
|
|
84
|
+
| `gallop/no-inline-svg` | Use Icon component, not inline SVG |
|
|
78
85
|
|
|
79
86
|
## CLI Commands
|
|
80
87
|
|
|
81
|
-
### Generate AI Rules
|
|
82
|
-
|
|
83
|
-
Generate `.cursorrules` or Copilot instructions from Canon:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
npx gallop generate .cursorrules
|
|
87
|
-
npx gallop generate .github/copilot-instructions.md
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### Validate Project Structure
|
|
91
|
-
|
|
92
|
-
Check folder structure compliance:
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
npx gallop validate
|
|
96
|
-
npx gallop validate --strict # Exit code 1 on violations
|
|
97
|
-
```
|
|
98
|
-
|
|
99
88
|
### Audit Code
|
|
100
89
|
|
|
101
90
|
Check code compliance:
|
|
102
91
|
|
|
103
92
|
```bash
|
|
104
93
|
npx gallop audit
|
|
105
|
-
npx gallop audit src/
|
|
94
|
+
npx gallop audit src/ --strict
|
|
106
95
|
```
|
|
107
96
|
|
|
108
97
|
## Pattern Categories
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { audit } from './commands/audit.js';
|
|
3
|
-
import { generate } from './commands/generate.js';
|
|
4
3
|
import { version } from '../index.js';
|
|
5
4
|
const args = process.argv.slice(2);
|
|
6
5
|
const command = args[0];
|
|
@@ -26,7 +25,6 @@ ${colors.bold}Usage:${colors.reset}
|
|
|
26
25
|
|
|
27
26
|
${colors.bold}Commands:${colors.reset}
|
|
28
27
|
audit [path] Check Canon compliance (default: src/)
|
|
29
|
-
generate [output] Generate AI rules from Canon
|
|
30
28
|
version Show version information
|
|
31
29
|
help Show this help message
|
|
32
30
|
|
|
@@ -34,37 +32,15 @@ ${colors.bold}Audit Options:${colors.reset}
|
|
|
34
32
|
--strict Exit with error code on violations
|
|
35
33
|
--json Output as JSON
|
|
36
34
|
|
|
37
|
-
${colors.bold}Generate Options:${colors.reset}
|
|
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
|
|
43
|
-
|
|
44
35
|
${colors.bold}Examples:${colors.reset}
|
|
45
36
|
gallop audit
|
|
46
37
|
gallop audit src/blocks/ --strict
|
|
47
|
-
gallop generate
|
|
48
|
-
gallop generate .cursorrules
|
|
49
|
-
gallop generate CLAUDE.md
|
|
50
|
-
gallop generate --output .github/copilot-instructions.md
|
|
51
38
|
`);
|
|
52
39
|
}
|
|
53
40
|
function showVersion() {
|
|
54
41
|
console.log(`Gallop CLI v1.0.0`);
|
|
55
42
|
console.log(`Canon v${version}`);
|
|
56
43
|
}
|
|
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
|
-
}
|
|
68
44
|
async function main() {
|
|
69
45
|
switch (command) {
|
|
70
46
|
case 'audit':
|
|
@@ -76,36 +52,6 @@ async function main() {
|
|
|
76
52
|
};
|
|
77
53
|
await audit(auditPath, auditOptions);
|
|
78
54
|
break;
|
|
79
|
-
case 'generate': {
|
|
80
|
-
// Find output path from args
|
|
81
|
-
const outputIndex = args.indexOf('--output');
|
|
82
|
-
const outputIndexShort = args.indexOf('-o');
|
|
83
|
-
let outputPath = null;
|
|
84
|
-
if (outputIndex !== -1 && args[outputIndex + 1]) {
|
|
85
|
-
outputPath = args[outputIndex + 1];
|
|
86
|
-
}
|
|
87
|
-
else if (outputIndexShort !== -1 && args[outputIndexShort + 1]) {
|
|
88
|
-
outputPath = args[outputIndexShort + 1];
|
|
89
|
-
}
|
|
90
|
-
else if (args[1] && !args[1].startsWith('--')) {
|
|
91
|
-
outputPath = args[1];
|
|
92
|
-
}
|
|
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
|
-
}
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
55
|
case 'version':
|
|
110
56
|
case '-v':
|
|
111
57
|
case '--version':
|
|
@@ -127,4 +73,4 @@ main().catch((error) => {
|
|
|
127
73
|
console.error('Error:', error.message);
|
|
128
74
|
process.exit(1);
|
|
129
75
|
});
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFdkIsNkJBQTZCO0FBQzdCLE1BQU0sTUFBTSxHQUFHO0lBQ2IsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLFNBQVM7SUFDZixHQUFHLEVBQUUsU0FBUztJQUNkLEdBQUcsRUFBRSxVQUFVO0lBQ2YsS0FBSyxFQUFFLFVBQVU7SUFDakIsTUFBTSxFQUFFLFVBQVU7SUFDbEIsSUFBSSxFQUFFLFVBQVU7SUFDaEIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsSUFBSSxFQUFFLFVBQVU7Q0FDakIsQ0FBQTtBQUVELFNBQVMsUUFBUTtJQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUM7RUFDWixNQUFNLENBQUMsSUFBSSxhQUFhLE1BQU0sQ0FBQyxLQUFLO0VBQ3BDLE1BQU0sQ0FBQyxHQUFHLGtCQUFrQixPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUs7O0VBRWxELE1BQU0sQ0FBQyxJQUFJLFNBQVMsTUFBTSxDQUFDLEtBQUs7OztFQUdoQyxNQUFNLENBQUMsSUFBSSxZQUFZLE1BQU0sQ0FBQyxLQUFLOzs7OztFQUtuQyxNQUFNLENBQUMsSUFBSSxpQkFBaUIsTUFBTSxDQUFDLEtBQUs7Ozs7RUFJeEMsTUFBTSxDQUFDLElBQUksWUFBWSxNQUFNLENBQUMsS0FBSzs7O0NBR3BDLENBQUMsQ0FBQTtBQUNGLENBQUM7QUFFRCxTQUFTLFdBQVc7SUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ2xDLENBQUM7QUFFRCxLQUFLLFVBQVUsSUFBSTtJQUNqQixRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssT0FBTztZQUNWLE1BQU0sU0FBUyxHQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1lBQ3pELE1BQU0sWUFBWSxHQUFHO2dCQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2FBQzVCLENBQUE7WUFDRCxNQUFNLEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUE7WUFDcEMsTUFBSztRQUVQLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLFdBQVc7WUFDZCxXQUFXLEVBQUUsQ0FBQTtZQUNiLE1BQUs7UUFFUCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFNBQVM7WUFDWixRQUFRLEVBQUUsQ0FBQTtZQUNWLE1BQUs7UUFFUDtZQUNFLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFBO1lBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqQixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgYXVkaXQgfSBmcm9tICcuL2NvbW1hbmRzL2F1ZGl0LmpzJ1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL2luZGV4LmpzJ1xuXG5jb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpXG5jb25zdCBjb21tYW5kID0gYXJnc1swXVxuXG4vLyBDb2xvcnMgZm9yIHRlcm1pbmFsIG91dHB1dFxuY29uc3QgY29sb3JzID0ge1xuICByZXNldDogJ1xceDFiWzBtJyxcbiAgYm9sZDogJ1xceDFiWzFtJyxcbiAgZGltOiAnXFx4MWJbMm0nLFxuICByZWQ6ICdcXHgxYlszMW0nLFxuICBncmVlbjogJ1xceDFiWzMybScsXG4gIHllbGxvdzogJ1xceDFiWzMzbScsXG4gIGJsdWU6ICdcXHgxYlszNG0nLFxuICBtYWdlbnRhOiAnXFx4MWJbMzVtJyxcbiAgY3lhbjogJ1xceDFiWzM2bScsXG59XG5cbmZ1bmN0aW9uIHNob3dIZWxwKCkge1xuICBjb25zb2xlLmxvZyhgXG4ke2NvbG9ycy5ib2xkfUdhbGxvcCBDTEkke2NvbG9ycy5yZXNldH0gLSBDYW5vbiBDb21wbGlhbmNlIFRvb2xpbmdcbiR7Y29sb3JzLmRpbX1DYW5vbiBWZXJzaW9uOiAke3ZlcnNpb259JHtjb2xvcnMucmVzZXR9XG5cbiR7Y29sb3JzLmJvbGR9VXNhZ2U6JHtjb2xvcnMucmVzZXR9XG4gIGdhbGxvcCA8Y29tbWFuZD4gW29wdGlvbnNdXG5cbiR7Y29sb3JzLmJvbGR9Q29tbWFuZHM6JHtjb2xvcnMucmVzZXR9XG4gIGF1ZGl0IFtwYXRoXSAgICAgICBDaGVjayBDYW5vbiBjb21wbGlhbmNlIChkZWZhdWx0OiBzcmMvKVxuICB2ZXJzaW9uICAgICAgICAgICAgU2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uXG4gIGhlbHAgICAgICAgICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlXG5cbiR7Y29sb3JzLmJvbGR9QXVkaXQgT3B0aW9uczoke2NvbG9ycy5yZXNldH1cbiAgLS1zdHJpY3QgICAgICAgICAgIEV4aXQgd2l0aCBlcnJvciBjb2RlIG9uIHZpb2xhdGlvbnNcbiAgLS1qc29uICAgICAgICAgICAgIE91dHB1dCBhcyBKU09OXG5cbiR7Y29sb3JzLmJvbGR9RXhhbXBsZXM6JHtjb2xvcnMucmVzZXR9XG4gIGdhbGxvcCBhdWRpdFxuICBnYWxsb3AgYXVkaXQgc3JjL2Jsb2Nrcy8gLS1zdHJpY3RcbmApXG59XG5cbmZ1bmN0aW9uIHNob3dWZXJzaW9uKCkge1xuICBjb25zb2xlLmxvZyhgR2FsbG9wIENMSSB2MS4wLjBgKVxuICBjb25zb2xlLmxvZyhgQ2Fub24gdiR7dmVyc2lvbn1gKVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBzd2l0Y2ggKGNvbW1hbmQpIHtcbiAgICBjYXNlICdhdWRpdCc6XG4gICAgICBjb25zdCBhdWRpdFBhdGggPVxuICAgICAgICBhcmdzWzFdICYmICFhcmdzWzFdLnN0YXJ0c1dpdGgoJy0tJykgPyBhcmdzWzFdIDogJ3NyYy8nXG4gICAgICBjb25zdCBhdWRpdE9wdGlvbnMgPSB7XG4gICAgICAgIHN0cmljdDogYXJncy5pbmNsdWRlcygnLS1zdHJpY3QnKSxcbiAgICAgICAganNvbjogYXJncy5pbmNsdWRlcygnLS1qc29uJyksXG4gICAgICAgIGZpeDogYXJncy5pbmNsdWRlcygnLS1maXgnKSxcbiAgICAgIH1cbiAgICAgIGF3YWl0IGF1ZGl0KGF1ZGl0UGF0aCwgYXVkaXRPcHRpb25zKVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgIGNhc2UgJy12JzpcbiAgICBjYXNlICctLXZlcnNpb24nOlxuICAgICAgc2hvd1ZlcnNpb24oKVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ2hlbHAnOlxuICAgIGNhc2UgJy1oJzpcbiAgICBjYXNlICctLWhlbHAnOlxuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgc2hvd0hlbHAoKVxuICAgICAgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKVxuICAgICAgY29uc29sZS5lcnJvcihgUnVuICdnYWxsb3AgaGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLmApXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxufVxuXG5tYWluKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yLm1lc3NhZ2UpXG4gIHByb2Nlc3MuZXhpdCgxKVxufSlcbiJdfQ==
|
package/dist/eslint/index.js
CHANGED
|
@@ -40,7 +40,7 @@ const recommended = {
|
|
|
40
40
|
const plugin = {
|
|
41
41
|
meta: {
|
|
42
42
|
name: 'eslint-plugin-gallop',
|
|
43
|
-
version: '2.
|
|
43
|
+
version: '2.31.0',
|
|
44
44
|
},
|
|
45
45
|
rules: {
|
|
46
46
|
'no-client-blocks': noClientBlocks,
|
|
@@ -68,4 +68,4 @@ const plugin = {
|
|
|
68
68
|
recommended,
|
|
69
69
|
};
|
|
70
70
|
export default plugin;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXNsaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFBO0FBQ3hELE9BQU8sb0JBQW9CLE1BQU0sb0NBQW9DLENBQUE7QUFDckUsT0FBTyxvQkFBb0IsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNwRSxPQUFPLDBCQUEwQixNQUFNLHlDQUF5QyxDQUFBO0FBQ2hGLE9BQU8sc0JBQXNCLE1BQU0scUNBQXFDLENBQUE7QUFDeEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLFdBQVcsTUFBTSwwQkFBMEIsQ0FBQTtBQUNsRCxPQUFPLGtCQUFrQixNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sNEJBQTRCLE1BQU0sNENBQTRDLENBQUE7QUFDckYsT0FBTyxtQkFBbUIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNuRSxPQUFPLG9CQUFvQixNQUFNLG1DQUFtQyxDQUFBO0FBQ3BFLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8scUJBQXFCLE1BQU0sb0NBQW9DLENBQUE7QUFDdEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLG1CQUFtQixNQUFNLGtDQUFrQyxDQUFBO0FBQ2xFLE9BQU8sa0JBQWtCLE1BQU0saUNBQWlDLENBQUE7QUFDaEUsT0FBTyxXQUFXLE1BQU0sMEJBQTBCLENBQUE7QUFFbEQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNsQix5QkFBeUIsRUFBRSxNQUFNO0lBQ2pDLGdDQUFnQyxFQUFFLE1BQU07SUFDeEMsZ0NBQWdDLEVBQUUsTUFBTTtJQUN4QywrQkFBK0IsRUFBRSxNQUFNO0lBQ3ZDLHFDQUFxQyxFQUFFLE1BQU07SUFDN0MsaUNBQWlDLEVBQUUsTUFBTTtJQUN6Qyw0QkFBNEIsRUFBRSxNQUFNO0lBQ3BDLHNCQUFzQixFQUFFLE1BQU07SUFDOUIsOEJBQThCLEVBQUUsTUFBTTtJQUN0Qyx3Q0FBd0MsRUFBRSxNQUFNO0lBQ2hELCtCQUErQixFQUFFLE1BQU07SUFDdkMsK0JBQStCLEVBQUUsTUFBTTtJQUN2Qyx1QkFBdUIsRUFBRSxNQUFNO0lBQy9CLDRCQUE0QixFQUFFLE1BQU07SUFDcEMsOEJBQThCLEVBQUUsTUFBTTtJQUN0Qyw2QkFBNkIsRUFBRSxNQUFNO0lBQ3JDLHNCQUFzQixFQUFFLE1BQU07Q0FDdEIsQ0FBQTtBQUVWLE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixPQUFPLEVBQUUsUUFBUTtLQUNsQjtJQUNELEtBQUssRUFBRTtRQUNMLGtCQUFrQixFQUFFLGNBQWM7UUFDbEMseUJBQXlCLEVBQUUscUJBQXFCO1FBQ2hELHlCQUF5QixFQUFFLG9CQUFvQjtRQUMvQyx3QkFBd0IsRUFBRSxvQkFBb0I7UUFDOUMsOEJBQThCLEVBQUUsMEJBQTBCO1FBQzFELDBCQUEwQixFQUFFLHNCQUFzQjtRQUNsRCxxQkFBcUIsRUFBRSxpQkFBaUI7UUFDeEMsZUFBZSxFQUFFLFdBQVc7UUFDNUIsdUJBQXVCLEVBQUUsa0JBQWtCO1FBQzNDLGlDQUFpQyxFQUFFLDRCQUE0QjtRQUMvRCx3QkFBd0IsRUFBRSxtQkFBbUI7UUFDN0Msd0JBQXdCLEVBQUUsb0JBQW9CO1FBQzlDLGdCQUFnQixFQUFFLFlBQVk7UUFDOUIscUJBQXFCLEVBQUUsaUJBQWlCO1FBQ3hDLHVCQUF1QixFQUFFLG1CQUFtQjtRQUM1QyxzQkFBc0IsRUFBRSxrQkFBa0I7UUFDMUMsZUFBZSxFQUFFLFdBQVc7S0FDN0I7SUFDRDs7O09BR0c7SUFDSCxXQUFXO0NBQ1osQ0FBQTtBQUVELGVBQWUsTUFBTSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vQ2xpZW50QmxvY2tzIGZyb20gJy4vcnVsZXMvbm8tY2xpZW50LWJsb2Nrcy5qcydcbmltcG9ydCBub0NvbnRhaW5lckluU2VjdGlvbiBmcm9tICcuL3J1bGVzL25vLWNvbnRhaW5lci1pbi1zZWN0aW9uLmpzJ1xuaW1wb3J0IHByZWZlckNvbXBvbmVudFByb3BzIGZyb20gJy4vcnVsZXMvcHJlZmVyLWNvbXBvbmVudC1wcm9wcy5qcydcbmltcG9ydCBwcmVmZXJUeXBvZ3JhcGh5Q29tcG9uZW50cyBmcm9tICcuL3J1bGVzL3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMuanMnXG5pbXBvcnQgcHJlZmVyTGF5b3V0Q29tcG9uZW50cyBmcm9tICcuL3J1bGVzL3ByZWZlci1sYXlvdXQtY29tcG9uZW50cy5qcydcbmltcG9ydCBub0FyYml0cmFyeUNvbG9ycyBmcm9tICcuL3J1bGVzL25vLWFyYml0cmFyeS1jb2xvcnMuanMnXG5pbXBvcnQgbm9SYXdDb2xvcnMgZnJvbSAnLi9ydWxlcy9uby1yYXctY29sb3JzLmpzJ1xuaW1wb3J0IG5vQ3Jvc3Nab25lSW1wb3J0cyBmcm9tICcuL3J1bGVzL25vLWNyb3NzLXpvbmUtaW1wb3J0cy5qcydcbmltcG9ydCBub05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyIGZyb20gJy4vcnVsZXMvbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlci5qcydcbmltcG9ydCBub0NvbXBvbmVudEluQmxvY2tzIGZyb20gJy4vcnVsZXMvbm8tY29tcG9uZW50LWluLWJsb2Nrcy5qcydcbmltcG9ydCBwcmVmZXJMaXN0Q29tcG9uZW50cyBmcm9tICcuL3J1bGVzL3ByZWZlci1saXN0LWNvbXBvbmVudHMuanMnXG5pbXBvcnQgbm9OYXRpdmVEYXRlIGZyb20gJy4vcnVsZXMvbm8tbmF0aXZlLWRhdGUuanMnXG5pbXBvcnQgYmxvY2tOYW1pbmdDb252ZW50aW9uIGZyb20gJy4vcnVsZXMvYmxvY2stbmFtaW5nLWNvbnZlbnRpb24uanMnXG5pbXBvcnQgcmVxdWlyZUNhbm9uU2V0dXAgZnJvbSAnLi9ydWxlcy9yZXF1aXJlLWNhbm9uLXNldHVwLmpzJ1xuaW1wb3J0IG5vQ2xhc3NuYW1lc1BhY2thZ2UgZnJvbSAnLi9ydWxlcy9uby1jbGFzc25hbWVzLXBhY2thZ2UuanMnXG5pbXBvcnQgcHJlZmVyQWxpYXNJbXBvcnRzIGZyb20gJy4vcnVsZXMvcHJlZmVyLWFsaWFzLWltcG9ydHMuanMnXG5pbXBvcnQgbm9JbmxpbmVTdmcgZnJvbSAnLi9ydWxlcy9uby1pbmxpbmUtc3ZnLmpzJ1xuXG4vKipcbiAqIEFsbCBDYW5vbiBFU0xpbnQgcnVsZXMgd2l0aCByZWNvbW1lbmRlZCBzZXZlcml0eSBsZXZlbHNcbiAqL1xuY29uc3QgcmVjb21tZW5kZWQgPSB7XG4gICdnYWxsb3Avbm8tY2xpZW50LWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9ibG9jay1uYW1pbmctY29udmVudGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jb250YWluZXItaW4tc2VjdGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItY29tcG9uZW50LXByb3BzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMnOiAnd2FybicsXG4gICdnYWxsb3AvcHJlZmVyLWxheW91dC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLWFyYml0cmFyeS1jb2xvcnMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tcmF3LWNvbG9ycyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jcm9zcy16b25lLWltcG9ydHMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlcic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jb21wb25lbnQtaW4tYmxvY2tzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3ByZWZlci1saXN0LWNvbXBvbmVudHMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tbmF0aXZlLWRhdGUnOiAnd2FybicsXG4gICdnYWxsb3AvcmVxdWlyZS1jYW5vbi1zZXR1cCc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jbGFzc25hbWVzLXBhY2thZ2UnOiAnd2FybicsXG4gICdnYWxsb3AvcHJlZmVyLWFsaWFzLWltcG9ydHMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8taW5saW5lLXN2Zyc6ICd3YXJuJyxcbn0gYXMgY29uc3RcblxuY29uc3QgcGx1Z2luID0ge1xuICBtZXRhOiB7XG4gICAgbmFtZTogJ2VzbGludC1wbHVnaW4tZ2FsbG9wJyxcbiAgICB2ZXJzaW9uOiAnMi4zMS4wJyxcbiAgfSxcbiAgcnVsZXM6IHtcbiAgICAnbm8tY2xpZW50LWJsb2Nrcyc6IG5vQ2xpZW50QmxvY2tzLFxuICAgICdibG9jay1uYW1pbmctY29udmVudGlvbic6IGJsb2NrTmFtaW5nQ29udmVudGlvbixcbiAgICAnbm8tY29udGFpbmVyLWluLXNlY3Rpb24nOiBub0NvbnRhaW5lckluU2VjdGlvbixcbiAgICAncHJlZmVyLWNvbXBvbmVudC1wcm9wcyc6IHByZWZlckNvbXBvbmVudFByb3BzLFxuICAgICdwcmVmZXItdHlwb2dyYXBoeS1jb21wb25lbnRzJzogcHJlZmVyVHlwb2dyYXBoeUNvbXBvbmVudHMsXG4gICAgJ3ByZWZlci1sYXlvdXQtY29tcG9uZW50cyc6IHByZWZlckxheW91dENvbXBvbmVudHMsXG4gICAgJ25vLWFyYml0cmFyeS1jb2xvcnMnOiBub0FyYml0cmFyeUNvbG9ycyxcbiAgICAnbm8tcmF3LWNvbG9ycyc6IG5vUmF3Q29sb3JzLFxuICAgICduby1jcm9zcy16b25lLWltcG9ydHMnOiBub0Nyb3NzWm9uZUltcG9ydHMsXG4gICAgJ25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInOiBub05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyLFxuICAgICduby1jb21wb25lbnQtaW4tYmxvY2tzJzogbm9Db21wb25lbnRJbkJsb2NrcyxcbiAgICAncHJlZmVyLWxpc3QtY29tcG9uZW50cyc6IHByZWZlckxpc3RDb21wb25lbnRzLFxuICAgICduby1uYXRpdmUtZGF0ZSc6IG5vTmF0aXZlRGF0ZSxcbiAgICAncmVxdWlyZS1jYW5vbi1zZXR1cCc6IHJlcXVpcmVDYW5vblNldHVwLFxuICAgICduby1jbGFzc25hbWVzLXBhY2thZ2UnOiBub0NsYXNzbmFtZXNQYWNrYWdlLFxuICAgICdwcmVmZXItYWxpYXMtaW1wb3J0cyc6IHByZWZlckFsaWFzSW1wb3J0cyxcbiAgICAnbm8taW5saW5lLXN2Zyc6IG5vSW5saW5lU3ZnLFxuICB9LFxuICAvKipcbiAgICogUmVjb21tZW5kZWQgcnVsZSBjb25maWd1cmF0aW9ucyAtIHNwcmVhZCBpbnRvIHlvdXIgRVNMaW50IGNvbmZpZ1xuICAgKiBAZXhhbXBsZSBydWxlczogeyAuLi5nYWxsb3AucmVjb21tZW5kZWQgfVxuICAgKi9cbiAgcmVjb21tZW5kZWQsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpblxuIl19
|
|
@@ -41,14 +41,6 @@ const REQUIRED_SCRIPTS = {
|
|
|
41
41
|
contains: 'gallop audit',
|
|
42
42
|
definition: '"audit:json": "gallop audit --json"',
|
|
43
43
|
},
|
|
44
|
-
'generate:ai-rules': {
|
|
45
|
-
contains: 'gallop generate',
|
|
46
|
-
definition: '"generate:ai-rules": "gallop generate .cursorrules && gallop generate .github/copilot-instructions.md"',
|
|
47
|
-
},
|
|
48
|
-
'update:canon': {
|
|
49
|
-
contains: '@gallop.software/canon',
|
|
50
|
-
definition: '"update:canon": "npm update @gallop.software/canon"',
|
|
51
|
-
},
|
|
52
44
|
};
|
|
53
45
|
const rule = {
|
|
54
46
|
meta: {
|
|
@@ -137,4 +129,4 @@ export function resetReported() {
|
|
|
137
129
|
hasReported = false;
|
|
138
130
|
}
|
|
139
131
|
export default rule;
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS1jYW5vbi1zZXR1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lc2xpbnQvcnVsZXMvcmVxdWlyZS1jYW5vbi1zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN4QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFBO0FBQ3ZDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUxQyxvREFBb0Q7QUFDcEQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFBO0FBRXZCLDRCQUE0QjtBQUM1QixNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUE7QUFFaEUsdUhBQXVIO0FBQ3ZILE1BQU0sZ0JBQWdCLEdBQTZEO0lBQ2pGLE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFVBQVUsRUFBRSxrQkFBa0I7S0FDL0I7SUFDRCxLQUFLLEVBQUU7UUFDTCxRQUFRLEVBQUUsU0FBUztRQUNuQixVQUFVLEVBQUUseURBQXlEO0tBQ3RFO0lBQ0QsSUFBSSxFQUFFO1FBQ0osUUFBUSxFQUFFLFFBQVE7UUFDbEIsVUFBVSxFQUFFLHVCQUF1QjtLQUNwQztJQUNELGFBQWEsRUFBRTtRQUNiLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFVBQVUsRUFBRSxpTEFBaUw7S0FDOUw7SUFDRCxFQUFFLEVBQUU7UUFDRixRQUFRLEVBQUUsS0FBSztRQUNmLFVBQVUsRUFBRSxzQkFBc0I7S0FDbkM7SUFDRCxLQUFLLEVBQUU7UUFDTCxRQUFRLEVBQUUsY0FBYztRQUN4QixVQUFVLEVBQUUseUJBQXlCO0tBQ3RDO0lBQ0QsY0FBYyxFQUFFO1FB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O29CQUNILENBQUM7b0JBRUQsZ0JBQWdCO29CQUNoQixLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQzt3QkFDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDOzRCQUN6QixPQUFPLENBQUMsTUFBTSxDQUFDO2dDQUNiLElBQUk7Z0NBQ0osU0FBUyxFQUFFLGVBQWU7Z0NBQzFCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFOzZCQUN6QyxDQUFDLENBQUE7d0JBQ0osQ0FBQzs2QkFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDOzRCQUNuRCxPQUFPLENBQUMsTUFBTSxDQUFDO2dDQUNiLElBQUk7Z0NBQ0osU0FBUyxFQUFFLGVBQWU7Z0NBQzFCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7NkJBQzdELENBQUMsQ0FBQTt3QkFDSixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1Asc0JBQXNCO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQUVELDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsYUFBYTtJQUMzQixXQUFXLEdBQUcsS0FBSyxDQUFBO0FBQ3JCLENBQUM7QUFFRCxlQUFlLElBQUksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCdcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgZ2V0Q2Fub25VcmwsIGdldENhbm9uUGF0dGVybiB9IGZyb20gJy4uL3V0aWxzL2Nhbm9uLmpzJ1xuXG5jb25zdCBSVUxFX05BTUUgPSAncmVxdWlyZS1jYW5vbi1zZXR1cCdcbmNvbnN0IHBhdHRlcm4gPSBnZXRDYW5vblBhdHRlcm4oUlVMRV9OQU1FKVxuXG4vLyBUcmFjayBpZiB3ZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIGZvciB0aGlzIGxpbnQgcnVuXG5sZXQgaGFzUmVwb3J0ZWQgPSBmYWxzZVxuXG4vLyBSZXF1aXJlZCBkZXYgZGVwZW5kZW5jaWVzXG5jb25zdCBSRVFVSVJFRF9ERVBFTkRFTkNJRVMgPSBbJ2tuaXAnLCAnQGdhbGxvcC5zb2Z0d2FyZS9jYW5vbiddXG5cbi8vIFJlcXVpcmVkIG5wbSBzY3JpcHRzIChrZXkgPSBzY3JpcHQgbmFtZSwgdmFsdWUgPSB7IGNvbnRhaW5zOiBzdHJpbmcgdG8gY2hlY2sgZm9yLCBkZWZpbml0aW9uOiBleGFjdCBzY3JpcHQgdG8gYWRkIH0pXG5jb25zdCBSRVFVSVJFRF9TQ1JJUFRTOiBSZWNvcmQ8c3RyaW5nLCB7IGNvbnRhaW5zOiBzdHJpbmc7IGRlZmluaXRpb246IHN0cmluZyB9PiA9IHtcbiAgdW51c2VkOiB7XG4gICAgY29udGFpbnM6ICdrbmlwJyxcbiAgICBkZWZpbml0aW9uOiAnXCJ1bnVzZWRcIjogXCJrbmlwXCInLFxuICB9LFxuICBjaGVjazoge1xuICAgIGNvbnRhaW5zOiAnbnBtIHJ1bicsXG4gICAgZGVmaW5pdGlvbjogJ1wiY2hlY2tcIjogXCJucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB0cyAmJiBucG0gcnVuIHVudXNlZFwiJyxcbiAgfSxcbiAgbGludDoge1xuICAgIGNvbnRhaW5zOiAnZXNsaW50JyxcbiAgICBkZWZpbml0aW9uOiAnXCJsaW50XCI6IFwiZXNsaW50IHNyYy9cIicsXG4gIH0sXG4gICdsaW50OmdhbGxvcCc6IHtcbiAgICBjb250YWluczogJ2VzbGludCcsXG4gICAgZGVmaW5pdGlvbjogYFwibGludDpnYWxsb3BcIjogXCJlc2xpbnQgJ3NyYy9hcHAvKiovX2Jsb2Nrcy8nIC0tcnVsZSAnZ2FsbG9wL25vLWNsaWVudC1ibG9ja3M6IHdhcm4nIC0tcnVsZSAnZ2FsbG9wL25vLWNvbnRhaW5lci1pbi1zZWN0aW9uOiB3YXJuJyAtLXJ1bGUgJ2dhbGxvcC9wcmVmZXItY29tcG9uZW50LXByb3BzOiB3YXJuJ1wiYCxcbiAgfSxcbiAgdHM6IHtcbiAgICBjb250YWluczogJ3RzYycsXG4gICAgZGVmaW5pdGlvbjogJ1widHNcIjogXCJ0c2MgLS1ub0VtaXRcIicsXG4gIH0sXG4gIGF1ZGl0OiB7XG4gICAgY29udGFpbnM6ICdnYWxsb3AgYXVkaXQnLFxuICAgIGRlZmluaXRpb246ICdcImF1ZGl0XCI6IFwiZ2FsbG9wIGF1ZGl0XCInLFxuICB9LFxuICAnYXVkaXQ6c3RyaWN0Jzoge1xuICAgIGNvbnRhaW5zOiAnZ2FsbG9wIGF1ZGl0JyxcbiAgICBkZWZpbml0aW9uOiAnXCJhdWRpdDpzdHJpY3RcIjogXCJnYWxsb3AgYXVkaXQgLS1zdHJpY3RcIicsXG4gIH0sXG4gICdhdWRpdDpqc29uJzoge1xuICAgIGNvbnRhaW5zOiAnZ2FsbG9wIGF1ZGl0JyxcbiAgICBkZWZpbml0aW9uOiAnXCJhdWRpdDpqc29uXCI6IFwiZ2FsbG9wIGF1ZGl0IC0tanNvblwiJyxcbiAgfSxcbiAgJ2dlbmVyYXRlOmFpLXJ1bGVzJzoge1xuICAgIGNvbnRhaW5zOiAnZ2FsbG9wIGdlbmVyYXRlJyxcbiAgICBkZWZpbml0aW9uOiAnXCJnZW5lcmF0ZTphaS1ydWxlc1wiOiBcImdhbGxvcCBnZW5lcmF0ZSAuY3Vyc29ycnVsZXMgJiYgZ2FsbG9wIGdlbmVyYXRlIC5naXRodWIvY29waWxvdC1pbnN0cnVjdGlvbnMubWRcIicsXG4gIH0sXG4gICd1cGRhdGU6Y2Fub24nOiB7XG4gICAgY29udGFpbnM6ICdAZ2FsbG9wLnNvZnR3YXJlL2Nhbm9uJyxcbiAgICBkZWZpbml0aW9uOiAnXCJ1cGRhdGU6Y2Fub25cIjogXCJucG0gdXBkYXRlIEBnYWxsb3Auc29mdHdhcmUvY2Fub25cIicsXG4gIH0sXG59XG5cbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogcGF0dGVybj8uc3VtbWFyeSB8fCAnUmVxdWlyZSBDYW5vbiBzZXR1cCBpbiBwYWNrYWdlLmpzb24nLFxuICAgICAgcmVjb21tZW5kZWQ6IHRydWUsXG4gICAgICB1cmw6IGdldENhbm9uVXJsKFJVTEVfTkFNRSksXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgbWlzc2luZ0RlcGVuZGVuY3k6IGBbQ2Fub25dIE1pc3NpbmcgcmVxdWlyZWQgZGVwZW5kZW5jeTogXCJ7e2RlcH19XCIuIFJ1bjogbnBtIGluc3RhbGwgLUQge3tkZXB9fWAsXG4gICAgICBtaXNzaW5nU2NyaXB0OiBgW0Nhbm9uXSBNaXNzaW5nIHJlcXVpcmVkIG5wbSBzY3JpcHQgXCJ7e3NjcmlwdH19XCIuIEFkZCB0byBwYWNrYWdlLmpzb24gc2NyaXB0czoge3tkZWZpbml0aW9ufX1gLFxuICAgICAgaW52YWxpZFNjcmlwdDogYFtDYW5vbl0gU2NyaXB0IFwie3tzY3JpcHR9fVwiIHNob3VsZCBjb250YWluIFwie3tleHBlY3RlZH19XCIuIEV4cGVjdGVkOiB7e2RlZmluaXRpb259fWAsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgLy8gT25seSBjaGVjayBvbmNlIHBlciBsaW50IHJ1biwgb24gdGhlIGZpcnN0IGZpbGVcbiAgICBpZiAoaGFzUmVwb3J0ZWQpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHByb2plY3Qgcm9vdCAod2hlcmUgcGFja2FnZS5qc29uIGlzKVxuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5maWxlbmFtZSB8fCBjb250ZXh0LmdldEZpbGVuYW1lKClcbiAgICBsZXQgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGVuYW1lKVxuICAgIGxldCBwYWNrYWdlSnNvblBhdGggPSAnJ1xuICAgIFxuICAgIC8vIFdhbGsgdXAgdG8gZmluZCBwYWNrYWdlLmpzb25cbiAgICB3aGlsZSAoZGlyICE9PSBwYXRoLmRpcm5hbWUoZGlyKSkge1xuICAgICAgY29uc3QgY2FuZGlkYXRlID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhjYW5kaWRhdGUpKSB7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aCA9IGNhbmRpZGF0ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZGlyID0gcGF0aC5kaXJuYW1lKGRpcilcbiAgICB9XG5cbiAgICBpZiAoIXBhY2thZ2VKc29uUGF0aCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFByb2dyYW0obm9kZSkge1xuICAgICAgICBpZiAoaGFzUmVwb3J0ZWQpIHJldHVyblxuICAgICAgICBoYXNSZXBvcnRlZCA9IHRydWVcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKVxuICAgICAgICAgIGNvbnN0IGRldkRlcHMgPSBwYWNrYWdlSnNvbi5kZXZEZXBlbmRlbmNpZXMgfHwge31cbiAgICAgICAgICBjb25zdCBkZXBzID0gcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzIHx8IHt9XG4gICAgICAgICAgY29uc3QgYWxsRGVwcyA9IHsgLi4uZGVwcywgLi4uZGV2RGVwcyB9XG4gICAgICAgICAgY29uc3Qgc2NyaXB0cyA9IHBhY2thZ2VKc29uLnNjcmlwdHMgfHwge31cblxuICAgICAgICAgIC8vIENoZWNrIGRlcGVuZGVuY2llc1xuICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIFJFUVVJUkVEX0RFUEVOREVOQ0lFUykge1xuICAgICAgICAgICAgaWYgKCFhbGxEZXBzW2RlcF0pIHtcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiAnbWlzc2luZ0RlcGVuZGVuY3knLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgZGVwIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgc2NyaXB0c1xuICAgICAgICAgIGZvciAoY29uc3QgW3NjcmlwdE5hbWUsIHsgY29udGFpbnMsIGRlZmluaXRpb24gfV0gb2YgT2JqZWN0LmVudHJpZXMoUkVRVUlSRURfU0NSSVBUUykpIHtcbiAgICAgICAgICAgIGlmICghc2NyaXB0c1tzY3JpcHROYW1lXSkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6ICdtaXNzaW5nU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHNjcmlwdDogc2NyaXB0TmFtZSwgZGVmaW5pdGlvbiB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICghc2NyaXB0c1tzY3JpcHROYW1lXS5pbmNsdWRlcyhjb250YWlucykpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiAnaW52YWxpZFNjcmlwdCcsXG4gICAgICAgICAgICAgICAgZGF0YTogeyBzY3JpcHQ6IHNjcmlwdE5hbWUsIGV4cGVjdGVkOiBjb250YWlucywgZGVmaW5pdGlvbiB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlIHBhcnNlIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH1cbiAgfSxcbn1cblxuLy8gUmVzZXQgdGhlIGZsYWcgd2hlbiB0aGUgbW9kdWxlIGlzIHJlbG9hZGVkIChmb3Igd2F0Y2ggbW9kZSlcbmV4cG9ydCBmdW5jdGlvbiByZXNldFJlcG9ydGVkKCkge1xuICBoYXNSZXBvcnRlZCA9IGZhbHNlXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJ1bGVcbiJdfQ==
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS1jYW5vbi1zZXR1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lc2xpbnQvcnVsZXMvcmVxdWlyZS1jYW5vbi1zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN4QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFBO0FBQ3ZDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUxQyxvREFBb0Q7QUFDcEQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFBO0FBRXZCLDRCQUE0QjtBQUM1QixNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUE7QUFFaEUsdUhBQXVIO0FBQ3ZILE1BQU0sZ0JBQWdCLEdBQTZEO0lBQ2pGLE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFVBQVUsRUFBRSxrQkFBa0I7S0FDL0I7SUFDRCxLQUFLLEVBQUU7UUFDTCxRQUFRLEVBQUUsU0FBUztRQUNuQixVQUFVLEVBQUUseURBQXlEO0tBQ3RFO0lBQ0QsSUFBSSxFQUFFO1FBQ0osUUFBUSxFQUFFLFFBQVE7UUFDbEIsVUFBVSxFQUFFLHVCQUF1QjtLQUNwQztJQUNELGFBQWEsRUFBRTtRQUNiLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFVBQVUsRUFBRSxpTEFBaUw7S0FDOUw7SUFDRCxFQUFFLEVBQUU7UUFDRixRQUFRLEVBQUUsS0FBSztRQUNmLFVBQVUsRUFBRSxzQkFBc0I7S0FDbkM7SUFDRCxLQUFLLEVBQUU7UUFDTCxRQUFRLEVBQUUsY0FBYztRQUN4QixVQUFVLEVBQUUseUJBQXlCO0tBQ3RDO0lBQ0QsY0FBYyxFQUFFO1FB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QkFDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDOzRCQUN6QixPQUFPLENBQUMsTUFBTSxDQUFDO2dDQUNiLElBQUk7Z0NBQ0osU0FBUyxFQUFFLGVBQWU7Z0NBQzFCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFOzZCQUN6QyxDQUFDLENBQUE7d0JBQ0osQ0FBQzs2QkFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDOzRCQUNuRCxPQUFPLENBQUMsTUFBTSxDQUFDO2dDQUNiLElBQUk7Z0NBQ0osU0FBUyxFQUFFLGVBQWU7Z0NBQzFCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7NkJBQzdELENBQUMsQ0FBQTt3QkFDSixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1Asc0JBQXNCO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQUVELDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsYUFBYTtJQUMzQixXQUFXLEdBQUcsS0FBSyxDQUFBO0FBQ3JCLENBQUM7QUFFRCxlQUFlLElBQUksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCdcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgZ2V0Q2Fub25VcmwsIGdldENhbm9uUGF0dGVybiB9IGZyb20gJy4uL3V0aWxzL2Nhbm9uLmpzJ1xuXG5jb25zdCBSVUxFX05BTUUgPSAncmVxdWlyZS1jYW5vbi1zZXR1cCdcbmNvbnN0IHBhdHRlcm4gPSBnZXRDYW5vblBhdHRlcm4oUlVMRV9OQU1FKVxuXG4vLyBUcmFjayBpZiB3ZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIGZvciB0aGlzIGxpbnQgcnVuXG5sZXQgaGFzUmVwb3J0ZWQgPSBmYWxzZVxuXG4vLyBSZXF1aXJlZCBkZXYgZGVwZW5kZW5jaWVzXG5jb25zdCBSRVFVSVJFRF9ERVBFTkRFTkNJRVMgPSBbJ2tuaXAnLCAnQGdhbGxvcC5zb2Z0d2FyZS9jYW5vbiddXG5cbi8vIFJlcXVpcmVkIG5wbSBzY3JpcHRzIChrZXkgPSBzY3JpcHQgbmFtZSwgdmFsdWUgPSB7IGNvbnRhaW5zOiBzdHJpbmcgdG8gY2hlY2sgZm9yLCBkZWZpbml0aW9uOiBleGFjdCBzY3JpcHQgdG8gYWRkIH0pXG5jb25zdCBSRVFVSVJFRF9TQ1JJUFRTOiBSZWNvcmQ8c3RyaW5nLCB7IGNvbnRhaW5zOiBzdHJpbmc7IGRlZmluaXRpb246IHN0cmluZyB9PiA9IHtcbiAgdW51c2VkOiB7XG4gICAgY29udGFpbnM6ICdrbmlwJyxcbiAgICBkZWZpbml0aW9uOiAnXCJ1bnVzZWRcIjogXCJrbmlwXCInLFxuICB9LFxuICBjaGVjazoge1xuICAgIGNvbnRhaW5zOiAnbnBtIHJ1bicsXG4gICAgZGVmaW5pdGlvbjogJ1wiY2hlY2tcIjogXCJucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB0cyAmJiBucG0gcnVuIHVudXNlZFwiJyxcbiAgfSxcbiAgbGludDoge1xuICAgIGNvbnRhaW5zOiAnZXNsaW50JyxcbiAgICBkZWZpbml0aW9uOiAnXCJsaW50XCI6IFwiZXNsaW50IHNyYy9cIicsXG4gIH0sXG4gICdsaW50OmdhbGxvcCc6IHtcbiAgICBjb250YWluczogJ2VzbGludCcsXG4gICAgZGVmaW5pdGlvbjogYFwibGludDpnYWxsb3BcIjogXCJlc2xpbnQgJ3NyYy9hcHAvKiovX2Jsb2Nrcy8nIC0tcnVsZSAnZ2FsbG9wL25vLWNsaWVudC1ibG9ja3M6IHdhcm4nIC0tcnVsZSAnZ2FsbG9wL25vLWNvbnRhaW5lci1pbi1zZWN0aW9uOiB3YXJuJyAtLXJ1bGUgJ2dhbGxvcC9wcmVmZXItY29tcG9uZW50LXByb3BzOiB3YXJuJ1wiYCxcbiAgfSxcbiAgdHM6IHtcbiAgICBjb250YWluczogJ3RzYycsXG4gICAgZGVmaW5pdGlvbjogJ1widHNcIjogXCJ0c2MgLS1ub0VtaXRcIicsXG4gIH0sXG4gIGF1ZGl0OiB7XG4gICAgY29udGFpbnM6ICdnYWxsb3AgYXVkaXQnLFxuICAgIGRlZmluaXRpb246ICdcImF1ZGl0XCI6IFwiZ2FsbG9wIGF1ZGl0XCInLFxuICB9LFxuICAnYXVkaXQ6c3RyaWN0Jzoge1xuICAgIGNvbnRhaW5zOiAnZ2FsbG9wIGF1ZGl0JyxcbiAgICBkZWZpbml0aW9uOiAnXCJhdWRpdDpzdHJpY3RcIjogXCJnYWxsb3AgYXVkaXQgLS1zdHJpY3RcIicsXG4gIH0sXG4gICdhdWRpdDpqc29uJzoge1xuICAgIGNvbnRhaW5zOiAnZ2FsbG9wIGF1ZGl0JyxcbiAgICBkZWZpbml0aW9uOiAnXCJhdWRpdDpqc29uXCI6IFwiZ2FsbG9wIGF1ZGl0IC0tanNvblwiJyxcbiAgfSxcbn1cblxuY29uc3QgcnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXR0ZXJuPy5zdW1tYXJ5IHx8ICdSZXF1aXJlIENhbm9uIHNldHVwIGluIHBhY2thZ2UuanNvbicsXG4gICAgICByZWNvbW1lbmRlZDogdHJ1ZSxcbiAgICAgIHVybDogZ2V0Q2Fub25VcmwoUlVMRV9OQU1FKSxcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBtaXNzaW5nRGVwZW5kZW5jeTogYFtDYW5vbl0gTWlzc2luZyByZXF1aXJlZCBkZXBlbmRlbmN5OiBcInt7ZGVwfX1cIi4gUnVuOiBucG0gaW5zdGFsbCAtRCB7e2RlcH19YCxcbiAgICAgIG1pc3NpbmdTY3JpcHQ6IGBbQ2Fub25dIE1pc3NpbmcgcmVxdWlyZWQgbnBtIHNjcmlwdCBcInt7c2NyaXB0fX1cIi4gQWRkIHRvIHBhY2thZ2UuanNvbiBzY3JpcHRzOiB7e2RlZmluaXRpb259fWAsXG4gICAgICBpbnZhbGlkU2NyaXB0OiBgW0Nhbm9uXSBTY3JpcHQgXCJ7e3NjcmlwdH19XCIgc2hvdWxkIGNvbnRhaW4gXCJ7e2V4cGVjdGVkfX1cIi4gRXhwZWN0ZWQ6IHt7ZGVmaW5pdGlvbn19YCxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICAvLyBPbmx5IGNoZWNrIG9uY2UgcGVyIGxpbnQgcnVuLCBvbiB0aGUgZmlyc3QgZmlsZVxuICAgIGlmIChoYXNSZXBvcnRlZCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgcHJvamVjdCByb290ICh3aGVyZSBwYWNrYWdlLmpzb24gaXMpXG4gICAgY29uc3QgZmlsZW5hbWUgPSBjb250ZXh0LmZpbGVuYW1lIHx8IGNvbnRleHQuZ2V0RmlsZW5hbWUoKVxuICAgIGxldCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZW5hbWUpXG4gICAgbGV0IHBhY2thZ2VKc29uUGF0aCA9ICcnXG4gICAgXG4gICAgLy8gV2FsayB1cCB0byBmaW5kIHBhY2thZ2UuanNvblxuICAgIHdoaWxlIChkaXIgIT09IHBhdGguZGlybmFtZShkaXIpKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSBwYXRoLmpvaW4oZGlyLCAncGFja2FnZS5qc29uJylcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoID0gY2FuZGlkYXRlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkaXIgPSBwYXRoLmRpcm5hbWUoZGlyKVxuICAgIH1cblxuICAgIGlmICghcGFja2FnZUpzb25QYXRoKSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgUHJvZ3JhbShub2RlKSB7XG4gICAgICAgIGlmIChoYXNSZXBvcnRlZCkgcmV0dXJuXG4gICAgICAgIGhhc1JlcG9ydGVkID0gdHJ1ZVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpXG4gICAgICAgICAgY29uc3QgZGV2RGVwcyA9IHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fVxuICAgICAgICAgIGNvbnN0IGRlcHMgPSBwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMgfHwge31cbiAgICAgICAgICBjb25zdCBhbGxEZXBzID0geyAuLi5kZXBzLCAuLi5kZXZEZXBzIH1cbiAgICAgICAgICBjb25zdCBzY3JpcHRzID0gcGFja2FnZUpzb24uc2NyaXB0cyB8fCB7fVxuXG4gICAgICAgICAgLy8gQ2hlY2sgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgUkVRVUlSRURfREVQRU5ERU5DSUVTKSB7XG4gICAgICAgICAgICBpZiAoIWFsbERlcHNbZGVwXSkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6ICdtaXNzaW5nRGVwZW5kZW5jeScsXG4gICAgICAgICAgICAgICAgZGF0YTogeyBkZXAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBzY3JpcHRzXG4gICAgICAgICAgZm9yIChjb25zdCBbc2NyaXB0TmFtZSwgeyBjb250YWlucywgZGVmaW5pdGlvbiB9XSBvZiBPYmplY3QuZW50cmllcyhSRVFVSVJFRF9TQ1JJUFRTKSkge1xuICAgICAgICAgICAgaWYgKCFzY3JpcHRzW3NjcmlwdE5hbWVdKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogJ21pc3NpbmdTY3JpcHQnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgc2NyaXB0OiBzY3JpcHROYW1lLCBkZWZpbml0aW9uIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzY3JpcHRzW3NjcmlwdE5hbWVdLmluY2x1ZGVzKGNvbnRhaW5zKSkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6ICdpbnZhbGlkU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHNjcmlwdDogc2NyaXB0TmFtZSwgZXhwZWN0ZWQ6IGNvbnRhaW5zLCBkZWZpbml0aW9uIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgcGFyc2UgZXJyb3JzXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuICB9LFxufVxuXG4vLyBSZXNldCB0aGUgZmxhZyB3aGVuIHRoZSBtb2R1bGUgaXMgcmVsb2FkZWQgKGZvciB3YXRjaCBtb2RlKVxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0UmVwb3J0ZWQoKSB7XG4gIGhhc1JlcG9ydGVkID0gZmFsc2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgcnVsZVxuIl19
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -99,4 +99,4 @@ export default {
|
|
|
99
99
|
isValidPattern,
|
|
100
100
|
getEnforcementStats,
|
|
101
101
|
};
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQTtBQThDekQseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBZ0IsTUFBcUIsQ0FBQTtBQUV2RCxpQkFBaUI7QUFDakIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUE7QUFFckMsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBYyxNQUFNLENBQUMsUUFBcUIsQ0FBQTtBQUUvRCwwQkFBMEI7QUFDMUIsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUE7QUFFdkQsMEJBQTBCO0FBQzFCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBZ0IsTUFBTSxDQUFDLFVBQXlCLENBQUE7QUFFdkU7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsRUFBVTtJQUNuQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7QUFDMUMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBeUI7SUFDN0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFBO0FBQ3hELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQTtBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFZO0lBQzVDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQTtBQUNoRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsRUFBVTtJQUNyQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7QUFDNUMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsV0FBbUI7SUFDekQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzNDLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDekIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUNsRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsRUFBVTtJQUN2QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7QUFDMUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxLQUFLLEdBQTJCLEVBQUUsQ0FBQTtJQUN4QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsaUJBQWlCO0FBQ2pCLGVBQWU7SUFDYixPQUFPO0lBQ1AsUUFBUTtJQUNSLFVBQVU7SUFDVixVQUFVO0lBQ1YsVUFBVTtJQUNWLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWix1QkFBdUI7SUFDdkIsY0FBYztJQUNkLG1CQUFtQjtDQUNwQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZ2FsbG9wL2Nhbm9uXG4gKlxuICogR2FsbG9wIENhbm9uXG4gKiBWZXJzaW9uZWQsIEFJLWNvbXBhdGlibGUsIGF1ZGl0YWJsZSB3ZWIgYXJjaGl0ZWN0dXJlIHBhdHRlcm5zXG4gKi9cblxuaW1wb3J0IHNjaGVtYSBmcm9tICcuLi9zY2hlbWEuanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9XG5cbi8vIFR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFBhdHRlcm4ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgZmlsZTogc3RyaW5nXG4gIGNhdGVnb3J5OiBQYXR0ZXJuQ2F0ZWdvcnlcbiAgc3RhdHVzOiAnc3RhYmxlJyB8ICdwcm9wb3NlZCcgfCAnZGVwcmVjYXRlZCdcbiAgZW5mb3JjZW1lbnQ6ICdlc2xpbnQnIHwgJ2RvY3VtZW50YXRpb24nIHwgJ2NpJ1xuICBydWxlOiBzdHJpbmcgfCBudWxsXG4gIHN1bW1hcnk6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhdGVnb3J5IHtcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEd1YXJhbnRlZSB7XG4gIGlkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHNpbmNlOiBzdHJpbmdcbiAgc3RhdHVzOiAnc3RhYmxlJyB8ICdwcm9wb3NlZCcgfCAnZGVwcmVjYXRlZCdcbiAgcGF0dGVybnM6IHN0cmluZ1tdXG59XG5cbmV4cG9ydCB0eXBlIFBhdHRlcm5DYXRlZ29yeSA9XG4gIHwgJ3JlbmRlcmluZydcbiAgfCAnbGF5b3V0J1xuICB8ICd0eXBvZ3JhcGh5J1xuICB8ICdzdHJ1Y3R1cmUnXG4gIHwgJ3N0eWxpbmcnXG4gIHwgJ2NvbXBvbmVudHMnXG4gIHwgJ3NlbydcblxuZXhwb3J0IGludGVyZmFjZSBDYW5vblNjaGVtYSB7XG4gIG5hbWU6IHN0cmluZ1xuICB2ZXJzaW9uOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBjYXRlZ29yaWVzOiBDYXRlZ29yeVtdXG4gIHBhdHRlcm5zOiBQYXR0ZXJuW11cbiAgZ3VhcmFudGVlczogR3VhcmFudGVlW11cbn1cblxuLy8gRXhwb3J0IHRoZSBmdWxsIHNjaGVtYVxuZXhwb3J0IGNvbnN0IGNhbm9uOiBDYW5vblNjaGVtYSA9IHNjaGVtYSBhcyBDYW5vblNjaGVtYVxuXG4vLyBFeHBvcnQgdmVyc2lvblxuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSBzY2hlbWEudmVyc2lvblxuXG4vLyBFeHBvcnQgcGF0dGVybnMgYXJyYXlcbmV4cG9ydCBjb25zdCBwYXR0ZXJuczogUGF0dGVybltdID0gc2NoZW1hLnBhdHRlcm5zIGFzIFBhdHRlcm5bXVxuXG4vLyBFeHBvcnQgY2F0ZWdvcmllcyBhcnJheVxuZXhwb3J0IGNvbnN0IGNhdGVnb3JpZXM6IENhdGVnb3J5W10gPSBzY2hlbWEuY2F0ZWdvcmllc1xuXG4vLyBFeHBvcnQgZ3VhcmFudGVlcyBhcnJheVxuZXhwb3J0IGNvbnN0IGd1YXJhbnRlZXM6IEd1YXJhbnRlZVtdID0gc2NoZW1hLmd1YXJhbnRlZXMgYXMgR3VhcmFudGVlW11cblxuLyoqXG4gKiBHZXQgYSBwYXR0ZXJuIGJ5IElEXG4gKiBAcGFyYW0gaWQgLSBQYXR0ZXJuIElEIChlLmcuLCBcIjAwMVwiLCBcIjAwMlwiKVxuICogQHJldHVybnMgUGF0dGVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0dGVybihpZDogc3RyaW5nKTogUGF0dGVybiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBwYXR0ZXJucy5maW5kKChwKSA9PiBwLmlkID09PSBpZClcbn1cblxuLyoqXG4gKiBHZXQgYWxsIHBhdHRlcm5zIGluIGEgY2F0ZWdvcnlcbiAqIEBwYXJhbSBjYXRlZ29yeSAtIENhdGVnb3J5IElEIChlLmcuLCBcInJlbmRlcmluZ1wiLCBcInR5cG9ncmFwaHlcIilcbiAqIEByZXR1cm5zIEFycmF5IG9mIHBhdHRlcm5zIGluIHRoYXQgY2F0ZWdvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdHRlcm5zQnlDYXRlZ29yeShjYXRlZ29yeTogUGF0dGVybkNhdGVnb3J5KTogUGF0dGVybltdIHtcbiAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcigocCkgPT4gcC5jYXRlZ29yeSA9PT0gY2F0ZWdvcnkpXG59XG5cbi8qKlxuICogR2V0IGFsbCBwYXR0ZXJucyBlbmZvcmNlZCBieSBFU0xpbnRcbiAqIEByZXR1cm5zIEFycmF5IG9mIEVTTGludC1lbmZvcmNlZCBwYXR0ZXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5mb3JjZWRQYXR0ZXJucygpOiBQYXR0ZXJuW10ge1xuICByZXR1cm4gcGF0dGVybnMuZmlsdGVyKChwKSA9PiBwLmVuZm9yY2VtZW50ID09PSAnZXNsaW50Jylcbn1cblxuLyoqXG4gKiBHZXQgYWxsIHBhdHRlcm5zIHdpdGggYSBzcGVjaWZpYyBFU0xpbnQgcnVsZVxuICogQHBhcmFtIHJ1bGUgLSBFU0xpbnQgcnVsZSBuYW1lIChlLmcuLCBcImdhbGxvcC9uby1jbGllbnQtYmxvY2tzXCIpXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwYXR0ZXJucyB1c2luZyB0aGF0IHJ1bGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdHRlcm5zQnlSdWxlKHJ1bGU6IHN0cmluZyk6IFBhdHRlcm5bXSB7XG4gIHJldHVybiBwYXR0ZXJucy5maWx0ZXIoKHApID0+IHAucnVsZSA9PT0gcnVsZSlcbn1cblxuLyoqXG4gKiBHZXQgYSBndWFyYW50ZWUgYnkgSURcbiAqIEBwYXJhbSBpZCAtIEd1YXJhbnRlZSBJRCAoZS5nLiwgXCJTRU9fU1RBQkxFXCIpXG4gKiBAcmV0dXJucyBHdWFyYW50ZWUgb2JqZWN0IG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEd1YXJhbnRlZShpZDogc3RyaW5nKTogR3VhcmFudGVlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGd1YXJhbnRlZXMuZmluZCgoZykgPT4gZy5pZCA9PT0gaWQpXG59XG5cbi8qKlxuICogR2V0IGFsbCBwYXR0ZXJucyBhc3NvY2lhdGVkIHdpdGggYSBndWFyYW50ZWVcbiAqIEBwYXJhbSBndWFyYW50ZWVJZCAtIEd1YXJhbnRlZSBJRCAoZS5nLiwgXCJTRU9fU1RBQkxFXCIpXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwYXR0ZXJucyB0aGF0IHN1cHBvcnQgdGhpcyBndWFyYW50ZWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdHRlcm5zRm9yR3VhcmFudGVlKGd1YXJhbnRlZUlkOiBzdHJpbmcpOiBQYXR0ZXJuW10ge1xuICBjb25zdCBndWFyYW50ZWUgPSBnZXRHdWFyYW50ZWUoZ3VhcmFudGVlSWQpXG4gIGlmICghZ3VhcmFudGVlKSByZXR1cm4gW11cbiAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcigocCkgPT4gZ3VhcmFudGVlLnBhdHRlcm5zLmluY2x1ZGVzKHAuaWQpKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcGF0dGVybiBJRCBpcyB2YWxpZFxuICogQHBhcmFtIGlkIC0gUGF0dGVybiBJRCB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUGF0dGVybihpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXR0ZXJucy5zb21lKChwKSA9PiBwLmlkID09PSBpZClcbn1cblxuLyoqXG4gKiBHZXQgcGF0dGVybiBjb3VudCBieSBlbmZvcmNlbWVudCB0eXBlXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBjb3VudHMgcGVyIGVuZm9yY2VtZW50IHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVuZm9yY2VtZW50U3RhdHMoKTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG4gIGNvbnN0IHN0YXRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgc3RhdHNbcGF0dGVybi5lbmZvcmNlbWVudF0gPSAoc3RhdHNbcGF0dGVybi5lbmZvcmNlbWVudF0gfHwgMCkgKyAxXG4gIH1cbiAgcmV0dXJuIHN0YXRzXG59XG5cbi8vIERlZmF1bHQgZXhwb3J0XG5leHBvcnQgZGVmYXVsdCB7XG4gIHZlcnNpb24sXG4gIHBhdHRlcm5zLFxuICBjYXRlZ29yaWVzLFxuICBndWFyYW50ZWVzLFxuICBnZXRQYXR0ZXJuLFxuICBnZXRQYXR0ZXJuc0J5Q2F0ZWdvcnksXG4gIGdldEVuZm9yY2VkUGF0dGVybnMsXG4gIGdldFBhdHRlcm5zQnlSdWxlLFxuICBnZXRHdWFyYW50ZWUsXG4gIGdldFBhdHRlcm5zRm9yR3VhcmFudGVlLFxuICBpc1ZhbGlkUGF0dGVybixcbiAgZ2V0RW5mb3JjZW1lbnRTdGF0cyxcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gallop.software/canon",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.32.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Gallop Canon - Architecture patterns, ESLint plugin, and CLI for template governance",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,10 +13,6 @@
|
|
|
13
13
|
"./eslint": {
|
|
14
14
|
"types": "./dist/eslint/index.d.ts",
|
|
15
15
|
"import": "./dist/eslint/index.js"
|
|
16
|
-
},
|
|
17
|
-
"./config": {
|
|
18
|
-
"types": "./dist/types/config.d.ts",
|
|
19
|
-
"import": "./dist/types/config.js"
|
|
20
16
|
}
|
|
21
17
|
},
|
|
22
18
|
"bin": {
|
|
@@ -22,14 +22,14 @@ Page files follow a consistent structure using `PageWrapper` and `generatePageMe
|
|
|
22
22
|
import { PageWrapper } from '@/components/page-wrapper'
|
|
23
23
|
import { generatePageMetadata, type PageMetadata } from '@/utils/page-helpers'
|
|
24
24
|
|
|
25
|
-
import
|
|
26
|
-
import
|
|
25
|
+
import Hero from './_blocks/hero'
|
|
26
|
+
import Services from './_blocks/services'
|
|
27
27
|
|
|
28
28
|
function Content() {
|
|
29
29
|
return (
|
|
30
30
|
<>
|
|
31
|
-
<
|
|
32
|
-
<
|
|
31
|
+
<Hero />
|
|
32
|
+
<Services />
|
|
33
33
|
</>
|
|
34
34
|
)
|
|
35
35
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
## Decision
|
|
9
9
|
|
|
10
|
-
Block files are co-located in `_blocks/` subdirectories alongside page routes. Files use `
|
|
10
|
+
Block files are co-located in `_blocks/` subdirectories alongside page routes. Files use descriptive kebab-case names (`hero.tsx`, `booking.tsx`, `contact-form.tsx`). When a page has multiple blocks of the same kind, the first is `{name}.tsx` and subsequent are `{name}-2.tsx`, `{name}-3.tsx`, etc. Function exports use PascalCase.
|
|
11
11
|
|
|
12
12
|
## Rationale
|
|
13
13
|
|
|
@@ -20,9 +20,9 @@ Block files are co-located in `_blocks/` subdirectories alongside page routes. F
|
|
|
20
20
|
|
|
21
21
|
### File Names
|
|
22
22
|
|
|
23
|
-
- Lowercase with hyphens: `hero.tsx`, `
|
|
24
|
-
-
|
|
25
|
-
-
|
|
23
|
+
- Lowercase with hyphens (kebab-case): `hero.tsx`, `booking.tsx`, `contact-form.tsx`
|
|
24
|
+
- Use descriptive names that reflect the block's content or purpose
|
|
25
|
+
- When a page has multiple blocks of the same kind, the first is `{name}.tsx`, subsequent are `{name}-2.tsx`, `{name}-3.tsx`, etc.
|
|
26
26
|
- Numbering based on JSX render order in the page
|
|
27
27
|
|
|
28
28
|
### Function Exports
|
|
@@ -36,56 +36,54 @@ Block files are co-located in `_blocks/` subdirectories alongside page routes. F
|
|
|
36
36
|
|
|
37
37
|
- Use relative paths from page.tsx: `import Hero from './_blocks/hero'`
|
|
38
38
|
|
|
39
|
-
## Block
|
|
39
|
+
## Common Block Names
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
Any descriptive kebab-case name is valid. These are common examples:
|
|
42
|
+
|
|
43
|
+
| Name | Description |
|
|
42
44
|
|------|-------------|
|
|
43
45
|
| `hero` | Hero/banner sections |
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
46
|
-
| `showcase` | Portfolio/gallery showcases |
|
|
47
|
-
| `cover` | Full-width image/video covers |
|
|
48
|
-
| `contact` | Contact forms and info |
|
|
46
|
+
| `call-to-action` | CTA sections |
|
|
47
|
+
| `services` | Services sections |
|
|
49
48
|
| `testimonial` | Testimonials |
|
|
49
|
+
| `cover` | Full-width image/video covers |
|
|
50
|
+
| `contact-form` | Contact forms |
|
|
51
|
+
| `contact-info` | Contact information |
|
|
52
|
+
| `overview` | Overview/intro sections |
|
|
53
|
+
| `booking` | Booking/reservation sections |
|
|
54
|
+
| `project` | Project showcase sections |
|
|
55
|
+
| `profile` | Profile/bio sections |
|
|
56
|
+
| `mission-values` | Mission and values sections |
|
|
57
|
+
| `design-philosophy` | Design philosophy sections |
|
|
58
|
+
| `accordion` | FAQ/accordion sections |
|
|
59
|
+
| `archive` | Archive/listing sections |
|
|
50
60
|
| `blog` | Blog-related sections |
|
|
51
61
|
| `pricing` | Pricing tables |
|
|
52
|
-
| `process` | Process/steps sections |
|
|
53
|
-
| `about` | About sections |
|
|
54
|
-
| `services` | Services sections |
|
|
55
|
-
| `call-to-action` | CTA sections |
|
|
56
62
|
| `partners` | Partner/logo clouds |
|
|
57
|
-
| `accordion` | FAQ/accordion sections |
|
|
58
|
-
| `archive` | Archive/listing sections |
|
|
59
|
-
| `application` | Job application forms |
|
|
60
|
-
| `business-info` | Business information |
|
|
61
|
-
| `sidebar` | Sidebar panels |
|
|
62
63
|
| `portfolio` | Portfolio grids |
|
|
63
64
|
| `form` | Form sections |
|
|
64
|
-
| `shopping` | Shopping/e-commerce sections |
|
|
65
65
|
|
|
66
66
|
## Examples
|
|
67
67
|
|
|
68
68
|
### Good
|
|
69
69
|
|
|
70
70
|
```
|
|
71
|
-
src/app/(default)/
|
|
71
|
+
src/app/(default)/contact/
|
|
72
72
|
├── page.tsx
|
|
73
73
|
└── _blocks/
|
|
74
74
|
├── hero.tsx → export default function Hero()
|
|
75
|
-
├──
|
|
76
|
-
├──
|
|
77
|
-
|
|
78
|
-
└── testimonial.tsx → export default function Testimonial()
|
|
75
|
+
├── contact-form.tsx → export default function ContactForm()
|
|
76
|
+
├── contact-info.tsx → export default function ContactInfo()
|
|
77
|
+
└── call-to-action.tsx → export default function CallToAction()
|
|
79
78
|
|
|
80
|
-
src/app/(default)/
|
|
79
|
+
src/app/(default)/portfolio/
|
|
81
80
|
├── page.tsx
|
|
82
81
|
└── _blocks/
|
|
83
82
|
├── hero.tsx → export default function Hero()
|
|
84
|
-
├──
|
|
85
|
-
├──
|
|
86
|
-
├──
|
|
87
|
-
|
|
88
|
-
└── testimonial.tsx → export default function Testimonial()
|
|
83
|
+
├── project.tsx → export default function Project()
|
|
84
|
+
├── project-2.tsx → export default function Project2()
|
|
85
|
+
├── project-3.tsx → export default function Project3()
|
|
86
|
+
└── call-to-action.tsx → export default function CallToAction()
|
|
89
87
|
```
|
|
90
88
|
|
|
91
89
|
### Bad
|
|
@@ -98,7 +96,7 @@ src/blocks/
|
|
|
98
96
|
|
|
99
97
|
src/app/(default)/furniture/_blocks/
|
|
100
98
|
├── hero-1.tsx ❌ Unnecessary number for singleton
|
|
101
|
-
├──
|
|
99
|
+
├── CTA.tsx ❌ Not kebab-case
|
|
102
100
|
```
|
|
103
101
|
|
|
104
102
|
## Enforcement
|
package/schema.json
CHANGED
|
@@ -1,512 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { version, patterns, guarantees } from '../../index.js';
|
|
4
|
-
import { loadConfig } from '../config.js';
|
|
5
|
-
/**
|
|
6
|
-
* Detect output format from filename
|
|
7
|
-
*/
|
|
8
|
-
function detectFormat(filename) {
|
|
9
|
-
const base = path.basename(filename).toLowerCase();
|
|
10
|
-
if (base === 'claude.md')
|
|
11
|
-
return 'claude';
|
|
12
|
-
if (base === 'copilot-instructions.md')
|
|
13
|
-
return 'copilot';
|
|
14
|
-
return 'cursorrules';
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Get all output targets when generating all files
|
|
18
|
-
*/
|
|
19
|
-
function getAllTargets() {
|
|
20
|
-
return [
|
|
21
|
-
{ output: '.cursorrules', format: 'cursorrules' },
|
|
22
|
-
{ output: 'CLAUDE.md', format: 'claude' },
|
|
23
|
-
{ output: '.github/copilot-instructions.md', format: 'copilot' },
|
|
24
|
-
];
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Read a pattern markdown file and extract sections
|
|
28
|
-
*/
|
|
29
|
-
function readPatternFile(patternFile) {
|
|
30
|
-
const possiblePaths = [
|
|
31
|
-
path.join(process.cwd(), 'node_modules/@gallop.software/canon', patternFile),
|
|
32
|
-
// Fallback for development
|
|
33
|
-
path.join(import.meta.dirname, '../../../', patternFile),
|
|
34
|
-
];
|
|
35
|
-
for (const filePath of possiblePaths) {
|
|
36
|
-
if (fs.existsSync(filePath)) {
|
|
37
|
-
return fs.readFileSync(filePath, 'utf-8');
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Extract examples from pattern markdown
|
|
44
|
-
*/
|
|
45
|
-
function extractExamples(content) {
|
|
46
|
-
const good = [];
|
|
47
|
-
const bad = [];
|
|
48
|
-
const goodMatch = content.match(/### Good\s*\n```[\s\S]*?```/g);
|
|
49
|
-
const badMatch = content.match(/### Bad\s*\n```[\s\S]*?```/g);
|
|
50
|
-
if (goodMatch) {
|
|
51
|
-
for (const match of goodMatch) {
|
|
52
|
-
const code = match.replace(/### Good\s*\n/, '').trim();
|
|
53
|
-
good.push(code);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (badMatch) {
|
|
57
|
-
for (const match of badMatch) {
|
|
58
|
-
const code = match.replace(/### Bad\s*\n/, '').trim();
|
|
59
|
-
bad.push(code);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return { good, bad };
|
|
63
|
-
}
|
|
64
|
-
// ─── Shared section generators ────────────────────────────────────────────
|
|
65
|
-
function generateHeader(format) {
|
|
66
|
-
const lines = [];
|
|
67
|
-
if (format === 'claude') {
|
|
68
|
-
lines.push(`# CLAUDE.md — Project-Specific Intelligence`);
|
|
69
|
-
lines.push('');
|
|
70
|
-
lines.push(`> Auto-generated from Gallop Canon v${version}. Do not edit manually.`);
|
|
71
|
-
lines.push(`> Regenerate with: npm run generate:ai-rules`);
|
|
72
|
-
}
|
|
73
|
-
else if (format === 'copilot') {
|
|
74
|
-
lines.push(`# Gallop Canon v${version} - Copilot Instructions`);
|
|
75
|
-
lines.push('');
|
|
76
|
-
lines.push('This file is auto-generated from @gallop.software/canon. Do not edit manually.');
|
|
77
|
-
lines.push('Regenerate with: npm run generate:ai-rules');
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
lines.push(`# Gallop Canon v${version} - AI Rules`);
|
|
81
|
-
lines.push('');
|
|
82
|
-
lines.push('This file is auto-generated from @gallop.software/canon. Do not edit manually.');
|
|
83
|
-
lines.push('Regenerate with: npm run generate:ai-rules');
|
|
84
|
-
}
|
|
85
|
-
lines.push('');
|
|
86
|
-
return lines;
|
|
87
|
-
}
|
|
88
|
-
function generateTechStack() {
|
|
89
|
-
return [
|
|
90
|
-
'## Tech Stack',
|
|
91
|
-
'',
|
|
92
|
-
'- Next.js 16 with App Router',
|
|
93
|
-
'- React 19',
|
|
94
|
-
'- TypeScript',
|
|
95
|
-
'- Tailwind CSS v4',
|
|
96
|
-
'- clsx for conditional class names',
|
|
97
|
-
'',
|
|
98
|
-
];
|
|
99
|
-
}
|
|
100
|
-
function generateEnforcedPatterns(format) {
|
|
101
|
-
const lines = [];
|
|
102
|
-
const enforcedPatterns = patterns.filter(p => p.enforcement === 'eslint' && p.rule);
|
|
103
|
-
lines.push('## Enforced Patterns (ESLint)');
|
|
104
|
-
lines.push('');
|
|
105
|
-
lines.push('These patterns are enforced by `@gallop.software/canon/eslint`. Violations will be flagged.');
|
|
106
|
-
lines.push('');
|
|
107
|
-
if (format === 'claude') {
|
|
108
|
-
// Claude can run lint — brief list with rule names
|
|
109
|
-
for (const pattern of enforcedPatterns) {
|
|
110
|
-
lines.push(`- **${pattern.id}: ${pattern.title}** — \`${pattern.rule}\` — ${pattern.summary}`);
|
|
111
|
-
}
|
|
112
|
-
lines.push('');
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
// Cursorrules and Copilot: full examples
|
|
116
|
-
for (const pattern of enforcedPatterns) {
|
|
117
|
-
lines.push(`### ${pattern.id}: ${pattern.title}`);
|
|
118
|
-
lines.push('');
|
|
119
|
-
lines.push(pattern.summary);
|
|
120
|
-
lines.push('');
|
|
121
|
-
lines.push(`- **ESLint Rule:** \`${pattern.rule}\``);
|
|
122
|
-
lines.push(`- **Category:** ${pattern.category}`);
|
|
123
|
-
lines.push('');
|
|
124
|
-
if (format === 'cursorrules') {
|
|
125
|
-
const content = readPatternFile(pattern.file);
|
|
126
|
-
if (content) {
|
|
127
|
-
const { good, bad } = extractExamples(content);
|
|
128
|
-
if (bad.length > 0) {
|
|
129
|
-
lines.push('**Bad:**');
|
|
130
|
-
lines.push('');
|
|
131
|
-
lines.push(bad[0]);
|
|
132
|
-
lines.push('');
|
|
133
|
-
}
|
|
134
|
-
if (good.length > 0) {
|
|
135
|
-
lines.push('**Good:**');
|
|
136
|
-
lines.push('');
|
|
137
|
-
lines.push(good[0]);
|
|
138
|
-
lines.push('');
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return lines;
|
|
145
|
-
}
|
|
146
|
-
function generateDocPatterns() {
|
|
147
|
-
const lines = [];
|
|
148
|
-
const docPatterns = patterns.filter(p => p.enforcement === 'documentation');
|
|
149
|
-
lines.push('## Documentation Patterns');
|
|
150
|
-
lines.push('');
|
|
151
|
-
lines.push('These patterns are not enforced by ESLint but should be followed.');
|
|
152
|
-
lines.push('');
|
|
153
|
-
for (const pattern of docPatterns) {
|
|
154
|
-
lines.push(`### ${pattern.id}: ${pattern.title}`);
|
|
155
|
-
lines.push('');
|
|
156
|
-
lines.push(pattern.summary);
|
|
157
|
-
lines.push('');
|
|
158
|
-
}
|
|
159
|
-
return lines;
|
|
160
|
-
}
|
|
161
|
-
function generateGuarantees() {
|
|
162
|
-
const lines = [];
|
|
163
|
-
lines.push('## Canon Guarantees');
|
|
164
|
-
lines.push('');
|
|
165
|
-
lines.push('Following these patterns provides these guarantees:');
|
|
166
|
-
lines.push('');
|
|
167
|
-
for (const guarantee of guarantees) {
|
|
168
|
-
lines.push(`- **${guarantee.name}** (${guarantee.id}): Patterns ${guarantee.patterns.join(', ')}`);
|
|
169
|
-
}
|
|
170
|
-
lines.push('');
|
|
171
|
-
return lines;
|
|
172
|
-
}
|
|
173
|
-
function generateComponentReference(config) {
|
|
174
|
-
const lines = [];
|
|
175
|
-
lines.push('## Component Quick Reference');
|
|
176
|
-
lines.push('');
|
|
177
|
-
if (config?.components?.length) {
|
|
178
|
-
for (const comp of config.components) {
|
|
179
|
-
const propsStr = comp.props?.length ? ` - props: ${comp.props.map(p => `\`${p}\``).join(', ')}` : '';
|
|
180
|
-
const noteStr = comp.notes ? ` (${comp.notes})` : '';
|
|
181
|
-
lines.push(`- \`${comp.name}\`${propsStr}${noteStr}`);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
// Fallback: hardcoded component list
|
|
186
|
-
lines.push('### Typography');
|
|
187
|
-
lines.push('- `Heading` - props: `as`, `color`, `margin`, `fontSize`, `fontWeight`, `textAlign`');
|
|
188
|
-
lines.push('- `Paragraph` - props: `color`, `margin`, `fontSize`, `lineHeight`, `textAlign`');
|
|
189
|
-
lines.push('- `Span` - props: `color`, `margin`, `fontSize` (inline text, mb-0 default)');
|
|
190
|
-
lines.push('- `Label` - props: `color`, `margin`, `fontSize`, `fontWeight`, `textAlign`');
|
|
191
|
-
lines.push('- `Quote` - props: `variant`, `color`, `margin`, `fontSize`, `fontWeight`, `textAlign`');
|
|
192
|
-
lines.push('');
|
|
193
|
-
lines.push('### Layout');
|
|
194
|
-
lines.push('- `Section` - semantic section wrapper');
|
|
195
|
-
lines.push('- `Columns` - grid layout, props: `cols`, `gap`, `align`');
|
|
196
|
-
lines.push('- `Column` - column child');
|
|
197
|
-
lines.push('');
|
|
198
|
-
lines.push('### Interactive');
|
|
199
|
-
lines.push('- `Button` - props: `href`, `variant`, `icon`, `iconPlacement`, `margin`');
|
|
200
|
-
lines.push('- `Icon` - Iconify icon wrapper');
|
|
201
|
-
}
|
|
202
|
-
lines.push('');
|
|
203
|
-
return lines;
|
|
204
|
-
}
|
|
205
|
-
function generateDoNotSection(config) {
|
|
206
|
-
const lines = [];
|
|
207
|
-
lines.push('## Do NOT');
|
|
208
|
-
lines.push('');
|
|
209
|
-
// Default rules always present
|
|
210
|
-
lines.push("- Use `'use client'` in blocks - extract to components");
|
|
211
|
-
lines.push('- Use raw `<p>`, `<span>`, or `<h1>`–`<h6>` - use Paragraph/Span/Heading components');
|
|
212
|
-
lines.push('- Use className for margin/color/fontSize when component has props');
|
|
213
|
-
lines.push('- Use Container inside Section - Section already provides containment');
|
|
214
|
-
lines.push('- Use `classnames` package - use `clsx` instead');
|
|
215
|
-
lines.push('- Use inline styles for hover states - use Tailwind classes');
|
|
216
|
-
lines.push('- Use native `IntersectionObserver` - use `react-intersection-observer` package');
|
|
217
|
-
lines.push('- Use inline `<svg>` in blocks - use the Icon component with Iconify icons');
|
|
218
|
-
lines.push('- Use deep relative imports (`../../`) - use `@/` alias imports');
|
|
219
|
-
// Template-specific rules
|
|
220
|
-
if (config?.rules) {
|
|
221
|
-
for (const rule of config.rules) {
|
|
222
|
-
if (rule.type === 'doNot') {
|
|
223
|
-
lines.push(`- ${rule.rule}`);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
lines.push('');
|
|
228
|
-
return lines;
|
|
229
|
-
}
|
|
230
|
-
function generateFileAuthority() {
|
|
231
|
-
const lines = [];
|
|
232
|
-
lines.push('## File & Folder Authority');
|
|
233
|
-
lines.push('');
|
|
234
|
-
lines.push('These rules govern what AI is allowed and forbidden to do when creating, moving, or modifying files and folders.');
|
|
235
|
-
lines.push('');
|
|
236
|
-
lines.push('### Defined `/src` Structure');
|
|
237
|
-
lines.push('');
|
|
238
|
-
lines.push('```');
|
|
239
|
-
lines.push('src/');
|
|
240
|
-
lines.push('├── app/ # Routes, layouts, metadata (Next.js App Router)');
|
|
241
|
-
lines.push('│ └── {route}/');
|
|
242
|
-
lines.push('│ ├── page.tsx');
|
|
243
|
-
lines.push('│ └── _blocks/ # Co-located page-specific blocks');
|
|
244
|
-
lines.push('├── blog/ # Blog content (archive content type)');
|
|
245
|
-
lines.push('├── components/ # Reusable UI primitives');
|
|
246
|
-
lines.push('├── hooks/ # Custom React hooks');
|
|
247
|
-
lines.push('├── styles/ # CSS, Tailwind, fonts');
|
|
248
|
-
lines.push('├── template/ # Template-level components');
|
|
249
|
-
lines.push('├── tools/ # Utility tools');
|
|
250
|
-
lines.push('├── types/ # TypeScript types');
|
|
251
|
-
lines.push('├── utils/ # Utility functions');
|
|
252
|
-
lines.push('└── state.ts # Global state');
|
|
253
|
-
lines.push('```');
|
|
254
|
-
lines.push('');
|
|
255
|
-
lines.push('### App Router Structure');
|
|
256
|
-
lines.push('');
|
|
257
|
-
lines.push('Routes must use Next.js route groups. At minimum, `(default)` must exist:');
|
|
258
|
-
lines.push('');
|
|
259
|
-
lines.push('```');
|
|
260
|
-
lines.push('src/app/');
|
|
261
|
-
lines.push('├── (default)/ # Required - default layout group');
|
|
262
|
-
lines.push('│ ├── layout.tsx');
|
|
263
|
-
lines.push('│ └── {routes}/');
|
|
264
|
-
lines.push('├── (hero)/ # Optional - hero layout variant');
|
|
265
|
-
lines.push('├── api/ # API routes (exception - no grouping)');
|
|
266
|
-
lines.push('├── layout.tsx # Root layout');
|
|
267
|
-
lines.push('└── metadata.tsx # Shared metadata');
|
|
268
|
-
lines.push('```');
|
|
269
|
-
lines.push('');
|
|
270
|
-
lines.push('- All page routes must be inside a route group (parentheses folder)');
|
|
271
|
-
lines.push('- Never create routes directly under `src/app/` (except `api/`, root files)');
|
|
272
|
-
lines.push('- New route groups are allowed freely when a new layout variant is needed');
|
|
273
|
-
lines.push('');
|
|
274
|
-
lines.push('### File Structure Rules');
|
|
275
|
-
lines.push('');
|
|
276
|
-
lines.push('**Blocks:**');
|
|
277
|
-
lines.push('- Co-located in `_blocks/` subdirectories alongside each page route');
|
|
278
|
-
lines.push('- Singleton naming: `hero.tsx` (one per page), numbered when multiple: `content-2.tsx`, `content-3.tsx`');
|
|
279
|
-
lines.push('- Import with relative paths: `import Hero from \'./_blocks/hero\'`');
|
|
280
|
-
lines.push('- Example: `src/app/(default)/furniture/_blocks/hero.tsx`');
|
|
281
|
-
lines.push('');
|
|
282
|
-
lines.push('**Components:**');
|
|
283
|
-
lines.push('- Simple components: Single file in `src/components/`');
|
|
284
|
-
lines.push('- Complex components: Folder with `index.tsx`');
|
|
285
|
-
lines.push('- Use folders when component has multiple sub-files');
|
|
286
|
-
lines.push('');
|
|
287
|
-
lines.push('### DO - What AI IS Allowed To Do');
|
|
288
|
-
lines.push('');
|
|
289
|
-
lines.push('- Create files only inside existing Canon-defined zones');
|
|
290
|
-
lines.push('- Place new files in the zone that matches their architectural role');
|
|
291
|
-
lines.push('- Follow existing folder conventions within a zone');
|
|
292
|
-
lines.push('- Reuse existing folders when possible');
|
|
293
|
-
lines.push('- Create new route groups in `src/app/` when new layouts are needed');
|
|
294
|
-
lines.push('- Create new archive content folders (like `blog/`, `portfolio/`) in `/src`');
|
|
295
|
-
lines.push('- Create dotfiles/directories at project root (`.github/`, `.cursor/`, etc.)');
|
|
296
|
-
lines.push('- Ask for confirmation if the correct zone is ambiguous');
|
|
297
|
-
lines.push('');
|
|
298
|
-
lines.push('### DO NOT - What AI Is Forbidden To Do');
|
|
299
|
-
lines.push('');
|
|
300
|
-
lines.push('- Create new top-level directories (except dotfiles)');
|
|
301
|
-
lines.push('- Create new folders in `/src` (except archive content or route groups)');
|
|
302
|
-
lines.push('- Place files outside Canon-defined zones');
|
|
303
|
-
lines.push('- Mix responsibilities across zones (components importing blocks, etc.)');
|
|
304
|
-
lines.push('- Reorganize or move folders without explicit instruction');
|
|
305
|
-
lines.push('- Invent new organizational conventions');
|
|
306
|
-
lines.push('- Create placeholder or speculative files');
|
|
307
|
-
lines.push('- Import from `_scripts/` or `_data/` in runtime code');
|
|
308
|
-
lines.push('- Manually edit files in `_data/` (generated only)');
|
|
309
|
-
lines.push('');
|
|
310
|
-
return lines;
|
|
311
|
-
}
|
|
312
|
-
function generateVerification(config) {
|
|
313
|
-
const lines = [];
|
|
314
|
-
lines.push('## Post-Edit Verification');
|
|
315
|
-
lines.push('');
|
|
316
|
-
lines.push('After editing files:');
|
|
317
|
-
if (config?.verification?.length) {
|
|
318
|
-
let step = 1;
|
|
319
|
-
for (const cmd of config.verification) {
|
|
320
|
-
lines.push(`${step}. Run \`${cmd}\``);
|
|
321
|
-
step++;
|
|
322
|
-
}
|
|
323
|
-
lines.push(`${step}. Fix any violations before committing`);
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
lines.push('1. Run `npm run lint` to check for errors');
|
|
327
|
-
lines.push('2. Fix any violations before committing');
|
|
328
|
-
}
|
|
329
|
-
lines.push('');
|
|
330
|
-
lines.push('Note: Only lint files you edited, not the entire codebase.');
|
|
331
|
-
lines.push('');
|
|
332
|
-
return lines;
|
|
333
|
-
}
|
|
334
|
-
// ─── Claude-specific sections ─────────────────────────────────────────────
|
|
335
|
-
function generateAutoGenFiles(config) {
|
|
336
|
-
if (!config?.generatedFiles?.length)
|
|
337
|
-
return [];
|
|
338
|
-
const lines = [];
|
|
339
|
-
lines.push('## Auto-Generated Files — Never Edit Manually');
|
|
340
|
-
lines.push('');
|
|
341
|
-
lines.push('| File | Regenerate With | Triggered By |');
|
|
342
|
-
lines.push('|---|---|---|');
|
|
343
|
-
for (const file of config.generatedFiles) {
|
|
344
|
-
lines.push(`| \`${file.path}\` | \`${file.command}\` | ${file.trigger} |`);
|
|
345
|
-
}
|
|
346
|
-
lines.push('');
|
|
347
|
-
return lines;
|
|
348
|
-
}
|
|
349
|
-
function generateBuildCommands(config) {
|
|
350
|
-
if (!config?.buildCommands?.length)
|
|
351
|
-
return [];
|
|
352
|
-
const lines = [];
|
|
353
|
-
lines.push('## Build Commands');
|
|
354
|
-
lines.push('');
|
|
355
|
-
lines.push('| Command | Purpose |');
|
|
356
|
-
lines.push('|---|---|');
|
|
357
|
-
for (const cmd of config.buildCommands) {
|
|
358
|
-
lines.push(`| \`${cmd.script}\` | ${cmd.description} |`);
|
|
359
|
-
}
|
|
360
|
-
lines.push('');
|
|
361
|
-
return lines;
|
|
362
|
-
}
|
|
363
|
-
function generateColorTokens(config) {
|
|
364
|
-
if (!config?.colorTokens)
|
|
365
|
-
return [];
|
|
366
|
-
const lines = [];
|
|
367
|
-
const ct = config.colorTokens;
|
|
368
|
-
lines.push('## Color Token System');
|
|
369
|
-
lines.push('');
|
|
370
|
-
lines.push('All colors use semantic tokens defined in `src/styles/tailwind.css` `@theme`:');
|
|
371
|
-
lines.push('');
|
|
372
|
-
if (ct.surface?.length) {
|
|
373
|
-
lines.push(`- **Surface**: ${ct.surface.map(s => `\`${s}\``).join(', ')}`);
|
|
374
|
-
}
|
|
375
|
-
if (ct.text?.length) {
|
|
376
|
-
lines.push(`- **Text**: ${ct.text.map(s => `\`${s}\``).join(', ')}`);
|
|
377
|
-
}
|
|
378
|
-
if (ct.overlay?.length) {
|
|
379
|
-
lines.push(`- **Overlay** (fixed — don't flip in dark mode): ${ct.overlay.map(s => `\`${s}\``).join(', ')}`);
|
|
380
|
-
}
|
|
381
|
-
if (ct.accents?.length) {
|
|
382
|
-
lines.push(`- **Accents**: ${ct.accents.map(s => `\`${s}\``).join(', ')}`);
|
|
383
|
-
}
|
|
384
|
-
lines.push('');
|
|
385
|
-
lines.push('**Never use**: `gray-*`, `white`, `black`, `slate-*` — always map to a semantic token.');
|
|
386
|
-
lines.push('');
|
|
387
|
-
return lines;
|
|
388
|
-
}
|
|
389
|
-
function generateStateManagement(config) {
|
|
390
|
-
if (!config?.state)
|
|
391
|
-
return [];
|
|
392
|
-
const lines = [];
|
|
393
|
-
const st = config.state;
|
|
394
|
-
lines.push('## State Management');
|
|
395
|
-
lines.push('');
|
|
396
|
-
lines.push(`${st.library} store at \`${st.file}\`. Read with \`${st.readPattern}\`, write with \`${st.writePattern}\`.`);
|
|
397
|
-
lines.push('');
|
|
398
|
-
if (st.properties?.length) {
|
|
399
|
-
lines.push(`Available state: ${st.properties.map(p => `\`${p}\``).join(', ')}.`);
|
|
400
|
-
lines.push('');
|
|
401
|
-
}
|
|
402
|
-
return lines;
|
|
403
|
-
}
|
|
404
|
-
function generateTemplateRules(config) {
|
|
405
|
-
if (!config?.rules?.length)
|
|
406
|
-
return [];
|
|
407
|
-
const doRules = config.rules.filter(r => r.type === 'do');
|
|
408
|
-
if (!doRules.length)
|
|
409
|
-
return [];
|
|
410
|
-
const lines = [];
|
|
411
|
-
lines.push('## Template-Specific Rules');
|
|
412
|
-
lines.push('');
|
|
413
|
-
for (const rule of doRules) {
|
|
414
|
-
lines.push(`- ${rule.rule}`);
|
|
415
|
-
}
|
|
416
|
-
lines.push('');
|
|
417
|
-
return lines;
|
|
418
|
-
}
|
|
419
|
-
// ─── Format generators ────────────────────────────────────────────────────
|
|
420
|
-
function generateCursorrules(config) {
|
|
421
|
-
const lines = [
|
|
422
|
-
...generateHeader('cursorrules'),
|
|
423
|
-
...generateTechStack(),
|
|
424
|
-
...generateEnforcedPatterns('cursorrules'),
|
|
425
|
-
...generateDocPatterns(),
|
|
426
|
-
...generateGuarantees(),
|
|
427
|
-
...generateComponentReference(config),
|
|
428
|
-
...generateDoNotSection(config),
|
|
429
|
-
...generateFileAuthority(),
|
|
430
|
-
...generateVerification(config),
|
|
431
|
-
];
|
|
432
|
-
return lines.join('\n');
|
|
433
|
-
}
|
|
434
|
-
function generateClaudeMd(config) {
|
|
435
|
-
const lines = [
|
|
436
|
-
...generateHeader('claude'),
|
|
437
|
-
...generateAutoGenFiles(config),
|
|
438
|
-
...generateBuildCommands(config),
|
|
439
|
-
...generateEnforcedPatterns('claude'),
|
|
440
|
-
...generateDocPatterns(),
|
|
441
|
-
...generateColorTokens(config),
|
|
442
|
-
...generateComponentReference(config),
|
|
443
|
-
...generateStateManagement(config),
|
|
444
|
-
...generateTemplateRules(config),
|
|
445
|
-
...generateDoNotSection(config),
|
|
446
|
-
...generateVerification(config),
|
|
447
|
-
];
|
|
448
|
-
return lines.join('\n');
|
|
449
|
-
}
|
|
450
|
-
function generateCopilotInstructions(config) {
|
|
451
|
-
const lines = [
|
|
452
|
-
...generateHeader('copilot'),
|
|
453
|
-
...generateTechStack(),
|
|
454
|
-
...generateEnforcedPatterns('copilot'),
|
|
455
|
-
...generateDocPatterns(),
|
|
456
|
-
...generateComponentReference(config),
|
|
457
|
-
...generateDoNotSection(config),
|
|
458
|
-
...generateVerification(config),
|
|
459
|
-
];
|
|
460
|
-
return lines.join('\n');
|
|
461
|
-
}
|
|
462
|
-
function generateContent(format, config) {
|
|
463
|
-
switch (format) {
|
|
464
|
-
case 'claude':
|
|
465
|
-
return generateClaudeMd(config);
|
|
466
|
-
case 'copilot':
|
|
467
|
-
return generateCopilotInstructions(config);
|
|
468
|
-
case 'cursorrules':
|
|
469
|
-
default:
|
|
470
|
-
return generateCursorrules(config);
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
function writeOutput(content, outputPath) {
|
|
474
|
-
const dir = path.dirname(outputPath);
|
|
475
|
-
if (!fs.existsSync(dir)) {
|
|
476
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
477
|
-
}
|
|
478
|
-
fs.writeFileSync(outputPath, content, 'utf-8');
|
|
479
|
-
}
|
|
480
|
-
// ─── Public API ───────────────────────────────────────────────────────────
|
|
481
|
-
export async function generate(options) {
|
|
482
|
-
const config = loadConfig();
|
|
483
|
-
if (options.output === 'all') {
|
|
484
|
-
// Generate all targets
|
|
485
|
-
const targets = getAllTargets();
|
|
486
|
-
for (const target of targets) {
|
|
487
|
-
const content = generateContent(target.format, config);
|
|
488
|
-
const outputPath = path.resolve(process.cwd(), target.output);
|
|
489
|
-
writeOutput(content, outputPath);
|
|
490
|
-
console.log(`✓ Generated ${target.output}`);
|
|
491
|
-
}
|
|
492
|
-
console.log(` Canon v${version} — ${patterns.length} patterns, ${guarantees.length} guarantees`);
|
|
493
|
-
if (config) {
|
|
494
|
-
console.log(` Template config: ${config.name}`);
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
else if (options.output === '-') {
|
|
498
|
-
const content = generateContent(options.format, config);
|
|
499
|
-
console.log(content);
|
|
500
|
-
}
|
|
501
|
-
else {
|
|
502
|
-
const content = generateContent(options.format, config);
|
|
503
|
-
const outputPath = path.resolve(process.cwd(), options.output);
|
|
504
|
-
writeOutput(content, outputPath);
|
|
505
|
-
console.log(`✓ Generated ${options.output} from Canon v${version}`);
|
|
506
|
-
console.log(` ${patterns.length} patterns, ${guarantees.length} guarantees`);
|
|
507
|
-
if (config) {
|
|
508
|
-
console.log(` Template config: ${config.name}`);
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL2dlbmVyYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3hCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFVekM7O0dBRUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxRQUFnQjtJQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ2xELElBQUksSUFBSSxLQUFLLFdBQVc7UUFBRSxPQUFPLFFBQVEsQ0FBQTtJQUN6QyxJQUFJLElBQUksS0FBSyx5QkFBeUI7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUN4RCxPQUFPLGFBQWEsQ0FBQTtBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGFBQWE7SUFDcEIsT0FBTztRQUNMLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQ2pELEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO1FBQ3pDLEVBQUUsTUFBTSxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7S0FDakUsQ0FBQTtBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFdBQW1CO0lBQzFDLE1BQU0sYUFBYSxHQUFHO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLHFDQUFxQyxFQUFFLFdBQVcsQ0FBQztRQUM1RSwyQkFBMkI7UUFDM0IsSUFB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QUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN0QixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM5RCxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxPQUFPLENBQUMsTUFBTSxnQkFBZ0IsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUNuRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxDQUFDLE1BQU0sY0FBYyxVQUFVLENBQUMsTUFBTSxhQUFhLENBQUMsQ0FBQTtRQUM3RSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7UUFDbEQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyB2ZXJzaW9uLCBwYXR0ZXJucywgZ3VhcmFudGVlcyB9IGZyb20gJy4uLy4uL2luZGV4LmpzJ1xuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy5qcydcbmltcG9ydCB0eXBlIHsgQ2Fub25UZW1wbGF0ZUNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbmZpZy5qcydcblxudHlwZSBPdXRwdXRGb3JtYXQgPSAnY3Vyc29ycnVsZXMnIHwgJ2NsYXVkZScgfCAnY29waWxvdCdcblxuaW50ZXJmYWNlIEdlbmVyYXRlT3B0aW9ucyB7XG4gIG91dHB1dDogc3RyaW5nXG4gIGZvcm1hdDogT3V0cHV0Rm9ybWF0XG59XG5cbi8qKlxuICogRGV0ZWN0IG91dHB1dCBmb3JtYXQgZnJvbSBmaWxlbmFtZVxuICovXG5mdW5jdGlvbiBkZXRlY3RGb3JtYXQoZmlsZW5hbWU6IHN0cmluZyk6IE91dHB1dEZvcm1hdCB7XG4gIGNvbnN0IGJhc2UgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKS50b0xvd2VyQ2FzZSgpXG4gIGlmIChiYXNlID09PSAnY2xhdWRlLm1kJykgcmV0dXJuICdjbGF1ZGUnXG4gIGlmIChiYXNlID09PSAnY29waWxvdC1pbnN0cnVjdGlvbnMubWQnKSByZXR1cm4gJ2NvcGlsb3QnXG4gIHJldHVybiAnY3Vyc29ycnVsZXMnXG59XG5cbi8qKlxuICogR2V0IGFsbCBvdXRwdXQgdGFyZ2V0cyB3aGVuIGdlbmVyYXRpbmcgYWxsIGZpbGVzXG4gKi9cbmZ1bmN0aW9uIGdldEFsbFRhcmdldHMoKTogR2VuZXJhdGVPcHRpb25zW10ge1xuICByZXR1cm4gW1xuICAgIHsgb3V0cHV0OiAnLmN1cnNvcnJ1bGVzJywgZm9ybWF0OiAnY3Vyc29ycnVsZXMnIH0sXG4gICAgeyBvdXRwdXQ6ICdDTEFVREUubWQnLCBmb3JtYXQ6ICdjbGF1ZGUnIH0sXG4gICAgeyBvdXRwdXQ6ICcuZ2l0aHViL2NvcGlsb3QtaW5zdHJ1Y3Rpb25zLm1kJywgZm9ybWF0OiAnY29waWxvdCcgfSxcbiAgXVxufVxuXG4vKipcbiAqIFJlYWQgYSBwYXR0ZXJuIG1hcmtkb3duIGZpbGUgYW5kIGV4dHJhY3Qgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gcmVhZFBhdHRlcm5GaWxlKHBhdHRlcm5GaWxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgcG9zc2libGVQYXRocyA9IFtcbiAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy9AZ2FsbG9wLnNvZnR3YXJlL2Nhbm9uJywgcGF0dGVybkZpbGUpLFxuICAgIC8vIEZhbGxiYWNrIGZvciBkZXZlbG9wbWVudFxuICAgIHBhdGguam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCAnLi4vLi4vLi4vJywgcGF0dGVybkZpbGUpLFxuICBdXG5cbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiBwb3NzaWJsZVBhdGhzKSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogRXh0cmFjdCBleGFtcGxlcyBmcm9tIHBhdHRlcm4gbWFya2Rvd25cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEV4YW1wbGVzKGNvbnRlbnQ6IHN0cmluZyk6IHsgZ29vZDogc3RyaW5nW107IGJhZDogc3RyaW5nW10gfSB7XG4gIGNvbnN0IGdvb2Q6IHN0cmluZ1tdID0gW11cbiAgY29uc3QgYmFkOiBzdHJpbmdbXSA9IFtdXG5cbiAgY29uc3QgZ29vZE1hdGNoID0gY29udGVudC5tYXRjaCgvIyMjIEdvb2RcXHMqXFxuYGBgW1xcc1xcU10qP2BgYC9nKVxuICBjb25zdCBiYWRNYXRjaCA9IGNvbnRlbnQubWF0Y2goLyMjIyBCYWRcXHMqXFxuYGBgW1xcc1xcU10qP2BgYC9nKVxuXG4gIGlmIChnb29kTWF0Y2gpIHtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGdvb2RNYXRjaCkge1xuICAgICAgY29uc3QgY29kZSA9IG1hdGNoLnJlcGxhY2UoLyMjIyBHb29kXFxzKlxcbi8sICcnKS50cmltKClcbiAgICAgIGdvb2QucHVzaChjb2RlKVxuICAgIH1cbiAgfVxuXG4gIGlmIChiYWRNYXRjaCkge1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgYmFkTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBtYXRjaC5yZXBsYWNlKC8jIyMgQmFkXFxzKlxcbi8sICcnKS50cmltKClcbiAgICAgIGJhZC5wdXNoKGNvZGUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZ29vZCwgYmFkIH1cbn1cblxuLy8g4pSA4pSA4pSAIFNoYXJlZCBzZWN0aW9uIGdlbmVyYXRvcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGdlbmVyYXRlSGVhZGVyKGZvcm1hdDogT3V0cHV0Rm9ybWF0KTogc3RyaW5nW10ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGlmIChmb3JtYXQgPT09ICdjbGF1ZGUnKSB7XG4gICAgbGluZXMucHVzaChgIyBDTEFVREUubWQg4oCUIFByb2plY3QtU3BlY2lmaWMgSW50ZWxsaWdlbmNlYClcbiAgICBsaW5lcy5wdXNoKCcnKVxuICAgIGxpbmVzLnB1c2goYD4gQXV0by1nZW5lcmF0ZWQgZnJvbSBHYWxsb3AgQ2Fub24gdiR7dmVyc2lvbn0uIERvIG5vdCBlZGl0IG1hbnVhbGx5LmApXG4gICAgbGluZXMucHVzaChgPiBSZWdlbmVyYXRlIHdpdGg6IG5wbSBydW4gZ2VuZXJhdGU6YWktcnVsZXNgKVxuICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2NvcGlsb3QnKSB7XG4gICAgbGluZXMucHVzaChgIyBHYWxsb3AgQ2Fub24gdiR7dmVyc2lvbn0gLSBDb3BpbG90IEluc3RydWN0aW9uc2ApXG4gICAgbGluZXMucHVzaCgnJylcbiAgICBsaW5lcy5wdXNoKCdUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBAZ2FsbG9wLnNvZnR3YXJlL2Nhbm9uLiBEbyBub3QgZWRpdCBtYW51YWxseS4nKVxuICAgIGxpbmVzLnB1c2goJ1JlZ2VuZXJhdGUgd2l0aDogbnBtIHJ1biBnZW5lcmF0ZTphaS1ydWxlcycpXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgIyBHYWxsb3AgQ2Fub24gdiR7dmVyc2lvbn0gLSBBSSBSdWxlc2ApXG4gICAgbGluZXMucHVzaCgnJylcbiAgICBsaW5lcy5wdXNoKCdUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBAZ2FsbG9wLnNvZnR3YXJlL2Nhbm9uLiBEbyBub3QgZWRpdCBtYW51YWxseS4nKVxuICAgIGxpbmVzLnB1c2goJ1JlZ2VuZXJhdGUgd2l0aDogbnBtIHJ1biBnZW5lcmF0ZTphaS1ydWxlcycpXG4gIH1cblxuICBsaW5lcy5wdXNoKCcnKVxuICByZXR1cm4gbGluZXNcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVUZWNoU3RhY2soKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgICcjIyBUZWNoIFN0YWNrJyxcbiAgICAnJyxcbiAgICAnLSBOZXh0LmpzIDE2IHdpdGggQXBwIFJvdXRlcicsXG4gICAgJy0gUmVhY3QgMTknLFxuICAgICctIFR5cGVTY3JpcHQnLFxuICAgICctIFRhaWx3aW5kIENTUyB2NCcsXG4gICAgJy0gY2xzeCBmb3IgY29uZGl0aW9uYWwgY2xhc3MgbmFtZXMnLFxuICAgICcnLFxuICBdXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRW5mb3JjZWRQYXR0ZXJucyhmb3JtYXQ6IE91dHB1dEZvcm1hdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cbiAgY29uc3QgZW5mb3JjZWRQYXR0ZXJucyA9IHBhdHRlcm5zLmZpbHRlcihwID0+IHAuZW5mb3JjZW1lbnQgPT09ICdlc2xpbnQnICYmIHAucnVsZSlcblxuICBsaW5lcy5wdXNoKCcjIyBFbmZvcmNlZCBQYXR0ZXJucyAoRVNMaW50KScpXG4gIGxpbmVzLnB1c2goJycpXG4gIGxpbmVzLnB1c2goJ1RoZXNlIHBhdHRlcm5zIGFyZSBlbmZvcmNlZCBieSBgQGdhbGxvcC5zb2Z0d2FyZS9jYW5vbi9lc2xpbnRgLiBWaW9sYXRpb25zIHdpbGwgYmUgZmxhZ2dlZC4nKVxuICBsaW5lcy5wdXNoKCcnKVxuXG4gIGlmIChmb3JtYXQgPT09ICdjbGF1ZGUnKSB7XG4gICAgLy8gQ2xhdWRlIGNhbiBydW4gbGludCDigJQgYnJpZWYgbGlzdCB3aXRoIHJ1bGUgbmFtZXNcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgZW5mb3JjZWRQYXR0ZXJucykge1xuICAgICAgbGluZXMucHVzaChgLSAqKiR7cGF0dGVybi5pZH06ICR7cGF0dGVybi50aXRsZX0qKiDigJQgXFxgJHtwYXR0ZXJuLnJ1bGV9XFxgIOKAlCAke3BhdHRlcm4uc3VtbWFyeX1gKVxuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKVxuICB9IGVsc2Uge1xuICAgIC8vIEN1cnNvcnJ1bGVzIGFuZCBDb3BpbG90OiBmdWxsIGV4YW1wbGVzXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGVuZm9yY2VkUGF0dGVybnMpIHtcbiAgICAgIGxpbmVzLnB1c2goYCMjIyAke3BhdHRlcm4uaWR9OiAke3BhdHRlcm4udGl0bGV9YClcbiAgICAgIGxpbmVzLnB1c2goJycpXG4gICAgICBsaW5lcy5wdXNoKHBhdHRlcm4uc3VtbWFyeSlcbiAgICAgIGxpbmVzLnB1c2goJycpXG4gICAgICBsaW5lcy5wdXNoKGAtICoqRVNMaW50IFJ1bGU6KiogXFxgJHtwYXR0ZXJuLnJ1bGV9XFxgYClcbiAgICAgIGxpbmVzLnB1c2goYC0gKipDYXRlZ29yeToqKiAke3BhdHRlcm4uY2F0ZWdvcnl9YClcbiAgICAgIGxpbmVzLnB1c2goJycpXG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdjdXJzb3JydWxlcycpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRQYXR0ZXJuRmlsZShwYXR0ZXJuLmZpbGUpXG4gICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBnb29kLCBiYWQgfSA9IGV4dHJhY3RFeGFtcGxlcyhjb250ZW50KVxuICAgICAgICAgIGlmIChiYWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnKipCYWQ6KionKVxuICAgICAgICAgICAgbGluZXMucHVzaCgnJylcbiAgICAgICAgICAgIGxpbmVzLnB1c2goYmFkWzBdKVxuICAgICAgICAgICAgbGluZXMucHVzaCgnJylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGdvb2QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnKipHb29kOioqJylcbiAgICAgICAgICAgIGxpbmVzLnB1c2goJycpXG4gICAgICAgICAgICBsaW5lcy5wdXNoKGdvb2RbMF0pXG4gICAgICAgICAgICBsaW5lcy5wdXNoKCcnKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZURvY1BhdHRlcm5zKCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cbiAgY29uc3QgZG9jUGF0dGVybnMgPSBwYXR0ZXJucy5maWx0ZXIocCA9PiBwLmVuZm9yY2VtZW50ID09PSAnZG9jdW1lbnRhdGlvbicpXG5cbiAgbGluZXMucHVzaCgnIyMgRG9jdW1lbnRhdGlvbiBQYXR0ZXJucycpXG4gIGxpbmVzLnB1c2goJycpXG4gIGxpbmVzLnB1c2goJ1RoZXNlIHBhdHRlcm5zIGFyZSBub3QgZW5mb3JjZWQgYnkgRVNMaW50IGJ1dCBzaG91bGQgYmUgZm9sbG93ZWQuJylcbiAgbGluZXMucHVzaCgnJylcblxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgZG9jUGF0dGVybnMpIHtcbiAgICBsaW5lcy5wdXNoKGAjIyMgJHtwYXR0ZXJuLmlkfTogJHtwYXR0ZXJuLnRpdGxlfWApXG4gICAgbGluZXMucHVzaCgnJylcbiAgICBsaW5lcy5wdXNoKHBhdHRlcm4uc3VtbWFyeSlcbiAgICBsaW5lcy5wdXNoKCcnKVxuICB9XG5cbiAgcmV0dXJuIGxpbmVzXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlR3VhcmFudGVlcygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgbGluZXMucHVzaCgnIyMgQ2Fub24gR3VhcmFudGVlcycpXG4gIGxpbmVzLnB1c2goJycpXG4gIGxpbmVzLnB1c2goJ0ZvbGxvd2luZyB0aGVzZSBwYXR0ZXJucyBwcm92aWRlcyB0aGVzZSBndWFyYW50ZWVzOicpXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgZm9yIChjb25zdCBndWFyYW50ZWUgb2YgZ3VhcmFudGVlcykge1xuICAgIGxpbmVzLnB1c2goYC0gKioke2d1YXJhbnRlZS5uYW1lfSoqICgke2d1YXJhbnRlZS5pZH0pOiBQYXR0ZXJucyAke2d1YXJhbnRlZS5wYXR0ZXJucy5qb2luKCcsICcpfWApXG4gIH1cbiAgbGluZXMucHVzaCgnJylcblxuICByZXR1cm4gbGluZXNcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVDb21wb25lbnRSZWZlcmVuY2UoY29uZmlnOiBDYW5vblRlbXBsYXRlQ29uZmlnIHwgbnVsbCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cblxuICBsaW5lcy5wdXNoKCcjIyBDb21wb25lbnQgUXVpY2sgUmVmZXJlbmNlJylcbiAgbGluZXMucHVzaCgnJylcblxuICBpZiAoY29uZmlnPy5jb21wb25lbnRzPy5sZW5ndGgpIHtcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29uZmlnLmNvbXBvbmVudHMpIHtcbiAgICAgIGNvbnN0IHByb3BzU3RyID0gY29tcC5wcm9wcz8ubGVuZ3RoID8gYCAtIHByb3BzOiAke2NvbXAucHJvcHMubWFwKHAgPT4gYFxcYCR7cH1cXGBgKS5qb2luKCcsICcpfWAgOiAnJ1xuICAgICAgY29uc3Qgbm90ZVN0ciA9IGNvbXAubm90ZXMgPyBgICgke2NvbXAubm90ZXN9KWAgOiAnJ1xuICAgICAgbGluZXMucHVzaChgLSBcXGAke2NvbXAubmFtZX1cXGAke3Byb3BzU3RyfSR7bm90ZVN0cn1gKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogaGFyZGNvZGVkIGNvbXBvbmVudCBsaXN0XG4gICAgbGluZXMucHVzaCgnIyMjIFR5cG9ncmFwaHknKVxuICAgIGxpbmVzLnB1c2goJy0gYEhlYWRpbmdgIC0gcHJvcHM6IGBhc2AsIGBjb2xvcmAsIGBtYXJnaW5gLCBgZm9udFNpemVgLCBgZm9udFdlaWdodGAsIGB0ZXh0QWxpZ25gJylcbiAgICBsaW5lcy5wdXNoKCctIGBQYXJhZ3JhcGhgIC0gcHJvcHM6IGBjb2xvcmAsIGBtYXJnaW5gLCBgZm9udFNpemVgLCBgbGluZUhlaWdodGAsIGB0ZXh0QWxpZ25gJylcbiAgICBsaW5lcy5wdXNoKCctIGBTcGFuYCAtIHByb3BzOiBgY29sb3JgLCBgbWFyZ2luYCwgYGZvbnRTaXplYCAoaW5saW5lIHRleHQsIG1iLTAgZGVmYXVsdCknKVxuICAgIGxpbmVzLnB1c2goJy0gYExhYmVsYCAtIHByb3BzOiBgY29sb3JgLCBgbWFyZ2luYCwgYGZvbnRTaXplYCwgYGZvbnRXZWlnaHRgLCBgdGV4dEFsaWduYCcpXG4gICAgbGluZXMucHVzaCgnLSBgUXVvdGVgIC0gcHJvcHM6IGB2YXJpYW50YCwgYGNvbG9yYCwgYG1hcmdpbmAsIGBmb250U2l6ZWAsIGBmb250V2VpZ2h0YCwgYHRleHRBbGlnbmAnKVxuICAgIGxpbmVzLnB1c2goJycpXG4gICAgbGluZXMucHVzaCgnIyMjIExheW91dCcpXG4gICAgbGluZXMucHVzaCgnLSBgU2VjdGlvbmAgLSBzZW1hbnRpYyBzZWN0aW9uIHdyYXBwZXInKVxuICAgIGxpbmVzLnB1c2goJy0gYENvbHVtbnNgIC0gZ3JpZCBsYXlvdXQsIHByb3BzOiBgY29sc2AsIGBnYXBgLCBgYWxpZ25gJylcbiAgICBsaW5lcy5wdXNoKCctIGBDb2x1bW5gIC0gY29sdW1uIGNoaWxkJylcbiAgICBsaW5lcy5wdXNoKCcnKVxuICAgIGxpbmVzLnB1c2goJyMjIyBJbnRlcmFjdGl2ZScpXG4gICAgbGluZXMucHVzaCgnLSBgQnV0dG9uYCAtIHByb3BzOiBgaHJlZmAsIGB2YXJpYW50YCwgYGljb25gLCBgaWNvblBsYWNlbWVudGAsIGBtYXJnaW5gJylcbiAgICBsaW5lcy5wdXNoKCctIGBJY29uYCAtIEljb25pZnkgaWNvbiB3cmFwcGVyJylcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZURvTm90U2VjdGlvbihjb25maWc6IENhbm9uVGVtcGxhdGVDb25maWcgfCBudWxsKTogc3RyaW5nW10ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJyMjIERvIE5PVCcpXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgLy8gRGVmYXVsdCBydWxlcyBhbHdheXMgcHJlc2VudFxuICBsaW5lcy5wdXNoKFwiLSBVc2UgYCd1c2UgY2xpZW50J2AgaW4gYmxvY2tzIC0gZXh0cmFjdCB0byBjb21wb25lbnRzXCIpXG4gIGxpbmVzLnB1c2goJy0gVXNlIHJhdyBgPHA+YCwgYDxzcGFuPmAsIG9yIGA8aDE+YOKAk2A8aDY+YCAtIHVzZSBQYXJhZ3JhcGgvU3Bhbi9IZWFkaW5nIGNvbXBvbmVudHMnKVxuICBsaW5lcy5wdXNoKCctIFVzZSBjbGFzc05hbWUgZm9yIG1hcmdpbi9jb2xvci9mb250U2l6ZSB3aGVuIGNvbXBvbmVudCBoYXMgcHJvcHMnKVxuICBsaW5lcy5wdXNoKCctIFVzZSBDb250YWluZXIgaW5zaWRlIFNlY3Rpb24gLSBTZWN0aW9uIGFscmVhZHkgcHJvdmlkZXMgY29udGFpbm1lbnQnKVxuICBsaW5lcy5wdXNoKCctIFVzZSBgY2xhc3NuYW1lc2AgcGFja2FnZSAtIHVzZSBgY2xzeGAgaW5zdGVhZCcpXG4gIGxpbmVzLnB1c2goJy0gVXNlIGlubGluZSBzdHlsZXMgZm9yIGhvdmVyIHN0YXRlcyAtIHVzZSBUYWlsd2luZCBjbGFzc2VzJylcbiAgbGluZXMucHVzaCgnLSBVc2UgbmF0aXZlIGBJbnRlcnNlY3Rpb25PYnNlcnZlcmAgLSB1c2UgYHJlYWN0LWludGVyc2VjdGlvbi1vYnNlcnZlcmAgcGFja2FnZScpXG4gIGxpbmVzLnB1c2goJy0gVXNlIGlubGluZSBgPHN2Zz5gIGluIGJsb2NrcyAtIHVzZSB0aGUgSWNvbiBjb21wb25lbnQgd2l0aCBJY29uaWZ5IGljb25zJylcbiAgbGluZXMucHVzaCgnLSBVc2UgZGVlcCByZWxhdGl2ZSBpbXBvcnRzIChgLi4vLi4vYCkgLSB1c2UgYEAvYCBhbGlhcyBpbXBvcnRzJylcblxuICAvLyBUZW1wbGF0ZS1zcGVjaWZpYyBydWxlc1xuICBpZiAoY29uZmlnPy5ydWxlcykge1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBjb25maWcucnVsZXMpIHtcbiAgICAgIGlmIChydWxlLnR5cGUgPT09ICdkb05vdCcpIHtcbiAgICAgICAgbGluZXMucHVzaChgLSAke3J1bGUucnVsZX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUZpbGVBdXRob3JpdHkoKTogc3RyaW5nW10ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJyMjIEZpbGUgJiBGb2xkZXIgQXV0aG9yaXR5JylcbiAgbGluZXMucHVzaCgnJylcbiAgbGluZXMucHVzaCgnVGhlc2UgcnVsZXMgZ292ZXJuIHdoYXQgQUkgaXMgYWxsb3dlZCBhbmQgZm9yYmlkZGVuIHRvIGRvIHdoZW4gY3JlYXRpbmcsIG1vdmluZywgb3IgbW9kaWZ5aW5nIGZpbGVzIGFuZCBmb2xkZXJzLicpXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgbGluZXMucHVzaCgnIyMjIERlZmluZWQgYC9zcmNgIFN0cnVjdHVyZScpXG4gIGxpbmVzLnB1c2goJycpXG4gIGxpbmVzLnB1c2goJ2BgYCcpXG4gIGxpbmVzLnB1c2goJ3NyYy8nKVxuICBsaW5lcy5wdXNoKCfilJzilIDilIAgYXBwLyAgICAgICAgICAjIFJvdXRlcywgbGF5b3V0cywgbWV0YWRhdGEgKE5leHQuanMgQXBwIFJvdXRlciknKVxuICBsaW5lcy5wdXNoKCfilIIgICDilJTilIDilIAge3JvdXRlfS8nKVxuICBsaW5lcy5wdXNoKCfilIIgICAgICAg4pSc4pSA4pSAIHBhZ2UudHN4JylcbiAgbGluZXMucHVzaCgn4pSCICAgICAgIOKUlOKUgOKUgCBfYmxvY2tzLyAgIyBDby1sb2NhdGVkIHBhZ2Utc3BlY2lmaWMgYmxvY2tzJylcbiAgbGluZXMucHVzaCgn4pSc4pSA4pSAIGJsb2cvICAgICAgICAgIyBCbG9nIGNvbnRlbnQgKGFyY2hpdmUgY29udGVudCB0eXBlKScpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCBjb21wb25lbnRzLyAgICMgUmV1c2FibGUgVUkgcHJpbWl0aXZlcycpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCBob29rcy8gICAgICAgICMgQ3VzdG9tIFJlYWN0IGhvb2tzJylcbiAgbGluZXMucHVzaCgn4pSc4pSA4pSAIHN0eWxlcy8gICAgICAgIyBDU1MsIFRhaWx3aW5kLCBmb250cycpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCB0ZW1wbGF0ZS8gICAgICMgVGVtcGxhdGUtbGV2ZWwgY29tcG9uZW50cycpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCB0b29scy8gICAgICAgICMgVXRpbGl0eSB0b29scycpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCB0eXBlcy8gICAgICAgICMgVHlwZVNjcmlwdCB0eXBlcycpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCB1dGlscy8gICAgICAgICMgVXRpbGl0eSBmdW5jdGlvbnMnKVxuICBsaW5lcy5wdXNoKCfilJTilIDilIAgc3RhdGUudHMgICAgICAjIEdsb2JhbCBzdGF0ZScpXG4gIGxpbmVzLnB1c2goJ2BgYCcpXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgbGluZXMucHVzaCgnIyMjIEFwcCBSb3V0ZXIgU3RydWN0dXJlJylcbiAgbGluZXMucHVzaCgnJylcbiAgbGluZXMucHVzaCgnUm91dGVzIG11c3QgdXNlIE5leHQuanMgcm91dGUgZ3JvdXBzLiBBdCBtaW5pbXVtLCBgKGRlZmF1bHQpYCBtdXN0IGV4aXN0OicpXG4gIGxpbmVzLnB1c2goJycpXG4gIGxpbmVzLnB1c2goJ2BgYCcpXG4gIGxpbmVzLnB1c2goJ3NyYy9hcHAvJylcbiAgbGluZXMucHVzaCgn4pSc4pSA4pSAIChkZWZhdWx0KS8gICAgICAgICMgUmVxdWlyZWQgLSBkZWZhdWx0IGxheW91dCBncm91cCcpXG4gIGxpbmVzLnB1c2goJ+KUgiAgIOKUnOKUgOKUgCBsYXlvdXQudHN4JylcbiAgbGluZXMucHVzaCgn4pSCICAg4pSU4pSA4pSAIHtyb3V0ZXN9LycpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCAoaGVybykvICAgICAgICAgICAjIE9wdGlvbmFsIC0gaGVybyBsYXlvdXQgdmFyaWFudCcpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCBhcGkvICAgICAgICAgICAgICAjIEFQSSByb3V0ZXMgKGV4Y2VwdGlvbiAtIG5vIGdyb3VwaW5nKScpXG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgCBsYXlvdXQudHN4ICAgICAgICAjIFJvb3QgbGF5b3V0JylcbiAgbGluZXMucHVzaCgn4pSU4pSA4pSAIG1ldGFkYXRhLnRzeCAgICAgICMgU2hhcmVkIG1ldGFkYXRhJylcbiAgbGluZXMucHVzaCgnYGBgJylcbiAgbGluZXMucHVzaCgnJylcbiAgbGluZXMucHVzaCgnLSBBbGwgcGFnZSByb3V0ZXMgbXVzdCBiZSBpbnNpZGUgYSByb3V0ZSBncm91cCAocGFyZW50aGVzZXMgZm9sZGVyKScpXG4gIGxpbmVzLnB1c2goJy0gTmV2ZXIgY3JlYXRlIHJvdXRlcyBkaXJlY3RseSB1bmRlciBgc3JjL2FwcC9gIChleGNlcHQgYGFwaS9gLCByb290IGZpbGVzKScpXG4gIGxpbmVzLnB1c2goJy0gTmV3IHJvdXRlIGdyb3VwcyBhcmUgYWxsb3dlZCBmcmVlbHkgd2hlbiBhIG5ldyBsYXlvdXQgdmFyaWFudCBpcyBuZWVkZWQnKVxuICBsaW5lcy5wdXNoKCcnKVxuXG4gIGxpbmVzLnB1c2goJyMjIyBGaWxlIFN0cnVjdHVyZSBSdWxlcycpXG4gIGxpbmVzLnB1c2goJycpXG4gIGxpbmVzLnB1c2goJyoqQmxvY2tzOioqJylcbiAgbGluZXMucHVzaCgnLSBDby1sb2NhdGVkIGluIGBfYmxvY2tzL2Agc3ViZGlyZWN0b3JpZXMgYWxvbmdzaWRlIGVhY2ggcGFnZSByb3V0ZScpXG4gIGxpbmVzLnB1c2goJy0gU2luZ2xldG9uIG5hbWluZzogYGhlcm8udHN4YCAob25lIHBlciBwYWdlKSwgbnVtYmVyZWQgd2hlbiBtdWx0aXBsZTogYGNvbnRlbnQtMi50c3hgLCBgY29udGVudC0zLnRzeGAnKVxuICBsaW5lcy5wdXNoKCctIEltcG9ydCB3aXRoIHJlbGF0aXZlIHBhdGhzOiBgaW1wb3J0IEhlcm8gZnJvbSBcXCcuL19ibG9ja3MvaGVyb1xcJ2AnKVxuICBsaW5lcy5wdXNoKCctIEV4YW1wbGU6IGBzcmMvYXBwLyhkZWZhdWx0KS9mdXJuaXR1cmUvX2Jsb2Nrcy9oZXJvLnRzeGAnKVxuICBsaW5lcy5wdXNoKCcnKVxuICBsaW5lcy5wdXNoKCcqKkNvbXBvbmVudHM6KionKVxuICBsaW5lcy5wdXNoKCctIFNpbXBsZSBjb21wb25lbnRzOiBTaW5nbGUgZmlsZSBpbiBgc3JjL2NvbXBvbmVudHMvYCcpXG4gIGxpbmVzLnB1c2goJy0gQ29tcGxleCBjb21wb25lbnRzOiBGb2xkZXIgd2l0aCBgaW5kZXgudHN4YCcpXG4gIGxpbmVzLnB1c2goJy0gVXNlIGZvbGRlcnMgd2hlbiBjb21wb25lbnQgaGFzIG11bHRpcGxlIHN1Yi1maWxlcycpXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgbGluZXMucHVzaCgnIyMjIERPIC0gV2hhdCBBSSBJUyBBbGxvd2VkIFRvIERvJylcbiAgbGluZXMucHVzaCgnJylcbiAgbGluZXMucHVzaCgnLSBDcmVhdGUgZmlsZXMgb25seSBpbnNpZGUgZXhpc3RpbmcgQ2Fub24tZGVmaW5lZCB6b25lcycpXG4gIGxpbmVzLnB1c2goJy0gUGxhY2UgbmV3IGZpbGVzIGluIHRoZSB6b25lIHRoYXQgbWF0Y2hlcyB0aGVpciBhcmNoaXRlY3R1cmFsIHJvbGUnKVxuICBsaW5lcy5wdXNoKCctIEZvbGxvdyBleGlzdGluZyBmb2xkZXIgY29udmVudGlvbnMgd2l0aGluIGEgem9uZScpXG4gIGxpbmVzLnB1c2goJy0gUmV1c2UgZXhpc3RpbmcgZm9sZGVycyB3aGVuIHBvc3NpYmxlJylcbiAgbGluZXMucHVzaCgnLSBDcmVhdGUgbmV3IHJvdXRlIGdyb3VwcyBpbiBgc3JjL2FwcC9gIHdoZW4gbmV3IGxheW91dHMgYXJlIG5lZWRlZCcpXG4gIGxpbmVzLnB1c2goJy0gQ3JlYXRlIG5ldyBhcmNoaXZlIGNvbnRlbnQgZm9sZGVycyAobGlrZSBgYmxvZy9gLCBgcG9ydGZvbGlvL2ApIGluIGAvc3JjYCcpXG4gIGxpbmVzLnB1c2goJy0gQ3JlYXRlIGRvdGZpbGVzL2RpcmVjdG9yaWVzIGF0IHByb2plY3Qgcm9vdCAoYC5naXRodWIvYCwgYC5jdXJzb3IvYCwgZXRjLiknKVxuICBsaW5lcy5wdXNoKCctIEFzayBmb3IgY29uZmlybWF0aW9uIGlmIHRoZSBjb3JyZWN0IHpvbmUgaXMgYW1iaWd1b3VzJylcbiAgbGluZXMucHVzaCgnJylcblxuICBsaW5lcy5wdXNoKCcjIyMgRE8gTk9UIC0gV2hhdCBBSSBJcyBGb3JiaWRkZW4gVG8gRG8nKVxuICBsaW5lcy5wdXNoKCcnKVxuICBsaW5lcy5wdXNoKCctIENyZWF0ZSBuZXcgdG9wLWxldmVsIGRpcmVjdG9yaWVzIChleGNlcHQgZG90ZmlsZXMpJylcbiAgbGluZXMucHVzaCgnLSBDcmVhdGUgbmV3IGZvbGRlcnMgaW4gYC9zcmNgIChleGNlcHQgYXJjaGl2ZSBjb250ZW50IG9yIHJvdXRlIGdyb3VwcyknKVxuICBsaW5lcy5wdXNoKCctIFBsYWNlIGZpbGVzIG91dHNpZGUgQ2Fub24tZGVmaW5lZCB6b25lcycpXG4gIGxpbmVzLnB1c2goJy0gTWl4IHJlc3BvbnNpYmlsaXRpZXMgYWNyb3NzIHpvbmVzIChjb21wb25lbnRzIGltcG9ydGluZyBibG9ja3MsIGV0Yy4pJylcbiAgbGluZXMucHVzaCgnLSBSZW9yZ2FuaXplIG9yIG1vdmUgZm9sZGVycyB3aXRob3V0IGV4cGxpY2l0IGluc3RydWN0aW9uJylcbiAgbGluZXMucHVzaCgnLSBJbnZlbnQgbmV3IG9yZ2FuaXphdGlvbmFsIGNvbnZlbnRpb25zJylcbiAgbGluZXMucHVzaCgnLSBDcmVhdGUgcGxhY2Vob2xkZXIgb3Igc3BlY3VsYXRpdmUgZmlsZXMnKVxuICBsaW5lcy5wdXNoKCctIEltcG9ydCBmcm9tIGBfc2NyaXB0cy9gIG9yIGBfZGF0YS9gIGluIHJ1bnRpbWUgY29kZScpXG4gIGxpbmVzLnB1c2goJy0gTWFudWFsbHkgZWRpdCBmaWxlcyBpbiBgX2RhdGEvYCAoZ2VuZXJhdGVkIG9ubHkpJylcbiAgbGluZXMucHVzaCgnJylcblxuICByZXR1cm4gbGluZXNcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVWZXJpZmljYXRpb24oY29uZmlnOiBDYW5vblRlbXBsYXRlQ29uZmlnIHwgbnVsbCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cblxuICBsaW5lcy5wdXNoKCcjIyBQb3N0LUVkaXQgVmVyaWZpY2F0aW9uJylcbiAgbGluZXMucHVzaCgnJylcbiAgbGluZXMucHVzaCgnQWZ0ZXIgZWRpdGluZyBmaWxlczonKVxuXG4gIGlmIChjb25maWc/LnZlcmlmaWNhdGlvbj8ubGVuZ3RoKSB7XG4gICAgbGV0IHN0ZXAgPSAxXG4gICAgZm9yIChjb25zdCBjbWQgb2YgY29uZmlnLnZlcmlmaWNhdGlvbikge1xuICAgICAgbGluZXMucHVzaChgJHtzdGVwfS4gUnVuIFxcYCR7Y21kfVxcYGApXG4gICAgICBzdGVwKytcbiAgICB9XG4gICAgbGluZXMucHVzaChgJHtzdGVwfS4gRml4IGFueSB2aW9sYXRpb25zIGJlZm9yZSBjb21taXR0aW5nYClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKCcxLiBSdW4gYG5wbSBydW4gbGludGAgdG8gY2hlY2sgZm9yIGVycm9ycycpXG4gICAgbGluZXMucHVzaCgnMi4gRml4IGFueSB2aW9sYXRpb25zIGJlZm9yZSBjb21taXR0aW5nJylcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpXG4gIGxpbmVzLnB1c2goJ05vdGU6IE9ubHkgbGludCBmaWxlcyB5b3UgZWRpdGVkLCBub3QgdGhlIGVudGlyZSBjb2RlYmFzZS4nKVxuICBsaW5lcy5wdXNoKCcnKVxuXG4gIHJldHVybiBsaW5lc1xufVxuXG4vLyDilIDilIDilIAgQ2xhdWRlLXNwZWNpZmljIHNlY3Rpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBnZW5lcmF0ZUF1dG9HZW5GaWxlcyhjb25maWc6IENhbm9uVGVtcGxhdGVDb25maWcgfCBudWxsKTogc3RyaW5nW10ge1xuICBpZiAoIWNvbmZpZz8uZ2VuZXJhdGVkRmlsZXM/Lmxlbmd0aCkgcmV0dXJuIFtdXG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cblxuICBsaW5lcy5wdXNoKCcjIyBBdXRvLUdlbmVyYXRlZCBGaWxlcyDigJQgTmV2ZXIgRWRpdCBNYW51YWxseScpXG4gIGxpbmVzLnB1c2goJycpXG4gIGxpbmVzLnB1c2goJ3wgRmlsZSB8IFJlZ2VuZXJhdGUgV2l0aCB8IFRyaWdnZXJlZCBCeSB8JylcbiAgbGluZXMucHVzaCgnfC0tLXwtLS18LS0tfCcpXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGNvbmZpZy5nZW5lcmF0ZWRGaWxlcykge1xuICAgIGxpbmVzLnB1c2goYHwgXFxgJHtmaWxlLnBhdGh9XFxgIHwgXFxgJHtmaWxlLmNvbW1hbmR9XFxgIHwgJHtmaWxlLnRyaWdnZXJ9IHxgKVxuICB9XG5cbiAgbGluZXMucHVzaCgnJylcbiAgcmV0dXJuIGxpbmVzXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQnVpbGRDb21tYW5kcyhjb25maWc6IENhbm9uVGVtcGxhdGVDb25maWcgfCBudWxsKTogc3RyaW5nW10ge1xuICBpZiAoIWNvbmZpZz8uYnVpbGRDb21tYW5kcz8ubGVuZ3RoKSByZXR1cm4gW11cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJyMjIEJ1aWxkIENvbW1hbmRzJylcbiAgbGluZXMucHVzaCgnJylcbiAgbGluZXMucHVzaCgnfCBDb21tYW5kIHwgUHVycG9zZSB8JylcbiAgbGluZXMucHVzaCgnfC0tLXwtLS18JylcblxuICBmb3IgKGNvbnN0IGNtZCBvZiBjb25maWcuYnVpbGRDb21tYW5kcykge1xuICAgIGxpbmVzLnB1c2goYHwgXFxgJHtjbWQuc2NyaXB0fVxcYCB8ICR7Y21kLmRlc2NyaXB0aW9ufSB8YClcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUNvbG9yVG9rZW5zKGNvbmZpZzogQ2Fub25UZW1wbGF0ZUNvbmZpZyB8IG51bGwpOiBzdHJpbmdbXSB7XG4gIGlmICghY29uZmlnPy5jb2xvclRva2VucykgcmV0dXJuIFtdXG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cbiAgY29uc3QgY3QgPSBjb25maWcuY29sb3JUb2tlbnNcblxuICBsaW5lcy5wdXNoKCcjIyBDb2xvciBUb2tlbiBTeXN0ZW0nKVxuICBsaW5lcy5wdXNoKCcnKVxuICBsaW5lcy5wdXNoKCdBbGwgY29sb3JzIHVzZSBzZW1hbnRpYyB0b2tlbnMgZGVmaW5lZCBpbiBgc3JjL3N0eWxlcy90YWlsd2luZC5jc3NgIGBAdGhlbWVgOicpXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgaWYgKGN0LnN1cmZhY2U/Lmxlbmd0aCkge1xuICAgIGxpbmVzLnB1c2goYC0gKipTdXJmYWNlKio6ICR7Y3Quc3VyZmFjZS5tYXAocyA9PiBgXFxgJHtzfVxcYGApLmpvaW4oJywgJyl9YClcbiAgfVxuICBpZiAoY3QudGV4dD8ubGVuZ3RoKSB7XG4gICAgbGluZXMucHVzaChgLSAqKlRleHQqKjogJHtjdC50ZXh0Lm1hcChzID0+IGBcXGAke3N9XFxgYCkuam9pbignLCAnKX1gKVxuICB9XG4gIGlmIChjdC5vdmVybGF5Py5sZW5ndGgpIHtcbiAgICBsaW5lcy5wdXNoKGAtICoqT3ZlcmxheSoqIChmaXhlZCDigJQgZG9uJ3QgZmxpcCBpbiBkYXJrIG1vZGUpOiAke2N0Lm92ZXJsYXkubWFwKHMgPT4gYFxcYCR7c31cXGBgKS5qb2luKCcsICcpfWApXG4gIH1cbiAgaWYgKGN0LmFjY2VudHM/Lmxlbmd0aCkge1xuICAgIGxpbmVzLnB1c2goYC0gKipBY2NlbnRzKio6ICR7Y3QuYWNjZW50cy5tYXAocyA9PiBgXFxgJHtzfVxcYGApLmpvaW4oJywgJyl9YClcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgbGluZXMucHVzaCgnKipOZXZlciB1c2UqKjogYGdyYXktKmAsIGB3aGl0ZWAsIGBibGFja2AsIGBzbGF0ZS0qYCDigJQgYWx3YXlzIG1hcCB0byBhIHNlbWFudGljIHRva2VuLicpXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgcmV0dXJuIGxpbmVzXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RhdGVNYW5hZ2VtZW50KGNvbmZpZzogQ2Fub25UZW1wbGF0ZUNvbmZpZyB8IG51bGwpOiBzdHJpbmdbXSB7XG4gIGlmICghY29uZmlnPy5zdGF0ZSkgcmV0dXJuIFtdXG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cbiAgY29uc3Qgc3QgPSBjb25maWcuc3RhdGVcblxuICBsaW5lcy5wdXNoKCcjIyBTdGF0ZSBNYW5hZ2VtZW50JylcbiAgbGluZXMucHVzaCgnJylcbiAgbGluZXMucHVzaChgJHtzdC5saWJyYXJ5fSBzdG9yZSBhdCBcXGAke3N0LmZpbGV9XFxgLiBSZWFkIHdpdGggXFxgJHtzdC5yZWFkUGF0dGVybn1cXGAsIHdyaXRlIHdpdGggXFxgJHtzdC53cml0ZVBhdHRlcm59XFxgLmApXG4gIGxpbmVzLnB1c2goJycpXG5cbiAgaWYgKHN0LnByb3BlcnRpZXM/Lmxlbmd0aCkge1xuICAgIGxpbmVzLnB1c2goYEF2YWlsYWJsZSBzdGF0ZTogJHtzdC5wcm9wZXJ0aWVzLm1hcChwID0+IGBcXGAke3B9XFxgYCkuam9pbignLCAnKX0uYClcbiAgICBsaW5lcy5wdXNoKCcnKVxuICB9XG5cbiAgcmV0dXJuIGxpbmVzXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVGVtcGxhdGVSdWxlcyhjb25maWc6IENhbm9uVGVtcGxhdGVDb25maWcgfCBudWxsKTogc3RyaW5nW10ge1xuICBpZiAoIWNvbmZpZz8ucnVsZXM/Lmxlbmd0aCkgcmV0dXJuIFtdXG5cbiAgY29uc3QgZG9SdWxlcyA9IGNvbmZpZy5ydWxlcy5maWx0ZXIociA9PiByLnR5cGUgPT09ICdkbycpXG4gIGlmICghZG9SdWxlcy5sZW5ndGgpIHJldHVybiBbXVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgbGluZXMucHVzaCgnIyMgVGVtcGxhdGUtU3BlY2lmaWMgUnVsZXMnKVxuICBsaW5lcy5wdXNoKCcnKVxuXG4gIGZvciAoY29uc3QgcnVsZSBvZiBkb1J1bGVzKSB7XG4gICAgbGluZXMucHVzaChgLSAke3J1bGUucnVsZX1gKVxuICB9XG5cbiAgbGluZXMucHVzaCgnJylcbiAgcmV0dXJuIGxpbmVzXG59XG5cbi8vIOKUgOKUgOKUgCBGb3JtYXQgZ2VuZXJhdG9ycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gZ2VuZXJhdGVDdXJzb3JydWxlcyhjb25maWc6IENhbm9uVGVtcGxhdGVDb25maWcgfCBudWxsKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgIC4uLmdlbmVyYXRlSGVhZGVyKCdjdXJzb3JydWxlcycpLFxuICAgIC4uLmdlbmVyYXRlVGVjaFN0YWNrKCksXG4gICAgLi4uZ2VuZXJhdGVFbmZvcmNlZFBhdHRlcm5zKCdjdXJzb3JydWxlcycpLFxuICAgIC4uLmdlbmVyYXRlRG9jUGF0dGVybnMoKSxcbiAgICAuLi5nZW5lcmF0ZUd1YXJhbnRlZXMoKSxcbiAgICAuLi5nZW5lcmF0ZUNvbXBvbmVudFJlZmVyZW5jZShjb25maWcpLFxuICAgIC4uLmdlbmVyYXRlRG9Ob3RTZWN0aW9uKGNvbmZpZyksXG4gICAgLi4uZ2VuZXJhdGVGaWxlQXV0aG9yaXR5KCksXG4gICAgLi4uZ2VuZXJhdGVWZXJpZmljYXRpb24oY29uZmlnKSxcbiAgXVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUNsYXVkZU1kKGNvbmZpZzogQ2Fub25UZW1wbGF0ZUNvbmZpZyB8IG51bGwpOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgLi4uZ2VuZXJhdGVIZWFkZXIoJ2NsYXVkZScpLFxuICAgIC4uLmdlbmVyYXRlQXV0b0dlbkZpbGVzKGNvbmZpZyksXG4gICAgLi4uZ2VuZXJhdGVCdWlsZENvbW1hbmRzKGNvbmZpZyksXG4gICAgLi4uZ2VuZXJhdGVFbmZvcmNlZFBhdHRlcm5zKCdjbGF1ZGUnKSxcbiAgICAuLi5nZW5lcmF0ZURvY1BhdHRlcm5zKCksXG4gICAgLi4uZ2VuZXJhdGVDb2xvclRva2Vucyhjb25maWcpLFxuICAgIC4uLmdlbmVyYXRlQ29tcG9uZW50UmVmZXJlbmNlKGNvbmZpZyksXG4gICAgLi4uZ2VuZXJhdGVTdGF0ZU1hbmFnZW1lbnQoY29uZmlnKSxcbiAgICAuLi5nZW5lcmF0ZVRlbXBsYXRlUnVsZXMoY29uZmlnKSxcbiAgICAuLi5nZW5lcmF0ZURvTm90U2VjdGlvbihjb25maWcpLFxuICAgIC4uLmdlbmVyYXRlVmVyaWZpY2F0aW9uKGNvbmZpZyksXG4gIF1cblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVDb3BpbG90SW5zdHJ1Y3Rpb25zKGNvbmZpZzogQ2Fub25UZW1wbGF0ZUNvbmZpZyB8IG51bGwpOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgLi4uZ2VuZXJhdGVIZWFkZXIoJ2NvcGlsb3QnKSxcbiAgICAuLi5nZW5lcmF0ZVRlY2hTdGFjaygpLFxuICAgIC4uLmdlbmVyYXRlRW5mb3JjZWRQYXR0ZXJucygnY29waWxvdCcpLFxuICAgIC4uLmdlbmVyYXRlRG9jUGF0dGVybnMoKSxcbiAgICAuLi5nZW5lcmF0ZUNvbXBvbmVudFJlZmVyZW5jZShjb25maWcpLFxuICAgIC4uLmdlbmVyYXRlRG9Ob3RTZWN0aW9uKGNvbmZpZyksXG4gICAgLi4uZ2VuZXJhdGVWZXJpZmljYXRpb24oY29uZmlnKSxcbiAgXVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUNvbnRlbnQoZm9ybWF0OiBPdXRwdXRGb3JtYXQsIGNvbmZpZzogQ2Fub25UZW1wbGF0ZUNvbmZpZyB8IG51bGwpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gZ2VuZXJhdGVDbGF1ZGVNZChjb25maWcpXG4gICAgY2FzZSAnY29waWxvdCc6XG4gICAgICByZXR1cm4gZ2VuZXJhdGVDb3BpbG90SW5zdHJ1Y3Rpb25zKGNvbmZpZylcbiAgICBjYXNlICdjdXJzb3JydWxlcyc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBnZW5lcmF0ZUN1cnNvcnJ1bGVzKGNvbmZpZylcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZU91dHB1dChjb250ZW50OiBzdHJpbmcsIG91dHB1dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUob3V0cHV0UGF0aClcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICB9XG4gIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0UGF0aCwgY29udGVudCwgJ3V0Zi04Jylcbn1cblxuLy8g4pSA4pSA4pSAIFB1YmxpYyBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZShvcHRpb25zOiBHZW5lcmF0ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpXG5cbiAgaWYgKG9wdGlvbnMub3V0cHV0ID09PSAnYWxsJykge1xuICAgIC8vIEdlbmVyYXRlIGFsbCB0YXJnZXRzXG4gICAgY29uc3QgdGFyZ2V0cyA9IGdldEFsbFRhcmdldHMoKVxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBnZW5lcmF0ZUNvbnRlbnQodGFyZ2V0LmZvcm1hdCwgY29uZmlnKVxuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCB0YXJnZXQub3V0cHV0KVxuICAgICAgd3JpdGVPdXRwdXQoY29udGVudCwgb3V0cHV0UGF0aClcbiAgICAgIGNvbnNvbGUubG9nKGDinJMgR2VuZXJhdGVkICR7dGFyZ2V0Lm91dHB1dH1gKVxuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgICBDYW5vbiB2JHt2ZXJzaW9ufSDigJQgJHtwYXR0ZXJucy5sZW5ndGh9IHBhdHRlcm5zLCAke2d1YXJhbnRlZXMubGVuZ3RofSBndWFyYW50ZWVzYClcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhgICBUZW1wbGF0ZSBjb25maWc6ICR7Y29uZmlnLm5hbWV9YClcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5vdXRwdXQgPT09ICctJykge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBnZW5lcmF0ZUNvbnRlbnQob3B0aW9ucy5mb3JtYXQsIGNvbmZpZylcbiAgICBjb25zb2xlLmxvZyhjb250ZW50KVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBnZW5lcmF0ZUNvbnRlbnQob3B0aW9ucy5mb3JtYXQsIGNvbmZpZylcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIG9wdGlvbnMub3V0cHV0KVxuICAgIHdyaXRlT3V0cHV0KGNvbnRlbnQsIG91dHB1dFBhdGgpXG4gICAgY29uc29sZS5sb2coYOKckyBHZW5lcmF0ZWQgJHtvcHRpb25zLm91dHB1dH0gZnJvbSBDYW5vbiB2JHt2ZXJzaW9ufWApXG4gICAgY29uc29sZS5sb2coYCAgJHtwYXR0ZXJucy5sZW5ndGh9IHBhdHRlcm5zLCAke2d1YXJhbnRlZXMubGVuZ3RofSBndWFyYW50ZWVzYClcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhgICBUZW1wbGF0ZSBjb25maWc6ICR7Y29uZmlnLm5hbWV9YClcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/dist/cli/config.d.ts
DELETED
package/dist/cli/config.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
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/types/config.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export interface CanonTemplateConfig {
|
|
2
|
-
name: string;
|
|
3
|
-
generatedFiles?: {
|
|
4
|
-
path: string;
|
|
5
|
-
command: string;
|
|
6
|
-
trigger: string;
|
|
7
|
-
}[];
|
|
8
|
-
buildCommands?: {
|
|
9
|
-
script: string;
|
|
10
|
-
description: string;
|
|
11
|
-
}[];
|
|
12
|
-
colorTokens?: {
|
|
13
|
-
surface?: string[];
|
|
14
|
-
text?: string[];
|
|
15
|
-
overlay?: string[];
|
|
16
|
-
accents?: string[];
|
|
17
|
-
allowedRawClasses?: string[];
|
|
18
|
-
};
|
|
19
|
-
components?: {
|
|
20
|
-
name: string;
|
|
21
|
-
props?: string[];
|
|
22
|
-
notes?: string;
|
|
23
|
-
}[];
|
|
24
|
-
state?: {
|
|
25
|
-
library: string;
|
|
26
|
-
file: string;
|
|
27
|
-
readPattern: string;
|
|
28
|
-
writePattern: string;
|
|
29
|
-
properties?: string[];
|
|
30
|
-
};
|
|
31
|
-
rules?: {
|
|
32
|
-
type: 'do' | 'doNot';
|
|
33
|
-
rule: string;
|
|
34
|
-
}[];
|
|
35
|
-
verification?: string[];
|
|
36
|
-
}
|
package/dist/types/config.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDYW5vblRlbXBsYXRlQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nXG4gIGdlbmVyYXRlZEZpbGVzPzogeyBwYXRoOiBzdHJpbmc7IGNvbW1hbmQ6IHN0cmluZzsgdHJpZ2dlcjogc3RyaW5nIH1bXVxuICBidWlsZENvbW1hbmRzPzogeyBzY3JpcHQ6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9W11cbiAgY29sb3JUb2tlbnM/OiB7XG4gICAgc3VyZmFjZT86IHN0cmluZ1tdXG4gICAgdGV4dD86IHN0cmluZ1tdXG4gICAgb3ZlcmxheT86IHN0cmluZ1tdXG4gICAgYWNjZW50cz86IHN0cmluZ1tdXG4gICAgYWxsb3dlZFJhd0NsYXNzZXM/OiBzdHJpbmdbXVxuICB9XG4gIGNvbXBvbmVudHM/OiB7IG5hbWU6IHN0cmluZzsgcHJvcHM/OiBzdHJpbmdbXTsgbm90ZXM/OiBzdHJpbmcgfVtdXG4gIHN0YXRlPzoge1xuICAgIGxpYnJhcnk6IHN0cmluZ1xuICAgIGZpbGU6IHN0cmluZ1xuICAgIHJlYWRQYXR0ZXJuOiBzdHJpbmdcbiAgICB3cml0ZVBhdHRlcm46IHN0cmluZ1xuICAgIHByb3BlcnRpZXM/OiBzdHJpbmdbXVxuICB9XG4gIHJ1bGVzPzogeyB0eXBlOiAnZG8nIHwgJ2RvTm90JzsgcnVsZTogc3RyaW5nIH1bXVxuICB2ZXJpZmljYXRpb24/OiBzdHJpbmdbXVxufVxuIl19
|