Skip to content

Commit f1172ff

Browse files
authored
registerTypedef: prevent typedef-as-string overwrite if it already exists as object (#53)
* registerTypedef: prevent typedef-as-string overwrite if it already exists as object * Ignore @typedef's that only refer to themselves in another file + add test
1 parent 027016a commit f1172ff

File tree

4 files changed

+45
-1
lines changed

4 files changed

+45
-1
lines changed

src-runtime/registerTypedef.mjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ const typedefs = {};
77
* @param {Record<string, object>} typedef - The parsed typedef from source.
88
*/
99
function registerTypedef(name, typedef) {
10+
// If it already exists as object but now it's a string
11+
if (typeof typedefs[name] === 'object' && typeof typedef === 'string') {
12+
// console.log("registerTypedef> ignore", name, typedef);
13+
return;
14+
}
1015
typedefs[name] = typedef;
1116
}
1217
export {typedefs, registerTypedef};

src-transpiler/parseJSDocTypedef.mjs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ function parseJSDocTypedef(typedefs, warn, comment, expandType) {
5555
// Drop description
5656
name = name.split(' ')[0];
5757
lastTypedef = expandType(def);
58-
typedefs[name] = lastTypedef;
58+
// Ignore @typedef's that only refer to themselves in another file (see typedef-overwrite test)
59+
if (lastTypedef !== name) {
60+
typedefs[name] = lastTypedef;
61+
}
5962
} else if (line.startsWith('@property')) {
6063
// class @property
6164
if (!lastTypedef) {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* @typedef {Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array} TypedArray
3+
* @typedef {BigInt64Array | BigUint64Array} BigTypedArray
4+
* @typedef {TypedArray | BigTypedArray} AnyTypedArray
5+
*/
6+
/**
7+
* @typedef {import('./utils/maths.js').TypedArray} TypedArray
8+
*/
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
registerTypedef('TypedArray', {
2+
"type": "union",
3+
"members": [
4+
"Int8Array",
5+
"Uint8Array",
6+
"Uint8ClampedArray",
7+
"Int16Array",
8+
"Uint16Array",
9+
"Int32Array",
10+
"Uint32Array",
11+
"Float32Array",
12+
"Float64Array"
13+
]
14+
});
15+
registerTypedef('BigTypedArray', {
16+
"type": "union",
17+
"members": [
18+
"BigInt64Array",
19+
"BigUint64Array"
20+
]
21+
});
22+
registerTypedef('AnyTypedArray', {
23+
"type": "union",
24+
"members": [
25+
"TypedArray",
26+
"BigTypedArray"
27+
]
28+
});

0 commit comments

Comments
 (0)