Skip to content

Commit 8e15927

Browse files
fix: fix exports field in package.json
1 parent 9846f10 commit 8e15927

File tree

2 files changed

+86
-16
lines changed

2 files changed

+86
-16
lines changed

package.json

Lines changed: 57 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -69,20 +69,62 @@
6969
"license": "LGPL-2.1",
7070
"browser": "./lib/p5.min.js",
7171
"exports": {
72-
".": "./dist/app.js",
73-
"./core": "./dist/core/main.js",
74-
"./shape": "./dist/shape/index.js",
75-
"./accessibility": "./dist/accessibility/index.js",
76-
"./friendlyErrors": "./dist/core/friendlyErrors/index.js",
77-
"./data": "./dist/data/index.js",
78-
"./dom": "./dist/dom/index.js",
79-
"./events": "./dist/events/index.js",
80-
"./image": "./dist/image/index.js",
81-
"./io": "./dist/io/index.js",
82-
"./math": "./dist/math/index.js",
83-
"./utilities": "./dist/utilities/index.js",
84-
"./webgl": "./dist/webgl/index.js",
85-
"./type": "./dist/type/index.js"
72+
".": {
73+
"default": "./dist/app.js",
74+
"types": "./types/p5.d.ts"
75+
},
76+
"./core": {
77+
"default": "./dist/core/main.js",
78+
"types": "./types/core/main.d.ts"
79+
},
80+
"./shape": {
81+
"default": "./dist/shape/index.js",
82+
"types": "./types/shape/index.d.ts"
83+
},
84+
"./accessibility": {
85+
"default": "./dist/accessibility/index.js",
86+
"types": "./types/accessibility/index.d.ts"
87+
},
88+
"./friendly_errors": {
89+
"default": "./dist/core/friendly_errors/index.js",
90+
"types": "./types/core/friendly_errors/index.d.ts"
91+
},
92+
"./data": {
93+
"default": "./dist/data/index.js",
94+
"types": "./types/data/index.d.ts"
95+
},
96+
"./dom": {
97+
"default": "./dist/dom/index.js",
98+
"types": "./types/dom/index.d.ts"
99+
},
100+
"./events": {
101+
"default": "./dist/events/index.js",
102+
"types": "./types/events/index.d.ts"
103+
},
104+
"./image": {
105+
"default": "./dist/image/index.js",
106+
"types": "./types/image/index.d.ts"
107+
},
108+
"./io": {
109+
"default": "./dist/io/index.js",
110+
"types": "./types/io/index.d.ts"
111+
},
112+
"./math": {
113+
"default": "./dist/math/index.js",
114+
"types": "./types/math/index.d.ts"
115+
},
116+
"./utilities": {
117+
"default": "./dist/utilities/index.js",
118+
"types": "./types/utilities/index.d.ts"
119+
},
120+
"./webgl": {
121+
"default": "./dist/webgl/index.js",
122+
"types": "./types/webgl/index.d.ts"
123+
},
124+
"./type": {
125+
"default": "./dist/type/index.js",
126+
"types": "./types/type/index.d.ts"
127+
}
86128
},
87129
"files": [
88130
"dist/**",
@@ -111,6 +153,5 @@
111153
"workerDirectory": [
112154
"test"
113155
]
114-
},
115-
"types": "./types/p5.d.ts"
156+
}
116157
}

utils/generate-types.mjs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const __filename = fileURLToPath(import.meta.url);
1010
const __dirname = path.dirname(__filename);
1111

1212
const data = JSON.parse(fs.readFileSync(path.join(__dirname, '../docs/data.json')));
13+
const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json')));
1314

1415
function findDtsFiles(dir, files = []) {
1516
// Only search in src directory
@@ -79,6 +80,34 @@ export function generateAllDeclarationFiles() {
7980

8081
fs.writeFileSync(path.join(typesDir, 'p5.d.ts'), p5Types, 'utf8');
8182
fs.writeFileSync(path.join(typesDir, 'global.d.ts'), globalTypes, 'utf8');
83+
84+
// Create `index.d.ts` for every sub-module directory
85+
/** @type { Record<string, string> } */
86+
const subModuleDefinitions = {};
87+
for (const entrypoint of Object.values(packageJson.exports)) {
88+
if (entrypoint === '.') continue;
89+
const subModuleName = entrypoint.default.replace('./dist', '').replace(/\/index\.js$/, '');
90+
subModuleDefinitions[subModuleName] = '// This file is auto-generated from JSDoc documentation\n\n';
91+
}
92+
93+
for (const file of dtsFiles) {
94+
for (const subModuleName of Object.keys(subModuleDefinitions)) {
95+
if (file.startsWith(subModuleName + '/') && file !== subModuleName + '/index.d.ts') {
96+
subModuleDefinitions[subModuleName] += `/// <reference path="./${file.replace(subModuleName + '/', '')}" />\n`;
97+
}
98+
}
99+
}
100+
101+
for (const [subModuleName, content] of Object.entries(subModuleDefinitions)) {
102+
const subModuleDir = path.join(typesDir, subModuleName);
103+
const destPath = path.join(
104+
path.relative(process.cwd(), subModuleDir),
105+
'index.d.ts'
106+
);
107+
fs.mkdirSync(subModuleDir, { recursive: true });
108+
fs.writeFileSync(destPath, content, 'utf8');
109+
console.log(`Generated ${destPath}`);
110+
}
82111
}
83112

84113
generateAllDeclarationFiles();

0 commit comments

Comments
 (0)