()
| 165 | // --- Utils --- |
| 166 | |
| 167 | function getPackages(): Package[] { |
| 168 | return getAllPackageDirNames() |
| 169 | .map((dirName) => { |
| 170 | let pkgJsonPath = path.join(getPackagePath(dirName), "package.json"); |
| 171 | if (!fs.existsSync(pkgJsonPath)) return null; |
| 172 | let { name } = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8")); |
| 173 | return { dirName, name } as Package; |
| 174 | }) |
| 175 | .filter((p): p is Package => p !== null) |
| 176 | .sort((a, b) => { |
| 177 | const order = (name: string) => { |
| 178 | if (name === "react-router") return 0; |
| 179 | if (name.startsWith("@react-router/")) return 1; |
| 180 | return 2; |
| 181 | }; |
| 182 | const oa = order(a.name); |
| 183 | const ob = order(b.name); |
| 184 | if (oa !== ob) return oa - ob; |
| 185 | return a.name.localeCompare(b.name); |
| 186 | }); |
| 187 | } |
| 188 | |
| 189 | /** |
| 190 | * Converts a free-text description into a kebab-case slug of at most 6 |
no test coverage detected