154 lines
4.3 KiB
Plaintext
154 lines
4.3 KiB
Plaintext
export interface ImportSpecifier {
|
|
/**
|
|
* Module name
|
|
*
|
|
* To handle escape sequences in specifier strings, the .n field of imported specifiers will be provided where possible.
|
|
*
|
|
* For dynamic import expressions, this field will be empty if not a valid JS string.
|
|
*
|
|
* @example
|
|
* const [imports1, exports1] = parse(String.raw`import './\u0061\u0062.js'`);
|
|
* imports1[0].n;
|
|
* // Returns "./ab.js"
|
|
*
|
|
* const [imports2, exports2] = parse(`import("./ab.js")`);
|
|
* imports2[0].n;
|
|
* // Returns "./ab.js"
|
|
*
|
|
* const [imports3, exports3] = parse(`import("./" + "ab.js")`);
|
|
* imports3[0].n;
|
|
* // Returns undefined
|
|
*/
|
|
readonly n: string | undefined;
|
|
/**
|
|
* Start of module specifier
|
|
*
|
|
* @example
|
|
* const source = `import { a } from 'asdf'`;
|
|
* const [imports, exports] = parse(source);
|
|
* source.substring(imports[0].s, imports[0].e);
|
|
* // Returns "asdf"
|
|
*/
|
|
readonly s: number;
|
|
/**
|
|
* End of module specifier
|
|
*/
|
|
readonly e: number;
|
|
/**
|
|
* Start of import statement
|
|
*
|
|
* @example
|
|
* const source = `import { a } from 'asdf'`;
|
|
* const [imports, exports] = parse(source);
|
|
* source.substring(imports[0].ss, imports[0].se);
|
|
* // Returns "import { a } from 'asdf';"
|
|
*/
|
|
readonly ss: number;
|
|
/**
|
|
* End of import statement
|
|
*/
|
|
readonly se: number;
|
|
/**
|
|
* If this import keyword is a dynamic import, this is the start value.
|
|
* If this import keyword is a static import, this is -1.
|
|
* If this import keyword is an import.meta expresion, this is -2.
|
|
*/
|
|
readonly d: number;
|
|
/**
|
|
* If this import has an import assertion, this is the start value.
|
|
* Otherwise this is `-1`.
|
|
*/
|
|
readonly a: number;
|
|
}
|
|
export interface ExportSpecifier {
|
|
/**
|
|
* Exported name
|
|
*
|
|
* @example
|
|
* const source = `export default []`;
|
|
* const [imports, exports] = parse(source);
|
|
* exports[0].n;
|
|
* // Returns "default"
|
|
*
|
|
* @example
|
|
* const source = `export const asdf = 42`;
|
|
* const [imports, exports] = parse(source);
|
|
* exports[0].n;
|
|
* // Returns "asdf"
|
|
*/
|
|
readonly n: string;
|
|
/**
|
|
* Local name, or undefined.
|
|
*
|
|
* @example
|
|
* const source = `export default []`;
|
|
* const [imports, exports] = parse(source);
|
|
* exports[0].ln;
|
|
* // Returns undefined
|
|
*
|
|
* @example
|
|
* const asdf = 42;
|
|
* const source = `export { asdf as a }`;
|
|
* const [imports, exports] = parse(source);
|
|
* exports[0].ln;
|
|
* // Returns "asdf"
|
|
*/
|
|
readonly ln: string | undefined;
|
|
/**
|
|
* Start of exported name
|
|
*
|
|
* @example
|
|
* const source = `export default []`;
|
|
* const [imports, exports] = parse(source);
|
|
* source.substring(exports[0].s, exports[0].e);
|
|
* // Returns "default"
|
|
*
|
|
* @example
|
|
* const source = `export { 42 as asdf }`;
|
|
* const [imports, exports] = parse(source);
|
|
* source.substring(exports[0].s, exports[0].e);
|
|
* // Returns "asdf"
|
|
*/
|
|
readonly s: number;
|
|
/**
|
|
* End of exported name
|
|
*/
|
|
readonly e: number;
|
|
/**
|
|
* Start of local name, or -1.
|
|
*
|
|
* @example
|
|
* const asdf = 42;
|
|
* const source = `export { asdf as a }`;
|
|
* const [imports, exports] = parse(source);
|
|
* source.substring(exports[0].ls, exports[0].le);
|
|
* // Returns "asdf"
|
|
*/
|
|
readonly ls: number;
|
|
/**
|
|
* End of local name, or -1.
|
|
*/
|
|
readonly le: number;
|
|
}
|
|
export interface ParseError extends Error {
|
|
idx: number;
|
|
}
|
|
/**
|
|
* Outputs the list of exports and locations of import specifiers,
|
|
* including dynamic import and import meta handling.
|
|
*
|
|
* @param source Source code to parser
|
|
* @param name Optional sourcename
|
|
* @returns Tuple contaning imports list and exports list.
|
|
*/
|
|
export declare function parse(source: string, name?: string): readonly [
|
|
imports: ReadonlyArray<ImportSpecifier>,
|
|
exports: ReadonlyArray<ExportSpecifier>,
|
|
facade: boolean,
|
|
hasModuleSyntax: boolean
|
|
];
|
|
/**
|
|
* Wait for init to resolve before calling `parse`.
|
|
*/
|
|
export declare const init: Promise<void>;
|