diff --git a/effect/packages/package2/fp-ts__core.json b/effect/packages/package2/fp-ts__core.json index ec874bc9c1a..1bc0841a655 100644 --- a/effect/packages/package2/fp-ts__core.json +++ b/effect/packages/package2/fp-ts__core.json @@ -47,5 +47,28 @@ } ] } + ], + "@fp-ts/core/Option": [ + { + "definitionName": "Option", + "definitionKind": "type", + "extensions": [ + { + "kind": "type", + "typeName": "fp-ts/Option" + } + ] + }, + { + "definitionName": "filter", + "definitionKind": "const", + "extensions": [ + { + "kind": "pipeable", + "typeName": "fp-ts/Option", + "name": "filter" + } + ] + } ] } \ No newline at end of file diff --git a/effect/packages/package2/src/external-definitions.ts b/effect/packages/package2/src/external-definitions.ts index 527d05d368c..71e03139088 100644 --- a/effect/packages/package2/src/external-definitions.ts +++ b/effect/packages/package2/src/external-definitions.ts @@ -3,4 +3,4 @@ import { Sync } from '@fp-ts/core/Sync' Async.fromSync(() => console.log("Fluent in fp-ts!")).delay(1) -Sync.of(1).map((n) => n + 1) \ No newline at end of file +Sync.of(1).map((n) => n + 1) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 37b88f02ad5..668f66a836c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -48237,7 +48237,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { if (every(signatures, (sig) => !!sig.declaration && !!sig.declaration.type && isFunctionTypeNode(sig.declaration.type) && sig.declaration.type.parameters.length === 1)) { const tsPlusSignatures = flatMap(signatures, (sig) => { const returnType = getReturnTypeOfSignature(sig); - const returnTypeNode = sig.declaration!.type! as FunctionTypeNode; const returnSignatures = getSignaturesOfType(returnType, SignatureKind.Call); if (signatures.find(isPipeableSelfARestParameter)) { error(pipeable, Diagnostics.The_first_parameter_of_a_pipeable_annotated_function_cannot_be_a_rest_parameter); @@ -48254,9 +48253,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { pipeable.modifiers, pipeable.asteriskToken, pipeable.name, - [...(returnTypeNode.typeParameters ?? []), ...(pipeable.typeParameters ?? [])], - [...returnTypeNode.parameters, ...pipeable.parameters], - returnTypeNode.type, + [...(rsig.declaration?.typeParameters as NodeArray ?? []), ...(sig.declaration?.typeParameters as NodeArray ?? [])], + [...(rsig.declaration?.parameters as NodeArray ?? []), ...(sig.declaration?.parameters as NodeArray ?? [])], + rsig.declaration?.type as TypeNode, undefined ); newDecl.jsDoc = pipeable.jsDoc; @@ -48379,7 +48378,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { isFunctionTypeNode(sig.declaration.type) && sig.declaration.type.parameters.length === 1) ) { - const pipeableWithType = pipeable as VariableDeclarationWithFunctionType if (signatures.find(isPipeableSelfARestParameter)) { error(pipeable, Diagnostics.The_first_parameter_of_a_pipeable_annotated_function_cannot_be_a_rest_parameter); return; @@ -48394,10 +48392,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { newSig.typeParameters = [...(rsig.typeParameters ?? []), ...(sig.typeParameters ?? [])]; newSig.resolvedReturnType = getReturnTypeOfSignature(rsig); newSig.minArgumentCount = newSig.minArgumentCount + 1; - const newDecl = factory.updateFunctionTypeNode( - pipeableWithType.type, - factory.createNodeArray([...(returnFn.typeParameters ?? []), ...(pipeableWithType.type.typeParameters ?? [])]), - factory.createNodeArray([...returnFn.parameters, ...pipeableWithType.type.parameters]), + const newDecl = factory.createFunctionTypeNode( + factory.createNodeArray([...(returnFn.typeParameters ?? []), ...(sig.declaration?.typeParameters as NodeArray ?? [])]), + factory.createNodeArray([...returnFn.parameters, ...(sig.declaration?.parameters as NodeArray ?? [])]), returnFn.type ); newDecl.jsDoc = pipeable.jsDoc; @@ -48877,8 +48874,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } } function cacheTsPlusPipeableVariable(file: SourceFile, declaration: VariableDeclarationWithIdentifier) { - if((declaration.initializer && isFunctionLikeDeclaration(declaration.initializer)) || - (declaration.type && isFunctionTypeNode(declaration.type))) { + if( + (declaration.initializer && isFunctionLikeDeclaration(declaration.initializer)) || + (declaration.type && isFunctionTypeNode(declaration.type)) || + ((declaration.type) && isTypeLiteralNode(declaration.type) && every(declaration.type.members, isCallSignatureDeclaration)) + ) { for (const { target, name, priority } of collectTsPlusPipeableTags(declaration)) { getTsPlusSourceFileCache(target).add(getSourceFileOfNode(declaration)); if (!unresolvedPipeableCache.has(target)) {