mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-23 10:29:01 -06:00
Merge branch 'master' into ownJsonParsing
This commit is contained in:
commit
48189c883f
@ -2333,7 +2333,7 @@ namespace ts {
|
||||
// A common practice in node modules is to set 'export = module.exports = {}', this ensures that 'exports'
|
||||
// is still pointing to 'module.exports'.
|
||||
// We do not want to consider this as 'export=' since a module can have only one of these.
|
||||
// Similarlly we do not want to treat 'module.exports = exports' as an 'export='.
|
||||
// Similarly we do not want to treat 'module.exports = exports' as an 'export='.
|
||||
const assignedExpression = getRightMostAssignedExpression(node.right);
|
||||
if (isEmptyObjectLiteral(assignedExpression) || isExportsOrModuleExportsOrAlias(assignedExpression)) {
|
||||
// Mark it as a module in case there are no other exports in the file
|
||||
@ -2741,6 +2741,10 @@ namespace ts {
|
||||
transformFlags |= TransformFlags.AssertES2015;
|
||||
}
|
||||
|
||||
if (expression.kind === SyntaxKind.ImportKeyword) {
|
||||
transformFlags |= TransformFlags.ContainsDynamicImport;
|
||||
}
|
||||
|
||||
node.transformFlags = transformFlags | TransformFlags.HasComputedFlags;
|
||||
return transformFlags & ~TransformFlags.ArrayLiteralOrCallOrNewExcludes;
|
||||
}
|
||||
|
||||
@ -8372,6 +8372,12 @@ namespace ts {
|
||||
/**
|
||||
* This is *not* a bi-directional relationship.
|
||||
* If one needs to check both directions for comparability, use a second call to this function or 'checkTypeComparableTo'.
|
||||
*
|
||||
* A type S is comparable to a type T if some (but not necessarily all) of the possible values of S are also possible values of T.
|
||||
* It is used to check following cases:
|
||||
* - the types of the left and right sides of equality/inequality operators (`===`, `!==`, `==`, `!=`).
|
||||
* - the types of `case` clause expressions and their respective `switch` expressions.
|
||||
* - the type of an expression in a type assertion with the type being asserted.
|
||||
*/
|
||||
function isTypeComparableTo(source: Type, target: Type): boolean {
|
||||
return isTypeRelatedTo(source, target, comparableRelation);
|
||||
@ -8599,6 +8605,7 @@ namespace ts {
|
||||
|
||||
function isEmptyObjectType(type: Type): boolean {
|
||||
return type.flags & TypeFlags.Object ? isEmptyResolvedType(resolveStructuredTypeMembers(<ObjectType>type)) :
|
||||
type.flags & TypeFlags.NonPrimitive ? true :
|
||||
type.flags & TypeFlags.Union ? forEach((<UnionType>type).types, isEmptyObjectType) :
|
||||
type.flags & TypeFlags.Intersection ? !forEach((<UnionType>type).types, t => !isEmptyObjectType(t)) :
|
||||
false;
|
||||
@ -16179,6 +16186,35 @@ namespace ts {
|
||||
return getReturnTypeOfSignature(signature);
|
||||
}
|
||||
|
||||
function checkImportCallExpression(node: ImportCall): Type {
|
||||
// Check grammar of dynamic import
|
||||
checkGrammarArguments(node, node.arguments) || checkGrammarImportCallExpression(node);
|
||||
|
||||
if (node.arguments.length === 0) {
|
||||
return createPromiseReturnType(node, anyType);
|
||||
}
|
||||
const specifier = node.arguments[0];
|
||||
const specifierType = checkExpressionCached(specifier);
|
||||
// Even though multiple arugments is grammatically incorrect, type-check extra arguments for completion
|
||||
for (let i = 1; i < node.arguments.length; ++i) {
|
||||
checkExpressionCached(node.arguments[i]);
|
||||
}
|
||||
|
||||
if (specifierType.flags & TypeFlags.Undefined || specifierType.flags & TypeFlags.Null || !isTypeAssignableTo(specifierType, stringType)) {
|
||||
error(specifier, Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0, typeToString(specifierType));
|
||||
}
|
||||
|
||||
// resolveExternalModuleName will return undefined if the moduleReferenceExpression is not a string literal
|
||||
const moduleSymbol = resolveExternalModuleName(node, specifier);
|
||||
if (moduleSymbol) {
|
||||
const esModuleSymbol = resolveESModuleSymbol(moduleSymbol, specifier, /*dontRecursivelyResolve*/ true);
|
||||
if (esModuleSymbol) {
|
||||
return createPromiseReturnType(node, getTypeOfSymbol(esModuleSymbol));
|
||||
}
|
||||
}
|
||||
return createPromiseReturnType(node, anyType);
|
||||
}
|
||||
|
||||
function isCommonJsRequire(node: Node) {
|
||||
if (!isRequireCall(node, /*checkArgumentIsStringLiteral*/ true)) {
|
||||
return false;
|
||||
@ -16385,14 +16421,18 @@ namespace ts {
|
||||
return emptyObjectType;
|
||||
}
|
||||
|
||||
function createPromiseReturnType(func: FunctionLikeDeclaration, promisedType: Type) {
|
||||
function createPromiseReturnType(func: FunctionLikeDeclaration | ImportCall, promisedType: Type) {
|
||||
const promiseType = createPromiseType(promisedType);
|
||||
if (promiseType === emptyObjectType) {
|
||||
error(func, Diagnostics.An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option);
|
||||
error(func, isImportCall(func) ?
|
||||
Diagnostics.A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option :
|
||||
Diagnostics.An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option);
|
||||
return unknownType;
|
||||
}
|
||||
else if (!getGlobalPromiseConstructorSymbol(/*reportErrors*/ true)) {
|
||||
error(func, Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
|
||||
error(func, isImportCall(func) ?
|
||||
Diagnostics.A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option :
|
||||
Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
|
||||
}
|
||||
|
||||
return promiseType;
|
||||
@ -17751,6 +17791,10 @@ namespace ts {
|
||||
case SyntaxKind.ElementAccessExpression:
|
||||
return checkIndexedAccess(<ElementAccessExpression>node);
|
||||
case SyntaxKind.CallExpression:
|
||||
if ((<CallExpression>node).expression.kind === SyntaxKind.ImportKeyword) {
|
||||
return checkImportCallExpression(<ImportCall>node);
|
||||
}
|
||||
/* falls through */
|
||||
case SyntaxKind.NewExpression:
|
||||
return checkCallExpression(<CallExpression>node);
|
||||
case SyntaxKind.TaggedTemplateExpression:
|
||||
@ -24676,6 +24720,27 @@ namespace ts {
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
function checkGrammarImportCallExpression(node: ImportCall): boolean {
|
||||
if (modulekind === ModuleKind.ES2015) {
|
||||
return grammarErrorOnNode(node, Diagnostics.Dynamic_import_cannot_be_used_when_targeting_ECMAScript_2015_modules);
|
||||
}
|
||||
|
||||
if (node.typeArguments) {
|
||||
return grammarErrorOnNode(node, Diagnostics.Dynamic_import_cannot_have_type_arguments);
|
||||
}
|
||||
|
||||
const arguments = node.arguments;
|
||||
if (arguments.length !== 1) {
|
||||
return grammarErrorOnNode(node, Diagnostics.Dynamic_import_must_have_one_specifier_as_an_argument);
|
||||
}
|
||||
|
||||
// see: parseArgumentOrArrayLiteralElement...we use this function which parse arguments of callExpression to parse specifier for dynamic import.
|
||||
// parseArgumentOrArrayLiteralElement allows spread element to be in an argument list which is not allowed as specifier in dynamic import.
|
||||
if (isSpreadElement(arguments[0])) {
|
||||
return grammarErrorOnNode(arguments[0], Diagnostics.Specifier_of_dynamic_import_cannot_be_spread_element);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Like 'isDeclarationName', but returns true for LHS of `import { x as y }` or `export { x as y }`. */
|
||||
|
||||
@ -100,11 +100,12 @@ namespace ts {
|
||||
"umd": ModuleKind.UMD,
|
||||
"es6": ModuleKind.ES2015,
|
||||
"es2015": ModuleKind.ES2015,
|
||||
"esnext": ModuleKind.ESNext
|
||||
}),
|
||||
paramType: Diagnostics.KIND,
|
||||
showInSimplifiedHelpView: true,
|
||||
category: Diagnostics.Basic_Options,
|
||||
description: Diagnostics.Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es2015,
|
||||
description: Diagnostics.Specify_module_code_generation_Colon_commonjs_amd_system_umd_es2015_or_ESNext,
|
||||
},
|
||||
{
|
||||
name: "lib",
|
||||
|
||||
@ -883,14 +883,31 @@
|
||||
"category": "Error",
|
||||
"code": 1322
|
||||
},
|
||||
"String literal with double quotes expected.": {
|
||||
"Dynamic import cannot be used when targeting ECMAScript 2015 modules.": {
|
||||
"category": "Error",
|
||||
"code": 1323
|
||||
},
|
||||
"Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal.": {
|
||||
"Dynamic import must have one specifier as an argument.": {
|
||||
"category": "Error",
|
||||
"code": 1324
|
||||
},
|
||||
"Specifier of dynamic import cannot be spread element.": {
|
||||
"category": "Error",
|
||||
"code": 1325
|
||||
},
|
||||
"Dynamic import cannot have type arguments": {
|
||||
"category": "Error",
|
||||
"code": 1326
|
||||
},
|
||||
"String literal with double quotes expected.": {
|
||||
"category": "Error",
|
||||
"code": 1327
|
||||
},
|
||||
"Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal.": {
|
||||
"category": "Error",
|
||||
"code": 1328
|
||||
},
|
||||
|
||||
"Duplicate identifier '{0}'.": {
|
||||
"category": "Error",
|
||||
"code": 2300
|
||||
@ -1935,10 +1952,6 @@
|
||||
"category": "Error",
|
||||
"code": 2649
|
||||
},
|
||||
"Cannot emit namespaced JSX elements in React.": {
|
||||
"category": "Error",
|
||||
"code": 2650
|
||||
},
|
||||
"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.": {
|
||||
"category": "Error",
|
||||
"code": 2651
|
||||
@ -2171,6 +2184,14 @@
|
||||
"category": "Error",
|
||||
"code": 2710
|
||||
},
|
||||
"A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your `--lib` option.": {
|
||||
"category": "Error",
|
||||
"code": 2711
|
||||
},
|
||||
"A dynamic import call in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.": {
|
||||
"category": "Error",
|
||||
"code": 2712
|
||||
},
|
||||
|
||||
"Import declaration '{0}' is using private name '{1}'.": {
|
||||
"category": "Error",
|
||||
@ -2637,7 +2658,7 @@
|
||||
"category": "Message",
|
||||
"code": 6015
|
||||
},
|
||||
"Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es2015'.": {
|
||||
"Specify module code generation: 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'.": {
|
||||
"category": "Message",
|
||||
"code": 6016
|
||||
},
|
||||
@ -3373,6 +3394,11 @@
|
||||
"category": "Error",
|
||||
"code": 7035
|
||||
},
|
||||
"Dynamic import's specifier must be of type 'string', but here has type '{0}'.": {
|
||||
"category": "Error",
|
||||
"code": 7036
|
||||
},
|
||||
|
||||
"You cannot rename this element.": {
|
||||
"category": "Error",
|
||||
"code": 8000
|
||||
@ -3603,7 +3629,7 @@
|
||||
"category": "Message",
|
||||
"code": 90024
|
||||
},
|
||||
|
||||
|
||||
"Convert function to an ES2015 class": {
|
||||
"category": "Message",
|
||||
"code": 95001
|
||||
|
||||
@ -740,6 +740,7 @@ namespace ts {
|
||||
case SyntaxKind.SuperKeyword:
|
||||
case SyntaxKind.TrueKeyword:
|
||||
case SyntaxKind.ThisKeyword:
|
||||
case SyntaxKind.ImportKeyword:
|
||||
writeTokenNode(node);
|
||||
return;
|
||||
|
||||
|
||||
@ -2495,8 +2495,9 @@ namespace ts {
|
||||
helpers
|
||||
} = sourceEmitNode;
|
||||
if (!destEmitNode) destEmitNode = {};
|
||||
if (leadingComments) destEmitNode.leadingComments = concatenate(leadingComments, destEmitNode.leadingComments);
|
||||
if (trailingComments) destEmitNode.trailingComments = concatenate(trailingComments, destEmitNode.trailingComments);
|
||||
// We are using `.slice()` here in case `destEmitNode.leadingComments` is pushed to later.
|
||||
if (leadingComments) destEmitNode.leadingComments = addRange(leadingComments.slice(), destEmitNode.leadingComments);
|
||||
if (trailingComments) destEmitNode.trailingComments = addRange(trailingComments.slice(), destEmitNode.trailingComments);
|
||||
if (flags) destEmitNode.flags = flags;
|
||||
if (commentRange) destEmitNode.commentRange = commentRange;
|
||||
if (sourceMapRange) destEmitNode.sourceMapRange = sourceMapRange;
|
||||
|
||||
@ -45,10 +45,16 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
// Invokes a callback for each child of the given node. The 'cbNode' callback is invoked for all child nodes
|
||||
// stored in properties. If a 'cbNodes' callback is specified, it is invoked for embedded arrays; otherwise,
|
||||
// embedded arrays are flattened and the 'cbNode' callback is invoked for each element. If a callback returns
|
||||
// a truthy value, iteration stops and that value is returned. Otherwise, undefined is returned.
|
||||
/**
|
||||
* Invokes a callback for each child of the given node. The 'cbNode' callback is invoked for all child nodes
|
||||
* stored in properties. If a 'cbNodes' callback is specified, it is invoked for embedded arrays; otherwise,
|
||||
* embedded arrays are flattened and the 'cbNode' callback is invoked for each element. If a callback returns
|
||||
* a truthy value, iteration stops and that value is returned. Otherwise, undefined is returned.
|
||||
*
|
||||
* @param node a given node to visit its children
|
||||
* @param cbNode a callback to be invoked for all child nodes
|
||||
* @param cbNodeArray a callback to be invoked for embedded array
|
||||
*/
|
||||
export function forEachChild<T>(node: Node, cbNode: (node: Node) => T | undefined, cbNodeArray?: (nodes: NodeArray<Node>) => T | undefined): T | undefined {
|
||||
if (!node) {
|
||||
return;
|
||||
@ -2442,7 +2448,7 @@ namespace ts {
|
||||
if (token() === SyntaxKind.OpenParenToken || token() === SyntaxKind.LessThanToken) {
|
||||
return parseSignatureMember(SyntaxKind.CallSignature);
|
||||
}
|
||||
if (token() === SyntaxKind.NewKeyword && lookAhead(isStartOfConstructSignature)) {
|
||||
if (token() === SyntaxKind.NewKeyword && lookAhead(nextTokenIsOpenParenOrLessThan)) {
|
||||
return parseSignatureMember(SyntaxKind.ConstructSignature);
|
||||
}
|
||||
const fullStart = getNodePos();
|
||||
@ -2453,7 +2459,7 @@ namespace ts {
|
||||
return parsePropertyOrMethodSignature(fullStart, modifiers);
|
||||
}
|
||||
|
||||
function isStartOfConstructSignature() {
|
||||
function nextTokenIsOpenParenOrLessThan() {
|
||||
nextToken();
|
||||
return token() === SyntaxKind.OpenParenToken || token() === SyntaxKind.LessThanToken;
|
||||
}
|
||||
@ -2810,6 +2816,8 @@ namespace ts {
|
||||
case SyntaxKind.SlashEqualsToken:
|
||||
case SyntaxKind.Identifier:
|
||||
return true;
|
||||
case SyntaxKind.ImportKeyword:
|
||||
return lookAhead(nextTokenIsOpenParenOrLessThan);
|
||||
default:
|
||||
return isIdentifier();
|
||||
}
|
||||
@ -3542,10 +3550,10 @@ namespace ts {
|
||||
* 5) --UnaryExpression[?Yield]
|
||||
*/
|
||||
if (isUpdateExpression()) {
|
||||
const incrementExpression = parseIncrementExpression();
|
||||
const updateExpression = parseUpdateExpression();
|
||||
return token() === SyntaxKind.AsteriskAsteriskToken ?
|
||||
<BinaryExpression>parseBinaryExpressionRest(getBinaryOperatorPrecedence(), incrementExpression) :
|
||||
incrementExpression;
|
||||
<BinaryExpression>parseBinaryExpressionRest(getBinaryOperatorPrecedence(), updateExpression) :
|
||||
updateExpression;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3611,7 +3619,7 @@ namespace ts {
|
||||
}
|
||||
// falls through
|
||||
default:
|
||||
return parseIncrementExpression();
|
||||
return parseUpdateExpression();
|
||||
}
|
||||
}
|
||||
|
||||
@ -3627,7 +3635,7 @@ namespace ts {
|
||||
*/
|
||||
function isUpdateExpression(): boolean {
|
||||
// This function is called inside parseUnaryExpression to decide
|
||||
// whether to call parseSimpleUnaryExpression or call parseIncrementExpression directly
|
||||
// whether to call parseSimpleUnaryExpression or call parseUpdateExpression directly
|
||||
switch (token()) {
|
||||
case SyntaxKind.PlusToken:
|
||||
case SyntaxKind.MinusToken:
|
||||
@ -3651,9 +3659,9 @@ namespace ts {
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse ES7 IncrementExpression. IncrementExpression is used instead of ES6's PostFixExpression.
|
||||
* Parse ES7 UpdateExpression. UpdateExpression is used instead of ES6's PostFixExpression.
|
||||
*
|
||||
* ES7 IncrementExpression[yield]:
|
||||
* ES7 UpdateExpression[yield]:
|
||||
* 1) LeftHandSideExpression[?yield]
|
||||
* 2) LeftHandSideExpression[?yield] [[no LineTerminator here]]++
|
||||
* 3) LeftHandSideExpression[?yield] [[no LineTerminator here]]--
|
||||
@ -3661,7 +3669,7 @@ namespace ts {
|
||||
* 5) --LeftHandSideExpression[?yield]
|
||||
* In TypeScript (2), (3) are parsed as PostfixUnaryExpression. (4), (5) are parsed as PrefixUnaryExpression
|
||||
*/
|
||||
function parseIncrementExpression(): IncrementExpression {
|
||||
function parseUpdateExpression(): UpdateExpression {
|
||||
if (token() === SyntaxKind.PlusPlusToken || token() === SyntaxKind.MinusMinusToken) {
|
||||
const node = <PrefixUnaryExpression>createNode(SyntaxKind.PrefixUnaryExpression);
|
||||
node.operator = <PrefixUnaryOperator>token();
|
||||
@ -3711,17 +3719,27 @@ namespace ts {
|
||||
// CallExpression Arguments
|
||||
// CallExpression[Expression]
|
||||
// CallExpression.IdentifierName
|
||||
// super ( ArgumentListopt )
|
||||
// import (AssignmentExpression)
|
||||
// super Arguments
|
||||
// super.IdentifierName
|
||||
//
|
||||
// Because of the recursion in these calls, we need to bottom out first. There are two
|
||||
// bottom out states we can run into. Either we see 'super' which must start either of
|
||||
// the last two CallExpression productions. Or we have a MemberExpression which either
|
||||
// completes the LeftHandSideExpression, or starts the beginning of the first four
|
||||
// CallExpression productions.
|
||||
const expression = token() === SyntaxKind.SuperKeyword
|
||||
? parseSuperExpression()
|
||||
: parseMemberExpressionOrHigher();
|
||||
// Because of the recursion in these calls, we need to bottom out first. There are three
|
||||
// bottom out states we can run into: 1) We see 'super' which must start either of
|
||||
// the last two CallExpression productions. 2) We see 'import' which must start import call.
|
||||
// 3)we have a MemberExpression which either completes the LeftHandSideExpression,
|
||||
// or starts the beginning of the first four CallExpression productions.
|
||||
let expression: MemberExpression;
|
||||
if (token() === SyntaxKind.ImportKeyword) {
|
||||
// We don't want to eagerly consume all import keyword as import call expression so we look a head to find "("
|
||||
// For example:
|
||||
// var foo3 = require("subfolder
|
||||
// import * as foo1 from "module-from-node -> we want this import to be a statement rather than import call expression
|
||||
sourceFile.flags |= NodeFlags.PossiblyContainDynamicImport;
|
||||
expression = parseTokenNode<PrimaryExpression>();
|
||||
}
|
||||
else {
|
||||
expression = token() === SyntaxKind.SuperKeyword ? parseSuperExpression() : parseMemberExpressionOrHigher();
|
||||
}
|
||||
|
||||
// Now, we *may* be complete. However, we might have consumed the start of a
|
||||
// CallExpression. As such, we need to consume the rest of it here to be complete.
|
||||
@ -3729,7 +3747,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function parseMemberExpressionOrHigher(): MemberExpression {
|
||||
// Note: to make our lives simpler, we decompose the the NewExpression productions and
|
||||
// Note: to make our lives simpler, we decompose the NewExpression productions and
|
||||
// place ObjectCreationExpression and FunctionExpression into PrimaryExpression.
|
||||
// like so:
|
||||
//
|
||||
@ -4825,9 +4843,11 @@ namespace ts {
|
||||
case SyntaxKind.FinallyKeyword:
|
||||
return true;
|
||||
|
||||
case SyntaxKind.ImportKeyword:
|
||||
return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThan);
|
||||
|
||||
case SyntaxKind.ConstKeyword:
|
||||
case SyntaxKind.ExportKeyword:
|
||||
case SyntaxKind.ImportKeyword:
|
||||
return isStartOfDeclaration();
|
||||
|
||||
case SyntaxKind.AsyncKeyword:
|
||||
|
||||
@ -1364,6 +1364,7 @@ namespace ts {
|
||||
const isJavaScriptFile = isSourceFileJavaScript(file);
|
||||
const isExternalModuleFile = isExternalModule(file);
|
||||
|
||||
// file.imports may not be undefined if there exists dynamic import
|
||||
let imports: LiteralExpression[];
|
||||
let moduleAugmentations: LiteralExpression[];
|
||||
let ambientModules: string[];
|
||||
@ -1383,8 +1384,8 @@ namespace ts {
|
||||
|
||||
for (const node of file.statements) {
|
||||
collectModuleReferences(node, /*inAmbientModule*/ false);
|
||||
if (isJavaScriptFile) {
|
||||
collectRequireCalls(node);
|
||||
if ((file.flags & NodeFlags.PossiblyContainDynamicImport) || isJavaScriptFile) {
|
||||
collectDynamicImportOrRequireCalls(node);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1447,12 +1448,16 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function collectRequireCalls(node: Node): void {
|
||||
function collectDynamicImportOrRequireCalls(node: Node): void {
|
||||
if (isRequireCall(node, /*checkArgumentIsStringLiteral*/ true)) {
|
||||
(imports || (imports = [])).push(<StringLiteral>(<CallExpression>node).arguments[0]);
|
||||
}
|
||||
// we have to check the argument list has length of 1. We will still have to process these even though we have parsing error.
|
||||
else if (isImportCall(node) && node.arguments.length === 1 && node.arguments[0].kind === SyntaxKind.StringLiteral) {
|
||||
(imports || (imports = [])).push(<StringLiteral>(<CallExpression>node).arguments[0]);
|
||||
}
|
||||
else {
|
||||
forEachChild(node, collectRequireCalls);
|
||||
forEachChild(node, collectDynamicImportOrRequireCalls);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
namespace ts {
|
||||
function getModuleTransformer(moduleKind: ModuleKind): TransformerFactory<SourceFile> {
|
||||
switch (moduleKind) {
|
||||
case ModuleKind.ESNext:
|
||||
case ModuleKind.ES2015:
|
||||
return transformES2015Module;
|
||||
case ModuleKind.System:
|
||||
|
||||
@ -351,8 +351,10 @@ namespace ts {
|
||||
);
|
||||
}
|
||||
|
||||
function awaitAsYield(expression: Expression) {
|
||||
return createYield(/*asteriskToken*/ undefined, enclosingFunctionFlags & FunctionFlags.Generator ? createAwaitHelper(context, expression) : expression);
|
||||
function createDownlevelAwait(expression: Expression) {
|
||||
return enclosingFunctionFlags & FunctionFlags.Generator
|
||||
? createYield(/*asteriskToken*/ undefined, createAwaitHelper(context, expression))
|
||||
: createAwait(expression);
|
||||
}
|
||||
|
||||
function transformForAwaitOfStatement(node: ForOfStatement, outermostLabeledStatement: LabeledStatement) {
|
||||
@ -385,11 +387,11 @@ namespace ts {
|
||||
EmitFlags.NoHoisting
|
||||
),
|
||||
/*condition*/ createComma(
|
||||
createAssignment(result, awaitAsYield(callNext)),
|
||||
createAssignment(result, createDownlevelAwait(callNext)),
|
||||
createLogicalNot(getDone)
|
||||
),
|
||||
/*incrementor*/ undefined,
|
||||
/*statement*/ convertForOfStatementHead(node, awaitAsYield(getValue))
|
||||
/*statement*/ convertForOfStatementHead(node, createDownlevelAwait(getValue))
|
||||
),
|
||||
/*location*/ node
|
||||
),
|
||||
@ -434,7 +436,7 @@ namespace ts {
|
||||
createPropertyAccess(iterator, "return")
|
||||
)
|
||||
),
|
||||
createStatement(awaitAsYield(callReturn))
|
||||
createStatement(createDownlevelAwait(callReturn))
|
||||
),
|
||||
EmitFlags.SingleLine
|
||||
)
|
||||
|
||||
@ -46,6 +46,7 @@ namespace ts {
|
||||
let currentSourceFile: SourceFile; // The current file.
|
||||
let currentModuleInfo: ExternalModuleInfo; // The ExternalModuleInfo for the current file.
|
||||
let noSubstitution: boolean[]; // Set of nodes for which substitution rules should be ignored.
|
||||
let needUMDDynamicImportHelper: boolean;
|
||||
|
||||
return transformSourceFile;
|
||||
|
||||
@ -55,7 +56,7 @@ namespace ts {
|
||||
* @param node The SourceFile node.
|
||||
*/
|
||||
function transformSourceFile(node: SourceFile) {
|
||||
if (node.isDeclarationFile || !(isExternalModule(node) || compilerOptions.isolatedModules)) {
|
||||
if (node.isDeclarationFile || !(isExternalModule(node) || compilerOptions.isolatedModules || node.transformFlags & TransformFlags.ContainsDynamicImport)) {
|
||||
return node;
|
||||
}
|
||||
|
||||
@ -66,9 +67,9 @@ namespace ts {
|
||||
// Perform the transformation.
|
||||
const transformModule = getTransformModuleDelegate(moduleKind);
|
||||
const updated = transformModule(node);
|
||||
|
||||
currentSourceFile = undefined;
|
||||
currentModuleInfo = undefined;
|
||||
needUMDDynamicImportHelper = false;
|
||||
return aggregateTransformFlags(updated);
|
||||
}
|
||||
|
||||
@ -107,6 +108,7 @@ namespace ts {
|
||||
// we need to inform the emitter to add the __export helper.
|
||||
addEmitHelper(updated, exportStarHelper);
|
||||
}
|
||||
addEmitHelpers(updated, context.readEmitHelpers());
|
||||
return updated;
|
||||
}
|
||||
|
||||
@ -411,6 +413,9 @@ namespace ts {
|
||||
// we need to inform the emitter to add the __export helper.
|
||||
addEmitHelper(body, exportStarHelper);
|
||||
}
|
||||
if (needUMDDynamicImportHelper) {
|
||||
addEmitHelper(body, dynamicImportUMDHelper);
|
||||
}
|
||||
|
||||
return body;
|
||||
}
|
||||
@ -488,12 +493,110 @@ namespace ts {
|
||||
return visitEndOfDeclarationMarker(<EndOfDeclarationMarker>node);
|
||||
|
||||
default:
|
||||
// This visitor does not descend into the tree, as export/import statements
|
||||
// are only transformed at the top level of a file.
|
||||
return node;
|
||||
return visitEachChild(node, importCallExpressionVisitor, context);
|
||||
}
|
||||
}
|
||||
|
||||
function importCallExpressionVisitor(node: Node): VisitResult<Node> {
|
||||
// This visitor does not need to descend into the tree if there is no dynamic import,
|
||||
// as export/import statements are only transformed at the top level of a file.
|
||||
if (!(node.transformFlags & TransformFlags.ContainsDynamicImport)) {
|
||||
return node;
|
||||
}
|
||||
|
||||
if (isImportCall(node)) {
|
||||
return visitImportCallExpression(<ImportCall>node);
|
||||
}
|
||||
else {
|
||||
return visitEachChild(node, importCallExpressionVisitor, context);
|
||||
}
|
||||
}
|
||||
|
||||
function visitImportCallExpression(node: ImportCall): Expression {
|
||||
switch (compilerOptions.module) {
|
||||
case ModuleKind.CommonJS:
|
||||
return transformImportCallExpressionCommonJS(node);
|
||||
case ModuleKind.AMD:
|
||||
return transformImportCallExpressionAMD(node);
|
||||
case ModuleKind.UMD:
|
||||
return transformImportCallExpressionUMD(node);
|
||||
}
|
||||
Debug.fail("All supported module kind in this transformation step should have been handled");
|
||||
}
|
||||
|
||||
function transformImportCallExpressionUMD(node: ImportCall): Expression {
|
||||
// (function (factory) {
|
||||
// ... (regular UMD)
|
||||
// }
|
||||
// })(function (require, exports, useSyncRequire) {
|
||||
// "use strict";
|
||||
// Object.defineProperty(exports, "__esModule", { value: true });
|
||||
// var __syncRequire = typeof module === "object" && typeof module.exports === "object";
|
||||
// var __resolved = new Promise(function (resolve) { resolve(); });
|
||||
// .....
|
||||
// __syncRequire
|
||||
// ? __resolved.then(function () { return require(x); }) /*CommonJs Require*/
|
||||
// : new Promise(function (_a, _b) { require([x], _a, _b); }); /*Amd Require*/
|
||||
// });
|
||||
needUMDDynamicImportHelper = true;
|
||||
return createConditional(
|
||||
/*condition*/ createIdentifier("__syncRequire"),
|
||||
/*whenTrue*/ transformImportCallExpressionCommonJS(node),
|
||||
/*whenFalse*/ transformImportCallExpressionAMD(node)
|
||||
);
|
||||
}
|
||||
|
||||
function transformImportCallExpressionAMD(node: ImportCall): Expression {
|
||||
// improt("./blah")
|
||||
// emit as
|
||||
// define(["require", "exports", "blah"], function (require, exports) {
|
||||
// ...
|
||||
// new Promise(function (_a, _b) { require([x], _a, _b); }); /*Amd Require*/
|
||||
// });
|
||||
const resolve = createUniqueName("resolve");
|
||||
const reject = createUniqueName("reject");
|
||||
return createNew(
|
||||
createIdentifier("Promise"),
|
||||
/*typeArguments*/ undefined,
|
||||
[createFunctionExpression(
|
||||
/*modifiers*/ undefined,
|
||||
/*asteriskToken*/ undefined,
|
||||
/*name*/ undefined,
|
||||
/*typeParameters*/ undefined,
|
||||
[createParameter(/*decorator*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, /*name*/ resolve),
|
||||
createParameter(/*decorator*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, /*name*/ reject)],
|
||||
/*type*/ undefined,
|
||||
createBlock([createStatement(
|
||||
createCall(
|
||||
createIdentifier("require"),
|
||||
/*typeArguments*/ undefined,
|
||||
[createArrayLiteral([firstOrUndefined(node.arguments) || createOmittedExpression()]), resolve, reject]
|
||||
))])
|
||||
)]);
|
||||
}
|
||||
|
||||
function transformImportCallExpressionCommonJS(node: ImportCall): Expression {
|
||||
// import("./blah")
|
||||
// emit as
|
||||
// Promise.resolve().then(function () { return require(x); }) /*CommonJs Require*/
|
||||
// We have to wrap require in then callback so that require is done in asynchronously
|
||||
// if we simply do require in resolve callback in Promise constructor. We will execute the loading immediately
|
||||
return createCall(
|
||||
createPropertyAccess(
|
||||
createCall(createPropertyAccess(createIdentifier("Promise"), "resolve"), /*typeArguments*/ undefined, /*argumentsArray*/ []),
|
||||
"then"),
|
||||
/*typeArguments*/ undefined,
|
||||
[createFunctionExpression(
|
||||
/*modifiers*/ undefined,
|
||||
/*asteriskToken*/ undefined,
|
||||
/*name*/ undefined,
|
||||
/*typeParameters*/ undefined,
|
||||
/*parameters*/ undefined,
|
||||
/*type*/ undefined,
|
||||
createBlock([createReturn(createCall(createIdentifier("require"), /*typeArguments*/ undefined, node.arguments))])
|
||||
)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Visits an ImportDeclaration node.
|
||||
*
|
||||
@ -786,9 +889,9 @@ namespace ts {
|
||||
node.asteriskToken,
|
||||
getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true),
|
||||
/*typeParameters*/ undefined,
|
||||
node.parameters,
|
||||
visitNodes(node.parameters, importCallExpressionVisitor),
|
||||
/*type*/ undefined,
|
||||
node.body
|
||||
visitEachChild(node.body, importCallExpressionVisitor, context)
|
||||
),
|
||||
/*location*/ node
|
||||
),
|
||||
@ -797,7 +900,7 @@ namespace ts {
|
||||
);
|
||||
}
|
||||
else {
|
||||
statements = append(statements, node);
|
||||
statements = append(statements, visitEachChild(node, importCallExpressionVisitor, context));
|
||||
}
|
||||
|
||||
if (hasAssociatedEndOfDeclarationMarker(node)) {
|
||||
@ -828,7 +931,7 @@ namespace ts {
|
||||
visitNodes(node.modifiers, modifierVisitor, isModifier),
|
||||
getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true),
|
||||
/*typeParameters*/ undefined,
|
||||
node.heritageClauses,
|
||||
visitNodes(node.heritageClauses, importCallExpressionVisitor),
|
||||
node.members
|
||||
),
|
||||
node
|
||||
@ -838,7 +941,7 @@ namespace ts {
|
||||
);
|
||||
}
|
||||
else {
|
||||
statements = append(statements, node);
|
||||
statements = append(statements, visitEachChild(node, importCallExpressionVisitor, context));
|
||||
}
|
||||
|
||||
if (hasAssociatedEndOfDeclarationMarker(node)) {
|
||||
@ -890,7 +993,7 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
else {
|
||||
statements = append(statements, node);
|
||||
statements = append(statements, visitEachChild(node, importCallExpressionVisitor, context));
|
||||
}
|
||||
|
||||
if (hasAssociatedEndOfDeclarationMarker(node)) {
|
||||
@ -913,7 +1016,7 @@ namespace ts {
|
||||
function transformInitializedVariable(node: VariableDeclaration): Expression {
|
||||
if (isBindingPattern(node.name)) {
|
||||
return flattenDestructuringAssignment(
|
||||
node,
|
||||
visitNode(node, importCallExpressionVisitor),
|
||||
/*visitor*/ undefined,
|
||||
context,
|
||||
FlattenLevel.All,
|
||||
@ -930,7 +1033,7 @@ namespace ts {
|
||||
),
|
||||
/*location*/ node.name
|
||||
),
|
||||
node.initializer
|
||||
visitNode(node.initializer, importCallExpressionVisitor)
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -1497,4 +1600,12 @@ namespace ts {
|
||||
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
||||
}`
|
||||
};
|
||||
|
||||
// emit helper for dynamic import
|
||||
const dynamicImportUMDHelper: EmitHelper = {
|
||||
name: "typescript:dynamicimport-sync-require",
|
||||
scoped: true,
|
||||
text: `
|
||||
var __syncRequire = typeof module === "object" && typeof module.exports === "object";`
|
||||
};
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ namespace ts {
|
||||
* @param node The SourceFile node.
|
||||
*/
|
||||
function transformSourceFile(node: SourceFile) {
|
||||
if (node.isDeclarationFile || !(isExternalModule(node) || compilerOptions.isolatedModules)) {
|
||||
if (node.isDeclarationFile || !(isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & TransformFlags.ContainsDynamicImport)) {
|
||||
return node;
|
||||
}
|
||||
|
||||
@ -646,7 +646,7 @@ namespace ts {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const expression = visitNode(node.expression, destructuringVisitor, isExpression);
|
||||
const expression = visitNode(node.expression, destructuringAndImportCallVisitor, isExpression);
|
||||
const original = node.original;
|
||||
if (original && hasAssociatedEndOfDeclarationMarker(original)) {
|
||||
// Defer exports until we encounter an EndOfDeclarationMarker node
|
||||
@ -673,12 +673,12 @@ namespace ts {
|
||||
node.asteriskToken,
|
||||
getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true),
|
||||
/*typeParameters*/ undefined,
|
||||
visitNodes(node.parameters, destructuringVisitor, isParameterDeclaration),
|
||||
visitNodes(node.parameters, destructuringAndImportCallVisitor, isParameterDeclaration),
|
||||
/*type*/ undefined,
|
||||
visitNode(node.body, destructuringVisitor, isBlock)));
|
||||
visitNode(node.body, destructuringAndImportCallVisitor, isBlock)));
|
||||
}
|
||||
else {
|
||||
hoistedStatements = append(hoistedStatements, node);
|
||||
hoistedStatements = append(hoistedStatements, visitEachChild(node, destructuringAndImportCallVisitor, context));
|
||||
}
|
||||
|
||||
if (hasAssociatedEndOfDeclarationMarker(node)) {
|
||||
@ -716,8 +716,8 @@ namespace ts {
|
||||
/*modifiers*/ undefined,
|
||||
node.name,
|
||||
/*typeParameters*/ undefined,
|
||||
visitNodes(node.heritageClauses, destructuringVisitor, isHeritageClause),
|
||||
visitNodes(node.members, destructuringVisitor, isClassElement)
|
||||
visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, isHeritageClause),
|
||||
visitNodes(node.members, destructuringAndImportCallVisitor, isClassElement)
|
||||
),
|
||||
node
|
||||
)
|
||||
@ -747,7 +747,7 @@ namespace ts {
|
||||
*/
|
||||
function visitVariableStatement(node: VariableStatement): VisitResult<Statement> {
|
||||
if (!shouldHoistVariableDeclarationList(node.declarationList)) {
|
||||
return visitNode(node, destructuringVisitor, isStatement);
|
||||
return visitNode(node, destructuringAndImportCallVisitor, isStatement);
|
||||
}
|
||||
|
||||
let expressions: Expression[];
|
||||
@ -820,13 +820,13 @@ namespace ts {
|
||||
return isBindingPattern(node.name)
|
||||
? flattenDestructuringAssignment(
|
||||
node,
|
||||
destructuringVisitor,
|
||||
destructuringAndImportCallVisitor,
|
||||
context,
|
||||
FlattenLevel.All,
|
||||
/*needsValue*/ false,
|
||||
createAssignment
|
||||
)
|
||||
: createAssignment(node.name, visitNode(node.initializer, destructuringVisitor, isExpression));
|
||||
: createAssignment(node.name, visitNode(node.initializer, destructuringAndImportCallVisitor, isExpression));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1204,7 +1204,7 @@ namespace ts {
|
||||
return visitEndOfDeclarationMarker(<EndOfDeclarationMarker>node);
|
||||
|
||||
default:
|
||||
return destructuringVisitor(node);
|
||||
return destructuringAndImportCallVisitor(node);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1220,8 +1220,8 @@ namespace ts {
|
||||
node = updateFor(
|
||||
node,
|
||||
visitForInitializer(node.initializer),
|
||||
visitNode(node.condition, destructuringVisitor, isExpression),
|
||||
visitNode(node.incrementor, destructuringVisitor, isExpression),
|
||||
visitNode(node.condition, destructuringAndImportCallVisitor, isExpression),
|
||||
visitNode(node.incrementor, destructuringAndImportCallVisitor, isExpression),
|
||||
visitNode(node.statement, nestedElementVisitor, isStatement)
|
||||
);
|
||||
|
||||
@ -1241,7 +1241,7 @@ namespace ts {
|
||||
node = updateForIn(
|
||||
node,
|
||||
visitForInitializer(node.initializer),
|
||||
visitNode(node.expression, destructuringVisitor, isExpression),
|
||||
visitNode(node.expression, destructuringAndImportCallVisitor, isExpression),
|
||||
visitNode(node.statement, nestedElementVisitor, isStatement, liftToBlock)
|
||||
);
|
||||
|
||||
@ -1262,7 +1262,7 @@ namespace ts {
|
||||
node,
|
||||
node.awaitModifier,
|
||||
visitForInitializer(node.initializer),
|
||||
visitNode(node.expression, destructuringVisitor, isExpression),
|
||||
visitNode(node.expression, destructuringAndImportCallVisitor, isExpression),
|
||||
visitNode(node.statement, nestedElementVisitor, isStatement, liftToBlock)
|
||||
);
|
||||
|
||||
@ -1313,7 +1313,7 @@ namespace ts {
|
||||
return updateDo(
|
||||
node,
|
||||
visitNode(node.statement, nestedElementVisitor, isStatement, liftToBlock),
|
||||
visitNode(node.expression, destructuringVisitor, isExpression)
|
||||
visitNode(node.expression, destructuringAndImportCallVisitor, isExpression)
|
||||
);
|
||||
}
|
||||
|
||||
@ -1325,7 +1325,7 @@ namespace ts {
|
||||
function visitWhileStatement(node: WhileStatement): VisitResult<Statement> {
|
||||
return updateWhile(
|
||||
node,
|
||||
visitNode(node.expression, destructuringVisitor, isExpression),
|
||||
visitNode(node.expression, destructuringAndImportCallVisitor, isExpression),
|
||||
visitNode(node.statement, nestedElementVisitor, isStatement, liftToBlock)
|
||||
);
|
||||
}
|
||||
@ -1351,7 +1351,7 @@ namespace ts {
|
||||
function visitWithStatement(node: WithStatement): VisitResult<Statement> {
|
||||
return updateWith(
|
||||
node,
|
||||
visitNode(node.expression, destructuringVisitor, isExpression),
|
||||
visitNode(node.expression, destructuringAndImportCallVisitor, isExpression),
|
||||
visitNode(node.statement, nestedElementVisitor, isStatement, liftToBlock)
|
||||
);
|
||||
}
|
||||
@ -1364,7 +1364,7 @@ namespace ts {
|
||||
function visitSwitchStatement(node: SwitchStatement): VisitResult<Statement> {
|
||||
return updateSwitch(
|
||||
node,
|
||||
visitNode(node.expression, destructuringVisitor, isExpression),
|
||||
visitNode(node.expression, destructuringAndImportCallVisitor, isExpression),
|
||||
visitNode(node.caseBlock, nestedElementVisitor, isCaseBlock)
|
||||
);
|
||||
}
|
||||
@ -1395,7 +1395,7 @@ namespace ts {
|
||||
function visitCaseClause(node: CaseClause): VisitResult<CaseOrDefaultClause> {
|
||||
return updateCaseClause(
|
||||
node,
|
||||
visitNode(node.expression, destructuringVisitor, isExpression),
|
||||
visitNode(node.expression, destructuringAndImportCallVisitor, isExpression),
|
||||
visitNodes(node.statements, nestedElementVisitor, isStatement)
|
||||
);
|
||||
}
|
||||
@ -1461,19 +1461,43 @@ namespace ts {
|
||||
*
|
||||
* @param node The node to visit.
|
||||
*/
|
||||
function destructuringVisitor(node: Node): VisitResult<Node> {
|
||||
function destructuringAndImportCallVisitor(node: Node): VisitResult<Node> {
|
||||
if (node.transformFlags & TransformFlags.DestructuringAssignment
|
||||
&& node.kind === SyntaxKind.BinaryExpression) {
|
||||
return visitDestructuringAssignment(<DestructuringAssignment>node);
|
||||
}
|
||||
else if (node.transformFlags & TransformFlags.ContainsDestructuringAssignment) {
|
||||
return visitEachChild(node, destructuringVisitor, context);
|
||||
else if (isImportCall(node)) {
|
||||
return visitImportCallExpression(node);
|
||||
}
|
||||
else if ((node.transformFlags & TransformFlags.ContainsDestructuringAssignment) || (node.transformFlags & TransformFlags.ContainsDynamicImport)) {
|
||||
return visitEachChild(node, destructuringAndImportCallVisitor, context);
|
||||
}
|
||||
else {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
|
||||
function visitImportCallExpression(node: ImportCall): Expression {
|
||||
// import("./blah")
|
||||
// emit as
|
||||
// System.register([], function (_export, _context) {
|
||||
// return {
|
||||
// setters: [],
|
||||
// execute: () => {
|
||||
// _context.import('./blah');
|
||||
// }
|
||||
// };
|
||||
// });
|
||||
return createCall(
|
||||
createPropertyAccess(
|
||||
contextObject,
|
||||
createIdentifier("import")
|
||||
),
|
||||
/*typeArguments*/ undefined,
|
||||
node.arguments
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Visits a DestructuringAssignment to flatten destructuring to exported symbols.
|
||||
*
|
||||
@ -1483,14 +1507,14 @@ namespace ts {
|
||||
if (hasExportedReferenceInDestructuringTarget(node.left)) {
|
||||
return flattenDestructuringAssignment(
|
||||
node,
|
||||
destructuringVisitor,
|
||||
destructuringAndImportCallVisitor,
|
||||
context,
|
||||
FlattenLevel.All,
|
||||
/*needsValue*/ true
|
||||
);
|
||||
}
|
||||
|
||||
return visitEachChild(node, destructuringVisitor, context);
|
||||
return visitEachChild(node, destructuringAndImportCallVisitor, context);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -395,6 +395,7 @@ namespace ts {
|
||||
|
||||
// Enum value count
|
||||
Count,
|
||||
|
||||
// Markers
|
||||
FirstAssignment = EqualsToken,
|
||||
LastAssignment = CaretEqualsToken,
|
||||
@ -449,6 +450,14 @@ namespace ts {
|
||||
ThisNodeOrAnySubNodesHasError = 1 << 17, // If this node or any of its children had an error
|
||||
HasAggregatedChildData = 1 << 18, // If we've computed data from children and cached it in this node
|
||||
|
||||
// This flag will be set to true when the parse encounter dynamic import so that post-parsing process of module resolution
|
||||
// will not walk the tree if the flag is not set. However, this flag is just a approximation because once it is set, the flag never get reset.
|
||||
// (hence it is named "possiblyContainDynamicImport").
|
||||
// During editing, if dynamic import is remove, incremental parsing will *NOT* update this flag. This will then causes walking of the tree during module resolution.
|
||||
// However, the removal operation should not occur often and in the case of the removal, it is likely that users will add back the import anyway.
|
||||
// The advantage of this approach is its simplicity. For the case of batch compilation, we garuntee that users won't have to pay the price of walking the tree if dynamic import isn't used.
|
||||
PossiblyContainDynamicImport = 1 << 19,
|
||||
|
||||
BlockScoped = Let | Const,
|
||||
|
||||
ReachabilityCheckFlags = HasImplicitReturn | HasExplicitReturn,
|
||||
@ -1001,8 +1010,10 @@ namespace ts {
|
||||
_unaryExpressionBrand: any;
|
||||
}
|
||||
|
||||
export interface IncrementExpression extends UnaryExpression {
|
||||
_incrementExpressionBrand: any;
|
||||
/** Deprecated, please use UpdateExpression */
|
||||
export type IncrementExpression = UpdateExpression;
|
||||
export interface UpdateExpression extends UnaryExpression {
|
||||
_updateExpressionBrand: any;
|
||||
}
|
||||
|
||||
// see: https://tc39.github.io/ecma262/#prod-UpdateExpression
|
||||
@ -1013,10 +1024,9 @@ namespace ts {
|
||||
| SyntaxKind.PlusToken
|
||||
| SyntaxKind.MinusToken
|
||||
| SyntaxKind.TildeToken
|
||||
| SyntaxKind.ExclamationToken
|
||||
;
|
||||
| SyntaxKind.ExclamationToken;
|
||||
|
||||
export interface PrefixUnaryExpression extends IncrementExpression {
|
||||
export interface PrefixUnaryExpression extends UpdateExpression {
|
||||
kind: SyntaxKind.PrefixUnaryExpression;
|
||||
operator: PrefixUnaryOperator;
|
||||
operand: UnaryExpression;
|
||||
@ -1028,13 +1038,13 @@ namespace ts {
|
||||
| SyntaxKind.MinusMinusToken
|
||||
;
|
||||
|
||||
export interface PostfixUnaryExpression extends IncrementExpression {
|
||||
export interface PostfixUnaryExpression extends UpdateExpression {
|
||||
kind: SyntaxKind.PostfixUnaryExpression;
|
||||
operand: LeftHandSideExpression;
|
||||
operator: PostfixUnaryOperator;
|
||||
}
|
||||
|
||||
export interface LeftHandSideExpression extends IncrementExpression {
|
||||
export interface LeftHandSideExpression extends UpdateExpression {
|
||||
_leftHandSideExpressionBrand: any;
|
||||
}
|
||||
|
||||
@ -1062,6 +1072,10 @@ namespace ts {
|
||||
kind: SyntaxKind.SuperKeyword;
|
||||
}
|
||||
|
||||
export interface ImportExpression extends PrimaryExpression {
|
||||
kind: SyntaxKind.ImportKeyword;
|
||||
}
|
||||
|
||||
export interface DeleteExpression extends UnaryExpression {
|
||||
kind: SyntaxKind.DeleteExpression;
|
||||
expression: UnaryExpression;
|
||||
@ -1454,10 +1468,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
// see: https://tc39.github.io/ecma262/#prod-SuperProperty
|
||||
export type SuperProperty
|
||||
= SuperPropertyAccessExpression
|
||||
| SuperElementAccessExpression
|
||||
;
|
||||
export type SuperProperty = SuperPropertyAccessExpression | SuperElementAccessExpression;
|
||||
|
||||
export interface CallExpression extends LeftHandSideExpression, Declaration {
|
||||
kind: SyntaxKind.CallExpression;
|
||||
@ -1471,6 +1482,10 @@ namespace ts {
|
||||
expression: SuperExpression;
|
||||
}
|
||||
|
||||
export interface ImportCall extends CallExpression {
|
||||
expression: ImportExpression;
|
||||
}
|
||||
|
||||
export interface ExpressionWithTypeArguments extends TypeNode {
|
||||
kind: SyntaxKind.ExpressionWithTypeArguments;
|
||||
parent?: HeritageClause;
|
||||
@ -3572,6 +3587,7 @@ namespace ts {
|
||||
UMD = 3,
|
||||
System = 4,
|
||||
ES2015 = 5,
|
||||
ESNext = 6
|
||||
}
|
||||
|
||||
export const enum JsxEmit {
|
||||
@ -3959,6 +3975,11 @@ namespace ts {
|
||||
ContainsYield = 1 << 24,
|
||||
ContainsHoistedDeclarationOrCompletion = 1 << 25,
|
||||
|
||||
ContainsDynamicImport = 1 << 26,
|
||||
|
||||
// Please leave this as 1 << 29.
|
||||
// It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system.
|
||||
// It is a good reminder of how much room we have left
|
||||
HasComputedFlags = 1 << 29, // Transform flags have been computed.
|
||||
|
||||
// Assertions
|
||||
|
||||
@ -604,6 +604,10 @@ namespace ts {
|
||||
return n.kind === SyntaxKind.CallExpression && (<CallExpression>n).expression.kind === SyntaxKind.SuperKeyword;
|
||||
}
|
||||
|
||||
export function isImportCall(n: Node): n is ImportCall {
|
||||
return n.kind === SyntaxKind.CallExpression && (<CallExpression>n).expression.kind === SyntaxKind.ImportKeyword;
|
||||
}
|
||||
|
||||
export function isPrologueDirective(node: Node): node is PrologueDirective {
|
||||
return node.kind === SyntaxKind.ExpressionStatement
|
||||
&& (<ExpressionStatement>node).expression.kind === SyntaxKind.StringLiteral;
|
||||
|
||||
@ -857,6 +857,7 @@ namespace Harness {
|
||||
|
||||
export function getDefaultLibFileName(options: ts.CompilerOptions): string {
|
||||
switch (options.target) {
|
||||
case ts.ScriptTarget.ESNext:
|
||||
case ts.ScriptTarget.ES2017:
|
||||
return "lib.es2017.d.ts";
|
||||
case ts.ScriptTarget.ES2016:
|
||||
|
||||
@ -113,7 +113,7 @@ namespace ts {
|
||||
start: undefined,
|
||||
length: undefined,
|
||||
}, {
|
||||
messageText: "Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015'.",
|
||||
messageText: "Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'.",
|
||||
category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
|
||||
code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
|
||||
|
||||
@ -155,7 +155,7 @@ namespace ts {
|
||||
file: undefined,
|
||||
start: 0,
|
||||
length: 0,
|
||||
messageText: "Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015'.",
|
||||
messageText: "Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'.",
|
||||
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
|
||||
}]
|
||||
|
||||
@ -13,7 +13,8 @@ namespace ts.projectSystem {
|
||||
express: "express",
|
||||
jquery: "jquery",
|
||||
lodash: "lodash",
|
||||
moment: "moment"
|
||||
moment: "moment",
|
||||
chroma: "chroma-js"
|
||||
})
|
||||
};
|
||||
|
||||
@ -61,7 +62,6 @@ namespace ts.projectSystem {
|
||||
super(installTypingHost, globalTypingsCacheLocation, safeList.path, throttleLimit, log);
|
||||
}
|
||||
|
||||
safeFileList = safeList.path;
|
||||
protected postExecActions: PostExecAction[] = [];
|
||||
|
||||
executePendingCommands() {
|
||||
|
||||
@ -1009,6 +1009,26 @@ namespace ts.projectSystem {
|
||||
});
|
||||
|
||||
describe("discover typings", () => {
|
||||
it("should use mappings from safe list", () => {
|
||||
const app = {
|
||||
path: "/a/b/app.js",
|
||||
content: ""
|
||||
};
|
||||
const jquery = {
|
||||
path: "/a/b/jquery.js",
|
||||
content: ""
|
||||
};
|
||||
const chroma = {
|
||||
path: "/a/b/chroma.min.js",
|
||||
content: ""
|
||||
};
|
||||
const cache = createMap<string>();
|
||||
|
||||
const host = createServerHost([app, jquery, chroma]);
|
||||
const result = JsTyping.discoverTypings(host, [app.path, jquery.path, chroma.path], getDirectoryPath(<Path>app.path), /*safeListPath*/ undefined, cache, { enable: true }, []);
|
||||
assert.deepEqual(result.newTypingNames, ["jquery", "chroma-js"]);
|
||||
});
|
||||
|
||||
it("should return node for core modules", () => {
|
||||
const f = {
|
||||
path: "/a/b/app.js",
|
||||
@ -1016,6 +1036,7 @@ namespace ts.projectSystem {
|
||||
};
|
||||
const host = createServerHost([f]);
|
||||
const cache = createMap<string>();
|
||||
|
||||
for (const name of JsTyping.nodeCoreModuleList) {
|
||||
const result = JsTyping.discoverTypings(host, [f.path], getDirectoryPath(<Path>f.path), /*safeListPath*/ undefined, cache, { enable: true }, [name, "somename"]);
|
||||
assert.deepEqual(result.newTypingNames.sort(), ["node", "somename"]);
|
||||
@ -1040,7 +1061,7 @@ namespace ts.projectSystem {
|
||||
});
|
||||
|
||||
describe("telemetry events", () => {
|
||||
it ("should be received", () => {
|
||||
it("should be received", () => {
|
||||
const f1 = {
|
||||
path: "/a/app.js",
|
||||
content: ""
|
||||
@ -1089,7 +1110,7 @@ namespace ts.projectSystem {
|
||||
});
|
||||
|
||||
describe("progress notifications", () => {
|
||||
it ("should be sent for success", () => {
|
||||
it("should be sent for success", () => {
|
||||
const f1 = {
|
||||
path: "/a/app.js",
|
||||
content: ""
|
||||
@ -1140,7 +1161,7 @@ namespace ts.projectSystem {
|
||||
checkProjectActualFiles(projectService.inferredProjects[0], [f1.path, commander.path]);
|
||||
});
|
||||
|
||||
it ("should be sent for error", () => {
|
||||
it("should be sent for error", () => {
|
||||
const f1 = {
|
||||
path: "/a/app.js",
|
||||
content: ""
|
||||
|
||||
@ -143,7 +143,7 @@ namespace ts.JsTyping {
|
||||
/**
|
||||
* Merge a given list of typingNames to the inferredTypings map
|
||||
*/
|
||||
function mergeTypings(typingNames: string[]) {
|
||||
function mergeTypings(typingNames: ReadonlyArray<string>) {
|
||||
if (!typingNames) {
|
||||
return;
|
||||
}
|
||||
@ -190,7 +190,7 @@ namespace ts.JsTyping {
|
||||
const cleanedTypingNames = map(inferredTypingNames, f => f.replace(/((?:\.|-)min(?=\.|$))|((?:-|\.)\d+)/g, ""));
|
||||
|
||||
if (safeList !== EmptySafeList) {
|
||||
mergeTypings(filter(cleanedTypingNames, f => safeList.has(f)));
|
||||
mergeTypings(ts.mapDefined(cleanedTypingNames, f => safeList.get(f)));
|
||||
}
|
||||
|
||||
const hasJsxFile = forEach(fileNames, f => ensureScriptKind(f, getScriptKindFromFileName(f)) === ScriptKind.JSX);
|
||||
|
||||
@ -368,7 +368,7 @@ namespace ts {
|
||||
_primaryExpressionBrand: any;
|
||||
_memberExpressionBrand: any;
|
||||
_leftHandSideExpressionBrand: any;
|
||||
_incrementExpressionBrand: any;
|
||||
_updateExpressionBrand: any;
|
||||
_unaryExpressionBrand: any;
|
||||
_expressionBrand: any;
|
||||
/*@internal*/typeArguments: NodeArray<TypeNode>;
|
||||
@ -521,6 +521,7 @@ namespace ts {
|
||||
private namedDeclarations: Map<Declaration[]>;
|
||||
public ambientModuleNames: string[];
|
||||
public checkJsDirective: CheckJsDirective | undefined;
|
||||
public possiblyContainDynamicImport: boolean;
|
||||
|
||||
constructor(kind: SyntaxKind, pos: number, end: number) {
|
||||
super(kind, pos, end);
|
||||
|
||||
143
tests/baselines/reference/emitter.forAwait.es2017.js
Normal file
143
tests/baselines/reference/emitter.forAwait.es2017.js
Normal file
@ -0,0 +1,143 @@
|
||||
//// [tests/cases/conformance/emitter/es2017/forAwait/emitter.forAwait.es2017.ts] ////
|
||||
|
||||
//// [file1.ts]
|
||||
async function f1() {
|
||||
let y: any;
|
||||
for await (const x of y) {
|
||||
}
|
||||
}
|
||||
//// [file2.ts]
|
||||
async function f2() {
|
||||
let x: any, y: any;
|
||||
for await (x of y) {
|
||||
}
|
||||
}
|
||||
//// [file3.ts]
|
||||
async function* f3() {
|
||||
let y: any;
|
||||
for await (const x of y) {
|
||||
}
|
||||
}
|
||||
//// [file4.ts]
|
||||
async function* f4() {
|
||||
let x: any, y: any;
|
||||
for await (x of y) {
|
||||
}
|
||||
}
|
||||
|
||||
//// [file1.js]
|
||||
var __asyncValues = (this && this.__asyncIterator) || function (o) {
|
||||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||||
var m = o[Symbol.asyncIterator];
|
||||
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
|
||||
};
|
||||
async function f1() {
|
||||
let y;
|
||||
try {
|
||||
for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = await y_1.next(), !y_1_1.done;) {
|
||||
const x = await y_1_1.value;
|
||||
}
|
||||
}
|
||||
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (y_1_1 && !y_1_1.done && (_a = y_1.return)) await _a.call(y_1);
|
||||
}
|
||||
finally { if (e_1) throw e_1.error; }
|
||||
}
|
||||
var e_1, _a;
|
||||
}
|
||||
//// [file2.js]
|
||||
var __asyncValues = (this && this.__asyncIterator) || function (o) {
|
||||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||||
var m = o[Symbol.asyncIterator];
|
||||
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
|
||||
};
|
||||
async function f2() {
|
||||
let x, y;
|
||||
try {
|
||||
for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = await y_1.next(), !y_1_1.done;) {
|
||||
x = await y_1_1.value;
|
||||
}
|
||||
}
|
||||
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (y_1_1 && !y_1_1.done && (_a = y_1.return)) await _a.call(y_1);
|
||||
}
|
||||
finally { if (e_1) throw e_1.error; }
|
||||
}
|
||||
var e_1, _a;
|
||||
}
|
||||
//// [file3.js]
|
||||
var __asyncValues = (this && this.__asyncIterator) || function (o) {
|
||||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||||
var m = o[Symbol.asyncIterator];
|
||||
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
|
||||
};
|
||||
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
||||
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
||||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||||
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
||||
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
||||
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
||||
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
||||
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
||||
function fulfill(value) { resume("next", value); }
|
||||
function reject(value) { resume("throw", value); }
|
||||
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
||||
};
|
||||
function f3() {
|
||||
return __asyncGenerator(this, arguments, function* f3_1() {
|
||||
let y;
|
||||
try {
|
||||
for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) {
|
||||
const x = yield __await(y_1_1.value);
|
||||
}
|
||||
}
|
||||
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1));
|
||||
}
|
||||
finally { if (e_1) throw e_1.error; }
|
||||
}
|
||||
var e_1, _a;
|
||||
});
|
||||
}
|
||||
//// [file4.js]
|
||||
var __asyncValues = (this && this.__asyncIterator) || function (o) {
|
||||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||||
var m = o[Symbol.asyncIterator];
|
||||
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
|
||||
};
|
||||
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
||||
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
||||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||||
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
||||
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
||||
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
||||
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
||||
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
||||
function fulfill(value) { resume("next", value); }
|
||||
function reject(value) { resume("throw", value); }
|
||||
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
||||
};
|
||||
function f4() {
|
||||
return __asyncGenerator(this, arguments, function* f4_1() {
|
||||
let x, y;
|
||||
try {
|
||||
for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) {
|
||||
x = yield __await(y_1_1.value);
|
||||
}
|
||||
}
|
||||
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1));
|
||||
}
|
||||
finally { if (e_1) throw e_1.error; }
|
||||
}
|
||||
var e_1, _a;
|
||||
});
|
||||
}
|
||||
50
tests/baselines/reference/emitter.forAwait.es2017.symbols
Normal file
50
tests/baselines/reference/emitter.forAwait.es2017.symbols
Normal file
@ -0,0 +1,50 @@
|
||||
=== tests/cases/conformance/emitter/es2017/forAwait/file1.ts ===
|
||||
async function f1() {
|
||||
>f1 : Symbol(f1, Decl(file1.ts, 0, 0))
|
||||
|
||||
let y: any;
|
||||
>y : Symbol(y, Decl(file1.ts, 1, 7))
|
||||
|
||||
for await (const x of y) {
|
||||
>x : Symbol(x, Decl(file1.ts, 2, 20))
|
||||
>y : Symbol(y, Decl(file1.ts, 1, 7))
|
||||
}
|
||||
}
|
||||
=== tests/cases/conformance/emitter/es2017/forAwait/file2.ts ===
|
||||
async function f2() {
|
||||
>f2 : Symbol(f2, Decl(file2.ts, 0, 0))
|
||||
|
||||
let x: any, y: any;
|
||||
>x : Symbol(x, Decl(file2.ts, 1, 7))
|
||||
>y : Symbol(y, Decl(file2.ts, 1, 15))
|
||||
|
||||
for await (x of y) {
|
||||
>x : Symbol(x, Decl(file2.ts, 1, 7))
|
||||
>y : Symbol(y, Decl(file2.ts, 1, 15))
|
||||
}
|
||||
}
|
||||
=== tests/cases/conformance/emitter/es2017/forAwait/file3.ts ===
|
||||
async function* f3() {
|
||||
>f3 : Symbol(f3, Decl(file3.ts, 0, 0))
|
||||
|
||||
let y: any;
|
||||
>y : Symbol(y, Decl(file3.ts, 1, 7))
|
||||
|
||||
for await (const x of y) {
|
||||
>x : Symbol(x, Decl(file3.ts, 2, 20))
|
||||
>y : Symbol(y, Decl(file3.ts, 1, 7))
|
||||
}
|
||||
}
|
||||
=== tests/cases/conformance/emitter/es2017/forAwait/file4.ts ===
|
||||
async function* f4() {
|
||||
>f4 : Symbol(f4, Decl(file4.ts, 0, 0))
|
||||
|
||||
let x: any, y: any;
|
||||
>x : Symbol(x, Decl(file4.ts, 1, 7))
|
||||
>y : Symbol(y, Decl(file4.ts, 1, 15))
|
||||
|
||||
for await (x of y) {
|
||||
>x : Symbol(x, Decl(file4.ts, 1, 7))
|
||||
>y : Symbol(y, Decl(file4.ts, 1, 15))
|
||||
}
|
||||
}
|
||||
50
tests/baselines/reference/emitter.forAwait.es2017.types
Normal file
50
tests/baselines/reference/emitter.forAwait.es2017.types
Normal file
@ -0,0 +1,50 @@
|
||||
=== tests/cases/conformance/emitter/es2017/forAwait/file1.ts ===
|
||||
async function f1() {
|
||||
>f1 : () => Promise<void>
|
||||
|
||||
let y: any;
|
||||
>y : any
|
||||
|
||||
for await (const x of y) {
|
||||
>x : any
|
||||
>y : any
|
||||
}
|
||||
}
|
||||
=== tests/cases/conformance/emitter/es2017/forAwait/file2.ts ===
|
||||
async function f2() {
|
||||
>f2 : () => Promise<void>
|
||||
|
||||
let x: any, y: any;
|
||||
>x : any
|
||||
>y : any
|
||||
|
||||
for await (x of y) {
|
||||
>x : any
|
||||
>y : any
|
||||
}
|
||||
}
|
||||
=== tests/cases/conformance/emitter/es2017/forAwait/file3.ts ===
|
||||
async function* f3() {
|
||||
>f3 : () => AsyncIterableIterator<any>
|
||||
|
||||
let y: any;
|
||||
>y : any
|
||||
|
||||
for await (const x of y) {
|
||||
>x : any
|
||||
>y : any
|
||||
}
|
||||
}
|
||||
=== tests/cases/conformance/emitter/es2017/forAwait/file4.ts ===
|
||||
async function* f4() {
|
||||
>f4 : () => AsyncIterableIterator<any>
|
||||
|
||||
let x: any, y: any;
|
||||
>x : any
|
||||
>y : any
|
||||
|
||||
for await (x of y) {
|
||||
>x : any
|
||||
>y : any
|
||||
}
|
||||
}
|
||||
27
tests/baselines/reference/importCallExpression1ESNext.js
Normal file
27
tests/baselines/reference/importCallExpression1ESNext.js
Normal file
@ -0,0 +1,27 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpression1ESNext.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
})
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
export function foo() { return "foo"; }
|
||||
//// [1.js]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
})
|
||||
|
||||
function foo() {
|
||||
>foo : Symbol(foo, Decl(1.ts, 4, 2))
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 7, 9))
|
||||
}
|
||||
39
tests/baselines/reference/importCallExpression1ESNext.types
Normal file
39
tests/baselines/reference/importCallExpression1ESNext.types
Normal file
@ -0,0 +1,39 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
var p1 = import("./0");
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then(zero => { return zero.foo();}) : Promise<string>
|
||||
>p1.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>zero => { return zero.foo();} : (zero: typeof "tests/cases/conformance/dynamicImport/0") => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo() : string
|
||||
>zero.foo : () => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
})
|
||||
|
||||
function foo() {
|
||||
>foo : () => void
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
}
|
||||
29
tests/baselines/reference/importCallExpression2ESNext.js
Normal file
29
tests/baselines/reference/importCallExpression2ESNext.js
Normal file
@ -0,0 +1,29 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpression2ESNext.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
//// [2.ts]
|
||||
function foo(x: Promise<any>) {
|
||||
x.then(value => {
|
||||
let b = new value.B();
|
||||
b.print();
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
|
||||
//// [0.js]
|
||||
export class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
//// [2.js]
|
||||
function foo(x) {
|
||||
x.then(value => {
|
||||
let b = new value.B();
|
||||
b.print();
|
||||
});
|
||||
}
|
||||
foo(import("./0"));
|
||||
@ -0,0 +1,33 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
function foo(x: Promise<any>) {
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
>x : Symbol(x, Decl(2.ts, 0, 13))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
|
||||
|
||||
x.then(value => {
|
||||
>x.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(2.ts, 0, 13))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>value : Symbol(value, Decl(2.ts, 1, 11))
|
||||
|
||||
let b = new value.B();
|
||||
>b : Symbol(b, Decl(2.ts, 2, 11))
|
||||
>value : Symbol(value, Decl(2.ts, 1, 11))
|
||||
|
||||
b.print();
|
||||
>b : Symbol(b, Decl(2.ts, 2, 11))
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
45
tests/baselines/reference/importCallExpression2ESNext.types
Normal file
45
tests/baselines/reference/importCallExpression2ESNext.types
Normal file
@ -0,0 +1,45 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
function foo(x: Promise<any>) {
|
||||
>foo : (x: Promise<any>) => void
|
||||
>x : Promise<any>
|
||||
>Promise : Promise<T>
|
||||
|
||||
x.then(value => {
|
||||
>x.then(value => { let b = new value.B(); b.print(); }) : Promise<void>
|
||||
>x.then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>x : Promise<any>
|
||||
>then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>value => { let b = new value.B(); b.print(); } : (value: any) => void
|
||||
>value : any
|
||||
|
||||
let b = new value.B();
|
||||
>b : any
|
||||
>new value.B() : any
|
||||
>value.B : any
|
||||
>value : any
|
||||
>B : any
|
||||
|
||||
b.print();
|
||||
>b.print() : any
|
||||
>b.print : any
|
||||
>b : any
|
||||
>print : any
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
>foo(import("./0")) : void
|
||||
>foo : (x: Promise<any>) => void
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
27
tests/baselines/reference/importCallExpression3ESNext.js
Normal file
27
tests/baselines/reference/importCallExpression3ESNext.js
Normal file
@ -0,0 +1,27 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpression3ESNext.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
//// [2.ts]
|
||||
async function foo() {
|
||||
class C extends (await import("./0")).B {}
|
||||
var c = new C();
|
||||
c.print();
|
||||
}
|
||||
foo();
|
||||
|
||||
//// [0.js]
|
||||
export class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
//// [2.js]
|
||||
async function foo() {
|
||||
class C extends (await import("./0")).B {
|
||||
}
|
||||
var c = new C();
|
||||
c.print();
|
||||
}
|
||||
foo();
|
||||
@ -0,0 +1,29 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
async function foo() {
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
class C extends (await import("./0")).B {}
|
||||
>C : Symbol(C, Decl(2.ts, 0, 22))
|
||||
>(await import("./0")).B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
var c = new C();
|
||||
>c : Symbol(c, Decl(2.ts, 2, 7))
|
||||
>C : Symbol(C, Decl(2.ts, 0, 22))
|
||||
|
||||
c.print();
|
||||
>c.print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
>c : Symbol(c, Decl(2.ts, 2, 7))
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
foo();
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
37
tests/baselines/reference/importCallExpression3ESNext.types
Normal file
37
tests/baselines/reference/importCallExpression3ESNext.types
Normal file
@ -0,0 +1,37 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
async function foo() {
|
||||
>foo : () => Promise<void>
|
||||
|
||||
class C extends (await import("./0")).B {}
|
||||
>C : C
|
||||
>(await import("./0")).B : B
|
||||
>(await import("./0")) : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>await import("./0") : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
>B : typeof B
|
||||
|
||||
var c = new C();
|
||||
>c : C
|
||||
>new C() : C
|
||||
>C : typeof C
|
||||
|
||||
c.print();
|
||||
>c.print() : string
|
||||
>c.print : () => string
|
||||
>c : C
|
||||
>print : () => string
|
||||
}
|
||||
foo();
|
||||
>foo() : Promise<void>
|
||||
>foo : () => Promise<void>
|
||||
|
||||
49
tests/baselines/reference/importCallExpression4ESNext.js
Normal file
49
tests/baselines/reference/importCallExpression4ESNext.js
Normal file
@ -0,0 +1,49 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpression4ESNext.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
|
||||
//// [1.ts]
|
||||
export function backup() { return "backup"; }
|
||||
|
||||
//// [2.ts]
|
||||
declare var console: any;
|
||||
class C {
|
||||
private myModule = import("./0");
|
||||
method() {
|
||||
this.myModule.then(Zero => {
|
||||
console.log(Zero.foo());
|
||||
}, async err => {
|
||||
console.log(err);
|
||||
let one = await import("./1");
|
||||
console.log(one.backup());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
export class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
export function foo() { return "foo"; }
|
||||
//// [1.js]
|
||||
export function backup() { return "backup"; }
|
||||
//// [2.js]
|
||||
class C {
|
||||
constructor() {
|
||||
this.myModule = import("./0");
|
||||
}
|
||||
method() {
|
||||
this.myModule.then(Zero => {
|
||||
console.log(Zero.foo());
|
||||
}, async (err) => {
|
||||
console.log(err);
|
||||
let one = await import("./1");
|
||||
console.log(one.backup());
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
>foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
export function backup() { return "backup"; }
|
||||
>backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
declare var console: any;
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
|
||||
class C {
|
||||
>C : Symbol(C, Decl(2.ts, 0, 25))
|
||||
|
||||
private myModule = import("./0");
|
||||
>myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
|
||||
method() {
|
||||
>method : Symbol(C.method, Decl(2.ts, 2, 37))
|
||||
|
||||
this.myModule.then(Zero => {
|
||||
>this.myModule.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>this.myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
>this : Symbol(C, Decl(2.ts, 0, 25))
|
||||
>myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>Zero : Symbol(Zero, Decl(2.ts, 4, 27))
|
||||
|
||||
console.log(Zero.foo());
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>Zero.foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
>Zero : Symbol(Zero, Decl(2.ts, 4, 27))
|
||||
>foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
|
||||
}, async err => {
|
||||
>err : Symbol(err, Decl(2.ts, 6, 16))
|
||||
|
||||
console.log(err);
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>err : Symbol(err, Decl(2.ts, 6, 16))
|
||||
|
||||
let one = await import("./1");
|
||||
>one : Symbol(one, Decl(2.ts, 8, 15))
|
||||
|
||||
console.log(one.backup());
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>one.backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
>one : Symbol(one, Decl(2.ts, 8, 15))
|
||||
>backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
83
tests/baselines/reference/importCallExpression4ESNext.types
Normal file
83
tests/baselines/reference/importCallExpression4ESNext.types
Normal file
@ -0,0 +1,83 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
export function backup() { return "backup"; }
|
||||
>backup : () => string
|
||||
>"backup" : "backup"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
declare var console: any;
|
||||
>console : any
|
||||
|
||||
class C {
|
||||
>C : C
|
||||
|
||||
private myModule = import("./0");
|
||||
>myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
method() {
|
||||
>method : () => void
|
||||
|
||||
this.myModule.then(Zero => {
|
||||
>this.myModule.then(Zero => { console.log(Zero.foo()); }, async err => { console.log(err); let one = await import("./1"); console.log(one.backup()); }) : Promise<void>
|
||||
>this.myModule.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>this.myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>this : this
|
||||
>myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>Zero => { console.log(Zero.foo()); } : (Zero: typeof "tests/cases/conformance/dynamicImport/0") => void
|
||||
>Zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
console.log(Zero.foo());
|
||||
>console.log(Zero.foo()) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>Zero.foo() : string
|
||||
>Zero.foo : () => string
|
||||
>Zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
}, async err => {
|
||||
>async err => { console.log(err); let one = await import("./1"); console.log(one.backup()); } : (err: any) => Promise<void>
|
||||
>err : any
|
||||
|
||||
console.log(err);
|
||||
>console.log(err) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>err : any
|
||||
|
||||
let one = await import("./1");
|
||||
>one : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>await import("./1") : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>import("./1") : Promise<typeof "tests/cases/conformance/dynamicImport/1">
|
||||
>"./1" : "./1"
|
||||
|
||||
console.log(one.backup());
|
||||
>console.log(one.backup()) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>one.backup() : string
|
||||
>one.backup : () => string
|
||||
>one : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>backup : () => string
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
tests/cases/conformance/dynamicImport/2.ts(3,23): error TS7036: Dynamic import's specifier must be of type 'string', but here has type '"./0" | undefined'.
|
||||
tests/cases/conformance/dynamicImport/2.ts(4,24): error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'undefined'.
|
||||
tests/cases/conformance/dynamicImport/2.ts(5,24): error TS7036: Dynamic import's specifier must be of type 'string', but here has type '"./1" | null'.
|
||||
tests/cases/conformance/dynamicImport/2.ts(6,24): error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'null'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/0.ts (0 errors) ====
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/1.ts (0 errors) ====
|
||||
export function backup() { return "backup"; }
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/2.ts (4 errors) ====
|
||||
declare function bar(): boolean;
|
||||
const specify = bar() ? "./0" : undefined;
|
||||
let myModule = import(specify);
|
||||
~~~~~~~
|
||||
!!! error TS7036: Dynamic import's specifier must be of type 'string', but here has type '"./0" | undefined'.
|
||||
let myModule1 = import(undefined);
|
||||
~~~~~~~~~
|
||||
!!! error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'undefined'.
|
||||
let myModule2 = import(bar() ? "./1" : null);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS7036: Dynamic import's specifier must be of type 'string', but here has type '"./1" | null'.
|
||||
let myModule3 = import(null);
|
||||
~~~~
|
||||
!!! error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'null'.
|
||||
33
tests/baselines/reference/importCallExpression5ESNext.js
Normal file
33
tests/baselines/reference/importCallExpression5ESNext.js
Normal file
@ -0,0 +1,33 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpression5ESNext.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
|
||||
//// [1.ts]
|
||||
export function backup() { return "backup"; }
|
||||
|
||||
//// [2.ts]
|
||||
declare function bar(): boolean;
|
||||
const specify = bar() ? "./0" : undefined;
|
||||
let myModule = import(specify);
|
||||
let myModule1 = import(undefined);
|
||||
let myModule2 = import(bar() ? "./1" : null);
|
||||
let myModule3 = import(null);
|
||||
|
||||
//// [0.js]
|
||||
export class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
export function foo() { return "foo"; }
|
||||
//// [1.js]
|
||||
export function backup() { return "backup"; }
|
||||
//// [2.js]
|
||||
const specify = bar() ? "./0" : undefined;
|
||||
let myModule = import(specify);
|
||||
let myModule1 = import(undefined);
|
||||
let myModule2 = import(bar() ? "./1" : null);
|
||||
let myModule3 = import(null);
|
||||
@ -0,0 +1,25 @@
|
||||
tests/cases/conformance/dynamicImport/2.ts(4,24): error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'undefined'.
|
||||
tests/cases/conformance/dynamicImport/2.ts(6,24): error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'null'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/0.ts (0 errors) ====
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/1.ts (0 errors) ====
|
||||
export function backup() { return "backup"; }
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/2.ts (2 errors) ====
|
||||
declare function bar(): boolean;
|
||||
const specify = bar() ? "./0" : undefined;
|
||||
let myModule = import(specify);
|
||||
let myModule1 = import(undefined);
|
||||
~~~~~~~~~
|
||||
!!! error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'undefined'.
|
||||
let myModule2 = import(bar() ? "./1" : null);
|
||||
let myModule3 = import(null);
|
||||
~~~~
|
||||
!!! error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'null'.
|
||||
33
tests/baselines/reference/importCallExpression6ESNext.js
Normal file
33
tests/baselines/reference/importCallExpression6ESNext.js
Normal file
@ -0,0 +1,33 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpression6ESNext.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
|
||||
//// [1.ts]
|
||||
export function backup() { return "backup"; }
|
||||
|
||||
//// [2.ts]
|
||||
declare function bar(): boolean;
|
||||
const specify = bar() ? "./0" : undefined;
|
||||
let myModule = import(specify);
|
||||
let myModule1 = import(undefined);
|
||||
let myModule2 = import(bar() ? "./1" : null);
|
||||
let myModule3 = import(null);
|
||||
|
||||
//// [0.js]
|
||||
export class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
export function foo() { return "foo"; }
|
||||
//// [1.js]
|
||||
export function backup() { return "backup"; }
|
||||
//// [2.js]
|
||||
const specify = bar() ? "./0" : undefined;
|
||||
let myModule = import(specify);
|
||||
let myModule1 = import(undefined);
|
||||
let myModule2 = import(bar() ? "./1" : null);
|
||||
let myModule3 = import(null);
|
||||
@ -0,0 +1,30 @@
|
||||
tests/cases/conformance/dynamicImport/1.ts(4,5): error TS2322: Type 'Promise<typeof "tests/cases/conformance/dynamicImport/defaultPath">' is not assignable to type 'Promise<typeof "tests/cases/conformance/dynamicImport/anotherModule">'.
|
||||
Type 'typeof "tests/cases/conformance/dynamicImport/defaultPath"' is not assignable to type 'typeof "tests/cases/conformance/dynamicImport/anotherModule"'.
|
||||
Property 'D' is missing in type 'typeof "tests/cases/conformance/dynamicImport/defaultPath"'.
|
||||
tests/cases/conformance/dynamicImport/1.ts(5,10): error TS2352: Type 'Promise<typeof "tests/cases/conformance/dynamicImport/defaultPath">' cannot be converted to type 'Promise<typeof "tests/cases/conformance/dynamicImport/anotherModule">'.
|
||||
Type 'typeof "tests/cases/conformance/dynamicImport/defaultPath"' is not comparable to type 'typeof "tests/cases/conformance/dynamicImport/anotherModule"'.
|
||||
Property 'D' is missing in type 'typeof "tests/cases/conformance/dynamicImport/defaultPath"'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/anotherModule.ts (0 errors) ====
|
||||
export class D{}
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/defaultPath.ts (0 errors) ====
|
||||
export class C {}
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/1.ts (2 errors) ====
|
||||
import * as defaultModule from "./defaultPath";
|
||||
import * as anotherModule from "./anotherModule";
|
||||
|
||||
let p1: Promise<typeof anotherModule> = import("./defaultPath");
|
||||
~~
|
||||
!!! error TS2322: Type 'Promise<typeof "tests/cases/conformance/dynamicImport/defaultPath">' is not assignable to type 'Promise<typeof "tests/cases/conformance/dynamicImport/anotherModule">'.
|
||||
!!! error TS2322: Type 'typeof "tests/cases/conformance/dynamicImport/defaultPath"' is not assignable to type 'typeof "tests/cases/conformance/dynamicImport/anotherModule"'.
|
||||
!!! error TS2322: Property 'D' is missing in type 'typeof "tests/cases/conformance/dynamicImport/defaultPath"'.
|
||||
let p2 = import("./defaultPath") as Promise<typeof anotherModule>;
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2352: Type 'Promise<typeof "tests/cases/conformance/dynamicImport/defaultPath">' cannot be converted to type 'Promise<typeof "tests/cases/conformance/dynamicImport/anotherModule">'.
|
||||
!!! error TS2352: Type 'typeof "tests/cases/conformance/dynamicImport/defaultPath"' is not comparable to type 'typeof "tests/cases/conformance/dynamicImport/anotherModule"'.
|
||||
!!! error TS2352: Property 'D' is missing in type 'typeof "tests/cases/conformance/dynamicImport/defaultPath"'.
|
||||
let p3: Promise<any> = import("./defaultPath");
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionCheckReturntype1.ts] ////
|
||||
|
||||
//// [anotherModule.ts]
|
||||
export class D{}
|
||||
|
||||
//// [defaultPath.ts]
|
||||
export class C {}
|
||||
|
||||
//// [1.ts]
|
||||
import * as defaultModule from "./defaultPath";
|
||||
import * as anotherModule from "./anotherModule";
|
||||
|
||||
let p1: Promise<typeof anotherModule> = import("./defaultPath");
|
||||
let p2 = import("./defaultPath") as Promise<typeof anotherModule>;
|
||||
let p3: Promise<any> = import("./defaultPath");
|
||||
|
||||
|
||||
//// [anotherModule.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class D {
|
||||
}
|
||||
exports.D = D;
|
||||
//// [defaultPath.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class C {
|
||||
}
|
||||
exports.C = C;
|
||||
//// [1.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
let p1 = Promise.resolve().then(function () { return require("./defaultPath"); });
|
||||
let p2 = Promise.resolve().then(function () { return require("./defaultPath"); });
|
||||
let p3 = Promise.resolve().then(function () { return require("./defaultPath"); });
|
||||
@ -0,0 +1,35 @@
|
||||
//// [importCallExpressionDeclarationEmit1.ts]
|
||||
declare function getSpecifier(): string;
|
||||
declare var whatToLoad: boolean;
|
||||
declare const directory: string;
|
||||
declare const moduleFile: number;
|
||||
|
||||
import(getSpecifier());
|
||||
|
||||
var p0 = import(`${directory}\${moduleFile}`);
|
||||
var p1 = import(getSpecifier());
|
||||
const p2 = import(whatToLoad ? getSpecifier() : "defaulPath")
|
||||
|
||||
function returnDynamicLoad(path: string) {
|
||||
return import(path);
|
||||
}
|
||||
|
||||
//// [importCallExpressionDeclarationEmit1.js]
|
||||
Promise.resolve().then(function () { return require(getSpecifier()); });
|
||||
var p0 = Promise.resolve().then(function () { return require(`${directory}\${moduleFile}`); });
|
||||
var p1 = Promise.resolve().then(function () { return require(getSpecifier()); });
|
||||
const p2 = Promise.resolve().then(function () { return require(whatToLoad ? getSpecifier() : "defaulPath"); });
|
||||
function returnDynamicLoad(path) {
|
||||
return Promise.resolve().then(function () { return require(path); });
|
||||
}
|
||||
|
||||
|
||||
//// [importCallExpressionDeclarationEmit1.d.ts]
|
||||
declare function getSpecifier(): string;
|
||||
declare var whatToLoad: boolean;
|
||||
declare const directory: string;
|
||||
declare const moduleFile: number;
|
||||
declare var p0: Promise<any>;
|
||||
declare var p1: Promise<any>;
|
||||
declare const p2: Promise<any>;
|
||||
declare function returnDynamicLoad(path: string): Promise<any>;
|
||||
@ -0,0 +1,36 @@
|
||||
=== tests/cases/conformance/dynamicImport/importCallExpressionDeclarationEmit1.ts ===
|
||||
declare function getSpecifier(): string;
|
||||
>getSpecifier : Symbol(getSpecifier, Decl(importCallExpressionDeclarationEmit1.ts, 0, 0))
|
||||
|
||||
declare var whatToLoad: boolean;
|
||||
>whatToLoad : Symbol(whatToLoad, Decl(importCallExpressionDeclarationEmit1.ts, 1, 11))
|
||||
|
||||
declare const directory: string;
|
||||
>directory : Symbol(directory, Decl(importCallExpressionDeclarationEmit1.ts, 2, 13))
|
||||
|
||||
declare const moduleFile: number;
|
||||
>moduleFile : Symbol(moduleFile, Decl(importCallExpressionDeclarationEmit1.ts, 3, 13))
|
||||
|
||||
import(getSpecifier());
|
||||
>getSpecifier : Symbol(getSpecifier, Decl(importCallExpressionDeclarationEmit1.ts, 0, 0))
|
||||
|
||||
var p0 = import(`${directory}\${moduleFile}`);
|
||||
>p0 : Symbol(p0, Decl(importCallExpressionDeclarationEmit1.ts, 7, 3))
|
||||
>directory : Symbol(directory, Decl(importCallExpressionDeclarationEmit1.ts, 2, 13))
|
||||
|
||||
var p1 = import(getSpecifier());
|
||||
>p1 : Symbol(p1, Decl(importCallExpressionDeclarationEmit1.ts, 8, 3))
|
||||
>getSpecifier : Symbol(getSpecifier, Decl(importCallExpressionDeclarationEmit1.ts, 0, 0))
|
||||
|
||||
const p2 = import(whatToLoad ? getSpecifier() : "defaulPath")
|
||||
>p2 : Symbol(p2, Decl(importCallExpressionDeclarationEmit1.ts, 9, 5))
|
||||
>whatToLoad : Symbol(whatToLoad, Decl(importCallExpressionDeclarationEmit1.ts, 1, 11))
|
||||
>getSpecifier : Symbol(getSpecifier, Decl(importCallExpressionDeclarationEmit1.ts, 0, 0))
|
||||
|
||||
function returnDynamicLoad(path: string) {
|
||||
>returnDynamicLoad : Symbol(returnDynamicLoad, Decl(importCallExpressionDeclarationEmit1.ts, 9, 61))
|
||||
>path : Symbol(path, Decl(importCallExpressionDeclarationEmit1.ts, 11, 27))
|
||||
|
||||
return import(path);
|
||||
>path : Symbol(path, Decl(importCallExpressionDeclarationEmit1.ts, 11, 27))
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
=== tests/cases/conformance/dynamicImport/importCallExpressionDeclarationEmit1.ts ===
|
||||
declare function getSpecifier(): string;
|
||||
>getSpecifier : () => string
|
||||
|
||||
declare var whatToLoad: boolean;
|
||||
>whatToLoad : boolean
|
||||
|
||||
declare const directory: string;
|
||||
>directory : string
|
||||
|
||||
declare const moduleFile: number;
|
||||
>moduleFile : number
|
||||
|
||||
import(getSpecifier());
|
||||
>import(getSpecifier()) : Promise<any>
|
||||
>getSpecifier() : string
|
||||
>getSpecifier : () => string
|
||||
|
||||
var p0 = import(`${directory}\${moduleFile}`);
|
||||
>p0 : Promise<any>
|
||||
>import(`${directory}\${moduleFile}`) : Promise<any>
|
||||
>`${directory}\${moduleFile}` : string
|
||||
>directory : string
|
||||
|
||||
var p1 = import(getSpecifier());
|
||||
>p1 : Promise<any>
|
||||
>import(getSpecifier()) : Promise<any>
|
||||
>getSpecifier() : string
|
||||
>getSpecifier : () => string
|
||||
|
||||
const p2 = import(whatToLoad ? getSpecifier() : "defaulPath")
|
||||
>p2 : Promise<any>
|
||||
>import(whatToLoad ? getSpecifier() : "defaulPath") : Promise<any>
|
||||
>whatToLoad ? getSpecifier() : "defaulPath" : string
|
||||
>whatToLoad : boolean
|
||||
>getSpecifier() : string
|
||||
>getSpecifier : () => string
|
||||
>"defaulPath" : "defaulPath"
|
||||
|
||||
function returnDynamicLoad(path: string) {
|
||||
>returnDynamicLoad : (path: string) => Promise<any>
|
||||
>path : string
|
||||
|
||||
return import(path);
|
||||
>import(path) : Promise<any>
|
||||
>path : string
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
tests/cases/conformance/dynamicImport/1.ts(1,5): error TS4023: Exported variable 'p1' has or is using name '"tests/cases/conformance/dynamicImport/0"' from external module "tests/cases/conformance/dynamicImport/0" but cannot be named.
|
||||
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/0.ts (0 errors) ====
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/1.ts (1 errors) ====
|
||||
var p1 = import("./0");
|
||||
~~
|
||||
!!! error TS4023: Exported variable 'p1' has or is using name '"tests/cases/conformance/dynamicImport/0"' from external module "tests/cases/conformance/dynamicImport/0" but cannot be named.
|
||||
@ -0,0 +1,16 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionDeclarationEmit2.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
var p1 = import("./0");
|
||||
|
||||
//// [0.js]
|
||||
export function foo() { return "foo"; }
|
||||
//// [1.js]
|
||||
var p1 = import("./0");
|
||||
|
||||
|
||||
//// [0.d.ts]
|
||||
export declare function foo(): string;
|
||||
@ -0,0 +1,31 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionDeclarationEmit3.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
declare function getPath(): string;
|
||||
import * as Zero from "./0";
|
||||
import("./0");
|
||||
|
||||
export var p0: Promise<typeof Zero> = import(getPath());
|
||||
export var p1: Promise<typeof Zero> = import("./0");
|
||||
export var p2: Promise<any> = import("./0");
|
||||
|
||||
|
||||
//// [0.js]
|
||||
export function foo() { return "foo"; }
|
||||
//// [1.js]
|
||||
import("./0");
|
||||
export var p0 = import(getPath());
|
||||
export var p1 = import("./0");
|
||||
export var p2 = import("./0");
|
||||
|
||||
|
||||
//// [0.d.ts]
|
||||
export declare function foo(): string;
|
||||
//// [1.d.ts]
|
||||
import * as Zero from "./0";
|
||||
export declare var p0: Promise<typeof Zero>;
|
||||
export declare var p1: Promise<typeof Zero>;
|
||||
export declare var p2: Promise<any>;
|
||||
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
declare function getPath(): string;
|
||||
>getPath : Symbol(getPath, Decl(1.ts, 0, 0))
|
||||
|
||||
import * as Zero from "./0";
|
||||
>Zero : Symbol(Zero, Decl(1.ts, 1, 6))
|
||||
|
||||
import("./0");
|
||||
|
||||
export var p0: Promise<typeof Zero> = import(getPath());
|
||||
>p0 : Symbol(p0, Decl(1.ts, 4, 10))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
|
||||
>Zero : Symbol(Zero, Decl(1.ts, 1, 6))
|
||||
>getPath : Symbol(getPath, Decl(1.ts, 0, 0))
|
||||
|
||||
export var p1: Promise<typeof Zero> = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 5, 10))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
|
||||
>Zero : Symbol(Zero, Decl(1.ts, 1, 6))
|
||||
|
||||
export var p2: Promise<any> = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 6, 10))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
declare function getPath(): string;
|
||||
>getPath : () => string
|
||||
|
||||
import * as Zero from "./0";
|
||||
>Zero : typeof Zero
|
||||
|
||||
import("./0");
|
||||
>import("./0") : Promise<typeof Zero>
|
||||
>"./0" : "./0"
|
||||
|
||||
export var p0: Promise<typeof Zero> = import(getPath());
|
||||
>p0 : Promise<typeof Zero>
|
||||
>Promise : Promise<T>
|
||||
>Zero : typeof Zero
|
||||
>import(getPath()) : Promise<any>
|
||||
>getPath() : string
|
||||
>getPath : () => string
|
||||
|
||||
export var p1: Promise<typeof Zero> = import("./0");
|
||||
>p1 : Promise<typeof Zero>
|
||||
>Promise : Promise<T>
|
||||
>Zero : typeof Zero
|
||||
>import("./0") : Promise<typeof Zero>
|
||||
>"./0" : "./0"
|
||||
|
||||
export var p2: Promise<any> = import("./0");
|
||||
>p2 : Promise<any>
|
||||
>Promise : Promise<T>
|
||||
>import("./0") : Promise<typeof Zero>
|
||||
>"./0" : "./0"
|
||||
|
||||
35
tests/baselines/reference/importCallExpressionES5AMD.js
Normal file
35
tests/baselines/reference/importCallExpressionES5AMD.js
Normal file
@ -0,0 +1,35 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionES5AMD.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
});
|
||||
//// [1.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
new Promise(function (resolve_1, reject_1) { require(["./0"], resolve_1, reject_1); });
|
||||
var p1 = new Promise(function (resolve_2, reject_2) { require(["./0"], resolve_2, reject_2); });
|
||||
p1.then(function (zero) {
|
||||
return zero.foo();
|
||||
});
|
||||
function foo() {
|
||||
var p2 = new Promise(function (resolve_3, reject_3) { require(["./0"], resolve_3, reject_3); });
|
||||
}
|
||||
});
|
||||
28
tests/baselines/reference/importCallExpressionES5AMD.symbols
Normal file
28
tests/baselines/reference/importCallExpressionES5AMD.symbols
Normal file
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : Symbol(foo, Decl(1.ts, 4, 3))
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 7, 9))
|
||||
}
|
||||
39
tests/baselines/reference/importCallExpressionES5AMD.types
Normal file
39
tests/baselines/reference/importCallExpressionES5AMD.types
Normal file
@ -0,0 +1,39 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
var p1 = import("./0");
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then(zero => { return zero.foo();}) : Promise<string>
|
||||
>p1.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>zero => { return zero.foo();} : (zero: typeof "tests/cases/conformance/dynamicImport/0") => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo() : string
|
||||
>zero.foo : () => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : () => void
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
}
|
||||
30
tests/baselines/reference/importCallExpressionES5CJS.js
Normal file
30
tests/baselines/reference/importCallExpressionES5CJS.js
Normal file
@ -0,0 +1,30 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionES5CJS.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
//// [1.js]
|
||||
Promise.resolve().then(function () { return require("./0"); });
|
||||
var p1 = Promise.resolve().then(function () { return require("./0"); });
|
||||
p1.then(function (zero) {
|
||||
return zero.foo();
|
||||
});
|
||||
function foo() {
|
||||
var p2 = Promise.resolve().then(function () { return require("./0"); });
|
||||
}
|
||||
28
tests/baselines/reference/importCallExpressionES5CJS.symbols
Normal file
28
tests/baselines/reference/importCallExpressionES5CJS.symbols
Normal file
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : Symbol(foo, Decl(1.ts, 4, 3))
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 7, 9))
|
||||
}
|
||||
39
tests/baselines/reference/importCallExpressionES5CJS.types
Normal file
39
tests/baselines/reference/importCallExpressionES5CJS.types
Normal file
@ -0,0 +1,39 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
var p1 = import("./0");
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then(zero => { return zero.foo();}) : Promise<string>
|
||||
>p1.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>zero => { return zero.foo();} : (zero: typeof "tests/cases/conformance/dynamicImport/0") => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo() : string
|
||||
>zero.foo : () => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : () => void
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
}
|
||||
46
tests/baselines/reference/importCallExpressionES5System.js
Normal file
46
tests/baselines/reference/importCallExpressionES5System.js
Normal file
@ -0,0 +1,46 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionES5System.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
System.register([], function (exports_1, context_1) {
|
||||
"use strict";
|
||||
var __moduleName = context_1 && context_1.id;
|
||||
function foo() { return "foo"; }
|
||||
exports_1("foo", foo);
|
||||
return {
|
||||
setters: [],
|
||||
execute: function () {
|
||||
}
|
||||
};
|
||||
});
|
||||
//// [1.js]
|
||||
System.register([], function (exports_1, context_1) {
|
||||
var __moduleName = context_1 && context_1.id;
|
||||
function foo() {
|
||||
var p2 = context_1.import("./0");
|
||||
}
|
||||
var p1;
|
||||
return {
|
||||
setters: [],
|
||||
execute: function () {
|
||||
context_1.import("./0");
|
||||
p1 = context_1.import("./0");
|
||||
p1.then(function (zero) {
|
||||
return zero.foo();
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : Symbol(foo, Decl(1.ts, 4, 3))
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 7, 9))
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
var p1 = import("./0");
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then(zero => { return zero.foo();}) : Promise<string>
|
||||
>p1.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>zero => { return zero.foo();} : (zero: typeof "tests/cases/conformance/dynamicImport/0") => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo() : string
|
||||
>zero.foo : () => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : () => void
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
}
|
||||
52
tests/baselines/reference/importCallExpressionES5UMD.js
Normal file
52
tests/baselines/reference/importCallExpressionES5UMD.js
Normal file
@ -0,0 +1,52 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionES5UMD.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
(function (factory) {
|
||||
if (typeof module === "object" && typeof module.exports === "object") {
|
||||
var v = factory(require, exports);
|
||||
if (v !== undefined) module.exports = v;
|
||||
}
|
||||
else if (typeof define === "function" && define.amd) {
|
||||
define(["require", "exports"], factory);
|
||||
}
|
||||
})(function (require, exports) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
});
|
||||
//// [1.js]
|
||||
(function (factory) {
|
||||
if (typeof module === "object" && typeof module.exports === "object") {
|
||||
var v = factory(require, exports);
|
||||
if (v !== undefined) module.exports = v;
|
||||
}
|
||||
else if (typeof define === "function" && define.amd) {
|
||||
define(["require", "exports"], factory);
|
||||
}
|
||||
})(function (require, exports) {
|
||||
"use strict";
|
||||
var __syncRequire = typeof module === "object" && typeof module.exports === "object";
|
||||
__syncRequire ? Promise.resolve().then(function () { return require("./0"); }) : new Promise(function (resolve_1, reject_1) { require(["./0"], resolve_1, reject_1); });
|
||||
var p1 = __syncRequire ? Promise.resolve().then(function () { return require("./0"); }) : new Promise(function (resolve_2, reject_2) { require(["./0"], resolve_2, reject_2); });
|
||||
p1.then(function (zero) {
|
||||
return zero.foo();
|
||||
});
|
||||
function foo() {
|
||||
var p2 = __syncRequire ? Promise.resolve().then(function () { return require("./0"); }) : new Promise(function (resolve_3, reject_3) { require(["./0"], resolve_3, reject_3); });
|
||||
}
|
||||
});
|
||||
28
tests/baselines/reference/importCallExpressionES5UMD.symbols
Normal file
28
tests/baselines/reference/importCallExpressionES5UMD.symbols
Normal file
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : Symbol(foo, Decl(1.ts, 4, 3))
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 7, 9))
|
||||
}
|
||||
39
tests/baselines/reference/importCallExpressionES5UMD.types
Normal file
39
tests/baselines/reference/importCallExpressionES5UMD.types
Normal file
@ -0,0 +1,39 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
var p1 = import("./0");
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then(zero => { return zero.foo();}) : Promise<string>
|
||||
>p1.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>zero => { return zero.foo();} : (zero: typeof "tests/cases/conformance/dynamicImport/0") => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo() : string
|
||||
>zero.foo : () => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : () => void
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
tests/cases/conformance/dynamicImport/1.ts(1,1): error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.
|
||||
tests/cases/conformance/dynamicImport/1.ts(2,10): error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.
|
||||
tests/cases/conformance/dynamicImport/1.ts(8,16): error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.
|
||||
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/0.ts (0 errors) ====
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/1.ts (3 errors) ====
|
||||
import("./0");
|
||||
~~~~~~~~~~~~~
|
||||
!!! error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.
|
||||
var p1 = import("./0");
|
||||
~~~~~~~~~~~~~
|
||||
!!! error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
})
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
~~~~~~~~~~~~~
|
||||
!!! error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionErrorInES2015.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
})
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
export function foo() { return "foo"; }
|
||||
//// [1.js]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
tests/cases/conformance/dynamicImport/importCallExpressionGrammarError.ts(5,8): error TS1325: Specifier of dynamic import cannot be spread element.
|
||||
tests/cases/conformance/dynamicImport/importCallExpressionGrammarError.ts(7,17): error TS1325: Specifier of dynamic import cannot be spread element.
|
||||
tests/cases/conformance/dynamicImport/importCallExpressionGrammarError.ts(8,12): error TS1324: Dynamic import must have one specifier as an argument.
|
||||
tests/cases/conformance/dynamicImport/importCallExpressionGrammarError.ts(9,19): error TS1135: Argument expression expected.
|
||||
tests/cases/conformance/dynamicImport/importCallExpressionGrammarError.ts(9,19): error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'undefined'.
|
||||
tests/cases/conformance/dynamicImport/importCallExpressionGrammarError.ts(10,12): error TS1324: Dynamic import must have one specifier as an argument.
|
||||
tests/cases/conformance/dynamicImport/importCallExpressionGrammarError.ts(10,19): error TS2307: Cannot find module 'pathToModule'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/importCallExpressionGrammarError.ts (7 errors) ====
|
||||
declare function getSpecifier(): string;
|
||||
declare var whatToLoad: boolean;
|
||||
|
||||
var a = ["./0"];
|
||||
import(...["PathModule"]);
|
||||
~~~~~~~~~~~~~~~~~
|
||||
!!! error TS1325: Specifier of dynamic import cannot be spread element.
|
||||
|
||||
var p1 = import(...a);
|
||||
~~~~
|
||||
!!! error TS1325: Specifier of dynamic import cannot be spread element.
|
||||
const p2 = import();
|
||||
~~~~~~~~
|
||||
!!! error TS1324: Dynamic import must have one specifier as an argument.
|
||||
const p3 = import(,);
|
||||
|
||||
!!! error TS1135: Argument expression expected.
|
||||
|
||||
!!! error TS7036: Dynamic import's specifier must be of type 'string', but here has type 'undefined'.
|
||||
const p4 = import("pathToModule", "secondModule");
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS1324: Dynamic import must have one specifier as an argument.
|
||||
~~~~~~~~~~~~~~
|
||||
!!! error TS2307: Cannot find module 'pathToModule'.
|
||||
@ -0,0 +1,19 @@
|
||||
//// [importCallExpressionGrammarError.ts]
|
||||
declare function getSpecifier(): string;
|
||||
declare var whatToLoad: boolean;
|
||||
|
||||
var a = ["./0"];
|
||||
import(...["PathModule"]);
|
||||
|
||||
var p1 = import(...a);
|
||||
const p2 = import();
|
||||
const p3 = import(,);
|
||||
const p4 = import("pathToModule", "secondModule");
|
||||
|
||||
//// [importCallExpressionGrammarError.js]
|
||||
var a = ["./0"];
|
||||
Promise.resolve().then(function () { return require(...["PathModule"]); });
|
||||
var p1 = Promise.resolve().then(function () { return require(...a); });
|
||||
const p2 = Promise.resolve().then(function () { return require(); });
|
||||
const p3 = Promise.resolve().then(function () { return require(); });
|
||||
const p4 = Promise.resolve().then(function () { return require("pathToModule", "secondModule"); });
|
||||
35
tests/baselines/reference/importCallExpressionInAMD1.js
Normal file
35
tests/baselines/reference/importCallExpressionInAMD1.js
Normal file
@ -0,0 +1,35 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInAMD1.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
});
|
||||
//// [1.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
new Promise(function (resolve_1, reject_1) { require(["./0"], resolve_1, reject_1); });
|
||||
var p1 = new Promise(function (resolve_2, reject_2) { require(["./0"], resolve_2, reject_2); });
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
function foo() {
|
||||
const p2 = new Promise(function (resolve_3, reject_3) { require(["./0"], resolve_3, reject_3); });
|
||||
}
|
||||
});
|
||||
28
tests/baselines/reference/importCallExpressionInAMD1.symbols
Normal file
28
tests/baselines/reference/importCallExpressionInAMD1.symbols
Normal file
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : Symbol(foo, Decl(1.ts, 4, 3))
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 7, 9))
|
||||
}
|
||||
39
tests/baselines/reference/importCallExpressionInAMD1.types
Normal file
39
tests/baselines/reference/importCallExpressionInAMD1.types
Normal file
@ -0,0 +1,39 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
var p1 = import("./0");
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then(zero => { return zero.foo();}) : Promise<string>
|
||||
>p1.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>zero => { return zero.foo();} : (zero: typeof "tests/cases/conformance/dynamicImport/0") => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo() : string
|
||||
>zero.foo : () => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : () => void
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
}
|
||||
39
tests/baselines/reference/importCallExpressionInAMD2.js
Normal file
39
tests/baselines/reference/importCallExpressionInAMD2.js
Normal file
@ -0,0 +1,39 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInAMD2.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
//// [2.ts]
|
||||
// We use Promise<any> for now as there is no way to specify shape of module object
|
||||
function foo(x: Promise<any>) {
|
||||
x.then(value => {
|
||||
let b = new value.B();
|
||||
b.print();
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
|
||||
//// [0.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
exports.B = B;
|
||||
});
|
||||
//// [2.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
// We use Promise<any> for now as there is no way to specify shape of module object
|
||||
function foo(x) {
|
||||
x.then(value => {
|
||||
let b = new value.B();
|
||||
b.print();
|
||||
});
|
||||
}
|
||||
foo(new Promise(function (resolve_1, reject_1) { require(["./0"], resolve_1, reject_1); }));
|
||||
});
|
||||
34
tests/baselines/reference/importCallExpressionInAMD2.symbols
Normal file
34
tests/baselines/reference/importCallExpressionInAMD2.symbols
Normal file
@ -0,0 +1,34 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
// We use Promise<any> for now as there is no way to specify shape of module object
|
||||
function foo(x: Promise<any>) {
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
>x : Symbol(x, Decl(2.ts, 1, 13))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
|
||||
|
||||
x.then(value => {
|
||||
>x.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(2.ts, 1, 13))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>value : Symbol(value, Decl(2.ts, 2, 11))
|
||||
|
||||
let b = new value.B();
|
||||
>b : Symbol(b, Decl(2.ts, 3, 11))
|
||||
>value : Symbol(value, Decl(2.ts, 2, 11))
|
||||
|
||||
b.print();
|
||||
>b : Symbol(b, Decl(2.ts, 3, 11))
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
46
tests/baselines/reference/importCallExpressionInAMD2.types
Normal file
46
tests/baselines/reference/importCallExpressionInAMD2.types
Normal file
@ -0,0 +1,46 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
// We use Promise<any> for now as there is no way to specify shape of module object
|
||||
function foo(x: Promise<any>) {
|
||||
>foo : (x: Promise<any>) => void
|
||||
>x : Promise<any>
|
||||
>Promise : Promise<T>
|
||||
|
||||
x.then(value => {
|
||||
>x.then(value => { let b = new value.B(); b.print(); }) : Promise<void>
|
||||
>x.then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>x : Promise<any>
|
||||
>then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>value => { let b = new value.B(); b.print(); } : (value: any) => void
|
||||
>value : any
|
||||
|
||||
let b = new value.B();
|
||||
>b : any
|
||||
>new value.B() : any
|
||||
>value.B : any
|
||||
>value : any
|
||||
>B : any
|
||||
|
||||
b.print();
|
||||
>b.print() : any
|
||||
>b.print : any
|
||||
>b : any
|
||||
>print : any
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
>foo(import("./0")) : void
|
||||
>foo : (x: Promise<any>) => void
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
35
tests/baselines/reference/importCallExpressionInAMD3.js
Normal file
35
tests/baselines/reference/importCallExpressionInAMD3.js
Normal file
@ -0,0 +1,35 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInAMD3.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
//// [2.ts]
|
||||
async function foo() {
|
||||
class C extends (await import("./0")).B {}
|
||||
var c = new C();
|
||||
c.print();
|
||||
}
|
||||
foo();
|
||||
|
||||
//// [0.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
exports.B = B;
|
||||
});
|
||||
//// [2.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
async function foo() {
|
||||
class C extends (await new Promise(function (resolve_1, reject_1) { require(["./0"], resolve_1, reject_1); })).B {
|
||||
}
|
||||
var c = new C();
|
||||
c.print();
|
||||
}
|
||||
foo();
|
||||
});
|
||||
29
tests/baselines/reference/importCallExpressionInAMD3.symbols
Normal file
29
tests/baselines/reference/importCallExpressionInAMD3.symbols
Normal file
@ -0,0 +1,29 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
async function foo() {
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
class C extends (await import("./0")).B {}
|
||||
>C : Symbol(C, Decl(2.ts, 0, 22))
|
||||
>(await import("./0")).B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
var c = new C();
|
||||
>c : Symbol(c, Decl(2.ts, 2, 7))
|
||||
>C : Symbol(C, Decl(2.ts, 0, 22))
|
||||
|
||||
c.print();
|
||||
>c.print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
>c : Symbol(c, Decl(2.ts, 2, 7))
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
foo();
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
37
tests/baselines/reference/importCallExpressionInAMD3.types
Normal file
37
tests/baselines/reference/importCallExpressionInAMD3.types
Normal file
@ -0,0 +1,37 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
async function foo() {
|
||||
>foo : () => Promise<void>
|
||||
|
||||
class C extends (await import("./0")).B {}
|
||||
>C : C
|
||||
>(await import("./0")).B : B
|
||||
>(await import("./0")) : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>await import("./0") : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
>B : typeof B
|
||||
|
||||
var c = new C();
|
||||
>c : C
|
||||
>new C() : C
|
||||
>C : typeof C
|
||||
|
||||
c.print();
|
||||
>c.print() : string
|
||||
>c.print : () => string
|
||||
>c : C
|
||||
>print : () => string
|
||||
}
|
||||
foo();
|
||||
>foo() : Promise<void>
|
||||
>foo : () => Promise<void>
|
||||
|
||||
63
tests/baselines/reference/importCallExpressionInAMD4.js
Normal file
63
tests/baselines/reference/importCallExpressionInAMD4.js
Normal file
@ -0,0 +1,63 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInAMD4.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
|
||||
//// [1.ts]
|
||||
export function backup() { return "backup"; }
|
||||
|
||||
//// [2.ts]
|
||||
declare var console: any;
|
||||
class C {
|
||||
private myModule = import("./0");
|
||||
method() {
|
||||
this.myModule.then(Zero => {
|
||||
console.log(Zero.foo());
|
||||
}, async err => {
|
||||
console.log(err);
|
||||
let one = await import("./1");
|
||||
console.log(one.backup());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
exports.B = B;
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
});
|
||||
//// [1.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function backup() { return "backup"; }
|
||||
exports.backup = backup;
|
||||
});
|
||||
//// [2.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
"use strict";
|
||||
class C {
|
||||
constructor() {
|
||||
this.myModule = new Promise(function (resolve_1, reject_1) { require(["./0"], resolve_1, reject_1); });
|
||||
}
|
||||
method() {
|
||||
this.myModule.then(Zero => {
|
||||
console.log(Zero.foo());
|
||||
}, async (err) => {
|
||||
console.log(err);
|
||||
let one = await new Promise(function (resolve_2, reject_2) { require(["./1"], resolve_2, reject_2); });
|
||||
console.log(one.backup());
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
61
tests/baselines/reference/importCallExpressionInAMD4.symbols
Normal file
61
tests/baselines/reference/importCallExpressionInAMD4.symbols
Normal file
@ -0,0 +1,61 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
>foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
export function backup() { return "backup"; }
|
||||
>backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
declare var console: any;
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
|
||||
class C {
|
||||
>C : Symbol(C, Decl(2.ts, 0, 25))
|
||||
|
||||
private myModule = import("./0");
|
||||
>myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
|
||||
method() {
|
||||
>method : Symbol(C.method, Decl(2.ts, 2, 37))
|
||||
|
||||
this.myModule.then(Zero => {
|
||||
>this.myModule.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>this.myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
>this : Symbol(C, Decl(2.ts, 0, 25))
|
||||
>myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>Zero : Symbol(Zero, Decl(2.ts, 4, 27))
|
||||
|
||||
console.log(Zero.foo());
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>Zero.foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
>Zero : Symbol(Zero, Decl(2.ts, 4, 27))
|
||||
>foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
|
||||
}, async err => {
|
||||
>err : Symbol(err, Decl(2.ts, 6, 16))
|
||||
|
||||
console.log(err);
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>err : Symbol(err, Decl(2.ts, 6, 16))
|
||||
|
||||
let one = await import("./1");
|
||||
>one : Symbol(one, Decl(2.ts, 8, 15))
|
||||
|
||||
console.log(one.backup());
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>one.backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
>one : Symbol(one, Decl(2.ts, 8, 15))
|
||||
>backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
83
tests/baselines/reference/importCallExpressionInAMD4.types
Normal file
83
tests/baselines/reference/importCallExpressionInAMD4.types
Normal file
@ -0,0 +1,83 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
export function backup() { return "backup"; }
|
||||
>backup : () => string
|
||||
>"backup" : "backup"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
declare var console: any;
|
||||
>console : any
|
||||
|
||||
class C {
|
||||
>C : C
|
||||
|
||||
private myModule = import("./0");
|
||||
>myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
method() {
|
||||
>method : () => void
|
||||
|
||||
this.myModule.then(Zero => {
|
||||
>this.myModule.then(Zero => { console.log(Zero.foo()); }, async err => { console.log(err); let one = await import("./1"); console.log(one.backup()); }) : Promise<void>
|
||||
>this.myModule.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>this.myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>this : this
|
||||
>myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>Zero => { console.log(Zero.foo()); } : (Zero: typeof "tests/cases/conformance/dynamicImport/0") => void
|
||||
>Zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
console.log(Zero.foo());
|
||||
>console.log(Zero.foo()) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>Zero.foo() : string
|
||||
>Zero.foo : () => string
|
||||
>Zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
}, async err => {
|
||||
>async err => { console.log(err); let one = await import("./1"); console.log(one.backup()); } : (err: any) => Promise<void>
|
||||
>err : any
|
||||
|
||||
console.log(err);
|
||||
>console.log(err) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>err : any
|
||||
|
||||
let one = await import("./1");
|
||||
>one : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>await import("./1") : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>import("./1") : Promise<typeof "tests/cases/conformance/dynamicImport/1">
|
||||
>"./1" : "./1"
|
||||
|
||||
console.log(one.backup());
|
||||
>console.log(one.backup()) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>one.backup() : string
|
||||
>one.backup : () => string
|
||||
>one : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>backup : () => string
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
30
tests/baselines/reference/importCallExpressionInCJS1.js
Normal file
30
tests/baselines/reference/importCallExpressionInCJS1.js
Normal file
@ -0,0 +1,30 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInCJS1.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
//// [1.js]
|
||||
Promise.resolve().then(function () { return require("./0"); });
|
||||
var p1 = Promise.resolve().then(function () { return require("./0"); });
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
function foo() {
|
||||
const p2 = Promise.resolve().then(function () { return require("./0"); });
|
||||
}
|
||||
28
tests/baselines/reference/importCallExpressionInCJS1.symbols
Normal file
28
tests/baselines/reference/importCallExpressionInCJS1.symbols
Normal file
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : Symbol(foo, Decl(1.ts, 4, 3))
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 7, 9))
|
||||
}
|
||||
39
tests/baselines/reference/importCallExpressionInCJS1.types
Normal file
39
tests/baselines/reference/importCallExpressionInCJS1.types
Normal file
@ -0,0 +1,39 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
var p1 = import("./0");
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then(zero => { return zero.foo();}) : Promise<string>
|
||||
>p1.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>zero => { return zero.foo();} : (zero: typeof "tests/cases/conformance/dynamicImport/0") => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo() : string
|
||||
>zero.foo : () => string
|
||||
>zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : () => void
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
}
|
||||
40
tests/baselines/reference/importCallExpressionInCJS2.js
Normal file
40
tests/baselines/reference/importCallExpressionInCJS2.js
Normal file
@ -0,0 +1,40 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInCJS2.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
export function backup() { return "backup"; }
|
||||
|
||||
//// [2.ts]
|
||||
async function compute(promise: Promise<any>) {
|
||||
let j = await promise;
|
||||
if (!j) {
|
||||
j = await import("./1");
|
||||
return j.backup();
|
||||
}
|
||||
return j.foo();
|
||||
}
|
||||
|
||||
compute(import("./0"));
|
||||
|
||||
//// [0.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
//// [1.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function backup() { return "backup"; }
|
||||
exports.backup = backup;
|
||||
//// [2.js]
|
||||
async function compute(promise) {
|
||||
let j = await promise;
|
||||
if (!j) {
|
||||
j = await Promise.resolve().then(function () { return require("./1"); });
|
||||
return j.backup();
|
||||
}
|
||||
return j.foo();
|
||||
}
|
||||
compute(Promise.resolve().then(function () { return require("./0"); }));
|
||||
34
tests/baselines/reference/importCallExpressionInCJS2.symbols
Normal file
34
tests/baselines/reference/importCallExpressionInCJS2.symbols
Normal file
@ -0,0 +1,34 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
export function backup() { return "backup"; }
|
||||
>backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
async function compute(promise: Promise<any>) {
|
||||
>compute : Symbol(compute, Decl(2.ts, 0, 0))
|
||||
>promise : Symbol(promise, Decl(2.ts, 0, 23))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
|
||||
|
||||
let j = await promise;
|
||||
>j : Symbol(j, Decl(2.ts, 1, 7))
|
||||
>promise : Symbol(promise, Decl(2.ts, 0, 23))
|
||||
|
||||
if (!j) {
|
||||
>j : Symbol(j, Decl(2.ts, 1, 7))
|
||||
|
||||
j = await import("./1");
|
||||
>j : Symbol(j, Decl(2.ts, 1, 7))
|
||||
|
||||
return j.backup();
|
||||
>j : Symbol(j, Decl(2.ts, 1, 7))
|
||||
}
|
||||
return j.foo();
|
||||
>j : Symbol(j, Decl(2.ts, 1, 7))
|
||||
}
|
||||
|
||||
compute(import("./0"));
|
||||
>compute : Symbol(compute, Decl(2.ts, 0, 0))
|
||||
|
||||
51
tests/baselines/reference/importCallExpressionInCJS2.types
Normal file
51
tests/baselines/reference/importCallExpressionInCJS2.types
Normal file
@ -0,0 +1,51 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
export function backup() { return "backup"; }
|
||||
>backup : () => string
|
||||
>"backup" : "backup"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
async function compute(promise: Promise<any>) {
|
||||
>compute : (promise: Promise<any>) => Promise<any>
|
||||
>promise : Promise<any>
|
||||
>Promise : Promise<T>
|
||||
|
||||
let j = await promise;
|
||||
>j : any
|
||||
>await promise : any
|
||||
>promise : Promise<any>
|
||||
|
||||
if (!j) {
|
||||
>!j : boolean
|
||||
>j : any
|
||||
|
||||
j = await import("./1");
|
||||
>j = await import("./1") : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>j : any
|
||||
>await import("./1") : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>import("./1") : Promise<typeof "tests/cases/conformance/dynamicImport/1">
|
||||
>"./1" : "./1"
|
||||
|
||||
return j.backup();
|
||||
>j.backup() : any
|
||||
>j.backup : any
|
||||
>j : any
|
||||
>backup : any
|
||||
}
|
||||
return j.foo();
|
||||
>j.foo() : any
|
||||
>j.foo : any
|
||||
>j : any
|
||||
>foo : any
|
||||
}
|
||||
|
||||
compute(import("./0"));
|
||||
>compute(import("./0")) : Promise<any>
|
||||
>compute : (promise: Promise<any>) => Promise<any>
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
34
tests/baselines/reference/importCallExpressionInCJS3.js
Normal file
34
tests/baselines/reference/importCallExpressionInCJS3.js
Normal file
@ -0,0 +1,34 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInCJS3.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
//// [2.ts]
|
||||
// We use Promise<any> for now as there is no way to specify shape of module object
|
||||
function foo(x: Promise<any>) {
|
||||
x.then(value => {
|
||||
let b = new value.B();
|
||||
b.print();
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
|
||||
//// [0.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
exports.B = B;
|
||||
//// [2.js]
|
||||
// We use Promise<any> for now as there is no way to specify shape of module object
|
||||
function foo(x) {
|
||||
x.then(value => {
|
||||
let b = new value.B();
|
||||
b.print();
|
||||
});
|
||||
}
|
||||
foo(Promise.resolve().then(function () { return require("./0"); }));
|
||||
34
tests/baselines/reference/importCallExpressionInCJS3.symbols
Normal file
34
tests/baselines/reference/importCallExpressionInCJS3.symbols
Normal file
@ -0,0 +1,34 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
// We use Promise<any> for now as there is no way to specify shape of module object
|
||||
function foo(x: Promise<any>) {
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
>x : Symbol(x, Decl(2.ts, 1, 13))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
|
||||
|
||||
x.then(value => {
|
||||
>x.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(2.ts, 1, 13))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>value : Symbol(value, Decl(2.ts, 2, 11))
|
||||
|
||||
let b = new value.B();
|
||||
>b : Symbol(b, Decl(2.ts, 3, 11))
|
||||
>value : Symbol(value, Decl(2.ts, 2, 11))
|
||||
|
||||
b.print();
|
||||
>b : Symbol(b, Decl(2.ts, 3, 11))
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
46
tests/baselines/reference/importCallExpressionInCJS3.types
Normal file
46
tests/baselines/reference/importCallExpressionInCJS3.types
Normal file
@ -0,0 +1,46 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
// We use Promise<any> for now as there is no way to specify shape of module object
|
||||
function foo(x: Promise<any>) {
|
||||
>foo : (x: Promise<any>) => void
|
||||
>x : Promise<any>
|
||||
>Promise : Promise<T>
|
||||
|
||||
x.then(value => {
|
||||
>x.then(value => { let b = new value.B(); b.print(); }) : Promise<void>
|
||||
>x.then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>x : Promise<any>
|
||||
>then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>value => { let b = new value.B(); b.print(); } : (value: any) => void
|
||||
>value : any
|
||||
|
||||
let b = new value.B();
|
||||
>b : any
|
||||
>new value.B() : any
|
||||
>value.B : any
|
||||
>value : any
|
||||
>B : any
|
||||
|
||||
b.print();
|
||||
>b.print() : any
|
||||
>b.print : any
|
||||
>b : any
|
||||
>print : any
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
foo(import("./0"));
|
||||
>foo(import("./0")) : void
|
||||
>foo : (x: Promise<any>) => void
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
30
tests/baselines/reference/importCallExpressionInCJS4.js
Normal file
30
tests/baselines/reference/importCallExpressionInCJS4.js
Normal file
@ -0,0 +1,30 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInCJS4.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
//// [2.ts]
|
||||
async function foo() {
|
||||
class C extends (await import("./0")).B {}
|
||||
var c = new C();
|
||||
c.print();
|
||||
}
|
||||
foo();
|
||||
|
||||
//// [0.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
exports.B = B;
|
||||
//// [2.js]
|
||||
async function foo() {
|
||||
class C extends (await Promise.resolve().then(function () { return require("./0"); })).B {
|
||||
}
|
||||
var c = new C();
|
||||
c.print();
|
||||
}
|
||||
foo();
|
||||
29
tests/baselines/reference/importCallExpressionInCJS4.symbols
Normal file
29
tests/baselines/reference/importCallExpressionInCJS4.symbols
Normal file
@ -0,0 +1,29 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
async function foo() {
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
class C extends (await import("./0")).B {}
|
||||
>C : Symbol(C, Decl(2.ts, 0, 22))
|
||||
>(await import("./0")).B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
var c = new C();
|
||||
>c : Symbol(c, Decl(2.ts, 2, 7))
|
||||
>C : Symbol(C, Decl(2.ts, 0, 22))
|
||||
|
||||
c.print();
|
||||
>c.print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
>c : Symbol(c, Decl(2.ts, 2, 7))
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
foo();
|
||||
>foo : Symbol(foo, Decl(2.ts, 0, 0))
|
||||
|
||||
37
tests/baselines/reference/importCallExpressionInCJS4.types
Normal file
37
tests/baselines/reference/importCallExpressionInCJS4.types
Normal file
@ -0,0 +1,37 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
async function foo() {
|
||||
>foo : () => Promise<void>
|
||||
|
||||
class C extends (await import("./0")).B {}
|
||||
>C : C
|
||||
>(await import("./0")).B : B
|
||||
>(await import("./0")) : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>await import("./0") : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
>B : typeof B
|
||||
|
||||
var c = new C();
|
||||
>c : C
|
||||
>new C() : C
|
||||
>C : typeof C
|
||||
|
||||
c.print();
|
||||
>c.print() : string
|
||||
>c.print : () => string
|
||||
>c : C
|
||||
>print : () => string
|
||||
}
|
||||
foo();
|
||||
>foo() : Promise<void>
|
||||
>foo : () => Promise<void>
|
||||
|
||||
56
tests/baselines/reference/importCallExpressionInCJS5.js
Normal file
56
tests/baselines/reference/importCallExpressionInCJS5.js
Normal file
@ -0,0 +1,56 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInCJS5.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export class B {
|
||||
print() { return "I am B"}
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
|
||||
//// [1.ts]
|
||||
export function backup() { return "backup"; }
|
||||
|
||||
//// [2.ts]
|
||||
declare var console: any;
|
||||
class C {
|
||||
private myModule = import("./0");
|
||||
method() {
|
||||
this.myModule.then(Zero => {
|
||||
console.log(Zero.foo());
|
||||
}, async err => {
|
||||
console.log(err);
|
||||
let one = await import("./1");
|
||||
console.log(one.backup());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class B {
|
||||
print() { return "I am B"; }
|
||||
}
|
||||
exports.B = B;
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
//// [1.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function backup() { return "backup"; }
|
||||
exports.backup = backup;
|
||||
//// [2.js]
|
||||
class C {
|
||||
constructor() {
|
||||
this.myModule = Promise.resolve().then(function () { return require("./0"); });
|
||||
}
|
||||
method() {
|
||||
this.myModule.then(Zero => {
|
||||
console.log(Zero.foo());
|
||||
}, async (err) => {
|
||||
console.log(err);
|
||||
let one = await Promise.resolve().then(function () { return require("./1"); });
|
||||
console.log(one.backup());
|
||||
});
|
||||
}
|
||||
}
|
||||
61
tests/baselines/reference/importCallExpressionInCJS5.symbols
Normal file
61
tests/baselines/reference/importCallExpressionInCJS5.symbols
Normal file
@ -0,0 +1,61 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : Symbol(B, Decl(0.ts, 0, 0))
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : Symbol(B.print, Decl(0.ts, 0, 16))
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
>foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
export function backup() { return "backup"; }
|
||||
>backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
declare var console: any;
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
|
||||
class C {
|
||||
>C : Symbol(C, Decl(2.ts, 0, 25))
|
||||
|
||||
private myModule = import("./0");
|
||||
>myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
|
||||
method() {
|
||||
>method : Symbol(C.method, Decl(2.ts, 2, 37))
|
||||
|
||||
this.myModule.then(Zero => {
|
||||
>this.myModule.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>this.myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
>this : Symbol(C, Decl(2.ts, 0, 25))
|
||||
>myModule : Symbol(C.myModule, Decl(2.ts, 1, 9))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>Zero : Symbol(Zero, Decl(2.ts, 4, 27))
|
||||
|
||||
console.log(Zero.foo());
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>Zero.foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
>Zero : Symbol(Zero, Decl(2.ts, 4, 27))
|
||||
>foo : Symbol(foo, Decl(0.ts, 2, 1))
|
||||
|
||||
}, async err => {
|
||||
>err : Symbol(err, Decl(2.ts, 6, 16))
|
||||
|
||||
console.log(err);
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>err : Symbol(err, Decl(2.ts, 6, 16))
|
||||
|
||||
let one = await import("./1");
|
||||
>one : Symbol(one, Decl(2.ts, 8, 15))
|
||||
|
||||
console.log(one.backup());
|
||||
>console : Symbol(console, Decl(2.ts, 0, 11))
|
||||
>one.backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
>one : Symbol(one, Decl(2.ts, 8, 15))
|
||||
>backup : Symbol(backup, Decl(1.ts, 0, 0))
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
83
tests/baselines/reference/importCallExpressionInCJS5.types
Normal file
83
tests/baselines/reference/importCallExpressionInCJS5.types
Normal file
@ -0,0 +1,83 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export class B {
|
||||
>B : B
|
||||
|
||||
print() { return "I am B"}
|
||||
>print : () => string
|
||||
>"I am B" : "I am B"
|
||||
}
|
||||
|
||||
export function foo() { return "foo" }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
export function backup() { return "backup"; }
|
||||
>backup : () => string
|
||||
>"backup" : "backup"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/2.ts ===
|
||||
declare var console: any;
|
||||
>console : any
|
||||
|
||||
class C {
|
||||
>C : C
|
||||
|
||||
private myModule = import("./0");
|
||||
>myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
method() {
|
||||
>method : () => void
|
||||
|
||||
this.myModule.then(Zero => {
|
||||
>this.myModule.then(Zero => { console.log(Zero.foo()); }, async err => { console.log(err); let one = await import("./1"); console.log(one.backup()); }) : Promise<void>
|
||||
>this.myModule.then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>this.myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>this : this
|
||||
>myModule : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>then : <TResult1 = typeof "tests/cases/conformance/dynamicImport/0", TResult2 = never>(onfulfilled?: (value: typeof "tests/cases/conformance/dynamicImport/0") => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
|
||||
>Zero => { console.log(Zero.foo()); } : (Zero: typeof "tests/cases/conformance/dynamicImport/0") => void
|
||||
>Zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
|
||||
console.log(Zero.foo());
|
||||
>console.log(Zero.foo()) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>Zero.foo() : string
|
||||
>Zero.foo : () => string
|
||||
>Zero : typeof "tests/cases/conformance/dynamicImport/0"
|
||||
>foo : () => string
|
||||
|
||||
}, async err => {
|
||||
>async err => { console.log(err); let one = await import("./1"); console.log(one.backup()); } : (err: any) => Promise<void>
|
||||
>err : any
|
||||
|
||||
console.log(err);
|
||||
>console.log(err) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>err : any
|
||||
|
||||
let one = await import("./1");
|
||||
>one : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>await import("./1") : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>import("./1") : Promise<typeof "tests/cases/conformance/dynamicImport/1">
|
||||
>"./1" : "./1"
|
||||
|
||||
console.log(one.backup());
|
||||
>console.log(one.backup()) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>one.backup() : string
|
||||
>one.backup : () => string
|
||||
>one : typeof "tests/cases/conformance/dynamicImport/1"
|
||||
>backup : () => string
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInScriptContext1.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
var p1 = import("./0");
|
||||
function arguments() { } // this is allow as the file doesn't have implicit "use strict"
|
||||
|
||||
//// [0.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
//// [1.js]
|
||||
var p1 = Promise.resolve().then(function () { return require("./0"); });
|
||||
function arguments() { } // this is allow as the file doesn't have implicit "use strict"
|
||||
@ -0,0 +1,11 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 0, 3))
|
||||
|
||||
function arguments() { } // this is allow as the file doesn't have implicit "use strict"
|
||||
>arguments : Symbol(arguments, Decl(1.ts, 0, 23))
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : () => string
|
||||
>"foo" : "foo"
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
var p1 = import("./0");
|
||||
>p1 : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>import("./0") : Promise<typeof "tests/cases/conformance/dynamicImport/0">
|
||||
>"./0" : "./0"
|
||||
|
||||
function arguments() { } // this is allow as the file doesn't have implicit "use strict"
|
||||
>arguments : () => void
|
||||
|
||||
@ -0,0 +1,12 @@
|
||||
tests/cases/conformance/dynamicImport/1.ts(3,10): error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/0.ts (0 errors) ====
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
==== tests/cases/conformance/dynamicImport/1.ts (1 errors) ====
|
||||
"use strict"
|
||||
var p1 = import("./0");
|
||||
function arguments() { }
|
||||
~~~~~~~~~
|
||||
!!! error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
@ -0,0 +1,19 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInScriptContext2.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
"use strict"
|
||||
var p1 = import("./0");
|
||||
function arguments() { }
|
||||
|
||||
//// [0.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function foo() { return "foo"; }
|
||||
exports.foo = foo;
|
||||
//// [1.js]
|
||||
"use strict";
|
||||
var p1 = Promise.resolve().then(function () { return require("./0"); });
|
||||
function arguments() { }
|
||||
46
tests/baselines/reference/importCallExpressionInSystem1.js
Normal file
46
tests/baselines/reference/importCallExpressionInSystem1.js
Normal file
@ -0,0 +1,46 @@
|
||||
//// [tests/cases/conformance/dynamicImport/importCallExpressionInSystem1.ts] ////
|
||||
|
||||
//// [0.ts]
|
||||
export function foo() { return "foo"; }
|
||||
|
||||
//// [1.ts]
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
|
||||
function foo() {
|
||||
const p2 = import("./0");
|
||||
}
|
||||
|
||||
//// [0.js]
|
||||
System.register([], function (exports_1, context_1) {
|
||||
"use strict";
|
||||
var __moduleName = context_1 && context_1.id;
|
||||
function foo() { return "foo"; }
|
||||
exports_1("foo", foo);
|
||||
return {
|
||||
setters: [],
|
||||
execute: function () {
|
||||
}
|
||||
};
|
||||
});
|
||||
//// [1.js]
|
||||
System.register([], function (exports_1, context_1) {
|
||||
var __moduleName = context_1 && context_1.id;
|
||||
function foo() {
|
||||
const p2 = context_1.import("./0");
|
||||
}
|
||||
var p1;
|
||||
return {
|
||||
setters: [],
|
||||
execute: function () {
|
||||
context_1.import("./0");
|
||||
p1 = context_1.import("./0");
|
||||
p1.then(zero => {
|
||||
return zero.foo();
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
@ -0,0 +1,28 @@
|
||||
=== tests/cases/conformance/dynamicImport/0.ts ===
|
||||
export function foo() { return "foo"; }
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
=== tests/cases/conformance/dynamicImport/1.ts ===
|
||||
import("./0");
|
||||
var p1 = import("./0");
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
|
||||
p1.then(zero => {
|
||||
>p1.then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>p1 : Symbol(p1, Decl(1.ts, 1, 3))
|
||||
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
|
||||
return zero.foo();
|
||||
>zero.foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
>zero : Symbol(zero, Decl(1.ts, 2, 8))
|
||||
>foo : Symbol(foo, Decl(0.ts, 0, 0))
|
||||
|
||||
});
|
||||
|
||||
function foo() {
|
||||
>foo : Symbol(foo, Decl(1.ts, 4, 3))
|
||||
|
||||
const p2 = import("./0");
|
||||
>p2 : Symbol(p2, Decl(1.ts, 7, 9))
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user