@gallop.software/canon 2.20.0 → 2.22.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.
@@ -1,5 +1,16 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
+ // Required dev dependencies
4
+ const REQUIRED_DEV_DEPENDENCIES = ['knip', '@gallop.software/canon'];
5
+ // Required npm scripts
6
+ const REQUIRED_SCRIPTS = {
7
+ unused: 'knip',
8
+ check: 'npm run lint && npm run ts && npm run unused',
9
+ lint: 'eslint',
10
+ ts: 'tsc',
11
+ audit: 'gallop audit',
12
+ 'generate:ai-rules': 'gallop generate',
13
+ };
3
14
  // Allowed top-level directories (non-dotfiles)
4
15
  const ALLOWED_TOP_LEVEL = [
5
16
  'src',
@@ -141,6 +152,55 @@ export async function validate(projectPath, options) {
141
152
  }
142
153
  }
143
154
  }
155
+ // Check package.json for required dependencies and scripts
156
+ const packageJsonPath = path.join(absolutePath, 'package.json');
157
+ if (fs.existsSync(packageJsonPath)) {
158
+ try {
159
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
160
+ // Check dev dependencies
161
+ const devDeps = packageJson.devDependencies || {};
162
+ const deps = packageJson.dependencies || {};
163
+ const allDeps = { ...deps, ...devDeps };
164
+ for (const dep of REQUIRED_DEV_DEPENDENCIES) {
165
+ if (!allDeps[dep]) {
166
+ violations.push({
167
+ type: 'missing-dependency',
168
+ path: 'package.json',
169
+ message: `Missing required dependency: ${dep}. Run: npm install -D ${dep}`,
170
+ });
171
+ }
172
+ }
173
+ // Check scripts
174
+ const scripts = packageJson.scripts || {};
175
+ for (const [scriptName, expectedPattern] of Object.entries(REQUIRED_SCRIPTS)) {
176
+ if (!scripts[scriptName]) {
177
+ violations.push({
178
+ type: 'missing-script',
179
+ path: 'package.json',
180
+ message: `Missing required script: "${scriptName}". Expected pattern: "${expectedPattern}"`,
181
+ });
182
+ }
183
+ else if (!scripts[scriptName].includes(expectedPattern.split(' ')[0])) {
184
+ // Check if the script contains the main command (first word of expected pattern)
185
+ violations.push({
186
+ type: 'missing-script',
187
+ path: 'package.json',
188
+ message: `Script "${scriptName}" should contain "${expectedPattern.split(' ')[0]}". Found: "${scripts[scriptName]}"`,
189
+ });
190
+ }
191
+ }
192
+ }
193
+ catch (e) {
194
+ console.error('Failed to parse package.json');
195
+ }
196
+ }
197
+ else {
198
+ violations.push({
199
+ type: 'orphan-file',
200
+ path: 'package.json',
201
+ message: 'Missing package.json file',
202
+ });
203
+ }
144
204
  // Output results
145
205
  if (options.json) {
146
206
  console.log(JSON.stringify({
@@ -165,4 +225,4 @@ export async function validate(projectPath, options) {
165
225
  process.exit(1);
166
226
  }
167
227
  }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3hCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBYTVCLCtDQUErQztBQUMvQyxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLEtBQUs7SUFDTCxRQUFRO0lBQ1IsVUFBVTtJQUNWLE9BQU87SUFDUCxPQUFPO0lBQ1AsY0FBYztDQUNmLENBQUE7QUFFRCxzQ0FBc0M7QUFDdEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixLQUFLO0lBQ0wsUUFBUTtJQUNSLE1BQU07SUFDTixZQUFZO0lBQ1osT0FBTztJQUNQLFFBQVE7SUFDUixVQUFVO0lBQ1YsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0NBQ1IsQ0FBQTtBQUVELDZCQUE2QjtBQUM3QixNQUFNLHVCQUF1QixHQUFHO0lBQzlCLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsV0FBVztJQUNYLFNBQVM7SUFDVCxjQUFjO0lBQ2QsWUFBWTtJQUNaLGNBQWM7Q0FDZixDQUFBO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM3QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLElBQVk7SUFDMUMsc0VBQXNFO0lBQ3RFLCtEQUErRDtJQUMvRCx1RUFBdUU7SUFDdkUsT0FBTyxDQUFD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QUE7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUI7SUFDakIsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxJQUFJLENBQUMsU0FBUyxDQUNaO1lBQ0UsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUM5QixVQUFVO1NBQ1gsRUFDRCxJQUFJLEVBQ0osQ0FBQyxDQUNGLENBQ0YsQ0FBQTtJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxVQUFVLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxDQUFBO1lBQ3pELEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNqQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5cbmludGVyZmFjZSBWYWxpZGF0ZU9wdGlvbnMge1xuICBzdHJpY3Q6IGJvb2xlYW5cbiAganNvbjogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgVmlvbGF0aW9uIHtcbiAgdHlwZTogJ29ycGhhbi1maWxlJyB8ICdpbnZhbGlkLXRvcC1sZXZlbCcgfCAnaW52YWxpZC1zcmMtZm9sZGVyJ1xuICBwYXRoOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG59XG5cbi8vIEFsbG93ZWQgdG9wLWxldmVsIGRpcmVjdG9yaWVzIChub24tZG90ZmlsZXMpXG5jb25zdCBBTExPV0VEX1RPUF9MRVZFTCA9IFtcbiAgJ3NyYycsXG4gICdwdWJsaWMnLFxuICAnX3NjcmlwdHMnLFxuICAnX2RhdGEnLFxuICAnX2RvY3MnLFxuICAnbm9kZV9tb2R1bGVzJyxcbl1cblxuLy8gQWxsb3dlZCBmb2xkZXJzIGRpcmVjdGx5IHVuZGVyIC9zcmNcbmNvbnN0IEFMTE9XRURfU1JDX0ZPTERFUlMgPSBbXG4gICdhcHAnLFxuICAnYmxvY2tzJyxcbiAgJ2Jsb2cnLFxuICAnY29tcG9uZW50cycsXG4gICdob29rcycsXG4gICdzdHlsZXMnLFxuICAndGVtcGxhdGUnLFxuICAndG9vbHMnLFxuICAndHlwZXMnLFxuICAndXRpbHMnLFxuXVxuXG4vLyBGaWxlcyBhbGxvd2VkIGF0IHRvcCBsZXZlbFxuY29uc3QgQUxMT1dFRF9UT1BfTEVWRUxfRklMRVMgPSBbXG4gICdwYWNrYWdlLmpzb24nLFxuICAncGFja2FnZS1sb2NrLmpzb24nLFxuICAndHNjb25maWcuanNvbicsXG4gICd0c2NvbmZpZy50c2J1aWxkaW5mbycsXG4gICduZXh0LmNvbmZpZy5tanMnLFxuICAnbmV4dC5jb25maWcuanMnLFxuICAnbmV4dC1lbnYuZC50cycsXG4gICdlc2xpbnQuY29uZmlnLm1qcycsXG4gICdlc2xpbnQuY29uZmlnLmpzJyxcbiAgJy5lc2xpbnRyYy5qcycsXG4gICcuZXNsaW50cmMuanNvbicsXG4gICdwb3N0Y3NzLmNvbmZpZy5qcycsXG4gICd0YWlsd2luZC5jb25maWcuanMnLFxuICAndGFpbHdpbmQuY29uZmlnLnRzJyxcbiAgJ1JFQURNRS5tZCcsXG4gICdMSUNFTlNFJyxcbiAgJ0NIQU5HRUxPRy5tZCcsXG4gICcuZ2l0aWdub3JlJyxcbiAgJy5jdXJzb3JydWxlcycsXG5dXG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwYXRoIGlzIGEgZG90ZmlsZSBvciBkb3Rmb2xkZXJcbiAqL1xuZnVuY3Rpb24gaXNEb3RmaWxlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbmFtZS5zdGFydHNXaXRoKCcuJylcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBhdGggaXMgYW4gYXJjaGl2ZSBjb250ZW50IGZvbGRlciAoYWxsb3dlZCBuZXcgZm9sZGVycyBpbiAvc3JjKVxuICovXG5mdW5jdGlvbiBpc0FyY2hpdmVDb250ZW50Rm9sZGVyKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBBcmNoaXZlIGZvbGRlcnMgdHlwaWNhbGx5IGhhdmUgcGx1cmFsIG5hbWVzIGZvciBjb250ZW50IGNvbGxlY3Rpb25zXG4gIC8vIFdlIGFsbG93IGFueSBmb2xkZXIgdGhhdCBjb3VsZCByZWFzb25hYmx5IGJlIGFyY2hpdmUgY29udGVudFxuICAvLyBUaGlzIGlzIGEgaGV1cmlzdGljIC0gd2UgY2hlY2sgaWYgaXQgbG9va3MgbGlrZSBhIGNvbnRlbnQgY29sbGVjdGlvblxuICByZXR1cm4gIUFMTE9XRURfU1JDX0ZPTERFUlMuaW5jbHVkZXMobmFtZSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBwcm9qZWN0IHN0cnVjdHVyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGUoXG4gIHByb2plY3RQYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFZhbGlkYXRlT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW11cbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHByb2plY3RQYXRoKVxuXG4gIGlmICghZnMuZXhpc3RzU3luYyhhYnNvbHV0ZVBhdGgpKSB7XG4gICAgY29uc29sZS5lcnJvcihgUGF0aCBkb2VzIG5vdCBleGlzdDogJHtwcm9qZWN0UGF0aH1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG5cbiAgLy8gQ2hlY2sgdG9wLWxldmVsIGRpcmVjdG9yaWVzXG4gIGNvbnN0IHRvcExldmVsSXRlbXMgPSBmcy5yZWFkZGlyU3luYyhhYnNvbHV0ZVBhdGgpXG4gIGZvciAoY29uc3QgaXRlbSBvZiB0b3BMZXZlbEl0ZW1zKSB7XG4gICAgY29uc3QgaXRlbVBhdGggPSBwYXRoLmpvaW4oYWJzb2x1dGVQYXRoLCBpdGVtKVxuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhpdGVtUGF0aClcblxuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIERvdGZvbGRlcnMgYXJlIGV4ZW1wdFxuICAgICAgaWYgKGlzRG90ZmlsZShpdGVtKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGFsbG93ZWQgdG9wLWxldmVsIGRpcmVjdG9yeVxuICAgICAgaWYgKCFBTExPV0VEX1RPUF9MRVZFTC5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdpbnZhbGlkLXRvcC1sZXZlbCcsXG4gICAgICAgICAgcGF0aDogaXRlbSxcbiAgICAgICAgICBtZXNzYWdlOiBgSW52YWxpZCB0b3AtbGV2ZWwgZGlyZWN0b3J5OiAke2l0ZW19LiBBbGxvd2VkOiAke0FMTE9XRURfVE9QX0xFVkVMLmpvaW4oJywgJyl9IChkb3Rmb2xkZXJzIGV4ZW1wdClgLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJdCdzIGEgZmlsZSAtIGNoZWNrIGlmIGl0J3MgYWxsb3dlZCBhdCB0b3AgbGV2ZWxcbiAgICAgIGlmICghaXNEb3RmaWxlKGl0ZW0pICYmICFBTExPV0VEX1RPUF9MRVZFTF9GSUxFUy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICAvLyBBbGxvdyBjb21tb24gY29uZmlnIGZpbGUgcGF0dGVybnNcbiAgICAgICAgY29uc3QgaXNDb25maWdGaWxlID1cbiAgICAgICAgICBpdGVtLmVuZHNXaXRoKCcuY29uZmlnLmpzJykgfHxcbiAgICAgICAgICBpdGVtLmVuZHNXaXRoKCcuY29uZmlnLm1qcycpIHx8XG4gICAgICAgICAgaXRlbS5lbmRzV2l0aCgnLmNvbmZpZy50cycpIHx8XG4gICAgICAgICAgaXRlbS5lbmRzV2l0aCgnLmpzb24nKSB8fFxuICAgICAgICAgIGl0ZW0uZW5kc1dpdGgoJy5tZCcpIHx8XG4gICAgICAgICAgaXRlbS5lbmRzV2l0aCgnLnNoJylcblxuICAgICAgICBpZiAoIWlzQ29uZmlnRmlsZSkge1xuICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnb3JwaGFuLWZpbGUnLFxuICAgICAgICAgICAgcGF0aDogaXRlbSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBPcnBoYW4gZmlsZSBhdCBwcm9qZWN0IHJvb3Q6ICR7aXRlbX0uIEZpbGVzIHNob3VsZCBiZSBpbiBkZWZpbmVkIHpvbmVzLmAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIC9zcmMgZm9sZGVyIHN0cnVjdHVyZVxuICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKGFic29sdXRlUGF0aCwgJ3NyYycpXG4gIGlmIChmcy5leGlzdHNTeW5jKHNyY1BhdGgpKSB7XG4gICAgY29uc3Qgc3JjSXRlbXMgPSBmcy5yZWFkZGlyU3luYyhzcmNQYXRoKVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzcmNJdGVtcykge1xuICAgICAgY29uc3QgaXRlbVBhdGggPSBwYXRoLmpvaW4oc3JjUGF0aCwgaXRlbSlcbiAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhpdGVtUGF0aClcblxuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGFsbG93ZWQgL3NyYyBmb2xkZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFBTExPV0VEX1NSQ19GT0xERVJTLmluY2x1ZGVzKGl0ZW0pICYmXG4gICAgICAgICAgIWlzQXJjaGl2ZUNvbnRlbnRGb2xkZXIoaXRlbSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnZhbGlkLXNyYy1mb2xkZXInLFxuICAgICAgICAgICAgcGF0aDogYHNyYy8ke2l0ZW19YCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIGZvbGRlciBpbiAvc3JjOiAke2l0ZW19LiBBbGxvd2VkOiAke0FMTE9XRURfU1JDX0ZPTERFUlMuam9pbignLCAnKX0gb3IgYXJjaGl2ZSBjb250ZW50IGZvbGRlcnNgLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGF0IHNyYy9hcHAgaGFzIHJvdXRlIGdyb3Vwc1xuICAgIGNvbnN0IGFwcFBhdGggPSBwYXRoLmpvaW4oc3JjUGF0aCwgJ2FwcCcpXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYXBwUGF0aCkpIHtcbiAgICAgIGNvbnN0IGFwcEl0ZW1zID0gZnMucmVhZGRpclN5bmMoYXBwUGF0aClcbiAgICAgIGNvbnN0IGhhc0RlZmF1bHRHcm91cCA9IGFwcEl0ZW1zLnNvbWUoXG4gICAgICAgIChpdGVtKSA9PiBpdGVtID09PSAnKGRlZmF1bHQpJyB8fCBpdGVtLnN0YXJ0c1dpdGgoJygnKVxuICAgICAgKVxuXG4gICAgICBpZiAoIWhhc0RlZmF1bHRHcm91cCkge1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdpbnZhbGlkLXNyYy1mb2xkZXInLFxuICAgICAgICAgIHBhdGg6ICdzcmMvYXBwJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ3NyYy9hcHAgc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIHJvdXRlIGdyb3VwIGZvbGRlciAoZS5nLiwgKGRlZmF1bHQpLyknLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE91dHB1dCByZXN1bHRzXG4gIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICB7XG4gICAgICAgICAgdmFsaWQ6IHZpb2xhdGlvbnMubGVuZ3RoID09PSAwLFxuICAgICAgICAgIHZpb2xhdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIDJcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgaWYgKHZpb2xhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZygn4pyTIFByb2plY3Qgc3RydWN0dXJlIGlzIHZhbGlkJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYEZvdW5kICR7dmlvbGF0aW9ucy5sZW5ndGh9IHZpb2xhdGlvbihzKTpcXG5gKVxuICAgICAgZm9yIChjb25zdCB2IG9mIHZpb2xhdGlvbnMpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAg4pyXICR7di5tZXNzYWdlfWApXG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICB9XG4gIH1cblxuICAvLyBFeGl0IHdpdGggZXJyb3IgY29kZSBpZiBzdHJpY3QgbW9kZSBhbmQgdmlvbGF0aW9ucyBmb3VuZFxuICBpZiAob3B0aW9ucy5zdHJpY3QgJiYgdmlvbGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cbiJdfQ==
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3hCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBYTVCLDRCQUE0QjtBQUM1QixNQUFNLHlCQUF5QixHQUFHLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUE7QUFFcEUsdUJBQXVCO0FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQTJCO0lBQy9DLE1BQU0sRUFBRSxNQUFNO0lBQ2QsS0FBSyxFQUFFLDhDQUE4QztJQUNyRCxJQUFJLEVBQUUsUUFBUTtJQUNkLEVBQUUsRUFBRSxLQUFLO0lBQ1QsS0FBSyxFQUFFLGNBQWM7SUFDckIsbUJBQW1CLEVBQUUsaUJBQWlCO0NBQ3ZDLENBQUE7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixLQUFLO0lBQ0wsUUFBUTtJQUNSLFVBQVU7SUFDVixPQUFPO0lBQ1AsT0FBTztJQUNQLGNBQWM7Q0FDZixDQUFBO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsS0FBSztJQUNMLFFBQVE7SUFDUixNQUFNO0lBQ04sWUFBWTtJQUNaLE9BQU87SUFDUCxRQUFRO0lBQ1IsVUFBVTtJQUNWLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztDQUNSLENBQUE7QUFFRCw2QkFBNkI7QUFDN0IsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLFdBQVc7SUFDWCxTQUFTO0lBQ1QsY0FBYztJQUNkLFlBQVk7SUFDWixjQUFjO0NBQ2YsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsU0FBUyxTQUFTLENBQUMsSUFBWTtJQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDN0IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxJQUFZO0lBQzFDLHNFQUFzRTtJQUN0RSwrREFBK0Q7SUFDL0QsdUVBQXVFO0lBQ3ZFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDNUMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBQzVCLFdBQW1CLEVBQ25CLE9BQXdCO0lBRXhCLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUE7SUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFFN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ2xELEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDOUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUVsQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLHdCQUF3QjtZQUN4QixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwQixTQUFRO1lBQ1YsQ0FBQztZQUVELCtDQUErQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsT0FBTyxFQUFFLGdDQUFnQyxJQUFJLGNBQWMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0I7aUJBQzlHLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLG9DQUFvQztnQkFDcEMsTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO29CQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7b0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO29CQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNsQixVQUFVLENBQUMsSUFBSSxDQUFDO3dCQUNkLElBQUksRUFBRSxhQUFhO3dCQUNuQixJQUFJLEVBQUUsSUFBSTt3QkFDVixPQUFPLEVBQUUsZ0NBQWdDLElBQUkscUNBQXFDO3FCQUNuRixDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUM5QyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3hDLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7WUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDekMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUVsQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN2Qix1Q0FBdUM7Z0JBQ3ZDLElBQ0UsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNuQyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUM3QixDQUFDO29CQUNELFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsSUFBSSxFQUFFLG9CQUFvQjt3QkFDMUIsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFO3dCQUNuQixPQUFPLEVBQUUsMkJBQTJCLElBQUksY0FBYyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QjtxQkFDbEgsQ0FBQyxDQUFBO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN6QyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3hDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQ25DLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQ3ZELENBQUE7WUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsSUFBSSxFQUFFLG9CQUFvQjtvQkFDMUIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsT0FBTyxFQUNMLHdFQUF3RTtpQkFDM0UsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsMkRBQTJEO0lBQzNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQy9ELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtZQUV4RSx5QkFBeUI7WUFDekIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUE7WUFDakQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUE7WUFDM0MsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBO1lBRXZDLEtBQUssTUFBTSxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNsQixVQUFVLENBQUMsSUFBSSxDQUFDO3dCQUNkLElBQUksRUFBRSxvQkFBb0I7d0JBQzFCLElBQUksRUFBRSxjQUFjO3dCQUNwQixPQUFPLEVBQUUsZ0NBQWdDLEdBQUcseUJBQXlCLEdBQUcsRUFBRTtxQkFDM0UsQ0FBQyxDQUFBO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsZ0JBQWdCO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFBO1lBRXpDLEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUN6QixVQUFVLENBQUMsSUFBSSxDQUFDO3dCQUNkLElBQUksRUFBRSxnQkFBZ0I7d0JBQ3RCLElBQUksRUFBRSxjQUFjO3dCQUNwQixPQUFPLEVBQUUsNkJBQTZCLFVBQVUseUJBQXlCLGVBQWUsR0FBRztxQkFDNUYsQ0FBQyxDQUFBO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3hFLGlGQUFpRjtvQkFDakYsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDZCxJQUFJLEVBQUUsZ0JBQWdCO3dCQUN0QixJQUFJLEVBQUUsY0FBYzt3QkFDcEIsT0FBTyxFQUFFLFdBQVcsVUFBVSxxQkFBcUIsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUc7cUJBQ3JILENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBQy9DLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDZCxJQUFJLEVBQUUsYUFBYTtZQUNuQixJQUFJLEVBQUUsY0FBYztZQUNwQixPQUFPLEVBQUUsMkJBQTJCO1NBQ3JDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxJQUFJLENBQUMsU0FBUyxDQUNaO1lBQ0UsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUM5QixVQUFVO1NBQ1gsRUFDRCxJQUFJLEVBQ0osQ0FBQyxDQUNGLENBQ0YsQ0FBQTtJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxVQUFVLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxDQUFBO1lBQ3pELEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNqQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5cbmludGVyZmFjZSBWYWxpZGF0ZU9wdGlvbnMge1xuICBzdHJpY3Q6IGJvb2xlYW5cbiAganNvbjogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgVmlvbGF0aW9uIHtcbiAgdHlwZTogJ29ycGhhbi1maWxlJyB8ICdpbnZhbGlkLXRvcC1sZXZlbCcgfCAnaW52YWxpZC1zcmMtZm9sZGVyJyB8ICdtaXNzaW5nLWRlcGVuZGVuY3knIHwgJ21pc3Npbmctc2NyaXB0J1xuICBwYXRoOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG59XG5cbi8vIFJlcXVpcmVkIGRldiBkZXBlbmRlbmNpZXNcbmNvbnN0IFJFUVVJUkVEX0RFVl9ERVBFTkRFTkNJRVMgPSBbJ2tuaXAnLCAnQGdhbGxvcC5zb2Z0d2FyZS9jYW5vbiddXG5cbi8vIFJlcXVpcmVkIG5wbSBzY3JpcHRzXG5jb25zdCBSRVFVSVJFRF9TQ1JJUFRTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICB1bnVzZWQ6ICdrbmlwJyxcbiAgY2hlY2s6ICducG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB0cyAmJiBucG0gcnVuIHVudXNlZCcsXG4gIGxpbnQ6ICdlc2xpbnQnLFxuICB0czogJ3RzYycsXG4gIGF1ZGl0OiAnZ2FsbG9wIGF1ZGl0JyxcbiAgJ2dlbmVyYXRlOmFpLXJ1bGVzJzogJ2dhbGxvcCBnZW5lcmF0ZScsXG59XG5cbi8vIEFsbG93ZWQgdG9wLWxldmVsIGRpcmVjdG9yaWVzIChub24tZG90ZmlsZXMpXG5jb25zdCBBTExPV0VEX1RPUF9MRVZFTCA9IFtcbiAgJ3NyYycsXG4gICdwdWJsaWMnLFxuICAnX3NjcmlwdHMnLFxuICAnX2RhdGEnLFxuICAnX2RvY3MnLFxuICAnbm9kZV9tb2R1bGVzJyxcbl1cblxuLy8gQWxsb3dlZCBmb2xkZXJzIGRpcmVjdGx5IHVuZGVyIC9zcmNcbmNvbnN0IEFMTE9XRURfU1JDX0ZPTERFUlMgPSBbXG4gICdhcHAnLFxuICAnYmxvY2tzJyxcbiAgJ2Jsb2cnLFxuICAnY29tcG9uZW50cycsXG4gICdob29rcycsXG4gICdzdHlsZXMnLFxuICAndGVtcGxhdGUnLFxuICAndG9vbHMnLFxuICAndHlwZXMnLFxuICAndXRpbHMnLFxuXVxuXG4vLyBGaWxlcyBhbGxvd2VkIGF0IHRvcCBsZXZlbFxuY29uc3QgQUxMT1dFRF9UT1BfTEVWRUxfRklMRVMgPSBbXG4gICdwYWNrYWdlLmpzb24nLFxuICAncGFja2FnZS1sb2NrLmpzb24nLFxuICAndHNjb25maWcuanNvbicsXG4gICd0c2NvbmZpZy50c2J1aWxkaW5mbycsXG4gICduZXh0LmNvbmZpZy5tanMnLFxuICAnbmV4dC5jb25maWcuanMnLFxuICAnbmV4dC1lbnYuZC50cycsXG4gICdlc2xpbnQuY29uZmlnLm1qcycsXG4gICdlc2xpbnQuY29uZmlnLmpzJyxcbiAgJy5lc2xpbnRyYy5qcycsXG4gICcuZXNsaW50cmMuanNvbicsXG4gICdwb3N0Y3NzLmNvbmZpZy5qcycsXG4gICd0YWlsd2luZC5jb25maWcuanMnLFxuICAndGFpbHdpbmQuY29uZmlnLnRzJyxcbiAgJ1JFQURNRS5tZCcsXG4gICdMSUNFTlNFJyxcbiAgJ0NIQU5HRUxPRy5tZCcsXG4gICcuZ2l0aWdub3JlJyxcbiAgJy5jdXJzb3JydWxlcycsXG5dXG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwYXRoIGlzIGEgZG90ZmlsZSBvciBkb3Rmb2xkZXJcbiAqL1xuZnVuY3Rpb24gaXNEb3RmaWxlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbmFtZS5zdGFydHNXaXRoKCcuJylcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBhdGggaXMgYW4gYXJjaGl2ZSBjb250ZW50IGZvbGRlciAoYWxsb3dlZCBuZXcgZm9sZGVycyBpbiAvc3JjKVxuICovXG5mdW5jdGlvbiBpc0FyY2hpdmVDb250ZW50Rm9sZGVyKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBBcmNoaXZlIGZvbGRlcnMgdHlwaWNhbGx5IGhhdmUgcGx1cmFsIG5hbWVzIGZvciBjb250ZW50IGNvbGxlY3Rpb25zXG4gIC8vIFdlIGFsbG93IGFueSBmb2xkZXIgdGhhdCBjb3VsZCByZWFzb25hYmx5IGJlIGFyY2hpdmUgY29udGVudFxuICAvLyBUaGlzIGlzIGEgaGV1cmlzdGljIC0gd2UgY2hlY2sgaWYgaXQgbG9va3MgbGlrZSBhIGNvbnRlbnQgY29sbGVjdGlvblxuICByZXR1cm4gIUFMTE9XRURfU1JDX0ZPTERFUlMuaW5jbHVkZXMobmFtZSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBwcm9qZWN0IHN0cnVjdHVyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGUoXG4gIHByb2plY3RQYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFZhbGlkYXRlT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW11cbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHByb2plY3RQYXRoKVxuXG4gIGlmICghZnMuZXhpc3RzU3luYyhhYnNvbHV0ZVBhdGgpKSB7XG4gICAgY29uc29sZS5lcnJvcihgUGF0aCBkb2VzIG5vdCBleGlzdDogJHtwcm9qZWN0UGF0aH1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG5cbiAgLy8gQ2hlY2sgdG9wLWxldmVsIGRpcmVjdG9yaWVzXG4gIGNvbnN0IHRvcExldmVsSXRlbXMgPSBmcy5yZWFkZGlyU3luYyhhYnNvbHV0ZVBhdGgpXG4gIGZvciAoY29uc3QgaXRlbSBvZiB0b3BMZXZlbEl0ZW1zKSB7XG4gICAgY29uc3QgaXRlbVBhdGggPSBwYXRoLmpvaW4oYWJzb2x1dGVQYXRoLCBpdGVtKVxuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhpdGVtUGF0aClcblxuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIERvdGZvbGRlcnMgYXJlIGV4ZW1wdFxuICAgICAgaWYgKGlzRG90ZmlsZShpdGVtKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGFsbG93ZWQgdG9wLWxldmVsIGRpcmVjdG9yeVxuICAgICAgaWYgKCFBTExPV0VEX1RPUF9MRVZFTC5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdpbnZhbGlkLXRvcC1sZXZlbCcsXG4gICAgICAgICAgcGF0aDogaXRlbSxcbiAgICAgICAgICBtZXNzYWdlOiBgSW52YWxpZCB0b3AtbGV2ZWwgZGlyZWN0b3J5OiAke2l0ZW19LiBBbGxvd2VkOiAke0FMTE9XRURfVE9QX0xFVkVMLmpvaW4oJywgJyl9IChkb3Rmb2xkZXJzIGV4ZW1wdClgLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJdCdzIGEgZmlsZSAtIGNoZWNrIGlmIGl0J3MgYWxsb3dlZCBhdCB0b3AgbGV2ZWxcbiAgICAgIGlmICghaXNEb3RmaWxlKGl0ZW0pICYmICFBTExPV0VEX1RPUF9MRVZFTF9GSUxFUy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICAvLyBBbGxvdyBjb21tb24gY29uZmlnIGZpbGUgcGF0dGVybnNcbiAgICAgICAgY29uc3QgaXNDb25maWdGaWxlID1cbiAgICAgICAgICBpdGVtLmVuZHNXaXRoKCcuY29uZmlnLmpzJykgfHxcbiAgICAgICAgICBpdGVtLmVuZHNXaXRoKCcuY29uZmlnLm1qcycpIHx8XG4gICAgICAgICAgaXRlbS5lbmRzV2l0aCgnLmNvbmZpZy50cycpIHx8XG4gICAgICAgICAgaXRlbS5lbmRzV2l0aCgnLmpzb24nKSB8fFxuICAgICAgICAgIGl0ZW0uZW5kc1dpdGgoJy5tZCcpIHx8XG4gICAgICAgICAgaXRlbS5lbmRzV2l0aCgnLnNoJylcblxuICAgICAgICBpZiAoIWlzQ29uZmlnRmlsZSkge1xuICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnb3JwaGFuLWZpbGUnLFxuICAgICAgICAgICAgcGF0aDogaXRlbSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBPcnBoYW4gZmlsZSBhdCBwcm9qZWN0IHJvb3Q6ICR7aXRlbX0uIEZpbGVzIHNob3VsZCBiZSBpbiBkZWZpbmVkIHpvbmVzLmAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIC9zcmMgZm9sZGVyIHN0cnVjdHVyZVxuICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKGFic29sdXRlUGF0aCwgJ3NyYycpXG4gIGlmIChmcy5leGlzdHNTeW5jKHNyY1BhdGgpKSB7XG4gICAgY29uc3Qgc3JjSXRlbXMgPSBmcy5yZWFkZGlyU3luYyhzcmNQYXRoKVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzcmNJdGVtcykge1xuICAgICAgY29uc3QgaXRlbVBhdGggPSBwYXRoLmpvaW4oc3JjUGF0aCwgaXRlbSlcbiAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhpdGVtUGF0aClcblxuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGFsbG93ZWQgL3NyYyBmb2xkZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFBTExPV0VEX1NSQ19GT0xERVJTLmluY2x1ZGVzKGl0ZW0pICYmXG4gICAgICAgICAgIWlzQXJjaGl2ZUNvbnRlbnRGb2xkZXIoaXRlbSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnZhbGlkLXNyYy1mb2xkZXInLFxuICAgICAgICAgICAgcGF0aDogYHNyYy8ke2l0ZW19YCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIGZvbGRlciBpbiAvc3JjOiAke2l0ZW19LiBBbGxvd2VkOiAke0FMTE9XRURfU1JDX0ZPTERFUlMuam9pbignLCAnKX0gb3IgYXJjaGl2ZSBjb250ZW50IGZvbGRlcnNgLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGF0IHNyYy9hcHAgaGFzIHJvdXRlIGdyb3Vwc1xuICAgIGNvbnN0IGFwcFBhdGggPSBwYXRoLmpvaW4oc3JjUGF0aCwgJ2FwcCcpXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYXBwUGF0aCkpIHtcbiAgICAgIGNvbnN0IGFwcEl0ZW1zID0gZnMucmVhZGRpclN5bmMoYXBwUGF0aClcbiAgICAgIGNvbnN0IGhhc0RlZmF1bHRHcm91cCA9IGFwcEl0ZW1zLnNvbWUoXG4gICAgICAgIChpdGVtKSA9PiBpdGVtID09PSAnKGRlZmF1bHQpJyB8fCBpdGVtLnN0YXJ0c1dpdGgoJygnKVxuICAgICAgKVxuXG4gICAgICBpZiAoIWhhc0RlZmF1bHRHcm91cCkge1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdpbnZhbGlkLXNyYy1mb2xkZXInLFxuICAgICAgICAgIHBhdGg6ICdzcmMvYXBwJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ3NyYy9hcHAgc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIHJvdXRlIGdyb3VwIGZvbGRlciAoZS5nLiwgKGRlZmF1bHQpLyknLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIHBhY2thZ2UuanNvbiBmb3IgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFuZCBzY3JpcHRzXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihhYnNvbHV0ZVBhdGgsICdwYWNrYWdlLmpzb24nKVxuICBpZiAoZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKVxuICAgICAgXG4gICAgICAvLyBDaGVjayBkZXYgZGVwZW5kZW5jaWVzXG4gICAgICBjb25zdCBkZXZEZXBzID0gcGFja2FnZUpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9XG4gICAgICBjb25zdCBkZXBzID0gcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzIHx8IHt9XG4gICAgICBjb25zdCBhbGxEZXBzID0geyAuLi5kZXBzLCAuLi5kZXZEZXBzIH1cbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBkZXAgb2YgUkVRVUlSRURfREVWX0RFUEVOREVOQ0lFUykge1xuICAgICAgICBpZiAoIWFsbERlcHNbZGVwXSkge1xuICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnbWlzc2luZy1kZXBlbmRlbmN5JyxcbiAgICAgICAgICAgIHBhdGg6ICdwYWNrYWdlLmpzb24nLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQgZGVwZW5kZW5jeTogJHtkZXB9LiBSdW46IG5wbSBpbnN0YWxsIC1EICR7ZGVwfWAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBzY3JpcHRzXG4gICAgICBjb25zdCBzY3JpcHRzID0gcGFja2FnZUpzb24uc2NyaXB0cyB8fCB7fVxuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IFtzY3JpcHROYW1lLCBleHBlY3RlZFBhdHRlcm5dIG9mIE9iamVjdC5lbnRyaWVzKFJFUVVJUkVEX1NDUklQVFMpKSB7XG4gICAgICAgIGlmICghc2NyaXB0c1tzY3JpcHROYW1lXSkge1xuICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnbWlzc2luZy1zY3JpcHQnLFxuICAgICAgICAgICAgcGF0aDogJ3BhY2thZ2UuanNvbicsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBzY3JpcHQ6IFwiJHtzY3JpcHROYW1lfVwiLiBFeHBlY3RlZCBwYXR0ZXJuOiBcIiR7ZXhwZWN0ZWRQYXR0ZXJufVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKCFzY3JpcHRzW3NjcmlwdE5hbWVdLmluY2x1ZGVzKGV4cGVjdGVkUGF0dGVybi5zcGxpdCgnICcpWzBdKSkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBzY3JpcHQgY29udGFpbnMgdGhlIG1haW4gY29tbWFuZCAoZmlyc3Qgd29yZCBvZiBleHBlY3RlZCBwYXR0ZXJuKVxuICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnbWlzc2luZy1zY3JpcHQnLFxuICAgICAgICAgICAgcGF0aDogJ3BhY2thZ2UuanNvbicsXG4gICAgICAgICAgICBtZXNzYWdlOiBgU2NyaXB0IFwiJHtzY3JpcHROYW1lfVwiIHNob3VsZCBjb250YWluIFwiJHtleHBlY3RlZFBhdHRlcm4uc3BsaXQoJyAnKVswXX1cIi4gRm91bmQ6IFwiJHtzY3JpcHRzW3NjcmlwdE5hbWVdfVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHBhY2thZ2UuanNvbicpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiAnb3JwaGFuLWZpbGUnLFxuICAgICAgcGF0aDogJ3BhY2thZ2UuanNvbicsXG4gICAgICBtZXNzYWdlOiAnTWlzc2luZyBwYWNrYWdlLmpzb24gZmlsZScsXG4gICAgfSlcbiAgfVxuXG4gIC8vIE91dHB1dCByZXN1bHRzXG4gIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICB7XG4gICAgICAgICAgdmFsaWQ6IHZpb2xhdGlvbnMubGVuZ3RoID09PSAwLFxuICAgICAgICAgIHZpb2xhdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIDJcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgaWYgKHZpb2xhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZygn4pyTIFByb2plY3Qgc3RydWN0dXJlIGlzIHZhbGlkJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYEZvdW5kICR7dmlvbGF0aW9ucy5sZW5ndGh9IHZpb2xhdGlvbihzKTpcXG5gKVxuICAgICAgZm9yIChjb25zdCB2IG9mIHZpb2xhdGlvbnMpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAg4pyXICR7di5tZXNzYWdlfWApXG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICB9XG4gIH1cblxuICAvLyBFeGl0IHdpdGggZXJyb3IgY29kZSBpZiBzdHJpY3QgbW9kZSBhbmQgdmlvbGF0aW9ucyBmb3VuZFxuICBpZiAob3B0aW9ucy5zdHJpY3QgJiYgdmlvbGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cbiJdfQ==
@@ -28,6 +28,7 @@ declare const plugin: {
28
28
  'no-component-in-blocks': import("eslint").Rule.RuleModule;
29
29
  'prefer-list-components': import("eslint").Rule.RuleModule;
30
30
  'no-native-date': import("eslint").Rule.RuleModule;
31
+ 'require-canon-setup': import("eslint").Rule.RuleModule;
31
32
  };
32
33
  /**
33
34
  * Recommended rule configurations - spread into your ESLint config
@@ -46,6 +47,7 @@ declare const plugin: {
46
47
  readonly 'gallop/no-component-in-blocks': "warn";
47
48
  readonly 'gallop/prefer-list-components': "warn";
48
49
  readonly 'gallop/no-native-date': "warn";
50
+ readonly 'gallop/require-canon-setup': "warn";
49
51
  };
50
52
  };
51
53
  export default plugin;
@@ -10,6 +10,7 @@ import noComponentInBlocks from './rules/no-component-in-blocks.js';
10
10
  import preferListComponents from './rules/prefer-list-components.js';
11
11
  import noNativeDate from './rules/no-native-date.js';
12
12
  import blockNamingConvention from './rules/block-naming-convention.js';
13
+ import requireCanonSetup from './rules/require-canon-setup.js';
13
14
  /**
14
15
  * All Canon ESLint rules with recommended severity levels
15
16
  */
@@ -26,6 +27,7 @@ const recommended = {
26
27
  'gallop/no-component-in-blocks': 'warn',
27
28
  'gallop/prefer-list-components': 'warn',
28
29
  'gallop/no-native-date': 'warn',
30
+ 'gallop/require-canon-setup': 'warn',
29
31
  };
30
32
  const plugin = {
31
33
  meta: {
@@ -45,6 +47,7 @@ const plugin = {
45
47
  'no-component-in-blocks': noComponentInBlocks,
46
48
  'prefer-list-components': preferListComponents,
47
49
  'no-native-date': noNativeDate,
50
+ 'require-canon-setup': requireCanonSetup,
48
51
  },
49
52
  /**
50
53
  * Recommended rule configurations - spread into your ESLint config
@@ -53,4 +56,4 @@ const plugin = {
53
56
  recommended,
54
57
  };
55
58
  export default plugin;
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXNsaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFBO0FBQ3hELE9BQU8sb0JBQW9CLE1BQU0sb0NBQW9DLENBQUE7QUFDckUsT0FBTyxvQkFBb0IsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNwRSxPQUFPLDBCQUEwQixNQUFNLHlDQUF5QyxDQUFBO0FBQ2hGLE9BQU8sc0JBQXNCLE1BQU0scUNBQXFDLENBQUE7QUFDeEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLGtCQUFrQixNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sNEJBQTRCLE1BQU0sNENBQTRDLENBQUE7QUFDckYsT0FBTyxtQkFBbUIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNuRSxPQUFPLG9CQUFvQixNQUFNLG1DQUFtQyxDQUFBO0FBQ3BFLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8scUJBQXFCLE1BQU0sb0NBQW9DLENBQUE7QUFFdEU7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNsQix5QkFBeUIsRUFBRSxNQUFNO0lBQ2pDLGdDQUFnQyxFQUFFLE1BQU07SUFDeEMsZ0NBQWdDLEVBQUUsTUFBTTtJQUN4QywrQkFBK0IsRUFBRSxNQUFNO0lBQ3ZDLHFDQUFxQyxFQUFFLE1BQU07SUFDN0MsaUNBQWlDLEVBQUUsTUFBTTtJQUN6Qyw0QkFBNEIsRUFBRSxNQUFNO0lBQ3BDLDhCQUE4QixFQUFFLE1BQU07SUFDdEMsd0NBQXdDLEVBQUUsTUFBTTtJQUNoRCwrQkFBK0IsRUFBRSxNQUFNO0lBQ3ZDLCtCQUErQixFQUFFLE1BQU07SUFDdkMsdUJBQXVCLEVBQUUsTUFBTTtDQUN2QixDQUFBO0FBRVYsTUFBTSxNQUFNLEdBQUc7SUFDYixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLE9BQU8sRUFBRSxRQUFRO0tBQ2xCO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsa0JBQWtCLEVBQUUsY0FBYztRQUNsQyx5QkFBeUIsRUFBRSxxQkFBcUI7UUFDaEQseUJBQXlCLEVBQUUsb0JBQW9CO1FBQy9DLHdCQUF3QixFQUFFLG9CQUFvQjtRQUM5Qyw4QkFBOEIsRUFBRSwwQkFBMEI7UUFDMUQsMEJBQTBCLEVBQUUsc0JBQXNCO1FBQ2xELHFCQUFxQixFQUFFLGlCQUFpQjtRQUN4Qyx1QkFBdUIsRUFBRSxrQkFBa0I7UUFDM0MsaUNBQWlDLEVBQUUsNEJBQTRCO1FBQy9ELHdCQUF3QixFQUFFLG1CQUFtQjtRQUM3Qyx3QkFBd0IsRUFBRSxvQkFBb0I7UUFDOUMsZ0JBQWdCLEVBQUUsWUFBWTtLQUMvQjtJQUNEOzs7T0FHRztJQUNILFdBQVc7Q0FDWixDQUFBO0FBRUQsZUFBZSxNQUFNLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbm9DbGllbnRCbG9ja3MgZnJvbSAnLi9ydWxlcy9uby1jbGllbnQtYmxvY2tzLmpzJ1xuaW1wb3J0IG5vQ29udGFpbmVySW5TZWN0aW9uIGZyb20gJy4vcnVsZXMvbm8tY29udGFpbmVyLWluLXNlY3Rpb24uanMnXG5pbXBvcnQgcHJlZmVyQ29tcG9uZW50UHJvcHMgZnJvbSAnLi9ydWxlcy9wcmVmZXItY29tcG9uZW50LXByb3BzLmpzJ1xuaW1wb3J0IHByZWZlclR5cG9ncmFwaHlDb21wb25lbnRzIGZyb20gJy4vcnVsZXMvcHJlZmVyLXR5cG9ncmFwaHktY29tcG9uZW50cy5qcydcbmltcG9ydCBwcmVmZXJMYXlvdXRDb21wb25lbnRzIGZyb20gJy4vcnVsZXMvcHJlZmVyLWxheW91dC1jb21wb25lbnRzLmpzJ1xuaW1wb3J0IG5vQXJiaXRyYXJ5Q29sb3JzIGZyb20gJy4vcnVsZXMvbm8tYXJiaXRyYXJ5LWNvbG9ycy5qcydcbmltcG9ydCBub0Nyb3NzWm9uZUltcG9ydHMgZnJvbSAnLi9ydWxlcy9uby1jcm9zcy16b25lLWltcG9ydHMuanMnXG5pbXBvcnQgbm9OYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlciBmcm9tICcuL3J1bGVzL25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIuanMnXG5pbXBvcnQgbm9Db21wb25lbnRJbkJsb2NrcyBmcm9tICcuL3J1bGVzL25vLWNvbXBvbmVudC1pbi1ibG9ja3MuanMnXG5pbXBvcnQgcHJlZmVyTGlzdENvbXBvbmVudHMgZnJvbSAnLi9ydWxlcy9wcmVmZXItbGlzdC1jb21wb25lbnRzLmpzJ1xuaW1wb3J0IG5vTmF0aXZlRGF0ZSBmcm9tICcuL3J1bGVzL25vLW5hdGl2ZS1kYXRlLmpzJ1xuaW1wb3J0IGJsb2NrTmFtaW5nQ29udmVudGlvbiBmcm9tICcuL3J1bGVzL2Jsb2NrLW5hbWluZy1jb252ZW50aW9uLmpzJ1xuXG4vKipcbiAqIEFsbCBDYW5vbiBFU0xpbnQgcnVsZXMgd2l0aCByZWNvbW1lbmRlZCBzZXZlcml0eSBsZXZlbHNcbiAqL1xuY29uc3QgcmVjb21tZW5kZWQgPSB7XG4gICdnYWxsb3Avbm8tY2xpZW50LWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9ibG9jay1uYW1pbmctY29udmVudGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jb250YWluZXItaW4tc2VjdGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItY29tcG9uZW50LXByb3BzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMnOiAnd2FybicsXG4gICdnYWxsb3AvcHJlZmVyLWxheW91dC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLWFyYml0cmFyeS1jb2xvcnMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tY3Jvc3Mtem9uZS1pbXBvcnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInOiAnd2FybicsXG4gICdnYWxsb3Avbm8tY29tcG9uZW50LWluLWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItbGlzdC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLW5hdGl2ZS1kYXRlJzogJ3dhcm4nLFxufSBhcyBjb25zdFxuXG5jb25zdCBwbHVnaW4gPSB7XG4gIG1ldGE6IHtcbiAgICBuYW1lOiAnZXNsaW50LXBsdWdpbi1nYWxsb3AnLFxuICAgIHZlcnNpb246ICcyLjEyLjAnLFxuICB9LFxuICBydWxlczoge1xuICAgICduby1jbGllbnQtYmxvY2tzJzogbm9DbGllbnRCbG9ja3MsXG4gICAgJ2Jsb2NrLW5hbWluZy1jb252ZW50aW9uJzogYmxvY2tOYW1pbmdDb252ZW50aW9uLFxuICAgICduby1jb250YWluZXItaW4tc2VjdGlvbic6IG5vQ29udGFpbmVySW5TZWN0aW9uLFxuICAgICdwcmVmZXItY29tcG9uZW50LXByb3BzJzogcHJlZmVyQ29tcG9uZW50UHJvcHMsXG4gICAgJ3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMnOiBwcmVmZXJUeXBvZ3JhcGh5Q29tcG9uZW50cyxcbiAgICAncHJlZmVyLWxheW91dC1jb21wb25lbnRzJzogcHJlZmVyTGF5b3V0Q29tcG9uZW50cyxcbiAgICAnbm8tYXJiaXRyYXJ5LWNvbG9ycyc6IG5vQXJiaXRyYXJ5Q29sb3JzLFxuICAgICduby1jcm9zcy16b25lLWltcG9ydHMnOiBub0Nyb3NzWm9uZUltcG9ydHMsXG4gICAgJ25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInOiBub05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyLFxuICAgICduby1jb21wb25lbnQtaW4tYmxvY2tzJzogbm9Db21wb25lbnRJbkJsb2NrcyxcbiAgICAncHJlZmVyLWxpc3QtY29tcG9uZW50cyc6IHByZWZlckxpc3RDb21wb25lbnRzLFxuICAgICduby1uYXRpdmUtZGF0ZSc6IG5vTmF0aXZlRGF0ZSxcbiAgfSxcbiAgLyoqXG4gICAqIFJlY29tbWVuZGVkIHJ1bGUgY29uZmlndXJhdGlvbnMgLSBzcHJlYWQgaW50byB5b3VyIEVTTGludCBjb25maWdcbiAgICogQGV4YW1wbGUgcnVsZXM6IHsgLi4uZ2FsbG9wLnJlY29tbWVuZGVkIH1cbiAgICovXG4gIHJlY29tbWVuZGVkLFxufVxuXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5cbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXNsaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFBO0FBQ3hELE9BQU8sb0JBQW9CLE1BQU0sb0NBQW9DLENBQUE7QUFDckUsT0FBTyxvQkFBb0IsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNwRSxPQUFPLDBCQUEwQixNQUFNLHlDQUF5QyxDQUFBO0FBQ2hGLE9BQU8sc0JBQXNCLE1BQU0scUNBQXFDLENBQUE7QUFDeEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLGtCQUFrQixNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sNEJBQTRCLE1BQU0sNENBQTRDLENBQUE7QUFDckYsT0FBTyxtQkFBbUIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNuRSxPQUFPLG9CQUFvQixNQUFNLG1DQUFtQyxDQUFBO0FBQ3BFLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8scUJBQXFCLE1BQU0sb0NBQW9DLENBQUE7QUFDdEUsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUU5RDs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHO0lBQ2xCLHlCQUF5QixFQUFFLE1BQU07SUFDakMsZ0NBQWdDLEVBQUUsTUFBTTtJQUN4QyxnQ0FBZ0MsRUFBRSxNQUFNO0lBQ3hDLCtCQUErQixFQUFFLE1BQU07SUFDdkMscUNBQXFDLEVBQUUsTUFBTTtJQUM3QyxpQ0FBaUMsRUFBRSxNQUFNO0lBQ3pDLDRCQUE0QixFQUFFLE1BQU07SUFDcEMsOEJBQThCLEVBQUUsTUFBTTtJQUN0Qyx3Q0FBd0MsRUFBRSxNQUFNO0lBQ2hELCtCQUErQixFQUFFLE1BQU07SUFDdkMsK0JBQStCLEVBQUUsTUFBTTtJQUN2Qyx1QkFBdUIsRUFBRSxNQUFNO0lBQy9CLDRCQUE0QixFQUFFLE1BQU07Q0FDNUIsQ0FBQTtBQUVWLE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixPQUFPLEVBQUUsUUFBUTtLQUNsQjtJQUNELEtBQUssRUFBRTtRQUNMLGtCQUFrQixFQUFFLGNBQWM7UUFDbEMseUJBQXlCLEVBQUUscUJBQXFCO1FBQ2hELHlCQUF5QixFQUFFLG9CQUFvQjtRQUMvQyx3QkFBd0IsRUFBRSxvQkFBb0I7UUFDOUMsOEJBQThCLEVBQUUsMEJBQTBCO1FBQzFELDBCQUEwQixFQUFFLHNCQUFzQjtRQUNsRCxxQkFBcUIsRUFBRSxpQkFBaUI7UUFDeEMsdUJBQXVCLEVBQUUsa0JBQWtCO1FBQzNDLGlDQUFpQyxFQUFFLDRCQUE0QjtRQUMvRCx3QkFBd0IsRUFBRSxtQkFBbUI7UUFDN0Msd0JBQXdCLEVBQUUsb0JBQW9CO1FBQzlDLGdCQUFnQixFQUFFLFlBQVk7UUFDOUIscUJBQXFCLEVBQUUsaUJBQWlCO0tBQ3pDO0lBQ0Q7OztPQUdHO0lBQ0gsV0FBVztDQUNaLENBQUE7QUFFRCxlQUFlLE1BQU0sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub0NsaWVudEJsb2NrcyBmcm9tICcuL3J1bGVzL25vLWNsaWVudC1ibG9ja3MuanMnXG5pbXBvcnQgbm9Db250YWluZXJJblNlY3Rpb24gZnJvbSAnLi9ydWxlcy9uby1jb250YWluZXItaW4tc2VjdGlvbi5qcydcbmltcG9ydCBwcmVmZXJDb21wb25lbnRQcm9wcyBmcm9tICcuL3J1bGVzL3ByZWZlci1jb21wb25lbnQtcHJvcHMuanMnXG5pbXBvcnQgcHJlZmVyVHlwb2dyYXBoeUNvbXBvbmVudHMgZnJvbSAnLi9ydWxlcy9wcmVmZXItdHlwb2dyYXBoeS1jb21wb25lbnRzLmpzJ1xuaW1wb3J0IHByZWZlckxheW91dENvbXBvbmVudHMgZnJvbSAnLi9ydWxlcy9wcmVmZXItbGF5b3V0LWNvbXBvbmVudHMuanMnXG5pbXBvcnQgbm9BcmJpdHJhcnlDb2xvcnMgZnJvbSAnLi9ydWxlcy9uby1hcmJpdHJhcnktY29sb3JzLmpzJ1xuaW1wb3J0IG5vQ3Jvc3Nab25lSW1wb3J0cyBmcm9tICcuL3J1bGVzL25vLWNyb3NzLXpvbmUtaW1wb3J0cy5qcydcbmltcG9ydCBub05hdGl2ZUludGVyc2VjdGlvbk9ic2VydmVyIGZyb20gJy4vcnVsZXMvbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlci5qcydcbmltcG9ydCBub0NvbXBvbmVudEluQmxvY2tzIGZyb20gJy4vcnVsZXMvbm8tY29tcG9uZW50LWluLWJsb2Nrcy5qcydcbmltcG9ydCBwcmVmZXJMaXN0Q29tcG9uZW50cyBmcm9tICcuL3J1bGVzL3ByZWZlci1saXN0LWNvbXBvbmVudHMuanMnXG5pbXBvcnQgbm9OYXRpdmVEYXRlIGZyb20gJy4vcnVsZXMvbm8tbmF0aXZlLWRhdGUuanMnXG5pbXBvcnQgYmxvY2tOYW1pbmdDb252ZW50aW9uIGZyb20gJy4vcnVsZXMvYmxvY2stbmFtaW5nLWNvbnZlbnRpb24uanMnXG5pbXBvcnQgcmVxdWlyZUNhbm9uU2V0dXAgZnJvbSAnLi9ydWxlcy9yZXF1aXJlLWNhbm9uLXNldHVwLmpzJ1xuXG4vKipcbiAqIEFsbCBDYW5vbiBFU0xpbnQgcnVsZXMgd2l0aCByZWNvbW1lbmRlZCBzZXZlcml0eSBsZXZlbHNcbiAqL1xuY29uc3QgcmVjb21tZW5kZWQgPSB7XG4gICdnYWxsb3Avbm8tY2xpZW50LWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9ibG9jay1uYW1pbmctY29udmVudGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jb250YWluZXItaW4tc2VjdGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItY29tcG9uZW50LXByb3BzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMnOiAnd2FybicsXG4gICdnYWxsb3AvcHJlZmVyLWxheW91dC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLWFyYml0cmFyeS1jb2xvcnMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tY3Jvc3Mtem9uZS1pbXBvcnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInOiAnd2FybicsXG4gICdnYWxsb3Avbm8tY29tcG9uZW50LWluLWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItbGlzdC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLW5hdGl2ZS1kYXRlJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3JlcXVpcmUtY2Fub24tc2V0dXAnOiAnd2FybicsXG59IGFzIGNvbnN0XG5cbmNvbnN0IHBsdWdpbiA9IHtcbiAgbWV0YToge1xuICAgIG5hbWU6ICdlc2xpbnQtcGx1Z2luLWdhbGxvcCcsXG4gICAgdmVyc2lvbjogJzIuMTIuMCcsXG4gIH0sXG4gIHJ1bGVzOiB7XG4gICAgJ25vLWNsaWVudC1ibG9ja3MnOiBub0NsaWVudEJsb2NrcyxcbiAgICAnYmxvY2stbmFtaW5nLWNvbnZlbnRpb24nOiBibG9ja05hbWluZ0NvbnZlbnRpb24sXG4gICAgJ25vLWNvbnRhaW5lci1pbi1zZWN0aW9uJzogbm9Db250YWluZXJJblNlY3Rpb24sXG4gICAgJ3ByZWZlci1jb21wb25lbnQtcHJvcHMnOiBwcmVmZXJDb21wb25lbnRQcm9wcyxcbiAgICAncHJlZmVyLXR5cG9ncmFwaHktY29tcG9uZW50cyc6IHByZWZlclR5cG9ncmFwaHlDb21wb25lbnRzLFxuICAgICdwcmVmZXItbGF5b3V0LWNvbXBvbmVudHMnOiBwcmVmZXJMYXlvdXRDb21wb25lbnRzLFxuICAgICduby1hcmJpdHJhcnktY29sb3JzJzogbm9BcmJpdHJhcnlDb2xvcnMsXG4gICAgJ25vLWNyb3NzLXpvbmUtaW1wb3J0cyc6IG5vQ3Jvc3Nab25lSW1wb3J0cyxcbiAgICAnbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlcic6IG5vTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsXG4gICAgJ25vLWNvbXBvbmVudC1pbi1ibG9ja3MnOiBub0NvbXBvbmVudEluQmxvY2tzLFxuICAgICdwcmVmZXItbGlzdC1jb21wb25lbnRzJzogcHJlZmVyTGlzdENvbXBvbmVudHMsXG4gICAgJ25vLW5hdGl2ZS1kYXRlJzogbm9OYXRpdmVEYXRlLFxuICAgICdyZXF1aXJlLWNhbm9uLXNldHVwJzogcmVxdWlyZUNhbm9uU2V0dXAsXG4gIH0sXG4gIC8qKlxuICAgKiBSZWNvbW1lbmRlZCBydWxlIGNvbmZpZ3VyYXRpb25zIC0gc3ByZWFkIGludG8geW91ciBFU0xpbnQgY29uZmlnXG4gICAqIEBleGFtcGxlIHJ1bGVzOiB7IC4uLmdhbGxvcC5yZWNvbW1lbmRlZCB9XG4gICAqL1xuICByZWNvbW1lbmRlZCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luXG4iXX0=
@@ -0,0 +1,4 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export declare function resetReported(): void;
4
+ export default rule;
@@ -0,0 +1,106 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { getCanonUrl, getCanonPattern } from '../utils/canon.js';
4
+ const RULE_NAME = 'require-canon-setup';
5
+ const pattern = getCanonPattern(RULE_NAME);
6
+ // Track if we've already reported for this lint run
7
+ let hasReported = false;
8
+ // Required dev dependencies
9
+ const REQUIRED_DEPENDENCIES = ['knip', '@gallop.software/canon'];
10
+ // Required npm scripts (key = script name, value = must contain this string)
11
+ const REQUIRED_SCRIPTS = {
12
+ unused: 'knip',
13
+ check: 'npm run',
14
+ lint: 'eslint',
15
+ ts: 'tsc',
16
+ audit: 'gallop',
17
+ 'generate:ai-rules': 'gallop',
18
+ };
19
+ const rule = {
20
+ meta: {
21
+ type: 'suggestion',
22
+ docs: {
23
+ description: pattern?.summary || 'Require Canon setup in package.json',
24
+ recommended: true,
25
+ url: getCanonUrl(RULE_NAME),
26
+ },
27
+ messages: {
28
+ missingDependency: `[Canon] Missing required dependency: "{{dep}}". Run: npm install -D {{dep}}`,
29
+ missingScript: `[Canon] Missing required npm script: "{{script}}". Add to package.json scripts.`,
30
+ invalidScript: `[Canon] Script "{{script}}" should contain "{{expected}}".`,
31
+ },
32
+ schema: [],
33
+ },
34
+ create(context) {
35
+ // Only check once per lint run, on the first file
36
+ if (hasReported) {
37
+ return {};
38
+ }
39
+ // Find the project root (where package.json is)
40
+ const filename = context.filename || context.getFilename();
41
+ let dir = path.dirname(filename);
42
+ let packageJsonPath = '';
43
+ // Walk up to find package.json
44
+ while (dir !== path.dirname(dir)) {
45
+ const candidate = path.join(dir, 'package.json');
46
+ if (fs.existsSync(candidate)) {
47
+ packageJsonPath = candidate;
48
+ break;
49
+ }
50
+ dir = path.dirname(dir);
51
+ }
52
+ if (!packageJsonPath) {
53
+ return {};
54
+ }
55
+ return {
56
+ Program(node) {
57
+ if (hasReported)
58
+ return;
59
+ hasReported = true;
60
+ try {
61
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
62
+ const devDeps = packageJson.devDependencies || {};
63
+ const deps = packageJson.dependencies || {};
64
+ const allDeps = { ...deps, ...devDeps };
65
+ const scripts = packageJson.scripts || {};
66
+ // Check dependencies
67
+ for (const dep of REQUIRED_DEPENDENCIES) {
68
+ if (!allDeps[dep]) {
69
+ context.report({
70
+ node,
71
+ messageId: 'missingDependency',
72
+ data: { dep },
73
+ });
74
+ }
75
+ }
76
+ // Check scripts
77
+ for (const [scriptName, expectedContains] of Object.entries(REQUIRED_SCRIPTS)) {
78
+ if (!scripts[scriptName]) {
79
+ context.report({
80
+ node,
81
+ messageId: 'missingScript',
82
+ data: { script: scriptName },
83
+ });
84
+ }
85
+ else if (!scripts[scriptName].includes(expectedContains)) {
86
+ context.report({
87
+ node,
88
+ messageId: 'invalidScript',
89
+ data: { script: scriptName, expected: expectedContains },
90
+ });
91
+ }
92
+ }
93
+ }
94
+ catch {
95
+ // Ignore parse errors
96
+ }
97
+ },
98
+ };
99
+ },
100
+ };
101
+ // Reset the flag when the module is reloaded (for watch mode)
102
+ export function resetReported() {
103
+ hasReported = false;
104
+ }
105
+ export default rule;
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS1jYW5vbi1zZXR1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lc2xpbnQvcnVsZXMvcmVxdWlyZS1jYW5vbi1zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN4QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFBO0FBQ3ZDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUxQyxvREFBb0Q7QUFDcEQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFBO0FBRXZCLDRCQUE0QjtBQUM1QixNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUE7QUFFaEUsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQTJCO0lBQy9DLE1BQU0sRUFBRSxNQUFNO0lBQ2QsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLFFBQVE7SUFDZCxFQUFFLEVBQUUsS0FBSztJQUNULEtBQUssRUFBRSxRQUFRO0lBQ2YsbUJBQW1CLEVBQUUsUUFBUTtDQUM5QixDQUFBO0FBRUQsTUFBTSxJQUFJLEdBQW9CO0lBQzVCLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxZQUFZO1FBQ2xCLElBQUksRUFBRTtZQUNKLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLHFDQUFxQztZQUN0RSxXQUFXLEVBQUUsSUFBSTtZQUNqQixHQUFHLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQztTQUM1QjtRQUNELFFBQVEsRUFBRTtZQUNSLGlCQUFpQixFQUFFLDZFQUE2RTtZQUNoRyxhQUFhLEVBQUUsaUZBQWlGO1lBQ2hHLGFBQWEsRUFBRSw0REFBNEQ7U0FD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Q0FBQztnQkFDSCxDQUFDO2dCQUFDLE1BQU0sQ0FBQztvQkFDUCxzQkFBc0I7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQTtJQUNILENBQUM7Q0FDRixDQUFBO0FBRUQsOERBQThEO0FBQzlELE1BQU0sVUFBVSxhQUFhO0lBQzNCLFdBQVcsR0FBRyxLQUFLLENBQUE7QUFDckIsQ0FBQztBQUVELGVBQWUsSUFBSSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50J1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBnZXRDYW5vblVybCwgZ2V0Q2Fub25QYXR0ZXJuIH0gZnJvbSAnLi4vdXRpbHMvY2Fub24uanMnXG5cbmNvbnN0IFJVTEVfTkFNRSA9ICdyZXF1aXJlLWNhbm9uLXNldHVwJ1xuY29uc3QgcGF0dGVybiA9IGdldENhbm9uUGF0dGVybihSVUxFX05BTUUpXG5cbi8vIFRyYWNrIGlmIHdlJ3ZlIGFscmVhZHkgcmVwb3J0ZWQgZm9yIHRoaXMgbGludCBydW5cbmxldCBoYXNSZXBvcnRlZCA9IGZhbHNlXG5cbi8vIFJlcXVpcmVkIGRldiBkZXBlbmRlbmNpZXNcbmNvbnN0IFJFUVVJUkVEX0RFUEVOREVOQ0lFUyA9IFsna25pcCcsICdAZ2FsbG9wLnNvZnR3YXJlL2Nhbm9uJ11cblxuLy8gUmVxdWlyZWQgbnBtIHNjcmlwdHMgKGtleSA9IHNjcmlwdCBuYW1lLCB2YWx1ZSA9IG11c3QgY29udGFpbiB0aGlzIHN0cmluZylcbmNvbnN0IFJFUVVJUkVEX1NDUklQVFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHVudXNlZDogJ2tuaXAnLFxuICBjaGVjazogJ25wbSBydW4nLFxuICBsaW50OiAnZXNsaW50JyxcbiAgdHM6ICd0c2MnLFxuICBhdWRpdDogJ2dhbGxvcCcsXG4gICdnZW5lcmF0ZTphaS1ydWxlcyc6ICdnYWxsb3AnLFxufVxuXG5jb25zdCBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246IHBhdHRlcm4/LnN1bW1hcnkgfHwgJ1JlcXVpcmUgQ2Fub24gc2V0dXAgaW4gcGFja2FnZS5qc29uJyxcbiAgICAgIHJlY29tbWVuZGVkOiB0cnVlLFxuICAgICAgdXJsOiBnZXRDYW5vblVybChSVUxFX05BTUUpLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIG1pc3NpbmdEZXBlbmRlbmN5OiBgW0Nhbm9uXSBNaXNzaW5nIHJlcXVpcmVkIGRlcGVuZGVuY3k6IFwie3tkZXB9fVwiLiBSdW46IG5wbSBpbnN0YWxsIC1EIHt7ZGVwfX1gLFxuICAgICAgbWlzc2luZ1NjcmlwdDogYFtDYW5vbl0gTWlzc2luZyByZXF1aXJlZCBucG0gc2NyaXB0OiBcInt7c2NyaXB0fX1cIi4gQWRkIHRvIHBhY2thZ2UuanNvbiBzY3JpcHRzLmAsXG4gICAgICBpbnZhbGlkU2NyaXB0OiBgW0Nhbm9uXSBTY3JpcHQgXCJ7e3NjcmlwdH19XCIgc2hvdWxkIGNvbnRhaW4gXCJ7e2V4cGVjdGVkfX1cIi5gLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIC8vIE9ubHkgY2hlY2sgb25jZSBwZXIgbGludCBydW4sIG9uIHRoZSBmaXJzdCBmaWxlXG4gICAgaWYgKGhhc1JlcG9ydGVkKSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBwcm9qZWN0IHJvb3QgKHdoZXJlIHBhY2thZ2UuanNvbiBpcylcbiAgICBjb25zdCBmaWxlbmFtZSA9IGNvbnRleHQuZmlsZW5hbWUgfHwgY29udGV4dC5nZXRGaWxlbmFtZSgpXG4gICAgbGV0IGRpciA9IHBhdGguZGlybmFtZShmaWxlbmFtZSlcbiAgICBsZXQgcGFja2FnZUpzb25QYXRoID0gJydcbiAgICBcbiAgICAvLyBXYWxrIHVwIHRvIGZpbmQgcGFja2FnZS5qc29uXG4gICAgd2hpbGUgKGRpciAhPT0gcGF0aC5kaXJuYW1lKGRpcikpIHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHBhdGguam9pbihkaXIsICdwYWNrYWdlLmpzb24nKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY2FuZGlkYXRlKSkge1xuICAgICAgICBwYWNrYWdlSnNvblBhdGggPSBjYW5kaWRhdGVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRpciA9IHBhdGguZGlybmFtZShkaXIpXG4gICAgfVxuXG4gICAgaWYgKCFwYWNrYWdlSnNvblBhdGgpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpIHtcbiAgICAgICAgaWYgKGhhc1JlcG9ydGVkKSByZXR1cm5cbiAgICAgICAgaGFzUmVwb3J0ZWQgPSB0cnVlXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0ZjgnKSlcbiAgICAgICAgICBjb25zdCBkZXZEZXBzID0gcGFja2FnZUpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9XG4gICAgICAgICAgY29uc3QgZGVwcyA9IHBhY2thZ2VKc29uLmRlcGVuZGVuY2llcyB8fCB7fVxuICAgICAgICAgIGNvbnN0IGFsbERlcHMgPSB7IC4uLmRlcHMsIC4uLmRldkRlcHMgfVxuICAgICAgICAgIGNvbnN0IHNjcmlwdHMgPSBwYWNrYWdlSnNvbi5zY3JpcHRzIHx8IHt9XG5cbiAgICAgICAgICAvLyBDaGVjayBkZXBlbmRlbmNpZXNcbiAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBSRVFVSVJFRF9ERVBFTkRFTkNJRVMpIHtcbiAgICAgICAgICAgIGlmICghYWxsRGVwc1tkZXBdKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogJ21pc3NpbmdEZXBlbmRlbmN5JyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IGRlcCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIHNjcmlwdHNcbiAgICAgICAgICBmb3IgKGNvbnN0IFtzY3JpcHROYW1lLCBleHBlY3RlZENvbnRhaW5zXSBvZiBPYmplY3QuZW50cmllcyhSRVFVSVJFRF9TQ1JJUFRTKSkge1xuICAgICAgICAgICAgaWYgKCFzY3JpcHRzW3NjcmlwdE5hbWVdKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogJ21pc3NpbmdTY3JpcHQnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgc2NyaXB0OiBzY3JpcHROYW1lIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzY3JpcHRzW3NjcmlwdE5hbWVdLmluY2x1ZGVzKGV4cGVjdGVkQ29udGFpbnMpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogJ2ludmFsaWRTY3JpcHQnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgc2NyaXB0OiBzY3JpcHROYW1lLCBleHBlY3RlZDogZXhwZWN0ZWRDb250YWlucyB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlIHBhcnNlIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH1cbiAgfSxcbn1cblxuLy8gUmVzZXQgdGhlIGZsYWcgd2hlbiB0aGUgbW9kdWxlIGlzIHJlbG9hZGVkIChmb3Igd2F0Y2ggbW9kZSlcbmV4cG9ydCBmdW5jdGlvbiByZXNldFJlcG9ydGVkKCkge1xuICBoYXNSZXBvcnRlZCA9IGZhbHNlXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJ1bGVcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gallop.software/canon",
3
- "version": "2.20.0",
3
+ "version": "2.22.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",