Skip to content

Commit

Permalink
Generate types rather than relying on type-fest (#209)
Browse files Browse the repository at this point in the history
  • Loading branch information
voxpelli authored Feb 10, 2024
1 parent d9bef83 commit da83698
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 16 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ jobs:
fail-fast: false
matrix:
node-version:
- 20
- 18
- 16
- 14
- 12
- 10
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
node_modules
yarn.lock
.cache
/index.d.ts
6 changes: 0 additions & 6 deletions index.d.ts

This file was deleted.

8 changes: 4 additions & 4 deletions index.test-d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {expectType, expectError} from 'tsd';
import {expectType, expectError, expectAssignable} from 'tsd';
import {ReadonlyDeep} from 'type-fest';
import globals = require('.');
import globals from '.';

expectType<ReadonlyDeep<Record<string, Record<string, boolean>>>>(globals);
expectType<boolean>(globals.builtin.Array);
expectAssignable<ReadonlyDeep<Record<string, Record<string, boolean>>>>(globals);
expectType<false>(globals.builtin.Array);
expectError((globals.builtin.Array = true));
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@
"node": ">=8"
},
"scripts": {
"test": "xo && ava",
"update-builtin-globals": "node scripts/get-builtin-globals.mjs"
"test": "xo && ava && tsd",
"prepare": "npm run --silent update-types",
"update-builtin-globals": "node scripts/get-builtin-globals.mjs",
"update-types": "node scripts/generate-types.mjs > index.d.ts"
},
"files": [
"index.js",
Expand All @@ -33,13 +35,11 @@
"eslint",
"environments"
],
"dependencies": {
"type-fest": "^0.20.2"
},
"devDependencies": {
"ava": "^2.4.0",
"cheerio": "^1.0.0-rc.12",
"tsd": "^0.14.0",
"tsd": "^0.30.4",
"type-fest": "^4.10.2",
"xo": "^0.36.1"
},
"xo": {
Expand Down
38 changes: 38 additions & 0 deletions scripts/generate-types.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import fs from 'node:fs/promises';

const DATA_FILE = new URL('../globals.json', import.meta.url);

const globals = JSON.parse(await fs.readFile(DATA_FILE));

const getGroupTypeName = (group) => `Globals${group[0].toUpperCase() + group.slice(1).replaceAll('-', '')}`;

const groups = {};
const output = [
'// This file is autogenerated by scripts/generate-types.mjs',
'// Do NOT modify this file manually\n'
];

for (const group in globals) {
const groupType = getGroupTypeName(group);
groups[group] = groupType;

output.push(`type ${getGroupTypeName(group)} = {`);

for (const [rule, status] of Object.entries(globals[group])) {
output.push(` readonly '${rule}': ${status};`);
}

output.push(`}\n`);
}

output.push(`type Globals = {`);

for (const [group, groupType] of Object.entries(groups)) {
output.push(` readonly '${group}': ${groupType};`);
}

output.push(`}\n`);
output.push(`declare const globals: Globals;\n`);
output.push(`export = globals;`);

console.log(output.join('\n'));

0 comments on commit da83698

Please sign in to comment.