53 lines
1.9 KiB
JavaScript
53 lines
1.9 KiB
JavaScript
import { onGlobalError } from './onErrors.js';
|
|
import { comments, getStatements } from './statements.js';
|
|
import { CONTEXT_KEY, createParseFunction, getCacheKey, removeErrorsCausedByOverloading, } from './utils.js';
|
|
/**
|
|
* Parses `import`/`export` in ECMAScript/TypeScript syntax.
|
|
*/
|
|
export const parseImportsExports = (source, options) => {
|
|
const cacheKey = getCacheKey(options);
|
|
const importsExports = {
|
|
namedImports: undefined,
|
|
namespaceImports: undefined,
|
|
dynamicImports: undefined,
|
|
requires: undefined,
|
|
typeNamedImports: undefined,
|
|
typeNamespaceImports: undefined,
|
|
typeDynamicImports: undefined,
|
|
namedReexports: undefined,
|
|
namespaceReexports: undefined,
|
|
starReexports: undefined,
|
|
typeNamedReexports: undefined,
|
|
typeNamespaceReexports: undefined,
|
|
typeStarReexports: undefined,
|
|
defaultExport: undefined,
|
|
namedExports: undefined,
|
|
declarationExports: undefined,
|
|
typeNamedExports: undefined,
|
|
typeExports: undefined,
|
|
interfaceExports: undefined,
|
|
namespaceExports: undefined,
|
|
commonJsNamespaceExport: undefined,
|
|
commonJsExports: undefined,
|
|
errors: undefined,
|
|
[CONTEXT_KEY]: { lineColumnCache: undefined, linesIndexes: undefined, options, source },
|
|
};
|
|
var parse = parseCache[cacheKey];
|
|
if (parse === undefined) {
|
|
const statements = getStatements(options);
|
|
parse = createParseFunction({ ...baseParseOptions, statements });
|
|
parseCache[cacheKey] = parse;
|
|
}
|
|
parse(importsExports, source);
|
|
removeErrorsCausedByOverloading(importsExports);
|
|
importsExports[CONTEXT_KEY] = undefined;
|
|
return importsExports;
|
|
};
|
|
/**
|
|
* Base options of parse function.
|
|
*/
|
|
const baseParseOptions = { comments, onError: onGlobalError };
|
|
/**
|
|
* Cache of parse functions with different options.
|
|
*/
|
|
const parseCache = { __proto__: null };
|