standardized-audio-context
Version:
A cross-browser wrapper for the Web Audio API which aims to closely follow the standard.
29 lines • 1.67 kB
JavaScript
/*
* This massive regex tries to cover all the following cases.
*
* import './path';
* import defaultImport from './path';
* import { namedImport } from './path';
* import { namedImport as renamendImport } from './path';
* import * as namespaceImport from './path';
* import defaultImport, { namedImport } from './path';
* import defaultImport, { namedImport as renamendImport } from './path';
* import defaultImport, * as namespaceImport from './path';
*/
const IMPORT_STATEMENT_REGEX = /^import(?:(?:[\s]+[\w]+|(?:[\s]+[\w]+[\s]*,)?[\s]*\{[\s]*[\w]+(?:[\s]+as[\s]+[\w]+)?(?:[\s]*,[\s]*[\w]+(?:[\s]+as[\s]+[\w]+)?)*[\s]*}|(?:[\s]+[\w]+[\s]*,)?[\s]*\*[\s]+as[\s]+[\w]+)[\s]+from)?(?:[\s]*)("([^"\\]|\\.)+"|'([^'\\]|\\.)+')(?:[\s]*);?/; // tslint:disable-line:max-line-length
export const splitImportStatements = (source, url) => {
const importStatements = [];
let sourceWithoutImportStatements = source.replace(/^[\s]+/, '');
let result = sourceWithoutImportStatements.match(IMPORT_STATEMENT_REGEX);
while (result !== null) {
const unresolvedUrl = result[1].slice(1, -1);
const importStatementWithResolvedUrl = result[0]
.replace(/([\s]+)?;?$/, '')
.replace(unresolvedUrl, new URL(unresolvedUrl, url).toString());
importStatements.push(importStatementWithResolvedUrl);
sourceWithoutImportStatements = sourceWithoutImportStatements.slice(result[0].length).replace(/^[\s]+/, '');
result = sourceWithoutImportStatements.match(IMPORT_STATEMENT_REGEX);
}
return [importStatements.join(';'), sourceWithoutImportStatements];
};
//# sourceMappingURL=split-import-statements.js.map