@slip-stream-kit/eslint-plugin 0.41.0 → 0.43.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/index.js CHANGED
@@ -1824,13 +1824,19 @@ var layerImports = {
1824
1824
  type: "array",
1825
1825
  items: { type: "string" },
1826
1826
  description: "Optional globs; the rule is skipped for matching files."
1827
+ },
1828
+ isolate: {
1829
+ type: "array",
1830
+ items: { type: "string" },
1831
+ description: "Folders whose subfolders may not import each other (`commands/a` \u2192 `commands/b`)."
1827
1832
  }
1828
1833
  },
1829
1834
  additionalProperties: false
1830
1835
  }
1831
1836
  ],
1832
1837
  messages: {
1833
- upward: "`{{fromLayer}}` cannot import `{{specifier}}` from the higher layer `{{toLayer}}`. Layers import only their own level or below: {{order}}. Move the shared code down into a lower layer, or pass it in from above."
1838
+ upward: "`{{fromLayer}}` cannot import `{{specifier}}` from the higher layer `{{toLayer}}`. Layers import only their own level or below: {{order}}. Move the shared code down into a lower layer, or pass it in from above.",
1839
+ sibling: "`{{fromLayer}}/{{fromUnit}}` cannot import `{{specifier}}` from its sibling `{{fromLayer}}/{{toUnit}}`: folders under `{{fromLayer}}/` are isolated from each other. Move the shared code down into a lower layer, or pass it in from above."
1834
1840
  }
1835
1841
  },
1836
1842
  create(context) {
@@ -1842,20 +1848,29 @@ var layerImports = {
1842
1848
  }
1843
1849
  const layers = options.layers ?? DEFAULT_LAYERS;
1844
1850
  const levels = levelIndex(layers);
1845
- const fromLayer = fileDirsUnderSrc(filename, srcDir)[0];
1851
+ const [fromLayer, fromUnit] = fileDirsUnderSrc(filename, srcDir);
1846
1852
  const fromLevel = fromLayer === void 0 ? void 0 : levels.get(fromLayer);
1847
1853
  if (fromLayer === void 0 || fromLevel === void 0) {
1848
1854
  return {};
1849
1855
  }
1850
1856
  const allowTypeImports = options.allowTypeImports ?? true;
1851
1857
  const rootAlias = options.rootAlias ?? DEFAULT_ROOT_ALIAS;
1858
+ const isolated = fromUnit !== void 0 && (options.isolate ?? []).includes(fromLayer);
1852
1859
  const check = (node) => {
1853
1860
  const source = readImportSource(node);
1854
1861
  if (source === null || allowTypeImports && source.typeOnly) {
1855
1862
  return;
1856
1863
  }
1857
- const toLayer = resolveUnderSrc(filename, srcDir, source.specifier, rootAlias)?.[0];
1864
+ const [toLayer, toUnit] = resolveUnderSrc(filename, srcDir, source.specifier, rootAlias) ?? [];
1858
1865
  const toLevel = toLayer === void 0 ? void 0 : levels.get(toLayer);
1866
+ if (isolated && toLayer === fromLayer && toUnit !== void 0 && toUnit !== fromUnit) {
1867
+ context.report({
1868
+ node: source.node,
1869
+ messageId: "sibling",
1870
+ data: { fromLayer, fromUnit, toUnit, specifier: source.specifier }
1871
+ });
1872
+ return;
1873
+ }
1859
1874
  if (toLevel === void 0 || toLevel <= fromLevel) {
1860
1875
  return;
1861
1876
  }
@@ -3515,7 +3530,7 @@ var PLUGIN_NAME = "@wl";
3515
3530
  var plugin = {
3516
3531
  meta: {
3517
3532
  name: "@wl/eslint-plugin",
3518
- version: "0.41.0"
3533
+ version: "0.43.0"
3519
3534
  },
3520
3535
  rules,
3521
3536
  configs: {}