| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -156,10 +156,10 @@ import { fn, FnParams } from './fn.ts'; | |||
| 156 | 156 | ||
| 157 | 157 | ### Non-file forms of input | |
| 158 | 158 | ||
| 159 | - Type stripping can be enabled for `--eval`. The module system | ||
| 159 | + Type stripping can be enabled for `--eval` and STDIN. The module system | ||
| 160 | 160 | will be determined by `--input-type`, as it is for JavaScript. | |
| 161 | 161 | ||
| 162 | - TypeScript syntax is unsupported in the REPL, STDIN input, `--print`, `--check`, and | ||
| 162 | + TypeScript syntax is unsupported in the REPL, `--check`, and | ||
| 163 | 163 | `inspect`. | |
| 164 | 164 | ||
| 165 | 165 | ### Source maps | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -11,6 +11,9 @@ const { getOptionValue } = require('internal/options'); | |||
| 11 | 11 | ||
| 12 | 12 | const { | |
| 13 | 13 | evalModuleEntryPoint, | |
| 14 | + evalTypeScript, | ||
| 15 | + parseAndEvalCommonjsTypeScript, | ||
| 16 | + parseAndEvalModuleTypeScript, | ||
| 14 | 17 | evalScript, | |
| 15 | 18 | readStdin, | |
| 16 | 19 | } = require('internal/process/execution'); | |
@@ -25,13 +28,30 @@ readStdin((code) => { | |||
| 25 | 28 | ||
| 26 | 29 | const print = getOptionValue('--print'); | |
| 27 | 30 | const shouldLoadESM = getOptionValue('--import').length > 0; | |
| 28 | - if (getOptionValue('--input-type') === 'module') { | ||
| 31 | + const inputType = getOptionValue('--input-type'); | ||
| 32 | + const tsEnabled = getOptionValue('--experimental-strip-types'); | ||
| 33 | + if (inputType === 'module') { | ||
| 29 | 34 | evalModuleEntryPoint(code, print); | |
| 35 | + } else if (inputType === 'module-typescript' && tsEnabled) { | ||
| 36 | + parseAndEvalModuleTypeScript(code, print); | ||
| 30 | 37 | } else { | |
| 31 | - evalScript('[stdin]', | ||
| 32 | - code, | ||
| 33 | - getOptionValue('--inspect-brk'), | ||
| 34 | - print, | ||
| 35 | - shouldLoadESM); | ||
| 38 | + | ||
| 39 | + let evalFunction; | ||
| 40 | + if (inputType === 'commonjs') { | ||
| 41 | + evalFunction = evalScript; | ||
| 42 | + } else if (inputType === 'commonjs-typescript' && tsEnabled) { | ||
| 43 | + evalFunction = parseAndEvalCommonjsTypeScript; | ||
| 44 | + } else if (tsEnabled) { | ||
| 45 | + evalFunction = evalTypeScript; | ||
| 46 | + } else { | ||
| 47 | + // Default to commonjs. | ||
| 48 | + evalFunction = evalScript; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + evalFunction('[stdin]', | ||
| 52 | + code, | ||
| 53 | + getOptionValue('--inspect-brk'), | ||
| 54 | + print, | ||
| 55 | + shouldLoadESM); | ||
| 36 | 56 | } | |
| 37 | 57 | }); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,10 +2,17 @@ | |||
| 2 | 2 | [stdin]:1 | |
| 3 | 3 | with(this){__filename} | |
| 4 | 4 | ^^^^ | |
| 5 | + x The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'. | ||
| 6 | + ,---- | ||
| 7 | + 1 | with(this){__filename} | ||
| 8 | + : ^^^^ | ||
| 9 | + `---- | ||
| 5 | 10 | ||
| 6 | - SyntaxError: Strict mode code may not include a with statement | ||
| 7 | 11 | ||
| 12 | + Caused by: | ||
| 13 | + failed to parse | ||
| 8 | 14 | ||
| 15 | + SyntaxError: Strict mode code may not include a with statement | ||
| 9 | 16 | ||
| 10 | 17 | ||
| 11 | 18 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,38 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + | ||
| 3 | + require('../../common'); | ||
| 4 | + | ||
| 5 | + const spawn = require('child_process').spawn; | ||
| 6 | + | ||
| 7 | + function run(cmd, strict, cb) { | ||
| 8 | + const args = ['--disable-warning=ExperimentalWarning']; | ||
| 9 | + if (strict) args.push('--use_strict'); | ||
| 10 | + args.push('-p'); | ||
| 11 | + const child = spawn(process.execPath, args); | ||
| 12 | + child.stdout.pipe(process.stdout); | ||
| 13 | + child.stderr.pipe(process.stdout); | ||
| 14 | + child.stdin.end(cmd); | ||
| 15 | + child.on('close', cb); | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + const queue = | ||
| 19 | + [ | ||
| 20 | + 'enum Foo{};', | ||
| 21 | + 'throw new SyntaxError("hello")', | ||
| 22 | + 'const foo;', | ||
| 23 | + 'let x: number = 100;x;', | ||
| 24 | + 'const foo: string = 10;', | ||
| 25 | + 'function foo(){};foo<Number>(1);', | ||
| 26 | + 'interface Foo{};const foo;', | ||
| 27 | + 'function foo(){ await Promise.resolve(1)};', | ||
| 28 | + ]; | ||
| 29 | + | ||
| 30 | + function go() { | ||
| 31 | + const c = queue.shift(); | ||
| 32 | + if (!c) return console.log('done'); | ||
| 33 | + run(c, false, function () { | ||
| 34 | + run(c, true, go); | ||
| 35 | + }); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + go(); | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,191 @@ | |||
| 1 | + [stdin]:1 | ||
| 2 | + enum Foo{}; | ||
| 3 | + ^^^^ | ||
| 4 | + x TypeScript enum is not supported in strip-only mode | ||
| 5 | + ,---- | ||
| 6 | + 1 | enum Foo{}; | ||
| 7 | + : ^^^^^^^^^^ | ||
| 8 | + `---- | ||
| 9 | + | ||
| 10 | + | ||
| 11 | + SyntaxError: Unexpected reserved word | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + Node.js * | ||
| 22 | + [stdin]:1 | ||
| 23 | + enum Foo{}; | ||
| 24 | + ^^^^ | ||
| 25 | + x TypeScript enum is not supported in strip-only mode | ||
| 26 | + ,---- | ||
| 27 | + 1 | enum Foo{}; | ||
| 28 | + : ^^^^^^^^^^ | ||
| 29 | + `---- | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + SyntaxError: Unexpected reserved word | ||
| 33 | + | ||
| 34 | + | ||
| 35 | + | ||
| 36 | + | ||
| 37 | + | ||
| 38 | + | ||
| 39 | + | ||
| 40 | + | ||
| 41 | + | ||
| 42 | + Node.js * | ||
| 43 | + [stdin]:1 | ||
| 44 | + throw new SyntaxError("hello") | ||
| 45 | + ^ | ||
| 46 | + | ||
| 47 | + SyntaxError: hello | ||
| 48 | + | ||
| 49 | + | ||
| 50 | + | ||
| 51 | + | ||
| 52 | + | ||
| 53 | + | ||
| 54 | + | ||
| 55 | + | ||
| 56 | + | ||
| 57 | + | ||
| 58 | + | ||
| 59 | + Node.js * | ||
| 60 | + [stdin]:1 | ||
| 61 | + throw new SyntaxError("hello") | ||
| 62 | + ^ | ||
| 63 | + | ||
| 64 | + SyntaxError: hello | ||
| 65 | + | ||
| 66 | + | ||
| 67 | + | ||
| 68 | + | ||
| 69 | + | ||
| 70 | + | ||
| 71 | + | ||
| 72 | + | ||
| 73 | + | ||
| 74 | + | ||
| 75 | + | ||
| 76 | + Node.js * | ||
| 77 | + [stdin]:1 | ||
| 78 | + const foo; | ||
| 79 | + ^^^ | ||
| 80 | + | ||
| 81 | + SyntaxError: Missing initializer in const declaration | ||
| 82 | + | ||
| 83 | + | ||
| 84 | + | ||
| 85 | + | ||
| 86 | + | ||
| 87 | + | ||
| 88 | + | ||
| 89 | + | ||
| 90 | + | ||
| 91 | + Node.js * | ||
| 92 | + [stdin]:1 | ||
| 93 | + const foo; | ||
| 94 | + ^^^ | ||
| 95 | + | ||
| 96 | + SyntaxError: Missing initializer in const declaration | ||
| 97 | + | ||
| 98 | + | ||
| 99 | + | ||
| 100 | + | ||
| 101 | + | ||
| 102 | + | ||
| 103 | + | ||
| 104 | + | ||
| 105 | + | ||
| 106 | + Node.js * | ||
| 107 | + 100 | ||
| 108 | + 100 | ||
| 109 | + undefined | ||
| 110 | + undefined | ||
| 111 | + false | ||
| 112 | + false | ||
| 113 | + [stdin]:1 | ||
| 114 | + ;const foo; | ||
| 115 | + ^^^ | ||
| 116 | + | ||
| 117 | + SyntaxError: Missing initializer in const declaration | ||
| 118 | + | ||
| 119 | + | ||
| 120 | + | ||
| 121 | + | ||
| 122 | + | ||
| 123 | + | ||
| 124 | + | ||
| 125 | + | ||
| 126 | + | ||
| 127 | + Node.js * | ||
| 128 | + [stdin]:1 | ||
| 129 | + ;const foo; | ||
| 130 | + ^^^ | ||
| 131 | + | ||
| 132 | + SyntaxError: Missing initializer in const declaration | ||
| 133 | + | ||
| 134 | + | ||
| 135 | + | ||
| 136 | + | ||
| 137 | + | ||
| 138 | + | ||
| 139 | + | ||
| 140 | + | ||
| 141 | + | ||
| 142 | + Node.js * | ||
| 143 | + [stdin]:1 | ||
| 144 | + function foo(){ await Promise.resolve(1)}; | ||
| 145 | + ^^^^^ | ||
| 146 | + x await isn't allowed in non-async function | ||
| 147 | + ,---- | ||
| 148 | + 1 | function foo(){ await Promise.resolve(1)}; | ||
| 149 | + : ^^^^^^^ | ||
| 150 | + `---- | ||
| 151 | + | ||
| 152 | + | ||
| 153 | + Caused by: | ||
| 154 | + failed to parse | ||
| 155 | + | ||
| 156 | + SyntaxError: await is only valid in async functions and the top level bodies of modules | ||
| 157 | + | ||
| 158 | + | ||
| 159 | + | ||
| 160 | + | ||
| 161 | + | ||
| 162 | + | ||
| 163 | + | ||
| 164 | + | ||
| 165 | + | ||
| 166 | + Node.js * | ||
| 167 | + [stdin]:1 | ||
| 168 | + function foo(){ await Promise.resolve(1)}; | ||
| 169 | + ^^^^^ | ||
| 170 | + x await isn't allowed in non-async function | ||
| 171 | + ,---- | ||
| 172 | + 1 | function foo(){ await Promise.resolve(1)}; | ||
| 173 | + : ^^^^^^^ | ||
| 174 | + `---- | ||
| 175 | + | ||
| 176 | + | ||
| 177 | + Caused by: | ||
| 178 | + failed to parse | ||
| 179 | + | ||
| 180 | + SyntaxError: await is only valid in async functions and the top level bodies of modules | ||
| 181 | + | ||
| 182 | + | ||
| 183 | + | ||
| 184 | + | ||
| 185 | + | ||
| 186 | + | ||
| 187 | + | ||
| 188 | + | ||
| 189 | + | ||
| 190 | + Node.js * | ||
| 191 | + done | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -24,6 +24,7 @@ describe('eval output', { concurrency: true }, () => { | |||
| 24 | 24 | const tests = [ | |
| 25 | 25 | { name: 'eval/eval_messages.js' }, | |
| 26 | 26 | { name: 'eval/stdin_messages.js' }, | |
| 27 | + { name: 'eval/stdin_typescript.js' }, | ||
| 27 | 28 | ]; | |
| 28 | 29 | ||
| 29 | 30 | for (const { name } of tests) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments