summaryrefslogtreecommitdiff
path: root/js/type_directives.ts
diff options
context:
space:
mode:
Diffstat (limited to 'js/type_directives.ts')
-rw-r--r--js/type_directives.ts91
1 files changed, 0 insertions, 91 deletions
diff --git a/js/type_directives.ts b/js/type_directives.ts
deleted file mode 100644
index 9b27887b5..000000000
--- a/js/type_directives.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
-
-interface FileReference {
- fileName: string;
- pos: number;
- end: number;
-}
-
-/** Remap the module name based on any supplied type directives passed. */
-export function getMappedModuleName(
- source: FileReference,
- typeDirectives: Map<FileReference, string>
-): string {
- const { fileName: sourceFileName, pos: sourcePos } = source;
- for (const [{ fileName, pos }, value] of typeDirectives.entries()) {
- if (sourceFileName === fileName && sourcePos === pos) {
- return value;
- }
- }
- return source.fileName;
-}
-
-/** Matches directives that look something like this and parses out the value
- * of the directive:
- *
- * // @deno-types="./foo.d.ts"
- *
- * [See Diagram](http://bit.ly/31nZPCF)
- */
-const typeDirectiveRegEx = /@deno-types\s*=\s*(["'])((?:(?=(\\?))\3.)*?)\1/gi;
-
-/** Matches `import`, `import from` or `export from` statements and parses out the value of the
- * module specifier in the second capture group:
- *
- * import "./foo.js"
- * import * as foo from "./foo.js"
- * export { a, b, c } from "./bar.js"
- *
- * [See Diagram](http://bit.ly/2lOsp0K)
- */
-const importExportRegEx = /(?:import|export)(?:\s+|\s+[\s\S]*?from\s+)?(["'])((?:(?=(\\?))\3.)*?)\1/;
-
-/** Parses out any Deno type directives that are part of the source code, or
- * returns `undefined` if there are not any.
- */
-export function parseTypeDirectives(
- sourceCode: string | undefined
-): Map<FileReference, string> | undefined {
- if (!sourceCode) {
- return;
- }
-
- // collect all the directives in the file and their start and end positions
- const directives: FileReference[] = [];
- let maybeMatch: RegExpExecArray | null = null;
- while ((maybeMatch = typeDirectiveRegEx.exec(sourceCode))) {
- const [matchString, , fileName] = maybeMatch;
- const { index: pos } = maybeMatch;
- directives.push({
- fileName,
- pos,
- end: pos + matchString.length
- });
- }
- if (!directives.length) {
- return;
- }
-
- // work from the last directive backwards for the next `import`/`export`
- // statement
- directives.reverse();
- const results = new Map<FileReference, string>();
- for (const { end, fileName, pos } of directives) {
- const searchString = sourceCode.substring(end);
- const maybeMatch = importExportRegEx.exec(searchString);
- if (maybeMatch) {
- const [matchString, , targetFileName] = maybeMatch;
- const targetPos =
- end + maybeMatch.index + matchString.indexOf(targetFileName) - 1;
- const target: FileReference = {
- fileName: targetFileName,
- pos: targetPos,
- end: targetPos + targetFileName.length
- };
- results.set(target, fileName);
- }
- sourceCode = sourceCode.substring(0, pos);
- }
-
- return results;
-}