Fix isTypeModuleObjectExpression (#17599)

This commit is contained in:
fisker Cheung authored and GitHub committed 2025-06-20 04:11:49 +08:00
1 parent 876f3931a9
commit dd8d59b983
7 files changed
+208 -121

No files matched your search

+16 -8
View File
@@ -378,16 +378,24 @@ function isNonEmptyBlockStatement(node) {
);
}
// { type: "module" }
// `{ type: "module" }` and `{"type": "module"}`
function isTypeModuleObjectExpression(node) {
if (!(node.type === "ObjectExpression" && node.properties.length === 1)) {
return false;
}
const [property] = node.properties;
if (!isObjectProperty(property)) {
return false;
}
return (
node.type === "ObjectExpression" &&
node.properties.length === 1 &&
isObjectProperty(node.properties[0]) &&
node.properties[0].key.type === "Identifier" &&
node.properties[0].key.name === "type" &&
isStringLiteral(node.properties[0].value) &&
node.properties[0].value.value === "module"
!property.computed &&
((property.key.type === "Identifier" && property.key.name === "type") ||
(isStringLiteral(property.key) && property.key.value === "type")) &&
isStringLiteral(property.value) &&
property.value.value === "module"
);
}
@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`comments.js [acorn] format 1`] = `
"Unexpected token (1:32)
@@ -295,91 +295,3 @@ foo(module {
================================================================================
`;
exports[`worker.js [acorn] format 1`] = `
"Unexpected token (1:32)
> 1 | let worker = new Worker(module {
| ^
2 | onmessage = function({data}) {
3 | let mod = import(data);
4 | postMessage(mod.fn());
Cause: Unexpected token (1:31)"
`;
exports[`worker.js [espree] format 1`] = `
"Unexpected token { (1:32)
> 1 | let worker = new Worker(module {
| ^
2 | onmessage = function({data}) {
3 | let mod = import(data);
4 | postMessage(mod.fn());
Cause: Unexpected token {"
`;
exports[`worker.js [meriyah] format 1`] = `
"Expected ')' (1:32)
> 1 | let worker = new Worker(module {
| ^
2 | onmessage = function({data}) {
3 | let mod = import(data);
4 | postMessage(mod.fn());
Cause: [1:31-1:32]: Expected ')'"
`;
exports[`worker.js [oxc] format 1`] = `
"Expected \`,\` but found \`{\` (1:32)
> 1 | let worker = new Worker(module {
| ^
2 | onmessage = function({data}) {
3 | let mod = import(data);
4 | postMessage(mod.fn());"
`;
exports[`worker.js format 1`] = `
====================================options=====================================
parsers: ["babel"]
printWidth: 80
| printWidth
=====================================input======================================
let worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {type: "module"});
let worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {type: "module", foo: "bar" });
worker.postMessage(module { export function fn() { return "hello!" } });
=====================================output=====================================
let worker = new Worker(module {
onmessage = function ({ data }) {
let mod = import(data);
postMessage(mod.fn());
};
}, { type: "module" });
let worker = new Worker(
module {
onmessage = function ({ data }) {
let mod = import(data);
postMessage(mod.fn());
};
},
{ type: "module", foo: "bar" },
);
worker.postMessage(module {
export function fn() {
return "hello!";
}
});
================================================================================
`;
+9 -9
View File
@@ -1,9 +1,9 @@
runFormatTest(import.meta, ["babel"], {
errors: {
acorn: ["module-blocks.js", "range.js", "comments.js", "worker.js"],
espree: ["module-blocks.js", "range.js", "comments.js", "worker.js"],
meriyah: ["module-blocks.js", "range.js", "comments.js", "worker.js"],
oxc: ["module-blocks.js", "range.js", "comments.js", "worker.js"],
"oxc-ts": ["module-blocks.js", "range.js", "comments.js", "worker.js"],
},
});
const errors = {
acorn: ["module-blocks.js", "range.js", "comments.js"],
espree: ["module-blocks.js", "range.js", "comments.js"],
meriyah: ["module-blocks.js", "range.js", "comments.js"],
oxc: ["module-blocks.js", "range.js", "comments.js"],
"oxc-ts": ["module-blocks.js", "range.js", "comments.js"],
};
runFormatTest(import.meta, ["babel"], { errors });
@@ -0,0 +1,137 @@
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`worker.js [acorn] format 1`] = `
"Unexpected token (1:28)
> 1 | worker = new Worker(module {
| ^
2 | onmessage = function({data}) {
3 | let mod = import(data);
4 | postMessage(mod.fn());
Cause: Unexpected token (1:27)"
`;
exports[`worker.js [espree] format 1`] = `
"Unexpected token { (1:28)
> 1 | worker = new Worker(module {
| ^
2 | onmessage = function({data}) {
3 | let mod = import(data);
4 | postMessage(mod.fn());
Cause: Unexpected token {"
`;
exports[`worker.js [meriyah] format 1`] = `
"Expected ')' (1:28)
> 1 | worker = new Worker(module {
| ^
2 | onmessage = function({data}) {
3 | let mod = import(data);
4 | postMessage(mod.fn());
Cause: [1:27-1:28]: Expected ')'"
`;
exports[`worker.js [oxc] format 1`] = `
"Expected \`,\` but found \`{\` (1:28)
> 1 | worker = new Worker(module {
| ^
2 | onmessage = function({data}) {
3 | let mod = import(data);
4 | postMessage(mod.fn());"
`;
exports[`worker.js format 1`] = `
====================================options=====================================
parsers: ["babel"]
printWidth: 80
| printWidth
=====================================input======================================
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {type: "module"});
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {'type': "module"});
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {type: "module", foo: "bar" });
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {...{type: "module"}});
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {[type]: "module"});
worker.postMessage(module { export function fn() { return "hello!" } });
=====================================output=====================================
worker = new Worker(module {
onmessage = function ({ data }) {
let mod = import(data);
postMessage(mod.fn());
};
}, { type: "module" });
worker = new Worker(module {
onmessage = function ({ data }) {
let mod = import(data);
postMessage(mod.fn());
};
}, { type: "module" });
worker = new Worker(
module {
onmessage = function ({ data }) {
let mod = import(data);
postMessage(mod.fn());
};
},
{ type: "module", foo: "bar" },
);
worker = new Worker(
module {
onmessage = function ({ data }) {
let mod = import(data);
postMessage(mod.fn());
};
},
{ ...{ type: "module" } },
);
worker = new Worker(
module {
onmessage = function ({ data }) {
let mod = import(data);
postMessage(mod.fn());
};
},
{ [type]: "module" },
);
worker.postMessage(module {
export function fn() {
return "hello!";
}
});
================================================================================
`;
@@ -0,0 +1,9 @@
runFormatTest(import.meta, ["babel"], {
errors: {
acorn: ["worker.js"],
espree: ["worker.js"],
meriyah: ["worker.js"],
oxc: ["worker.js"],
"oxc-ts": ["worker.js"],
},
});
@@ -0,0 +1,36 @@
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {type: "module"});
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {'type': "module"});
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {type: "module", foo: "bar" });
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {...{type: "module"}});
worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {[type]: "module"});
worker.postMessage(module { export function fn() { return "hello!" } });
-15
View File
@@ -1,15 +0,0 @@
let worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {type: "module"});
let worker = new Worker(module {
onmessage = function({data}) {
let mod = import(data);
postMessage(mod.fn());
}
}, {type: "module", foo: "bar" });
worker.postMessage(module { export function fn() { return "hello!" } });