@atlaskit/eslint-plugin-platform 2.9.0 → 2.9.2

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/index.js +8 -2
  3. package/dist/cjs/rules/compiled/no-css-prop-in-object-spread/index.js +162 -0
  4. package/dist/cjs/rules/ensure-critical-dependency-resolutions/index.js +0 -1
  5. package/dist/cjs/rules/import/no-barrel-entry-imports/index.js +68 -16
  6. package/dist/cjs/rules/import/no-barrel-entry-jest-mock/index.js +42 -8
  7. package/dist/cjs/rules/import/shared/package-resolution.js +153 -8
  8. package/dist/cjs/rules/no-restricted-fedramp-imports/index.js +65 -0
  9. package/dist/cjs/rules/no-xcss-in-cx/index.js +221 -0
  10. package/dist/cjs/rules/visit-example-type-import-required/index.js +24 -14
  11. package/dist/es2019/index.js +8 -2
  12. package/dist/es2019/rules/compiled/no-css-prop-in-object-spread/index.js +136 -0
  13. package/dist/es2019/rules/ensure-critical-dependency-resolutions/index.js +0 -1
  14. package/dist/es2019/rules/import/no-barrel-entry-imports/index.js +66 -17
  15. package/dist/es2019/rules/import/no-barrel-entry-jest-mock/index.js +43 -9
  16. package/dist/es2019/rules/import/shared/package-resolution.js +119 -4
  17. package/dist/es2019/rules/no-restricted-fedramp-imports/index.js +47 -0
  18. package/dist/es2019/rules/no-xcss-in-cx/index.js +187 -0
  19. package/dist/es2019/rules/visit-example-type-import-required/index.js +24 -15
  20. package/dist/esm/index.js +8 -2
  21. package/dist/esm/rules/compiled/no-css-prop-in-object-spread/index.js +156 -0
  22. package/dist/esm/rules/ensure-critical-dependency-resolutions/index.js +0 -1
  23. package/dist/esm/rules/import/no-barrel-entry-imports/index.js +69 -17
  24. package/dist/esm/rules/import/no-barrel-entry-jest-mock/index.js +43 -9
  25. package/dist/esm/rules/import/shared/package-resolution.js +151 -8
  26. package/dist/esm/rules/no-restricted-fedramp-imports/index.js +59 -0
  27. package/dist/esm/rules/no-xcss-in-cx/index.js +216 -0
  28. package/dist/esm/rules/visit-example-type-import-required/index.js +24 -14
  29. package/dist/types/index.d.ts +278 -241
  30. package/dist/types/rules/compiled/no-css-prop-in-object-spread/index.d.ts +3 -0
  31. package/dist/types/rules/import/shared/package-resolution.d.ts +25 -0
  32. package/dist/types/rules/no-restricted-fedramp-imports/index.d.ts +3 -0
  33. package/dist/types/rules/no-xcss-in-cx/index.d.ts +31 -0
  34. package/dist/types-ts4.5/index.d.ts +222 -209
  35. package/dist/types-ts4.5/rules/compiled/no-css-prop-in-object-spread/index.d.ts +3 -0
  36. package/dist/types-ts4.5/rules/import/shared/package-resolution.d.ts +25 -0
  37. package/dist/types-ts4.5/rules/no-restricted-fedramp-imports/index.d.ts +3 -0
  38. package/dist/types-ts4.5/rules/no-xcss-in-cx/index.d.ts +31 -0
  39. package/package.json +1 -1
@@ -16,10 +16,21 @@ export interface ExportMatchResult {
16
16
  */
17
17
  entryPointExportName?: string;
18
18
  }
19
+ /**
20
+ * Check whether a subpath export key (e.g. `"./checkbox-select"`) is kebab-case.
21
+ *
22
+ * A key is considered kebab-case when the portion after the leading `"./"` prefix
23
+ * consists only of lowercase letters, digits, hyphens, dots, and forward-slash
24
+ * separators — i.e. no uppercase letters, underscores, or camelCase humps.
25
+ */
26
+ export declare function isKebabCaseExportKey(key: string): boolean;
19
27
  /**
20
28
  * Find a matching export entry for a given source file path.
21
29
  * Returns the export path (e.g., "./controllers/analytics") or null if not found.
22
30
  *
31
+ * When multiple export paths resolve to the same source file **and** point to an
32
+ * entry-point file, kebab-case keys are preferred over other casing styles.
33
+ *
23
34
  * When `fs` is provided, also checks entry-point wrapper files. If an export resolves
24
35
  * to a file inside a recognized entry-points folder (entry-points, entrypoints, etc.),
25
36
  * the wrapper is parsed to see if it re-exports from `sourceFilePath`.
@@ -34,6 +45,20 @@ export declare function findExportForSourceFile({ sourceFilePath, exportsMap, fs
34
45
  fs?: FileSystem;
35
46
  sourceExportName?: string;
36
47
  }): ExportMatchResult | null;
48
+ /**
49
+ * When a symbol reaches the consumer through a barrel package that re-exports from
50
+ * `crossPackageName`, find a `package.json` export subpath of that barrel whose entry
51
+ * file directly re-exports the symbol from `crossPackageName` (named exports only).
52
+ *
53
+ * This enables rewriting imports to `@scope/barrel/subpath` instead of
54
+ * `@scope/cross-package/...` when the barrel exposes such a subpath (e.g. `@atlaskit/select/react-select`).
55
+ */
56
+ export declare function findCrossPackageBridgeExportPath({ exportsMap, crossPackageName, exportedName, fs, }: {
57
+ exportsMap: Map<string, string>;
58
+ crossPackageName: string;
59
+ exportedName: string;
60
+ fs: FileSystem;
61
+ }): ExportMatchResult | null;
37
62
  /**
38
63
  * Extract the package name and subpath from an import specifier.
39
64
  * Returns null if the import is not a scoped package import.
@@ -0,0 +1,3 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export default rule;
@@ -0,0 +1,31 @@
1
+ import type { Rule } from 'eslint';
2
+ /**
3
+ * Disallows passing xcss() results into cx() when used in an xcss prop.
4
+ *
5
+ * xcss() from @atlaskit/primitives and cx() from @atlaskit/css / @compiled/react
6
+ * are incompatible — xcss() produces an opaque StyleRule object, while cx()
7
+ * expects Compiled atomic class name strings. Mixing them causes runtime errors.
8
+ * xcss() results must never be passed to cx(), whether inline or pre-defined.
9
+ *
10
+ * ❌ Wrong — xcss() called inline inside cx():
11
+ * xcss={cx(xcss({ color: 'red' }), xcss({ fontWeight: 'bold' }))}
12
+ *
13
+ * ❌ Also wrong — xcss() results pre-defined but still passed into cx():
14
+ * const baseStyles = xcss({ color: 'red' });
15
+ * const boldStyles = xcss({ fontWeight: 'bold' });
16
+ * xcss={cx(baseStyles, boldStyles)}
17
+ *
18
+ * ✅ Correct — pass xcss() results directly to the xcss prop (no cx()):
19
+ * const baseStyles = xcss({ color: 'red' });
20
+ * xcss={baseStyles}
21
+ *
22
+ * ✅ Correct — use cssMap() + cx() (cssMap is compatible with cx()):
23
+ * const styles = cssMap({ base: { color: 'red' } });
24
+ * xcss={cx(styles.base, condition && styles.focused)}
25
+ *
26
+ * This rule is import-aware: it only flags xcss() calls (inline or via variable)
27
+ * imported from @atlaskit/primitives inside cx() calls imported from @atlaskit/css
28
+ * or @compiled/react that appear inside an xcss prop.
29
+ */
30
+ declare const rule: Rule.RuleModule;
31
+ export default rule;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-platform",
3
3
  "description": "The essential plugin for use with Atlassian frontend platform tools",
4
- "version": "2.9.0",
4
+ "version": "2.9.2",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "atlassian": {
7
7
  "team": "Build Infra",