mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-25 06:24:27 +08:00
- Share native parsing, declaration projection, and npm capability analysis through explicit frontend services. - Scope module analysis caches and parser connections to their owning program lifecycle. - Preserve global fetch reads in destructuring defaults across embedded npm modules.
58 lines
5.2 KiB
TypeScript
58 lines
5.2 KiB
TypeScript
/** Capability expectations shared by Node and statically compiled clients. */
|
|
export const npmFetchCases: { name: string; source: string; usesFetch: boolean }[] = [
|
|
{ name: "bare call", source: "fetch('url');", usesFetch: true },
|
|
{ name: "bare reference", source: "module.exports = fetch;", usesFetch: true },
|
|
{ name: "shorthand value", source: "module.exports = { fetch };", usesFetch: true },
|
|
{ name: "global property", source: "globalThis.fetch;", usesFetch: true },
|
|
{ name: "global alias", source: "global.fetch;", usesFetch: true },
|
|
{ name: "global literal key", source: "globalThis['fetch'];", usesFetch: true },
|
|
{ name: "global template key", source: "globalThis[`fetch`];", usesFetch: true },
|
|
{ name: "optional global property", source: "globalThis?.fetch?.('url');", usesFetch: true },
|
|
{ name: "parenthesized global", source: "((globalThis)).fetch;", usesFetch: true },
|
|
{ name: "destructure binding", source: "const { fetch } = globalThis;", usesFetch: true },
|
|
{ name: "destructure alias", source: "const { fetch: request } = global;", usesFetch: true },
|
|
{ name: "destructure literal key", source: "const { ['fetch']: request } = globalThis;", usesFetch: true },
|
|
{ name: "destructure default parameter", source: "function f({fetch: request} = globalThis) {}", usesFetch: true },
|
|
{ name: "destructure assignment", source: "let request; ({fetch: request} = globalThis);", usesFetch: true },
|
|
{ name: "destructure shorthand assignment", source: "let fetch; ({fetch} = globalThis);", usesFetch: true },
|
|
{ name: "destructure fallback global", source: "const { value = fetch } = {};", usesFetch: true },
|
|
{ name: "captured global", source: "function f() { return fetch; }", usesFetch: true },
|
|
{ name: "alias chain", source: "const root = global; const other = root; other.fetch;", usesFetch: true },
|
|
{ name: "alias reverse declaration", source: "function f() { return second.fetch; } const second = first; const first = global;", usesFetch: true },
|
|
{ name: "mutable alias", source: "let root = globalThis; root = {}; root.fetch;", usesFetch: true },
|
|
{ name: "conditional root", source: "const root = flag ? global : {}; root.fetch;", usesFetch: true },
|
|
{ name: "logical or root", source: "const root = globalThis || global; root.fetch;", usesFetch: true },
|
|
{ name: "nullish root", source: "const root = globalThis ?? global; root.fetch;", usesFetch: true },
|
|
{ name: "logical and root", source: "const root = flag && global; root.fetch;", usesFetch: true },
|
|
{ name: "comma root", source: "const root = (0, global); root.fetch;", usesFetch: true },
|
|
{ name: "alias destructure", source: "const root = global; const { fetch: request } = root;", usesFetch: true },
|
|
{ name: "global outside shadow", source: "function f(fetch) { return fetch; } module.exports = fetch;", usesFetch: true },
|
|
{ name: "comment", source: "/* fetch() */ // global.fetch\n", usesFetch: false },
|
|
{ name: "string", source: "'globalThis.fetch()';", usesFetch: false },
|
|
{ name: "regex", source: "/fetch/;", usesFetch: false },
|
|
{ name: "template text", source: "`fetch()`;", usesFetch: false },
|
|
{ name: "local function", source: "function fetch() {} fetch();", usesFetch: false },
|
|
{ name: "hoisted var", source: "fetch; var fetch;", usesFetch: false },
|
|
{ name: "lexical shadow", source: "const fetch = () => 1; fetch();", usesFetch: false },
|
|
{ name: "parameter", source: "function f(fetch) { fetch(); }", usesFetch: false },
|
|
{ name: "catch binding", source: "try {} catch(fetch) { fetch(); }", usesFetch: false },
|
|
{ name: "local shorthand", source: "const fetch = 1; module.exports = { fetch };", usesFetch: false },
|
|
{ name: "object method", source: "({ fetch() {} });", usesFetch: false },
|
|
{ name: "object property", source: "({ fetch: 1 });", usesFetch: false },
|
|
{ name: "class method", source: "class A { fetch() {} }", usesFetch: false },
|
|
{ name: "class field", source: "class A { fetch = 1; }", usesFetch: false },
|
|
{ name: "unrelated property", source: "value.fetch;", usesFetch: false },
|
|
{ name: "label", source: "fetch: for (;;) { break fetch; }", usesFetch: false },
|
|
{ name: "default import", source: "import fetch from 'pkg'; fetch();", usesFetch: false },
|
|
{ name: "named import", source: "import { fetch as request } from 'pkg'; request();", usesFetch: false },
|
|
{ name: "namespace import", source: "import * as fetch from 'pkg'; fetch.method();", usesFetch: false },
|
|
{ name: "reexport", source: "export { fetch as request } from 'pkg';", usesFetch: false },
|
|
{ name: "local export", source: "const fetch = 1; export { fetch };", usesFetch: false },
|
|
{ name: "global parameter", source: "function f(globalThis) { globalThis.fetch; }", usesFetch: false },
|
|
{ name: "global import", source: "import global from 'pkg'; global.fetch;", usesFetch: false },
|
|
{ name: "local destructure", source: "const { fetch } = source; fetch();", usesFetch: false },
|
|
{ name: "root shadow", source: "const root = global; function f(root) { root.fetch; }", usesFetch: false },
|
|
{ name: "alias wrong comma arm", source: "const root = (global, {}); root.fetch;", usesFetch: false },
|
|
{ name: "same spelling different scope", source: "function a() { const root = global; } function b() { const root = {}; root.fetch; }", usesFetch: false },
|
|
];
|