module: simpler shebang function
This simplifies the shebang function significantly. Before, it was optimized for two characters input. Any module actually parsed should however have more characters than just the shebang. The performance stays the same as before. PR-URL: https://github.com/nodejs/node/pull/26266 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
8347dbefc3
commit
3fce5cf439
@ -5,13 +5,6 @@ const path = require('path');
|
||||
const { pathToFileURL } = require('internal/url');
|
||||
const { URL } = require('url');
|
||||
|
||||
const {
|
||||
CHAR_LINE_FEED,
|
||||
CHAR_CARRIAGE_RETURN,
|
||||
CHAR_EXCLAMATION_MARK,
|
||||
CHAR_HASH,
|
||||
} = require('internal/constants');
|
||||
|
||||
// Invoke with makeRequireFunction(module) where |module| is the Module object
|
||||
// to use as the context for the require() function.
|
||||
function makeRequireFunction(mod) {
|
||||
@ -67,31 +60,17 @@ function stripBOM(content) {
|
||||
*/
|
||||
function stripShebang(content) {
|
||||
// Remove shebang
|
||||
var contLen = content.length;
|
||||
if (contLen >= 2) {
|
||||
if (content.charCodeAt(0) === CHAR_HASH &&
|
||||
content.charCodeAt(1) === CHAR_EXCLAMATION_MARK) {
|
||||
if (contLen === 2) {
|
||||
// Exact match
|
||||
content = '';
|
||||
} else {
|
||||
// Find end of shebang line and slice it off
|
||||
var i = 2;
|
||||
for (; i < contLen; ++i) {
|
||||
var code = content.charCodeAt(i);
|
||||
if (code === CHAR_LINE_FEED || code === CHAR_CARRIAGE_RETURN)
|
||||
break;
|
||||
}
|
||||
if (i === contLen)
|
||||
content = '';
|
||||
else {
|
||||
// Note that this actually includes the newline character(s) in the
|
||||
// new output. This duplicates the behavior of the regular expression
|
||||
// that was previously used to replace the shebang line
|
||||
content = content.slice(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (content.charAt(0) === '#' && content.charAt(1) === '!') {
|
||||
// Find end of shebang line and slice it off
|
||||
let index = content.indexOf('\n', 2);
|
||||
if (index === -1)
|
||||
return '';
|
||||
if (content.charAt(index - 1) === '\r')
|
||||
index--;
|
||||
// Note that this actually includes the newline character(s) in the
|
||||
// new output. This duplicates the behavior of the regular expression
|
||||
// that was previously used to replace the shebang line.
|
||||
content = content.slice(index);
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user