arethetypeswrong / arethetypeswrong/arethetypeswrong.github.io
How to check globs in exports
- Langage dominant
- TypeScript
- Étoiles
- 1.6k
- Forks
- 65
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
I wrote a wrapper around the invocation of attw, some may find it helpful:
```js
async function lintPublishedTypes({ cwd }) {
let manifest = await packageJson.read(cwd);
let name = manifest.name;
let entrypoints = [];
for (let [entryGlob, mapping] of Object.entries(manifest['exports'])) {
if (!entryGlob.includes('*')) {
let entry = path.join(name, entryGlob);
entrypoints.push(entry);
continue;
}
const files = globbySync(mapping.types.replace('*', '**/*'), {cwd});
// Map the files to full module paths
const mappedFiles = files.map(file => {
// Now that we found files, we need to map them _back_ to entrypoints.
// Based on the entryGlob, we need to remove the path leading up until the '*',
let toRemove = mapping.types.split('*')[0];
let moduleName = file.split(toRemove)[1];
// we need to chop off the extension IFF the mapping.types includes it
if (mapping.types.endsWith('.d.ts')) {
moduleName = moduleName.replace('.d.ts', '');
}
return moduleName;
});
entrypoints.push(...mappedFiles);
}
entrypoints = entrypoints
// Remove stuff we are going to exclude
.filter(entry => !entry.endsWith('*'))
.filter(entry => !entry.endsWith('addon-main'))
// Remove index files
.filter(entry => !entry.endsWith('index'));
let args = [
'attw', '--pack',
// This does not provide types
'--exclude-entrypoints', 'addon-main',
// We turn this one off because we don't care about CJS consumers
'--ignore-rules', 'cjs-resolves-to-esm',
// Wildcard is not official supported
'--ignore-rules', 'wildcard',
// publint will handle resolving
'--ignore-rules', 'internal-resolution-error',
'--include-entrypoints', ...entrypoints
];
console.info(chalk.blueBright('Running:\n', args.join(' ')));
await execa('pnpm', args, {
cwd,
stdio: 'inherit',
});
}
```
This takes my exports:
```
"exports": {
".": {
"types": "./dist-types/index.d.ts",
"default": "./dist/index.js"
},
"./*": {
"types": "./dist-types/*.d.ts",
"default": "./dist/*.js"
},
"./test-support": {
"types": "./dist-types/test-support/index.d.ts",
"default": "./dist/test-support/index.js"
},
"./addon-main": "./addon-main.cjs"
},
```
and invokes this command:
```
attw --pack \
--exclude-entrypoints addon-main \
--ignore-rules cjs-resolves-to-esm \
--ignore-rules wildcard \
--ignore-rules internal-resolution-error \
--include-entrypoints \
ember-primitives color-scheme helpers iframe proper-links template-registry utils \
components/dialog components/external-link components/link components/popover components/portal-targets components/portal components/shadowed components/switch components/toggle helpers/service \
test-support/routing \
components/-private/typed-elements components/-private/utils components/dialog/element-state components/dialog/state \
ember-primitives/test-support
```
it's not perfect -- but it's progress
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Commencez par le wrapper lintPublishedTypes proposé et le mapping des package exports présentés dans l’issue. Exécutez la commande attw affichée sur les entrypoints listés, puis comparez sa gestion des wildcard exports avec la liste d’entrypoints générée ; le travail est terminé lorsque les exports obtenus par glob peuvent être vérifiés de manière fiable sans le workaround manuel.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, typescript
- Domaine
- devtools
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100