@gallop.software/canon 2.16.0 → 2.17.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/dist/eslint/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ declare const plugin: {
|
|
|
7
7
|
'no-client-blocks': import("@typescript-eslint/utils/ts-eslint").RuleModule<"noClientBlocks", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
8
8
|
name: string;
|
|
9
9
|
};
|
|
10
|
-
'block-naming-convention': import("@typescript-eslint/utils/ts-eslint").RuleModule<"blockNamingMismatch", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
10
|
+
'block-naming-convention': import("@typescript-eslint/utils/ts-eslint").RuleModule<"blockNamingMismatch" | "blockNamingNoNumber", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
11
11
|
name: string;
|
|
12
12
|
};
|
|
13
13
|
'no-container-in-section': import("@typescript-eslint/utils/ts-eslint").RuleModule<"noContainerInSection", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
@@ -28,9 +28,6 @@ declare const plugin: {
|
|
|
28
28
|
'no-cross-zone-imports': import("@typescript-eslint/utils/ts-eslint").RuleModule<"blocksImportBlocks" | "componentsImportBlocks" | "runtimeImportScripts", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
29
29
|
name: string;
|
|
30
30
|
};
|
|
31
|
-
'no-data-imports': import("@typescript-eslint/utils/ts-eslint").RuleModule<"noDataImports", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
32
|
-
name: string;
|
|
33
|
-
};
|
|
34
31
|
'no-native-intersection-observer': import("eslint").Rule.RuleModule;
|
|
35
32
|
'no-component-in-blocks': import("eslint").Rule.RuleModule;
|
|
36
33
|
'prefer-list-components': import("eslint").Rule.RuleModule;
|
|
@@ -51,7 +48,6 @@ declare const plugin: {
|
|
|
51
48
|
readonly 'gallop/no-inline-styles': "warn";
|
|
52
49
|
readonly 'gallop/no-arbitrary-colors': "warn";
|
|
53
50
|
readonly 'gallop/no-cross-zone-imports': "warn";
|
|
54
|
-
readonly 'gallop/no-data-imports': "warn";
|
|
55
51
|
readonly 'gallop/no-native-intersection-observer': "warn";
|
|
56
52
|
readonly 'gallop/no-component-in-blocks': "warn";
|
|
57
53
|
readonly 'gallop/prefer-list-components': "warn";
|
package/dist/eslint/index.js
CHANGED
|
@@ -7,7 +7,6 @@ import backgroundImageRounded from './rules/background-image-rounded.js';
|
|
|
7
7
|
import noInlineStyles from './rules/no-inline-styles.js';
|
|
8
8
|
import noArbitraryColors from './rules/no-arbitrary-colors.js';
|
|
9
9
|
import noCrossZoneImports from './rules/no-cross-zone-imports.js';
|
|
10
|
-
import noDataImports from './rules/no-data-imports.js';
|
|
11
10
|
import noNativeIntersectionObserver from './rules/no-native-intersection-observer.js';
|
|
12
11
|
import noComponentInBlocks from './rules/no-component-in-blocks.js';
|
|
13
12
|
import preferListComponents from './rules/prefer-list-components.js';
|
|
@@ -27,7 +26,6 @@ const recommended = {
|
|
|
27
26
|
'gallop/no-inline-styles': 'warn',
|
|
28
27
|
'gallop/no-arbitrary-colors': 'warn',
|
|
29
28
|
'gallop/no-cross-zone-imports': 'warn',
|
|
30
|
-
'gallop/no-data-imports': 'warn',
|
|
31
29
|
'gallop/no-native-intersection-observer': 'warn',
|
|
32
30
|
'gallop/no-component-in-blocks': 'warn',
|
|
33
31
|
'gallop/prefer-list-components': 'warn',
|
|
@@ -49,7 +47,6 @@ const plugin = {
|
|
|
49
47
|
'no-inline-styles': noInlineStyles,
|
|
50
48
|
'no-arbitrary-colors': noArbitraryColors,
|
|
51
49
|
'no-cross-zone-imports': noCrossZoneImports,
|
|
52
|
-
'no-data-imports': noDataImports,
|
|
53
50
|
'no-native-intersection-observer': noNativeIntersectionObserver,
|
|
54
51
|
'no-component-in-blocks': noComponentInBlocks,
|
|
55
52
|
'prefer-list-components': preferListComponents,
|
|
@@ -62,4 +59,4 @@ const plugin = {
|
|
|
62
59
|
recommended,
|
|
63
60
|
};
|
|
64
61
|
export default plugin;
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXNsaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFBO0FBQ3hELE9BQU8sb0JBQW9CLE1BQU0sb0NBQW9DLENBQUE7QUFDckUsT0FBTyxvQkFBb0IsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNwRSxPQUFPLDBCQUEwQixNQUFNLHlDQUF5QyxDQUFBO0FBQ2hGLE9BQU8sc0JBQXNCLE1BQU0scUNBQXFDLENBQUE7QUFDeEUsT0FBTyxzQkFBc0IsTUFBTSxxQ0FBcUMsQ0FBQTtBQUN4RSxPQUFPLGNBQWMsTUFBTSw2QkFBNkIsQ0FBQTtBQUN4RCxPQUFPLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFBO0FBQzlELE9BQU8sa0JBQWtCLE1BQU0sa0NBQWtDLENBQUE7QUFDakUsT0FBTyw0QkFBNEIsTUFBTSw0Q0FBNEMsQ0FBQTtBQUNyRixPQUFPLG1CQUFtQixNQUFNLG1DQUFtQyxDQUFBO0FBQ25FLE9BQU8sb0JBQW9CLE1BQU0sbUNBQW1DLENBQUE7QUFDcEUsT0FBTyxZQUFZLE1BQU0sMkJBQTJCLENBQUE7QUFDcEQsT0FBTyxxQkFBcUIsTUFBTSxvQ0FBb0MsQ0FBQTtBQUV0RTs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHO0lBQ2xCLHlCQUF5QixFQUFFLE1BQU07SUFDakMsZ0NBQWdDLEVBQUUsTUFBTTtJQUN4QyxnQ0FBZ0MsRUFBRSxNQUFNO0lBQ3hDLCtCQUErQixFQUFFLE1BQU07SUFDdkMscUNBQXFDLEVBQUUsTUFBTTtJQUM3QyxpQ0FBaUMsRUFBRSxNQUFNO0lBQ3pDLGlDQUFpQyxFQUFFLE1BQU07SUFDekMseUJBQXlCLEVBQUUsTUFBTTtJQUNqQyw0QkFBNEIsRUFBRSxNQUFNO0lBQ3BDLDhCQUE4QixFQUFFLE1BQU07SUFDdEMsd0NBQXdDLEVBQUUsTUFBTTtJQUNoRCwrQkFBK0IsRUFBRSxNQUFNO0lBQ3ZDLCtCQUErQixFQUFFLE1BQU07SUFDdkMsdUJBQXVCLEVBQUUsTUFBTTtDQUN2QixDQUFBO0FBRVYsTUFBTSxNQUFNLEdBQUc7SUFDYixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLE9BQU8sRUFBRSxRQUFRO0tBQ2xCO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsa0JBQWtCLEVBQUUsY0FBYztRQUNsQyx5QkFBeUIsRUFBRSxxQkFBcUI7UUFDaEQseUJBQXlCLEVBQUUsb0JBQW9CO1FBQy9DLHdCQUF3QixFQUFFLG9CQUFvQjtRQUM5Qyw4QkFBOEIsRUFBRSwwQkFBMEI7UUFDMUQsMEJBQTBCLEVBQUUsc0JBQXNCO1FBQ2xELDBCQUEwQixFQUFFLHNCQUFzQjtRQUNsRCxrQkFBa0IsRUFBRSxjQUFjO1FBQ2xDLHFCQUFxQixFQUFFLGlCQUFpQjtRQUN4Qyx1QkFBdUIsRUFBRSxrQkFBa0I7UUFDM0MsaUNBQWlDLEVBQUUsNEJBQTRCO1FBQy9ELHdCQUF3QixFQUFFLG1CQUFtQjtRQUM3Qyx3QkFBd0IsRUFBRSxvQkFBb0I7UUFDOUMsZ0JBQWdCLEVBQUUsWUFBWTtLQUMvQjtJQUNEOzs7T0FHRztJQUNILFdBQVc7Q0FDWixDQUFBO0FBRUQsZUFBZSxNQUFNLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbm9DbGllbnRCbG9ja3MgZnJvbSAnLi9ydWxlcy9uby1jbGllbnQtYmxvY2tzLmpzJ1xuaW1wb3J0IG5vQ29udGFpbmVySW5TZWN0aW9uIGZyb20gJy4vcnVsZXMvbm8tY29udGFpbmVyLWluLXNlY3Rpb24uanMnXG5pbXBvcnQgcHJlZmVyQ29tcG9uZW50UHJvcHMgZnJvbSAnLi9ydWxlcy9wcmVmZXItY29tcG9uZW50LXByb3BzLmpzJ1xuaW1wb3J0IHByZWZlclR5cG9ncmFwaHlDb21wb25lbnRzIGZyb20gJy4vcnVsZXMvcHJlZmVyLXR5cG9ncmFwaHktY29tcG9uZW50cy5qcydcbmltcG9ydCBwcmVmZXJMYXlvdXRDb21wb25lbnRzIGZyb20gJy4vcnVsZXMvcHJlZmVyLWxheW91dC1jb21wb25lbnRzLmpzJ1xuaW1wb3J0IGJhY2tncm91bmRJbWFnZVJvdW5kZWQgZnJvbSAnLi9ydWxlcy9iYWNrZ3JvdW5kLWltYWdlLXJvdW5kZWQuanMnXG5pbXBvcnQgbm9JbmxpbmVTdHlsZXMgZnJvbSAnLi9ydWxlcy9uby1pbmxpbmUtc3R5bGVzLmpzJ1xuaW1wb3J0IG5vQXJiaXRyYXJ5Q29sb3JzIGZyb20gJy4vcnVsZXMvbm8tYXJiaXRyYXJ5LWNvbG9ycy5qcydcbmltcG9ydCBub0Nyb3NzWm9uZUltcG9ydHMgZnJvbSAnLi9ydWxlcy9uby1jcm9zcy16b25lLWltcG9ydHMuanMnXG5pbXBvcnQgbm9OYXRpdmVJbnRlcnNlY3Rpb25PYnNlcnZlciBmcm9tICcuL3J1bGVzL25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIuanMnXG5pbXBvcnQgbm9Db21wb25lbnRJbkJsb2NrcyBmcm9tICcuL3J1bGVzL25vLWNvbXBvbmVudC1pbi1ibG9ja3MuanMnXG5pbXBvcnQgcHJlZmVyTGlzdENvbXBvbmVudHMgZnJvbSAnLi9ydWxlcy9wcmVmZXItbGlzdC1jb21wb25lbnRzLmpzJ1xuaW1wb3J0IG5vTmF0aXZlRGF0ZSBmcm9tICcuL3J1bGVzL25vLW5hdGl2ZS1kYXRlLmpzJ1xuaW1wb3J0IGJsb2NrTmFtaW5nQ29udmVudGlvbiBmcm9tICcuL3J1bGVzL2Jsb2NrLW5hbWluZy1jb252ZW50aW9uLmpzJ1xuXG4vKipcbiAqIEFsbCBDYW5vbiBFU0xpbnQgcnVsZXMgd2l0aCByZWNvbW1lbmRlZCBzZXZlcml0eSBsZXZlbHNcbiAqL1xuY29uc3QgcmVjb21tZW5kZWQgPSB7XG4gICdnYWxsb3Avbm8tY2xpZW50LWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9ibG9jay1uYW1pbmctY29udmVudGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1jb250YWluZXItaW4tc2VjdGlvbic6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItY29tcG9uZW50LXByb3BzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMnOiAnd2FybicsXG4gICdnYWxsb3AvcHJlZmVyLWxheW91dC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL2JhY2tncm91bmQtaW1hZ2Utcm91bmRlZCc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9uby1pbmxpbmUtc3R5bGVzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLWFyYml0cmFyeS1jb2xvcnMnOiAnd2FybicsXG4gICdnYWxsb3Avbm8tY3Jvc3Mtem9uZS1pbXBvcnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLW5hdGl2ZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInOiAnd2FybicsXG4gICdnYWxsb3Avbm8tY29tcG9uZW50LWluLWJsb2Nrcyc6ICd3YXJuJyxcbiAgJ2dhbGxvcC9wcmVmZXItbGlzdC1jb21wb25lbnRzJzogJ3dhcm4nLFxuICAnZ2FsbG9wL25vLW5hdGl2ZS1kYXRlJzogJ3dhcm4nLFxufSBhcyBjb25zdFxuXG5jb25zdCBwbHVnaW4gPSB7XG4gIG1ldGE6IHtcbiAgICBuYW1lOiAnZXNsaW50LXBsdWdpbi1nYWxsb3AnLFxuICAgIHZlcnNpb246ICcyLjEyLjAnLFxuICB9LFxuICBydWxlczoge1xuICAgICduby1jbGllbnQtYmxvY2tzJzogbm9DbGllbnRCbG9ja3MsXG4gICAgJ2Jsb2NrLW5hbWluZy1jb252ZW50aW9uJzogYmxvY2tOYW1pbmdDb252ZW50aW9uLFxuICAgICduby1jb250YWluZXItaW4tc2VjdGlvbic6IG5vQ29udGFpbmVySW5TZWN0aW9uLFxuICAgICdwcmVmZXItY29tcG9uZW50LXByb3BzJzogcHJlZmVyQ29tcG9uZW50UHJvcHMsXG4gICAgJ3ByZWZlci10eXBvZ3JhcGh5LWNvbXBvbmVudHMnOiBwcmVmZXJUeXBvZ3JhcGh5Q29tcG9uZW50cyxcbiAgICAncHJlZmVyLWxheW91dC1jb21wb25lbnRzJzogcHJlZmVyTGF5b3V0Q29tcG9uZW50cyxcbiAgICAnYmFja2dyb3VuZC1pbWFnZS1yb3VuZGVkJzogYmFja2dyb3VuZEltYWdlUm91bmRlZCxcbiAgICAnbm8taW5saW5lLXN0eWxlcyc6IG5vSW5saW5lU3R5bGVzLFxuICAgICduby1hcmJpdHJhcnktY29sb3JzJzogbm9BcmJpdHJhcnlDb2xvcnMsXG4gICAgJ25vLWNyb3NzLXpvbmUtaW1wb3J0cyc6IG5vQ3Jvc3Nab25lSW1wb3J0cyxcbiAgICAnbm8tbmF0aXZlLWludGVyc2VjdGlvbi1vYnNlcnZlcic6IG5vTmF0aXZlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsXG4gICAgJ25vLWNvbXBvbmVudC1pbi1ibG9ja3MnOiBub0NvbXBvbmVudEluQmxvY2tzLFxuICAgICdwcmVmZXItbGlzdC1jb21wb25lbnRzJzogcHJlZmVyTGlzdENvbXBvbmVudHMsXG4gICAgJ25vLW5hdGl2ZS1kYXRlJzogbm9OYXRpdmVEYXRlLFxuICB9LFxuICAvKipcbiAgICogUmVjb21tZW5kZWQgcnVsZSBjb25maWd1cmF0aW9ucyAtIHNwcmVhZCBpbnRvIHlvdXIgRVNMaW50IGNvbmZpZ1xuICAgKiBAZXhhbXBsZSBydWxlczogeyAuLi5nYWxsb3AucmVjb21tZW5kZWQgfVxuICAgKi9cbiAgcmVjb21tZW5kZWQsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpblxuIl19
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
2
|
-
|
|
2
|
+
type MessageIds = 'blockNamingMismatch' | 'blockNamingNoNumber';
|
|
3
|
+
declare const _default: ESLintUtils.RuleModule<MessageIds, [], unknown, ESLintUtils.RuleListener> & {
|
|
3
4
|
name: string;
|
|
4
5
|
};
|
|
5
6
|
export default _default;
|
|
@@ -19,6 +19,24 @@ function filenameToPascalCase(filename) {
|
|
|
19
19
|
})
|
|
20
20
|
.join('');
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Converts a PascalCase export name to kebab-case filename
|
|
24
|
+
* e.g., "Content" -> "content", "Hero5" -> "hero-5", "CallToAction1" -> "call-to-action-1"
|
|
25
|
+
*/
|
|
26
|
+
function pascalCaseToFilename(name) {
|
|
27
|
+
return name
|
|
28
|
+
// Insert hyphen before uppercase letters (but not at start)
|
|
29
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
30
|
+
// Insert hyphen before numbers
|
|
31
|
+
.replace(/([a-zA-Z])(\d)/g, '$1-$2')
|
|
32
|
+
.toLowerCase();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if a name ends with a number
|
|
36
|
+
*/
|
|
37
|
+
function hasTrailingNumber(name) {
|
|
38
|
+
return /\d+$/.test(name);
|
|
39
|
+
}
|
|
22
40
|
export default createRule({
|
|
23
41
|
name: RULE_NAME,
|
|
24
42
|
meta: {
|
|
@@ -27,7 +45,8 @@ export default createRule({
|
|
|
27
45
|
description: pattern?.summary || 'Block export names must match filename pattern',
|
|
28
46
|
},
|
|
29
47
|
messages: {
|
|
30
|
-
blockNamingMismatch: `[Canon ${pattern?.id || '006'}] Block export "{{actual}}" should be "{{expected}}" to match the filename "{{filename}}". See: ${pattern?.title || 'Block Naming'} pattern.`,
|
|
48
|
+
blockNamingMismatch: `[Canon ${pattern?.id || '006'}] Block export "{{actual}}" should be "{{expected}}" to match the filename "{{filename}}". Or rename the file to "{{suggestedFilename}}.tsx". See: ${pattern?.title || 'Block Naming'} pattern.`,
|
|
49
|
+
blockNamingNoNumber: `[Canon ${pattern?.id || '006'}] Block export "{{actual}}" must end with a number (e.g., "{{actual}}1"). Rename to "{{suggested}}" or rename file to "{{suggestedFilename}}-{n}.tsx". See: ${pattern?.title || 'Block Naming'} pattern.`,
|
|
31
50
|
},
|
|
32
51
|
schema: [],
|
|
33
52
|
},
|
|
@@ -51,19 +70,38 @@ export default createRule({
|
|
|
51
70
|
if (node.declaration.type === 'FunctionDeclaration' && node.declaration.id) {
|
|
52
71
|
const actualName = node.declaration.id.name;
|
|
53
72
|
if (actualName !== expectedName) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
73
|
+
// Check if the export name has a trailing number
|
|
74
|
+
if (!hasTrailingNumber(actualName)) {
|
|
75
|
+
// No number - suggest adding one
|
|
76
|
+
const suggestedFilename = pascalCaseToFilename(actualName);
|
|
77
|
+
context.report({
|
|
78
|
+
node: node.declaration.id,
|
|
79
|
+
messageId: 'blockNamingNoNumber',
|
|
80
|
+
data: {
|
|
81
|
+
actual: actualName,
|
|
82
|
+
suggested: `${actualName}1`,
|
|
83
|
+
suggestedFilename,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Has number but doesn't match filename
|
|
89
|
+
const suggestedFilename = pascalCaseToFilename(actualName);
|
|
90
|
+
context.report({
|
|
91
|
+
node: node.declaration.id,
|
|
92
|
+
messageId: 'blockNamingMismatch',
|
|
93
|
+
data: {
|
|
94
|
+
actual: actualName,
|
|
95
|
+
expected: expectedName,
|
|
96
|
+
filename: blockFilename,
|
|
97
|
+
suggestedFilename,
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
63
101
|
}
|
|
64
102
|
}
|
|
65
103
|
},
|
|
66
104
|
};
|
|
67
105
|
},
|
|
68
106
|
});
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stbmFtaW5nLWNvbnZlbnRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXNsaW50L3J1bGVzL2Jsb2NrLW5hbWluZy1jb252ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhFLE1BQU0sU0FBUyxHQUFHLHlCQUF5QixDQUFBO0FBQzNDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUxQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0FBSXhFOzs7R0FHRztBQUNILFNBQVMsb0JBQW9CLENBQUMsUUFBZ0I7SUFDNUMsd0NBQXdDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRWhELHlDQUF5QztJQUN6QyxPQUFPLFFBQVE7U0FDWixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDWix1Q0FBdUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckQsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsb0JBQW9CLENBQUMsSUFBWTtJQUN4QyxPQUFPLElBQUk7UUFDVCw0REFBNEQ7U0FDM0QsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztRQUNwQywr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dEIsUUFBUSxFQUFFLGFBQWE7b0NBQ3ZCLGlCQUFpQjtpQ0FDbEI7NkJBQ0YsQ0FBQyxDQUFBO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRVNMaW50VXRpbHMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnXG5pbXBvcnQgeyBnZXRDYW5vblVybCwgZ2V0Q2Fub25QYXR0ZXJuIH0gZnJvbSAnLi4vdXRpbHMvY2Fub24uanMnXG5cbmNvbnN0IFJVTEVfTkFNRSA9ICdibG9jay1uYW1pbmctY29udmVudGlvbidcbmNvbnN0IHBhdHRlcm4gPSBnZXRDYW5vblBhdHRlcm4oUlVMRV9OQU1FKVxuXG5jb25zdCBjcmVhdGVSdWxlID0gRVNMaW50VXRpbHMuUnVsZUNyZWF0b3IoKCkgPT4gZ2V0Q2Fub25VcmwoUlVMRV9OQU1FKSlcblxudHlwZSBNZXNzYWdlSWRzID0gJ2Jsb2NrTmFtaW5nTWlzbWF0Y2gnIHwgJ2Jsb2NrTmFtaW5nTm9OdW1iZXInXG5cbi8qKlxuICogQ29udmVydHMgYSBibG9jayBmaWxlbmFtZSB0byBpdHMgZXhwZWN0ZWQgUGFzY2FsQ2FzZSBleHBvcnQgbmFtZVxuICogZS5nLiwgXCJoZXJvLTVcIiAtPiBcIkhlcm81XCIsIFwic2VjdGlvbi0xMFwiIC0+IFwiU2VjdGlvbjEwXCIsIFwiY29udGVudC0zOVwiIC0+IFwiQ29udGVudDM5XCJcbiAqL1xuZnVuY3Rpb24gZmlsZW5hbWVUb1Bhc2NhbENhc2UoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlbW92ZSBleHRlbnNpb24gYW5kIHNwbGl0IGJ5IGh5cGhlbnNcbiAgY29uc3QgYmFzZU5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9cXC50c3g/JC8sICcnKVxuICBcbiAgLy8gU3BsaXQgYnkgaHlwaGVucyBhbmQgY29udmVydCBlYWNoIHBhcnRcbiAgcmV0dXJuIGJhc2VOYW1lXG4gICAgLnNwbGl0KCctJylcbiAgICAubWFwKChwYXJ0KSA9PiB7XG4gICAgICAvLyBDYXBpdGFsaXplIGZpcnN0IGxldHRlciBvZiBlYWNoIHBhcnRcbiAgICAgIHJldHVybiBwYXJ0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcGFydC5zbGljZSgxKVxuICAgIH0pXG4gICAgLmpvaW4oJycpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBQYXNjYWxDYXNlIGV4cG9ydCBuYW1lIHRvIGtlYmFiLWNhc2UgZmlsZW5hbWVcbiAqIGUuZy4sIFwiQ29udGVudFwiIC0+IFwiY29udGVudFwiLCBcIkhlcm81XCIgLT4gXCJoZXJvLTVcIiwgXCJDYWxsVG9BY3Rpb24xXCIgLT4gXCJjYWxsLXRvLWFjdGlvbi0xXCJcbiAqL1xuZnVuY3Rpb24gcGFzY2FsQ2FzZVRvRmlsZW5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVcbiAgICAvLyBJbnNlcnQgaHlwaGVuIGJlZm9yZSB1cHBlcmNhc2UgbGV0dGVycyAoYnV0IG5vdCBhdCBzdGFydClcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJylcbiAgICAvLyBJbnNlcnQgaHlwaGVuIGJlZm9yZSBudW1iZXJzXG4gICAgLnJlcGxhY2UoLyhbYS16QS1aXSkoXFxkKS9nLCAnJDEtJDInKVxuICAgIC50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBuYW1lIGVuZHMgd2l0aCBhIG51bWJlclxuICovXG5mdW5jdGlvbiBoYXNUcmFpbGluZ051bWJlcihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9cXGQrJC8udGVzdChuYW1lKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSdWxlPFtdLCBNZXNzYWdlSWRzPih7XG4gIG5hbWU6IFJVTEVfTkFNRSxcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogcGF0dGVybj8uc3VtbWFyeSB8fCAnQmxvY2sgZXhwb3J0IG5hbWVzIG11c3QgbWF0Y2ggZmlsZW5hbWUgcGF0dGVybicsXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgYmxvY2tOYW1pbmdNaXNtYXRjaDogYFtDYW5vbiAke3BhdHRlcm4/LmlkIHx8ICcwMDYnfV0gQmxvY2sgZXhwb3J0IFwie3thY3R1YWx9fVwiIHNob3VsZCBiZSBcInt7ZXhwZWN0ZWR9fVwiIHRvIG1hdGNoIHRoZSBmaWxlbmFtZSBcInt7ZmlsZW5hbWV9fVwiLiBPciByZW5hbWUgdGhlIGZpbGUgdG8gXCJ7e3N1Z2dlc3RlZEZpbGVuYW1lfX0udHN4XCIuIFNlZTogJHtwYXR0ZXJuPy50aXRsZSB8fCAnQmxvY2sgTmFtaW5nJ30gcGF0dGVybi5gLFxuICAgICAgYmxvY2tOYW1pbmdOb051bWJlcjogYFtDYW5vbiAke3BhdHRlcm4/LmlkIHx8ICcwMDYnfV0gQmxvY2sgZXhwb3J0IFwie3thY3R1YWx9fVwiIG11c3QgZW5kIHdpdGggYSBudW1iZXIgKGUuZy4sIFwie3thY3R1YWx9fTFcIikuIFJlbmFtZSB0byBcInt7c3VnZ2VzdGVkfX1cIiBvciByZW5hbWUgZmlsZSB0byBcInt7c3VnZ2VzdGVkRmlsZW5hbWV9fS17bn0udHN4XCIuIFNlZTogJHtwYXR0ZXJuPy50aXRsZSB8fCAnQmxvY2sgTmFtaW5nJ30gcGF0dGVybi5gLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcbiAgZGVmYXVsdE9wdGlvbnM6IFtdLFxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5maWxlbmFtZSB8fCBjb250ZXh0LmdldEZpbGVuYW1lKClcblxuICAgIC8vIE9ubHkgY2hlY2sgZmlsZXMgaW4gc3JjL2Jsb2Nrcy9cbiAgICBpZiAoIWZpbGVuYW1lLmluY2x1ZGVzKCcvYmxvY2tzLycpICYmICFmaWxlbmFtZS5pbmNsdWRlcygnXFxcXGJsb2Nrc1xcXFwnKSkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBmaWxlbmFtZSAoZS5nLiwgXCJoZXJvLTUudHN4XCIpXG4gICAgY29uc3QgbWF0Y2ggPSBmaWxlbmFtZS5tYXRjaCgvKFteL1xcXFxdK1xcLnRzeD8pJC8pXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgY29uc3QgYmxvY2tGaWxlbmFtZSA9IG1hdGNoWzFdXG4gICAgY29uc3QgZXhwZWN0ZWROYW1lID0gZmlsZW5hbWVUb1Bhc2NhbENhc2UoYmxvY2tGaWxlbmFtZSlcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBDaGVjayBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnNcbiAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uLmlkKSB7XG4gICAgICAgICAgY29uc3QgYWN0dWFsTmFtZSA9IG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZVxuICAgICAgICAgIFxuICAgICAgICAgIGlmIChhY3R1YWxOYW1lICE9PSBleHBlY3RlZE5hbWUpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBleHBvcnQgbmFtZSBoYXMgYSB0cmFpbGluZyBudW1iZXJcbiAgICAgICAgICAgIGlmICghaGFzVHJhaWxpbmdOdW1iZXIoYWN0dWFsTmFtZSkpIHtcbiAgICAgICAgICAgICAgLy8gTm8gbnVtYmVyIC0gc3VnZ2VzdCBhZGRpbmcgb25lXG4gICAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3RlZEZpbGVuYW1lID0gcGFzY2FsQ2FzZVRvRmlsZW5hbWUoYWN0dWFsTmFtZSlcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUuZGVjbGFyYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiAnYmxvY2tOYW1pbmdOb051bWJlcicsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWxOYW1lLFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkOiBgJHthY3R1YWxOYW1lfTFgLFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkRmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEhhcyBudW1iZXIgYnV0IGRvZXNuJ3QgbWF0Y2ggZmlsZW5hbWVcbiAgICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGVkRmlsZW5hbWUgPSBwYXNjYWxDYXNlVG9GaWxlbmFtZShhY3R1YWxOYW1lKVxuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgbm9kZTogbm9kZS5kZWNsYXJhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6ICdibG9ja05hbWluZ01pc21hdGNoJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbE5hbWUsXG4gICAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGJsb2NrRmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRGaWxlbmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG4gIH0sXG59KVxuIl19
|
package/package.json
CHANGED
package/schema.json
CHANGED
|
@@ -251,16 +251,6 @@
|
|
|
251
251
|
"rule": "gallop/no-cross-zone-imports",
|
|
252
252
|
"summary": "Enforce import boundaries between Canon zones"
|
|
253
253
|
},
|
|
254
|
-
{
|
|
255
|
-
"id": "022",
|
|
256
|
-
"title": "No Data Direct Imports",
|
|
257
|
-
"file": "patterns/022-no-data-imports.md",
|
|
258
|
-
"category": "structure",
|
|
259
|
-
"status": "stable",
|
|
260
|
-
"enforcement": "eslint",
|
|
261
|
-
"rule": "gallop/no-data-imports",
|
|
262
|
-
"summary": "Prevent runtime code from importing _data/ directly"
|
|
263
|
-
},
|
|
264
254
|
{
|
|
265
255
|
"id": "023",
|
|
266
256
|
"title": "File Placement Authority",
|