eslint-plugin-esm 0.8.0 → 0.8.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # eslint-plugin-esm
2
2
 
3
+ ## 0.8.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 57c267d: feat: add rule `esm/top-side-effect-imports`
8
+
3
9
  ## 0.8.0
4
10
 
5
11
  ### Minor Changes
package/dist/common.js CHANGED
@@ -11,7 +11,7 @@ export function createRule({ name, message, schema, fixable, type = "suggestion"
11
11
  },
12
12
  type,
13
13
  docs: {
14
- // TODO: add url
14
+ url: `https://github.com/zanminkian/fenge/blob/main/packages/eslint-plugin-esm/doc/rules/${name}.md`,
15
15
  description: message,
16
16
  },
17
17
  },
@@ -21,7 +21,7 @@ export function createRule({ name, message, schema, fixable, type = "suggestion"
21
21
  }
22
22
  export function getRuleName(importMetaUrl) {
23
23
  // remove '.js' extension
24
- return path.basename(fileURLToPath(importMetaUrl)).slice(0, -3);
24
+ return path.parse(fileURLToPath(importMetaUrl)).name;
25
25
  }
26
26
  /**
27
27
  * Create ESLint RuleListener to check string importation source.
@@ -60,4 +60,4 @@ export function getSourceType(source) {
60
60
  }
61
61
  return "module";
62
62
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVV6QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFFNUMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUN6QixJQUFJLEVBQ0osT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsSUFBSSxHQUFHLFlBQVksRUFDbkIsTUFBTSxFQUFFLFFBQVEsR0FRakI7SUFDQyxNQUFNLElBQUksR0FBb0I7UUFDNUIsSUFBSSxFQUFFO1lBQ0osR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixRQUFRLEVBQUU7Z0JBQ1IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU87YUFDOUI7WUFDRCxJQUFJO1lBQ0osSUFBSSxFQUFFO2dCQUNKLGdCQUFnQjtnQkFDaEIsV0FBVyxFQUFFLE9BQU87YUFDckI7U0FDRjtRQUNELE1BQU0sRUFBRSxRQUFRO0tBQ2pCLENBQUM7SUFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLGFBQXFCO0lBQy9DLHlCQUF5QjtJQUN6QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFRRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ3BCLE9BQXlCLEVBQ3pCLEtBQTJFO0lBRTNFLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBcUIsRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPO1FBQ3RDLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRO1lBQUUsT0FBTztRQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztZQUNsRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDLENBQUM7SUFDRixPQUFPO1FBQ0wsaUJBQWlCLEVBQUUsTUFBTTtRQUN6QixnQkFBZ0IsRUFBRSxNQUFNO1FBQ3hCLG9CQUFvQixFQUFFLE1BQU07UUFDNUIsc0JBQXNCLEVBQUUsTUFBTTtLQUMvQixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBYztJQUMxQyxJQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHO1FBQ2QsTUFBTSxLQUFLLElBQUksRUFDZixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUge1xuICBFeHBvcnRBbGxEZWNsYXJhdGlvbixcbiAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbixcbiAgSW1wb3J0RGVjbGFyYXRpb24sXG4gIEltcG9ydEV4cHJlc3Npb24sXG59IGZyb20gXCJlc3RyZWVcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTQgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUVTU0FHRV9JRCA9IFwiZGVmYXVsdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVsZSh7XG4gIG5hbWUsXG4gIG1lc3NhZ2UsXG4gIHNjaGVtYSxcbiAgZml4YWJsZSxcbiAgdHlwZSA9IFwic3VnZ2VzdGlvblwiLFxuICBjcmVhdGU6IGNyZWF0ZUZuLFxufToge1xuICBuYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2NoZW1hPzogSlNPTlNjaGVtYTRbXTtcbiAgZml4YWJsZT86IFJ1bGUuUnVsZU1ldGFEYXRhW1wiZml4YWJsZVwiXTtcbiAgdHlwZT86IFJ1bGUuUnVsZU1ldGFEYXRhW1widHlwZVwiXTtcbiAgY3JlYXRlOiAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCkgPT4gUnVsZS5SdWxlTGlzdGVuZXI7XG59KTogeyBuYW1lOiBzdHJpbmc7IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSB9IHtcbiAgY29uc3QgcnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICAgIG1ldGE6IHtcbiAgICAgIC4uLihzY2hlbWEgJiYgeyBzY2hlbWEgfSksXG4gICAgICAuLi4oZml4YWJsZSAmJiB7IGZpeGFibGUgfSksXG4gICAgICBtZXNzYWdlczoge1xuICAgICAgICBbREVGQVVMVF9NRVNTQUdFX0lEXTogbWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICB0eXBlLFxuICAgICAgZG9jczoge1xuICAgICAgICAvLyBUT0RPOiBhZGQgdXJsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogY3JlYXRlRm4sXG4gIH07XG4gIHJldHVybiB7IG5hbWUsIHJ1bGUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bGVOYW1lKGltcG9ydE1ldGFVcmw6IHN0cmluZykge1xuICAvLyByZW1vdmUgJy5qcycgZXh0ZW5zaW9uXG4gIHJldHVybiBwYXRoLmJhc2VuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0TWV0YVVybCkpLnNsaWNlKDAsIC0zKTtcbn1cblxuZXhwb3J0IHR5cGUgSW1wb3J0YXRpb25Ob2RlID1cbiAgfCBJbXBvcnREZWNsYXJhdGlvblxuICB8IEltcG9ydEV4cHJlc3Npb25cbiAgfCBFeHBvcnRBbGxEZWNsYXJhdGlvblxuICB8IEV4cG9ydE5hbWVkRGVjbGFyYXRpb247XG5cbi8qKlxuICogQ3JlYXRlIEVTTGludCBSdWxlTGlzdGVuZXIgdG8gY2hlY2sgc3RyaW5nIGltcG9ydGF0aW9uIHNvdXJjZS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBSdWxlQ29udGV4dFxuICogQHBhcmFtIGNoZWNrIHRoZSBjaGVjayBsb2dpY1xuICogQHJldHVybnMgRVNMaW50IFJ1bGVMaXN0ZW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBjaGVjazogKGZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nLCBub2RlOiBJbXBvcnRhdGlvbk5vZGUpID0+IGJvb2xlYW4sXG4pOiBSdWxlLlJ1bGVMaXN0ZW5lciB7XG4gIGNvbnN0IGhhbmRsZSA9IChub2RlOiBJbXBvcnRhdGlvbk5vZGUpID0+IHtcbiAgICBpZiAoIW5vZGUuc291cmNlKSByZXR1cm47XG4gICAgaWYgKCEoXCJ2YWx1ZVwiIGluIG5vZGUuc291cmNlKSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygbm9kZS5zb3VyY2UudmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybjtcbiAgICBpZiAoY2hlY2soY29udGV4dC5maWxlbmFtZSwgbm9kZS5zb3VyY2UudmFsdWUsIG5vZGUpKVxuICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBub2RlLnNvdXJjZSwgbWVzc2FnZUlkOiBERUZBVUxUX01FU1NBR0VfSUQgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgSW1wb3J0RGVjbGFyYXRpb246IGhhbmRsZSxcbiAgICBJbXBvcnRFeHByZXNzaW9uOiBoYW5kbGUsXG4gICAgRXhwb3J0QWxsRGVjbGFyYXRpb246IGhhbmRsZSxcbiAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBoYW5kbGUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKHNvdXJjZTogc3RyaW5nKSB7XG4gIGlmIChcbiAgICBzb3VyY2Uuc3RhcnRzV2l0aChcIi9cIikgfHxcbiAgICBzb3VyY2Uuc3RhcnRzV2l0aChcIi4vXCIpIHx8XG4gICAgc291cmNlLnN0YXJ0c1dpdGgoXCIuLi9cIikgfHxcbiAgICBzb3VyY2UgPT09IFwiLlwiIHx8XG4gICAgc291cmNlID09PSBcIi4uXCJcbiAgKSB7XG4gICAgcmV0dXJuIFwibG9jYWxcIjtcbiAgfVxuICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoXCJub2RlOlwiKSkge1xuICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgfVxuICByZXR1cm4gXCJtb2R1bGVcIjtcbn1cbiJdfQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVV6QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFFNUMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUN6QixJQUFJLEVBQ0osT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsSUFBSSxHQUFHLFlBQVksRUFDbkIsTUFBTSxFQUFFLFFBQVEsR0FRakI7SUFDQyxNQUFNLElBQUksR0FBb0I7UUFDNUIsSUFBSSxFQUFFO1lBQ0osR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixRQUFRLEVBQUU7Z0JBQ1IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU87YUFDOUI7WUFDRCxJQUFJO1lBQ0osSUFBSSxFQUFFO2dCQUNKLEdBQUcsRUFBRSxzRkFBc0YsSUFBSSxLQUFLO2dCQUNwRyxXQUFXLEVBQUUsT0FBTzthQUNyQjtTQUNGO1FBQ0QsTUFBTSxFQUFFLFFBQVE7S0FDakIsQ0FBQztJQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsYUFBcUI7SUFDL0MseUJBQXlCO0lBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQsQ0FBQztBQVFEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDcEIsT0FBeUIsRUFDekIsS0FBMkU7SUFFM0UsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFxQixFQUFFLEVBQUU7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDdEMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQztJQUNGLE9BQU87UUFDTCxpQkFBaUIsRUFBRSxNQUFNO1FBQ3pCLGdCQUFnQixFQUFFLE1BQU07UUFDeEIsb0JBQW9CLEVBQUUsTUFBTTtRQUM1QixzQkFBc0IsRUFBRSxNQUFNO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFjO0lBQzFDLElBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUc7UUFDZCxNQUFNLEtBQUssSUFBSSxFQUNmLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEV4cG9ydEFsbERlY2xhcmF0aW9uLFxuICBFeHBvcnROYW1lZERlY2xhcmF0aW9uLFxuICBJbXBvcnREZWNsYXJhdGlvbixcbiAgSW1wb3J0RXhwcmVzc2lvbixcbn0gZnJvbSBcImVzdHJlZVwiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNCB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NRVNTQUdFX0lEID0gXCJkZWZhdWx0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdWxlKHtcbiAgbmFtZSxcbiAgbWVzc2FnZSxcbiAgc2NoZW1hLFxuICBmaXhhYmxlLFxuICB0eXBlID0gXCJzdWdnZXN0aW9uXCIsXG4gIGNyZWF0ZTogY3JlYXRlRm4sXG59OiB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzY2hlbWE/OiBKU09OU2NoZW1hNFtdO1xuICBmaXhhYmxlPzogUnVsZS5SdWxlTWV0YURhdGFbXCJmaXhhYmxlXCJdO1xuICB0eXBlPzogUnVsZS5SdWxlTWV0YURhdGFbXCJ0eXBlXCJdO1xuICBjcmVhdGU6IChjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KSA9PiBSdWxlLlJ1bGVMaXN0ZW5lcjtcbn0pOiB7IG5hbWU6IHN0cmluZzsgcnVsZTogUnVsZS5SdWxlTW9kdWxlIH0ge1xuICBjb25zdCBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gICAgbWV0YToge1xuICAgICAgLi4uKHNjaGVtYSAmJiB7IHNjaGVtYSB9KSxcbiAgICAgIC4uLihmaXhhYmxlICYmIHsgZml4YWJsZSB9KSxcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIFtERUZBVUxUX01FU1NBR0VfSURdOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHR5cGUsXG4gICAgICBkb2NzOiB7XG4gICAgICAgIHVybDogYGh0dHBzOi8vZ2l0aHViLmNvbS96YW5taW5raWFuL2ZlbmdlL2Jsb2IvbWFpbi9wYWNrYWdlcy9lc2xpbnQtcGx1Z2luLWVzbS9kb2MvcnVsZXMvJHtuYW1lfS5tZGAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogY3JlYXRlRm4sXG4gIH07XG4gIHJldHVybiB7IG5hbWUsIHJ1bGUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bGVOYW1lKGltcG9ydE1ldGFVcmw6IHN0cmluZykge1xuICAvLyByZW1vdmUgJy5qcycgZXh0ZW5zaW9uXG4gIHJldHVybiBwYXRoLnBhcnNlKGZpbGVVUkxUb1BhdGgoaW1wb3J0TWV0YVVybCkpLm5hbWU7XG59XG5cbmV4cG9ydCB0eXBlIEltcG9ydGF0aW9uTm9kZSA9XG4gIHwgSW1wb3J0RGVjbGFyYXRpb25cbiAgfCBJbXBvcnRFeHByZXNzaW9uXG4gIHwgRXhwb3J0QWxsRGVjbGFyYXRpb25cbiAgfCBFeHBvcnROYW1lZERlY2xhcmF0aW9uO1xuXG4vKipcbiAqIENyZWF0ZSBFU0xpbnQgUnVsZUxpc3RlbmVyIHRvIGNoZWNrIHN0cmluZyBpbXBvcnRhdGlvbiBzb3VyY2UuXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgUnVsZUNvbnRleHRcbiAqIEBwYXJhbSBjaGVjayB0aGUgY2hlY2sgbG9naWNcbiAqIEByZXR1cm5zIEVTTGludCBSdWxlTGlzdGVuZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgY2hlY2s6IChmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgbm9kZTogSW1wb3J0YXRpb25Ob2RlKSA9PiBib29sZWFuLFxuKTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICBjb25zdCBoYW5kbGUgPSAobm9kZTogSW1wb3J0YXRpb25Ob2RlKSA9PiB7XG4gICAgaWYgKCFub2RlLnNvdXJjZSkgcmV0dXJuO1xuICAgIGlmICghKFwidmFsdWVcIiBpbiBub2RlLnNvdXJjZSkpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG5vZGUuc291cmNlLnZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm47XG4gICAgaWYgKGNoZWNrKGNvbnRleHQuZmlsZW5hbWUsIG5vZGUuc291cmNlLnZhbHVlLCBub2RlKSlcbiAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogbm9kZS5zb3VyY2UsIG1lc3NhZ2VJZDogREVGQVVMVF9NRVNTQUdFX0lEIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIEltcG9ydERlY2xhcmF0aW9uOiBoYW5kbGUsXG4gICAgSW1wb3J0RXhwcmVzc2lvbjogaGFuZGxlLFxuICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBoYW5kbGUsXG4gICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogaGFuZGxlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzb3VyY2U6IHN0cmluZykge1xuICBpZiAoXG4gICAgc291cmNlLnN0YXJ0c1dpdGgoXCIvXCIpIHx8XG4gICAgc291cmNlLnN0YXJ0c1dpdGgoXCIuL1wiKSB8fFxuICAgIHNvdXJjZS5zdGFydHNXaXRoKFwiLi4vXCIpIHx8XG4gICAgc291cmNlID09PSBcIi5cIiB8fFxuICAgIHNvdXJjZSA9PT0gXCIuLlwiXG4gICkge1xuICAgIHJldHVybiBcImxvY2FsXCI7XG4gIH1cbiAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKFwibm9kZTpcIikpIHtcbiAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gIH1cbiAgcmV0dXJuIFwibW9kdWxlXCI7XG59XG4iXX0=
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ import { noRenameImports } from "./rules/no-rename-imports.ts";
11
11
  import { noSideEffectImports } from "./rules/no-side-effect-imports.ts";
12
12
  import { noUselessPathSegments } from "./rules/no-useless-path-segments.ts";
13
13
  import { requiredExports } from "./rules/required-exports.ts";
14
+ import { topSideEffectImports } from "./rules/top-side-effect-imports.ts";
14
15
  export declare const rules: {
15
16
  [existingFileImports.name]: import("eslint").Rule.RuleModule;
16
17
  [noDeclarationFileImports.name]: import("eslint").Rule.RuleModule;
@@ -25,5 +26,6 @@ export declare const rules: {
25
26
  [noSideEffectImports.name]: import("eslint").Rule.RuleModule;
26
27
  [noUselessPathSegments.name]: import("eslint").Rule.RuleModule;
27
28
  [requiredExports.name]: import("eslint").Rule.RuleModule;
29
+ [topSideEffectImports.name]: import("eslint").Rule.RuleModule;
28
30
  };
29
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,eAAO,MAAM,KAAK;IAChB,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,wBAAwB,CAAC,IAAI,CAAC,mCAA+B;IAC9D,CAAC,kBAAkB,CAAC,IAAI,CAAC,mCAAyB;IAClD,CAAC,gBAAgB,CAAC,IAAI,CAAC,mCAAuB;IAC9C,CAAC,cAAc,CAAC,IAAI,CAAC,mCAAqB;IAC1C,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,uBAAuB,CAAC,IAAI,CAAC,mCAA8B;IAC5D,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,qBAAqB,CAAC,IAAI,CAAC,mCAA4B;IACxD,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;CAC7C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,eAAO,MAAM,KAAK;IAChB,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,wBAAwB,CAAC,IAAI,CAAC,mCAA+B;IAC9D,CAAC,kBAAkB,CAAC,IAAI,CAAC,mCAAyB;IAClD,CAAC,gBAAgB,CAAC,IAAI,CAAC,mCAAuB;IAC9C,CAAC,cAAc,CAAC,IAAI,CAAC,mCAAqB;IAC1C,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,uBAAuB,CAAC,IAAI,CAAC,mCAA8B;IAC5D,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,qBAAqB,CAAC,IAAI,CAAC,mCAA4B;IACxD,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,CAAC,oBAAoB,CAAC,IAAI,CAAC,mCAA2B;CACvD,CAAC"}
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ import { noRenameImports } from "./rules/no-rename-imports.js";
11
11
  import { noSideEffectImports } from "./rules/no-side-effect-imports.js";
12
12
  import { noUselessPathSegments } from "./rules/no-useless-path-segments.js";
13
13
  import { requiredExports } from "./rules/required-exports.js";
14
+ import { topSideEffectImports } from "./rules/top-side-effect-imports.js";
14
15
  export const rules = {
15
16
  [existingFileImports.name]: existingFileImports.rule,
16
17
  [noDeclarationFileImports.name]: noDeclarationFileImports.rule,
@@ -25,5 +26,6 @@ export const rules = {
25
26
  [noSideEffectImports.name]: noSideEffectImports.rule,
26
27
  [noUselessPathSegments.name]: noUselessPathSegments.rule,
27
28
  [requiredExports.name]: requiredExports.rule,
29
+ [topSideEffectImports.name]: topSideEffectImports.rule,
28
30
  };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJO0lBQzlELENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtJQUNsRCxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDOUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxDQUFDLElBQUk7SUFDMUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLHVCQUF1QixDQUFDLElBQUk7SUFDNUQsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSTtJQUN4RCxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSTtDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RpbmdGaWxlSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL2V4aXN0aW5nLWZpbGUtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EZWNsYXJhdGlvbkZpbGVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZGVjbGFyYXRpb24tZmlsZS1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0RpcmVjdG9yeUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1kaXJlY3RvcnktaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EeW5hbWljSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLWR5bmFtaWMtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9FbXB0eUV4cG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1lbXB0eS1leHBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0dpdElnbm9yZWRJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZ2l0LWlnbm9yZWQtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9QaGFudG9tRGVwSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXBoYW50b20tZGVwLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUmVsYXRpdmVQYXJlbnRJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUmVuYW1lRXhwb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXJlbmFtZS1leHBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1JlbmFtZUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZW5hbWUtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9TaWRlRWZmZWN0SW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXNpZGUtZWZmZWN0LWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vVXNlbGVzc1BhdGhTZWdtZW50cyB9IGZyb20gXCIuL3J1bGVzL25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cy50c1wiO1xuaW1wb3J0IHsgcmVxdWlyZWRFeHBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvcmVxdWlyZWQtZXhwb3J0cy50c1wiO1xuXG5leHBvcnQgY29uc3QgcnVsZXMgPSB7XG4gIFtleGlzdGluZ0ZpbGVJbXBvcnRzLm5hbWVdOiBleGlzdGluZ0ZpbGVJbXBvcnRzLnJ1bGUsXG4gIFtub0RlY2xhcmF0aW9uRmlsZUltcG9ydHMubmFtZV06IG5vRGVjbGFyYXRpb25GaWxlSW1wb3J0cy5ydWxlLFxuICBbbm9EaXJlY3RvcnlJbXBvcnRzLm5hbWVdOiBub0RpcmVjdG9yeUltcG9ydHMucnVsZSxcbiAgW25vRHluYW1pY0ltcG9ydHMubmFtZV06IG5vRHluYW1pY0ltcG9ydHMucnVsZSxcbiAgW25vRW1wdHlFeHBvcnRzLm5hbWVdOiBub0VtcHR5RXhwb3J0cy5ydWxlLFxuICBbbm9HaXRJZ25vcmVkSW1wb3J0cy5uYW1lXTogbm9HaXRJZ25vcmVkSW1wb3J0cy5ydWxlLFxuICBbbm9QaGFudG9tRGVwSW1wb3J0cy5uYW1lXTogbm9QaGFudG9tRGVwSW1wb3J0cy5ydWxlLFxuICBbbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMubmFtZV06IG5vUmVsYXRpdmVQYXJlbnRJbXBvcnRzLnJ1bGUsXG4gIFtub1JlbmFtZUV4cG9ydHMubmFtZV06IG5vUmVuYW1lRXhwb3J0cy5ydWxlLFxuICBbbm9SZW5hbWVJbXBvcnRzLm5hbWVdOiBub1JlbmFtZUltcG9ydHMucnVsZSxcbiAgW25vU2lkZUVmZmVjdEltcG9ydHMubmFtZV06IG5vU2lkZUVmZmVjdEltcG9ydHMucnVsZSxcbiAgW25vVXNlbGVzc1BhdGhTZWdtZW50cy5uYW1lXTogbm9Vc2VsZXNzUGF0aFNlZ21lbnRzLnJ1bGUsXG4gIFtyZXF1aXJlZEV4cG9ydHMubmFtZV06IHJlcXVpcmVkRXhwb3J0cy5ydWxlLFxufTtcbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJO0lBQzlELENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtJQUNsRCxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDOUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxDQUFDLElBQUk7SUFDMUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLHVCQUF1QixDQUFDLElBQUk7SUFDNUQsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSTtJQUN4RCxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSTtJQUM1QyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLG9CQUFvQixDQUFDLElBQUk7Q0FDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0aW5nRmlsZUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9leGlzdGluZy1maWxlLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vRGVjbGFyYXRpb25GaWxlSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLWRlY2xhcmF0aW9uLWZpbGUtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EaXJlY3RvcnlJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZGlyZWN0b3J5LWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vRHluYW1pY0ltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1keW5hbWljLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vRW1wdHlFeHBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZW1wdHktZXhwb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9HaXRJZ25vcmVkSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLWdpdC1pZ25vcmVkLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUGhhbnRvbURlcEltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1waGFudG9tLWRlcC1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1JlbGF0aXZlUGFyZW50SW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXJlbGF0aXZlLXBhcmVudC1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1JlbmFtZUV4cG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZW5hbWUtZXhwb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9SZW5hbWVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcmVuYW1lLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vU2lkZUVmZmVjdEltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1zaWRlLWVmZmVjdC1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1VzZWxlc3NQYXRoU2VnbWVudHMgfSBmcm9tIFwiLi9ydWxlcy9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMudHNcIjtcbmltcG9ydCB7IHJlcXVpcmVkRXhwb3J0cyB9IGZyb20gXCIuL3J1bGVzL3JlcXVpcmVkLWV4cG9ydHMudHNcIjtcbmltcG9ydCB7IHRvcFNpZGVFZmZlY3RJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvdG9wLXNpZGUtZWZmZWN0LWltcG9ydHMudHNcIjtcblxuZXhwb3J0IGNvbnN0IHJ1bGVzID0ge1xuICBbZXhpc3RpbmdGaWxlSW1wb3J0cy5uYW1lXTogZXhpc3RpbmdGaWxlSW1wb3J0cy5ydWxlLFxuICBbbm9EZWNsYXJhdGlvbkZpbGVJbXBvcnRzLm5hbWVdOiBub0RlY2xhcmF0aW9uRmlsZUltcG9ydHMucnVsZSxcbiAgW25vRGlyZWN0b3J5SW1wb3J0cy5uYW1lXTogbm9EaXJlY3RvcnlJbXBvcnRzLnJ1bGUsXG4gIFtub0R5bmFtaWNJbXBvcnRzLm5hbWVdOiBub0R5bmFtaWNJbXBvcnRzLnJ1bGUsXG4gIFtub0VtcHR5RXhwb3J0cy5uYW1lXTogbm9FbXB0eUV4cG9ydHMucnVsZSxcbiAgW25vR2l0SWdub3JlZEltcG9ydHMubmFtZV06IG5vR2l0SWdub3JlZEltcG9ydHMucnVsZSxcbiAgW25vUGhhbnRvbURlcEltcG9ydHMubmFtZV06IG5vUGhhbnRvbURlcEltcG9ydHMucnVsZSxcbiAgW25vUmVsYXRpdmVQYXJlbnRJbXBvcnRzLm5hbWVdOiBub1JlbGF0aXZlUGFyZW50SW1wb3J0cy5ydWxlLFxuICBbbm9SZW5hbWVFeHBvcnRzLm5hbWVdOiBub1JlbmFtZUV4cG9ydHMucnVsZSxcbiAgW25vUmVuYW1lSW1wb3J0cy5uYW1lXTogbm9SZW5hbWVJbXBvcnRzLnJ1bGUsXG4gIFtub1NpZGVFZmZlY3RJbXBvcnRzLm5hbWVdOiBub1NpZGVFZmZlY3RJbXBvcnRzLnJ1bGUsXG4gIFtub1VzZWxlc3NQYXRoU2VnbWVudHMubmFtZV06IG5vVXNlbGVzc1BhdGhTZWdtZW50cy5ydWxlLFxuICBbcmVxdWlyZWRFeHBvcnRzLm5hbWVdOiByZXF1aXJlZEV4cG9ydHMucnVsZSxcbiAgW3RvcFNpZGVFZmZlY3RJbXBvcnRzLm5hbWVdOiB0b3BTaWRlRWZmZWN0SW1wb3J0cy5ydWxlLFxufTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export declare const topSideEffectImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=top-side-effect-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"top-side-effect-imports.d.ts","sourceRoot":"","sources":["../../src/rules/top-side-effect-imports.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB;;;CAkB/B,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { createRule, DEFAULT_MESSAGE_ID, getRuleName } from "../common.js";
2
+ export const topSideEffectImports = createRule({
3
+ name: getRuleName(import.meta.url),
4
+ message: "Side effect imports must be placed before other import statements.",
5
+ create: (context) => {
6
+ let hasNonSideEffectImport = false;
7
+ return {
8
+ ImportDeclaration: (node) => {
9
+ if (node.specifiers.length > 0) {
10
+ hasNonSideEffectImport = true;
11
+ return;
12
+ }
13
+ if (hasNonSideEffectImport) {
14
+ context.report({ node, messageId: DEFAULT_MESSAGE_ID });
15
+ }
16
+ },
17
+ };
18
+ },
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9wLXNpZGUtZWZmZWN0LWltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvdG9wLXNpZGUtZWZmZWN0LWltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0lBQzdDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUFFLG9FQUFvRTtJQUM3RSxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsQixJQUFJLHNCQUFzQixHQUFHLEtBQUssQ0FBQztRQUVuQyxPQUFPO1lBQ0wsaUJBQWlCLEVBQUUsQ0FBQyxJQUF1QixFQUFFLEVBQUU7Z0JBQzdDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLHNCQUFzQixHQUFHLElBQUksQ0FBQztvQkFDOUIsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksc0JBQXNCLEVBQUUsQ0FBQztvQkFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbXBvcnREZWNsYXJhdGlvbiB9IGZyb20gXCJlc3RyZWVcIjtcbmltcG9ydCB7IGNyZWF0ZVJ1bGUsIERFRkFVTFRfTUVTU0FHRV9JRCwgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vY29tbW9uLnRzXCI7XG5cbmV4cG9ydCBjb25zdCB0b3BTaWRlRWZmZWN0SW1wb3J0cyA9IGNyZWF0ZVJ1bGUoe1xuICBuYW1lOiBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpLFxuICBtZXNzYWdlOiBcIlNpZGUgZWZmZWN0IGltcG9ydHMgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIG90aGVyIGltcG9ydCBzdGF0ZW1lbnRzLlwiLFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiB7XG4gICAgbGV0IGhhc05vblNpZGVFZmZlY3RJbXBvcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogKG5vZGU6IEltcG9ydERlY2xhcmF0aW9uKSA9PiB7XG4gICAgICAgIGlmIChub2RlLnNwZWNpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGhhc05vblNpZGVFZmZlY3RJbXBvcnQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzTm9uU2lkZUVmZmVjdEltcG9ydCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZUlkOiBERUZBVUxUX01FU1NBR0VfSUQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn0pO1xuIl19
@@ -0,0 +1,31 @@
1
+ <!-- prettier-ignore-start -->
2
+ # top-side-effect-imports
3
+
4
+ Side effect imports must be placed before other import statements.
5
+
6
+ ## Rule Details
7
+
8
+ ### Fail
9
+
10
+ ```ts
11
+ import {foo} from 'foo'; import 'reflect-metadata'
12
+ import {bar} from 'bar'; import 'foo.css'
13
+ import {foo} from 'foo'; import {} from 'bar'
14
+ import {foo} from 'foo'; import 'bar'; import * as foo from 'reflect-metadata'
15
+ import {foo} from 'foo'; import {} from 'reflect-metadata'; import * as bar from 'bar'
16
+ import 'bar'; import r from 'reflect-metadata'; import {} from 'foo'
17
+ ```
18
+
19
+ ### Pass
20
+
21
+ ```ts
22
+ import 'reflect-metadata'; import {foo} from 'foo'
23
+ import 'foo.css'; import {bar} from 'bar'
24
+ import 'reflect-metadata'; import 'foo.css'
25
+ import 'foo.css'; import 'bar'
26
+ import 'reflect-metadata'; import {foo} from 'foo'; import {bar} from 'bar'
27
+ import 'foo.css'; import {foo} from 'foo'; import {bar} from 'bar'
28
+ import 'reflect-metadata'
29
+ import {foo} from 'foo'
30
+ ```
31
+ <!-- prettier-ignore-end -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-esm",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "ESLint plugin for linting ESM (import/export syntax)",
5
5
  "keywords": [
6
6
  "eslint",
package/src/common.ts CHANGED
@@ -35,7 +35,7 @@ export function createRule({
35
35
  },
36
36
  type,
37
37
  docs: {
38
- // TODO: add url
38
+ url: `https://github.com/zanminkian/fenge/blob/main/packages/eslint-plugin-esm/doc/rules/${name}.md`,
39
39
  description: message,
40
40
  },
41
41
  },
@@ -46,7 +46,7 @@ export function createRule({
46
46
 
47
47
  export function getRuleName(importMetaUrl: string) {
48
48
  // remove '.js' extension
49
- return path.basename(fileURLToPath(importMetaUrl)).slice(0, -3);
49
+ return path.parse(fileURLToPath(importMetaUrl)).name;
50
50
  }
51
51
 
52
52
  export type ImportationNode =
package/src/index.ts CHANGED
@@ -11,6 +11,7 @@ import { noRenameImports } from "./rules/no-rename-imports.ts";
11
11
  import { noSideEffectImports } from "./rules/no-side-effect-imports.ts";
12
12
  import { noUselessPathSegments } from "./rules/no-useless-path-segments.ts";
13
13
  import { requiredExports } from "./rules/required-exports.ts";
14
+ import { topSideEffectImports } from "./rules/top-side-effect-imports.ts";
14
15
 
15
16
  export const rules = {
16
17
  [existingFileImports.name]: existingFileImports.rule,
@@ -26,4 +27,5 @@ export const rules = {
26
27
  [noSideEffectImports.name]: noSideEffectImports.rule,
27
28
  [noUselessPathSegments.name]: noUselessPathSegments.rule,
28
29
  [requiredExports.name]: requiredExports.rule,
30
+ [topSideEffectImports.name]: topSideEffectImports.rule,
29
31
  };
@@ -0,0 +1,24 @@
1
+ import { test } from "@fenge/dev-utils";
2
+ import { topSideEffectImports } from "./top-side-effect-imports.ts";
3
+
4
+ const valid = [
5
+ "import 'reflect-metadata'; import {foo} from 'foo'",
6
+ "import 'foo.css'; import {bar} from 'bar'",
7
+ "import 'reflect-metadata'; import 'foo.css'",
8
+ "import 'foo.css'; import 'bar'",
9
+ "import 'reflect-metadata'; import {foo} from 'foo'; import {bar} from 'bar'",
10
+ "import 'foo.css'; import {foo} from 'foo'; import {bar} from 'bar'",
11
+ "import 'reflect-metadata'", // Single side-effect import
12
+ "import {foo} from 'foo'", // Single non-side-effect import
13
+ ];
14
+
15
+ const invalid = [
16
+ "import {foo} from 'foo'; import 'reflect-metadata'",
17
+ "import {bar} from 'bar'; import 'foo.css'",
18
+ "import {foo} from 'foo'; import {} from 'bar'",
19
+ "import {foo} from 'foo'; import 'bar'; import * as foo from 'reflect-metadata'", // Three import statements
20
+ "import {foo} from 'foo'; import {} from 'reflect-metadata'; import * as bar from 'bar'", // Three import statements
21
+ "import 'bar'; import r from 'reflect-metadata'; import {} from 'foo'", // Three import statements
22
+ ];
23
+
24
+ test({ valid, invalid, ...topSideEffectImports });
@@ -0,0 +1,22 @@
1
+ import type { ImportDeclaration } from "estree";
2
+ import { createRule, DEFAULT_MESSAGE_ID, getRuleName } from "../common.ts";
3
+
4
+ export const topSideEffectImports = createRule({
5
+ name: getRuleName(import.meta.url),
6
+ message: "Side effect imports must be placed before other import statements.",
7
+ create: (context) => {
8
+ let hasNonSideEffectImport = false;
9
+
10
+ return {
11
+ ImportDeclaration: (node: ImportDeclaration) => {
12
+ if (node.specifiers.length > 0) {
13
+ hasNonSideEffectImport = true;
14
+ return;
15
+ }
16
+ if (hasNonSideEffectImport) {
17
+ context.report({ node, messageId: DEFAULT_MESSAGE_ID });
18
+ }
19
+ },
20
+ };
21
+ },
22
+ });