Update bun minor+patch updates #77

Open
renovate-bot wants to merge 1 commits from renovate/bun-minor-patch into next
Collaborator

This PR contains the following updates:

Package Change Age Confidence
@effect/language-service ^0.60.0^0.80.0 age confidence
@effect/opentelemetry (source) ^0.59.0^0.61.0 age confidence
@effect/platform (source) ^0.93.0^0.94.0 age confidence
@effect/platform-browser (source) ^0.73.0^0.74.0 age confidence
@effect/platform-bun (source) ^0.86.0^0.87.0 age confidence
@effect/platform-node (source) ^0.103.0^0.104.0 age confidence
@effect/rpc (source) ^0.72.0^0.73.0 age confidence
@opentelemetry/exporter-trace-otlp-http (source) ^0.208.0^0.213.0 age confidence
lucide-react (source) ^0.556.0^0.577.0 age confidence

Release Notes

Effect-TS/language-service (@​effect/language-service)

v0.80.0

Compare Source

Minor Changes
  • #​681 1017a54 Thanks @​mattiamanzati! - Generate a root schema.json for tsconfig.json plugin configuration, add typed Effect Language Service plugin options to that schema, and have effect-language-service setup add or remove the matching $schema entry automatically.

  • #​679 3664197 Thanks @​mattiamanzati! - Add inline --lspconfig support to the effect-language-service diagnostics CLI command so diagnostics runs can override the project plugin configuration without editing tsconfig.json.

v0.79.0

Compare Source

Minor Changes
  • #​671 6b9c378 Thanks @​mattiamanzati! - Add the extendsNativeError diagnostic to warn when classes directly extend the native Error constructor, including common local aliases such as const E = Error.

    This helps steer users toward tagged errors that preserve stronger typing in the Effect failure channel.

  • #​678 0e9c11b Thanks @​mattiamanzati! - Generate the README diagnostics table from the diagnostic registry.

    Each diagnostic now declares:

    • whether it is fixable
    • which Effect versions it supports

    The generated table is checked in CI, and diagnostics tests verify that fixable matches the presence of non-suppression quick fixes.

  • #​676 2f982d6 Thanks @​mattiamanzati! - Add the nodeBuiltinImport diagnostic to warn when importing Node.js built-in modules (fs, path, child_process) that have Effect-native counterparts in @effect/platform.

    This diagnostic covers ES module imports and top-level require() calls, matching both bare and node:-prefixed specifiers as well as subpath variants like fs/promises, path/posix, and path/win32. It defaults to severity off and provides no code fixes.

  • #​673 f9e24df Thanks @​mattiamanzati! - Add plugin options to better control patched tsc behavior.

    ignoreEffectErrorsInTscExitCode allows Effect diagnostics reported as errors to be ignored for exit-code purposes, and skipDisabledOptimiziation keeps disabled diagnostics eligible for comment-based overrides when patch mode is active.

  • #​674 54e8c16 Thanks @​mattiamanzati! - Add the serviceNotAsClass diagnostic to warn when ServiceMap.Service is used as a variable assignment instead of in a class declaration.

    Includes an auto-fix that converts const Config = ServiceMap.Service<Shape>("Config") to class Config extends ServiceMap.Service<Config, Shape>()("Config") {}.

Patch Changes
  • #​675 d1f09c3 Thanks @​mattiamanzati! - Rename the skipDisabledOptimiziation plugin option to skipDisabledOptimization.

    Example:

    {
      "compilerOptions": {
        "plugins": [
          {
            "name": "@&#8203;effect/language-service",
            "skipDisabledOptimization": true
          }
        ]
      }
    }
    

v0.78.0

Compare Source

Minor Changes
  • #​663 0e82d43 Thanks @​mattiamanzati! - Improve effectFnOpportunity inferred span naming for service-layer methods and align examples for Effect v4.

    The inferred span can now include service + method names (for example MyService.log) when the convertible function is a method inside a layer service object for strict supported patterns like:

    • Layer.succeed(Service)(...)
    • Layer.sync(Service)(...)
    • Layer.effect(Service)(Effect.gen(...))
    • Layer.effect(Service, Effect.gen(...))

    Also add Effect v4 diagnostics fixtures for:

    • effectFnOpportunity_inferred.ts
    • effectFnOpportunity_inferredLayer.ts
  • #​669 a010a29 Thanks @​mattiamanzati! - Add a new effectInFailure diagnostic that warns when an Effect computation appears in the failure channel (E) of another Effect.

    The rule traverses Effect-typed expressions, unrolls union members of E, and reports when any member is itself a strict Effect type.

    It prefers innermost matches for nested cases (for example nested Effect.try in catch) to avoid noisy parent reports.

Patch Changes
  • #​666 06b3a6c Thanks @​mattiamanzati! - Fix effectFnOpportunity inferred span naming for Layer.*(this, ...) patterns in class static members.

    When the inferred layer target is this, the diagnostic now uses the nearest enclosing class name (for example MyService) instead of the literal this token.

  • #​665 a95a679 Thanks @​mattiamanzati! - Improve yield-based diagnostics and hover behavior by introducing effectYieldableType in TypeParser and using it in missingReturnYieldStar.

    • In Effect v4, yieldable values are recognized through asEffect() and mapped to Effect A/E/R.
    • In Effect v3, effectYieldableType falls back to standard effectType behavior.
    • missingReturnYieldStar now correctly handles yieldable values such as Option.none().
    • Hover support for yield* was updated to use yieldable parsing paths.
  • #​664 934ef7e Thanks @​mattiamanzati! - Improve missingReturnYieldStar safety by targeting only expression statements with top-level yield* expressions and validating the enclosing Effect.gen scope via findEnclosingScopes.

    This avoids edge cases where nested or wrapped yield* expressions could be matched incorrectly.

  • #​661 0f92686 Thanks @​mattiamanzati! - Update effect dependency to v4.0.0-beta.19 and fix compatibility issues:

    • Fix layerMagic refactor producing any types in Layer channels by replacing Array.partition (which now uses the v4 Filter.Filter API) with a native loop for boolean partition logic
    • Add v4 Layer type detection shortcut using "~effect/Layer" TypeId property, matching the pattern already used for Effect type detection
    • Mark Effect.filterMap as unchanged in the outdated API migration database since it was re-added in v4

v0.77.0

Compare Source

Minor Changes
  • #​655 c875de2 Thanks @​mattiamanzati! - Add outdatedApi diagnostic that warns when using outdated Effect APIs in a project targeting a newer version of Effect.
Patch Changes
  • #​660 99a97a6 Thanks @​mattiamanzati! - Dispose TypeScript language services in tests to prevent resource leaks

    Added languageService.dispose() calls via try/finally patterns to all test files that create language services through createServicesWithMockedVFS(). This ensures proper cleanup of TypeScript compiler resources after each test completes, preventing memory leaks during test runs.

  • #​658 0154667 Thanks @​mattiamanzati! - Fix outdated API diagnostic for Effect v4 compatibility

    • Fixed TaggedError completion to use TaggedErrorClass matching the v4 API
    • Removed Schema.RequestClass examples that no longer exist in v4
    • Updated Effect v4 harness to latest version
  • #​659 2699a80 Thanks @​mattiamanzati! - Add support for Model.Class from effect/unstable/schema in completions and diagnostics.

    The classSelfMismatch diagnostic now detects mismatched Self type parameters in Model.Class declarations, and the autocomplete for Self type in classes now suggests Model.Class when typing after Model..

    import { Model } from "effect/unstable/schema";
    
    // autocomplete triggers after `Model.`
    export class MyDataModel extends Model.Class<MyDataModel>("MyDataModel")({
      id: Schema.String,
    }) {}
    

v0.76.0

Compare Source

Minor Changes
  • #​651 aeab349 Thanks @​mattiamanzati! - Add refactor to convert Effect.Service to Context.Tag with a static Layer property.

    Supports all combinator kinds (effect, scoped, sync, succeed) and dependencies. The refactor replaces the Effect.Service class declaration with a Context.Tag class that has a static layer property using the corresponding Layer combinator.

    Before:

    export class MyService extends Effect.Service<MyService>()("MyService", {
      effect: Effect.gen(function* () {
        return { value: "hello" };
      }),
    }) {}
    

    After:

    export class MyService extends Context.Tag("MyService")<
      MyService,
      { value: string }
    >() {
      static layer = Layer.effect(
        this,
        Effect.gen(function* () {
          return { value: "hello" };
        })
      );
    }
    
  • #​654 2c93eab Thanks @​mattiamanzati! - Migrate internal Effect dependency from v3 to v4. This updates all CLI and core modules to use the Effect v4 API while maintaining full backward compatibility with existing functionality.

v0.75.1

Compare Source

Patch Changes
  • #​647 489e3f0 Thanks @​mattiamanzati! - Expose diagnostic quick fixes as refactoring actions to work around TypeScript's limited quick fix handling in some contexts

  • #​650 6f568cf Thanks @​mattiamanzati! - Fix TypeParser to skip types with generic call signatures. When parsing covariant, contravariant, or invariant types, signatures with type parameters are now correctly rejected instead of being treated as concrete types.

  • #​649 5858fd1 Thanks @​mattiamanzati! - Performance improvements: replace Nano.gen with Nano.fn named functions across diagnostics, refactors, and code generation modules for better performance tracking and reduced runtime overhead. Add conditional debugPerformance flag to avoid unnecessary timing collection when not debugging.

v0.75.0

Compare Source

Minor Changes
  • #​645 a8a7d33 Thanks @​mattiamanzati! - Add ServiceMap.Service class completion for Effect v4, and fix Schema class completions for v4 (TaggedErrorClass, TaggedClass now available, ErrorClass fully-qualified form fixed, RequestClass removed)

v0.74.0

Compare Source

Minor Changes
  • #​641 693e5a5 Thanks @​mattiamanzati! - Added Effect v4 support for diagnostics, refactors, and piping features.

    Diagnostics:

    • multipleEffectProvide: Warns when multiple Effect.provide calls are chained, suggesting consolidation
    • strictEffectProvide: Warns when using Effect.provide with Layer outside of application entry points
    • missingLayerContext: Detects missing Layer context requirements
    • deterministicKeys: Extended to support ServiceMap.Service patterns
    • leakingRequirements: Extended to detect leaking requirements in ServiceMap services
    • schemaSyncInEffect: Updated with v4-specific method mappings (e.g., decodeSync -> decodeEffect)

    Refactors:

    • layerMagic: Automatically compose and build layers based on service dependencies
    • structuralTypeToSchema: Convert TypeScript interfaces and type aliases to Effect Schema classes
    • makeSchemaOpaque: Enhanced for v4 with support for Codec, DecodingServices, and EncodingServices types
    • typeToEffectSchema: Enhanced to support Effect v4 schema patterns

    Piping:

    • Added pipe transformation support for Effect v4 including Effect.fn, nested pipes, and function call conversions
Patch Changes
  • #​643 68f6d12 Thanks @​mattiamanzati! - Disable schemaUnionOfLiterals diagnostic for Effect v4, as Schema.Union of multiple Schema.Literal calls is no longer applicable in v4.

v0.73.1

Compare Source

Patch Changes
  • #​639 ff72045 Thanks @​mattiamanzati! - Add wildcard (*) support for @effect-diagnostics comment directives. You can now use * as a rule name to apply a severity override to all diagnostics at once, e.g. @effect-diagnostics *:off disables all Effect diagnostics from that point on. Rule-specific overrides still take precedence over wildcard overrides.

v0.73.0

Compare Source

Minor Changes
  • #​637 616c2cc Thanks @​mattiamanzati! - Add Effect v4 completions support

    • Detect installed Effect version (v3 or v4) and conditionally enable version-specific completions
    • Add Schema.ErrorClass and Schema.RequestClass completions for Effect v4
    • Disable v3-only completions (Effect.Service, Effect.Tag, Schema.TaggedError, Schema.TaggedClass, Schema.TaggedRequest, Context.Tag self, Rpc.make classes, Schema.brand, Model.Class) when Effect v4 is detected
    • Support lowercase taggedEnum in addition to TaggedEnum for v4 API compatibility

v0.72.1

Compare Source

Patch Changes
  • #​635 b16fd37 Thanks @​mattiamanzati! - Fix effectGenToFn refactor to convert Effect<A, E, R> return types to Effect.fn.Return<A, E, R>

    Before this fix, the "Convert to fn" refactor would keep the original Effect.Effect<A, E, R> return type, producing code that doesn't compile. Now it correctly transforms the return type:

    // Before refactor
    const someFunction = (value: string): Effect.Effect<number, boolean> =>
      Effect.gen(function* () {
        /* ... */
      });
    
    // After refactor (fixed)
    const someFunction = Effect.fn("someFunction")(function* (
      value: string
    ): Effect.fn.Return<number, boolean, never> {
      /* ... */
    });
    
  • #​630 689a012 Thanks @​mattiamanzati! - Restructure test harness setup by moving shared test utilities and updating package dependencies

v0.72.0

Compare Source

Minor Changes

v0.71.2

Compare Source

Patch Changes
  • #​625 422087d Thanks @​mattiamanzati! - Fix CLI patching to target emitFilesAndReportErrors function instead of emitFilesAndReportErrorsAndGetExitStatus, updating the injection approach to replace the diagnostics property in the return statement's object literal.

v0.71.1

Compare Source

Patch Changes
  • #​624 d279457 Thanks @​mattiamanzati! - Add ignoreEffectSuggestionsInTscExitCode option (default: true) to control whether Effect-related suggestions affect the TSC exit code. When enabled, suggestions won't cause tsc to return a non-zero exit code.

  • #​622 5eab20a Thanks @​mattiamanzati! - Add ignoreEffectWarningsInTscExitCode option to allow Effect-related warnings to not affect the TSC exit code. When enabled, tsc will compile successfully even if Effect warnings are emitted. This is useful for CI/CD pipelines where Effect diagnostics should be informational rather than blocking.

v0.71.0

Compare Source

Minor Changes
  • #​619 f171350 Thanks @​mattiamanzati! - Add effectSucceedWithVoid diagnostic to suggest using Effect.void instead of Effect.succeed(undefined) or Effect.succeed(void 0).

    The diagnostic detects calls to Effect.succeed where the argument is exactly undefined or void 0 (including parenthesized variants) and suggests replacing them with the more idiomatic Effect.void. A quick fix is provided to automatically apply the replacement.

    Before:

    Effect.succeed(undefined);
    Effect.succeed(void 0);
    

    After:

    Effect.void;
    
Patch Changes
  • #​621 74ef937 Thanks @​mattiamanzati! - Improve diagnostic messages for globalErrorInEffectFailure and globalErrorInEffectCatch to be more concise and actionable.

    Before:

    The global Error type is used in an Effect failure channel. It's not recommended to use the global Error type in Effect failures as they can get merged together. Instead, use tagged errors or custom errors with a discriminator property to get properly type-checked errors.
    

    After:

    Global 'Error' loses type safety as untagged errors merge together in the Effect failure channel. Consider using a tagged error and optionally wrapping the original in a 'cause' property.
    

v0.70.0

Compare Source

Minor Changes
  • #​618 ed689f8 Thanks @​mattiamanzati! - Improve globalErrorInEffectFailure diagnostic to detect global Error type in any Effect failure channel.

    The diagnostic now works by finding new Error() expressions and checking if they end up in an Effect's failure channel, rather than only checking Effect.fail calls. This means it will now detect global Error usage in:

    • Effect.fail(new Error(...))
    • Effect.gen functions that fail with global Error
    • Effect.mapError converting to global Error
    • Effect.flatMap chains that include global Error

    The diagnostic now reports at the new Error() location for better precision.

Patch Changes
  • #​616 b32da44 Thanks @​mattiamanzati! - Improve missedPipeableOpportunity diagnostic message to show the suggested subject for .pipe(...).

    Before:

    Nested function calls can be converted to pipeable style for better readability.
    

    After:

    Nested function calls can be converted to pipeable style for better readability; consider using addOne(5).pipe(...) instead.
    

v0.69.2

Compare Source

Patch Changes
  • #​612 2b49181 Thanks @​mattiamanzati! - Improve effectFnIife diagnostic message to suggest Effect.withSpan with the trace name when available

    When Effect.fn("traceName") is used as an IIFE, the diagnostic now suggests using Effect.gen with Effect.withSpan("traceName") piped at the end to maintain tracing spans. For Effect.fnUntraced, it simply suggests using Effect.gen without the span suggestion.

  • #​615 ae4f054 Thanks @​mattiamanzati! - Improve effectFnOpportunity diagnostic with more specific messages and configurable fixes

    • Add new effectFn configuration option to control which code fix variants are offered: "untraced", "span", "inferred-span", "no-span" (defaults to ["span"])
    • Diagnostic message now shows the exact expected signature for the rewrite
    • Distinguish between explicit trace from Effect.withSpan vs inferred trace from function name
    • Skip functions with return type annotations to avoid issues with recursive functions

    Before:

    This function could benefit from Effect.fn's automatic tracing...
    

    After:

    Can be rewritten as a reusable function: Effect.fn("myFunction")(function*() { ... })
    

v0.69.1

Compare Source

Patch Changes
  • #​610 990ccbc Thanks @​mattiamanzati! - Improve effectFnOpportunity diagnostic message to mention that quickfixes are available in the editor or via the CLI quickfixes command.

v0.69.0

Compare Source

Minor Changes
  • #​608 bc7da1e Thanks @​mattiamanzati! - Add effectFnIife diagnostic to warn when Effect.fn or Effect.fnUntraced is used as an IIFE (Immediately Invoked Function Expression).

    Effect.fn is designed to create reusable functions that can take arguments and provide tracing. When used as an IIFE, Effect.gen is more appropriate.

    Example:

    // Before (triggers warning)
    const result = Effect.fn("test")(function* () {
      yield* Effect.succeed(1);
    })();
    
    // After (using Effect.gen)
    const result = Effect.gen(function* () {
      yield* Effect.succeed(1);
    });
    

    A quick fix is provided to automatically convert Effect.fn IIFEs to Effect.gen.

v0.68.0

Compare Source

Minor Changes
  • #​603 d747210 Thanks @​mattiamanzati! - Added instanceOfSchema diagnostic that suggests using Schema.is instead of instanceof for Effect Schema types.

    Example:

    import { Schema } from "effect"
    
    const MySchema = Schema.Struct({ name: Schema.String })
    
    // Before - triggers diagnostic
    if (value instanceof MySchema) { ... }
    
    // After - using Schema.is
    if (Schema.is(MySchema)(value)) { ... }
    

    The diagnostic is disabled by default and can be enabled with instanceOfSchema:suggestion or instanceOfSchema:warning.

Patch Changes

v0.67.0

Compare Source

Minor Changes
  • #​599 4c9f5c7 Thanks @​mattiamanzati! - Add quickfixes CLI command that shows diagnostics with available quick fixes and their proposed code changes.

    Example usage:

    # Check a specific file
    effect-language-service quickfixes --file ./src/index.ts
    
    # Check an entire project
    effect-language-service quickfixes --project ./tsconfig.json
    

    The command displays each diagnostic along with the available code fixes and a diff preview of the proposed changes, making it easy to see what automatic fixes are available before applying them.

Patch Changes
  • #​601 c0a6da3 Thanks @​mattiamanzati! - Reduce over-suggestion of effectFnOpportunity diagnostic for regular functions.

    The diagnostic now only suggests Effect.fn for regular functions (not using Effect.gen) when:

    • The function has a block body (not a concise arrow expression)
    • The function body has more than 5 statements

    Functions using Effect.gen are still always suggested regardless of body size.

v0.66.1

Compare Source

Patch Changes
  • #​597 3833a10 Thanks @​mattiamanzati! - Improved effectFnOpportunity diagnostic message to mention that Effect.fn accepts piped transformations as additional arguments when pipe transformations are detected.

    When a function has .pipe() calls that would be absorbed by Effect.fn, the message now includes: "Effect.fn also accepts the piped transformations as additional arguments."

v0.65.0

Compare Source

Minor Changes
  • #​581 4569328 Thanks @​mattiamanzati! - Add effectFnOpportunity diagnostic that suggests converting functions returning Effect.gen to Effect.fn for better tracing and concise syntax.

    The diagnostic triggers on:

    • Arrow functions returning Effect.gen(...)
    • Function expressions returning Effect.gen(...)
    • Function declarations returning Effect.gen(...)
    • Functions with Effect.gen(...).pipe(...) patterns

    It provides two code fixes:

    • Convert to Effect.fn (traced) - includes the function name as the span name
    • Convert to Effect.fnUntraced - without tracing

    The diagnostic skips:

    • Generator functions (can't be converted)
    • Named function expressions (typically used for recursion)
    • Functions with multiple call signatures (overloads)

    When the original function has a return type annotation, the converted function will use Effect.fn.Return<A, E, R> as the return type.

    Example:

    // Before
    export const myFunction = (a: number) =>
      Effect.gen(function* () {
        yield* Effect.succeed(1);
        return a;
      });
    
    // After (with Effect.fn)
    export const myFunction = Effect.fn("myFunction")(function* (a: number) {
      yield* Effect.succeed(1);
      return a;
    });
    
    // Before (with pipe)
    export const withPipe = () =>
      Effect.gen(function* () {
        return yield* Effect.succeed(1);
      }).pipe(Effect.withSpan("withPipe"));
    
    // After (with Effect.fn)
    export const withPipe = Effect.fn("withPipe")(function* () {
      return yield* Effect.succeed(1);
    }, Effect.withSpan("withPipe"));
    
  • #​575 00aeed0 Thanks @​mattiamanzati! - Add effectMapVoid diagnostic that suggests using Effect.asVoid instead of Effect.map(() => void 0), Effect.map(() => undefined), or Effect.map(() => {}).

    Also adds two new TypeParser utilities:

    • lazyExpression: matches zero-argument arrow functions or function expressions that return a single expression
    • emptyFunction: matches arrow functions or function expressions with an empty block body

    And adds isVoidExpression utility to TypeScriptUtils for detecting void 0 or undefined expressions.

    Example:

    // Before
    Effect.succeed(1).pipe(Effect.map(() => void 0));
    Effect.succeed(1).pipe(Effect.map(() => undefined));
    Effect.succeed(1).pipe(Effect.map(() => {}));
    
    // After (suggested fix)
    Effect.succeed(1).pipe(Effect.asVoid);
    
  • #​582 94d4a6b Thanks @​mattiamanzati! - Added layerinfo CLI command that provides detailed information about a specific exported layer.

    Features:

    • Shows layer type, location, and description
    • Lists services the layer provides and requires
    • Suggests optimal layer composition order using Layer.provide, Layer.provideMerge, and Layer.merge

    Example usage:

    effect-language-service layerinfo --file ./src/layers/app.ts --name AppLive
    

    Also added a tip to both overview and layerinfo commands about using Layer.mergeAll(...) to get suggested composition order.

  • #​583 b0aa78f Thanks @​mattiamanzati! - Add redundantSchemaTagIdentifier diagnostic that suggests removing redundant identifier arguments when they equal the tag value in Schema.TaggedClass, Schema.TaggedError, or Schema.TaggedRequest.

    Before:

    class MyError extends Schema.TaggedError<MyError>("MyError")("MyError", {
      message: Schema.String,
    }) {}
    

    After applying the fix:

    class MyError extends Schema.TaggedError<MyError>()("MyError", {
      message: Schema.String,
    }) {}
    

    Also updates the completions to not include the redundant identifier when autocompleting Schema.TaggedClass, Schema.TaggedError, and Schema.TaggedRequest.

  • #​573 6715f91 Thanks @​mattiamanzati! - Rename reportSuggestionsAsWarningsInTsc option to includeSuggestionsInTsc and change default to true.

    This option controls whether diagnostics with "suggestion" severity are included in TSC output when using the effect-language-service patch feature. When enabled, suggestions are reported as messages in TSC output, which is useful for LLM-based development tools to see all suggestions.

    Breaking change: The option has been renamed and the default behavior has changed:

    • Old: reportSuggestionsAsWarningsInTsc: false (suggestions not included by default)
    • New: includeSuggestionsInTsc: true (suggestions included by default)

    To restore the previous behavior, set "includeSuggestionsInTsc": false in your tsconfig.json plugin configuration.

  • #​586 e225b5f Thanks @​mattiamanzati! - Add markdown documentation support to setup command

    The setup command now automatically manages Effect Language Service documentation in AGENTS.md and CLAUDE.md files:

    • When installing: Adds or updates the Effect Language Service section with markers
    • When uninstalling: Removes the section if present
    • Case-insensitive file detection (supports both lowercase and uppercase filenames)
    • Skips symlinked files to avoid modifying linked content
    • Shows proper diff view for markdown file changes

    Example section added to markdown files:

    <!-- effect-language-service:start -->
    
    ## Effect Language Service
    
    The Effect Language Service comes in with a useful CLI that can help you with commands to get a better understanding your Effect Layers and Services, and to help you compose them correctly.
    
    <!-- effect-language-service:end -->
    
Patch Changes
  • #​580 a45606b Thanks @​mattiamanzati! - Add Effect.fn and Effect.fnUntraced support to the piping flows parser.

    The piping flows parser now recognizes pipe transformations passed as additional arguments to Effect.fn, Effect.fn("traced"), and Effect.fnUntraced. This enables diagnostics like catchAllToMapError, catchUnfailableEffect, and multipleEffectProvide to work with these patterns.

    Example:

    // This will now trigger the catchAllToMapError diagnostic
    const example = Effect.fn(
      function* () {
        return yield* Effect.fail("error");
      },
      Effect.catchAll((cause) => Effect.fail(new MyError(cause)))
    );
    
  • #​587 7316859 Thanks @​mattiamanzati! - Mark deprecated TypeScript Signature methods and migrate to property accessors

    Added @deprecated annotations to TypeScript Signature interface methods (getParameters, getTypeParameters, getDeclaration, getReturnType, getTypeParameterAtPosition) with guidance to use their modern property alternatives. Updated codebase usage of getParameters() to use .parameters property instead.

  • #​584 ed12861 Thanks @​mattiamanzati! - Fix TypeError in setup command when updating existing diagnosticSeverity configuration

    The setup command was throwing TypeError: Cannot read properties of undefined (reading 'text') when trying to update the diagnosticSeverity option of an existing @effect/language-service plugin configuration in tsconfig.json.

    This occurred because TypeScript's ChangeTracker formatter needed to compute indentation by traversing the AST tree, which failed when replacing a PropertyAssignment node inside a nested list context.

    The fix replaces just the initializer value (ObjectLiteralExpression) instead of the entire PropertyAssignment, avoiding the problematic list indentation calculation.

  • #​585 7ebe5db Thanks @​mattiamanzati! - Enhanced layerinfo CLI command with output type selection for layer composition.

    New Features:

    • Added --outputs option to select which output types to include in the suggested composition (e.g., --outputs 1,2,3)
    • Shows all available output types from the layer graph with indexed checkboxes
    • By default, only types that are in the layer's declared ROut are selected
    • Composition code now includes export const <name> = ... prefix for easy copy-paste

    Example output:

    Suggested Composition:
      Not sure you got your composition right? Just write all layers inside a Layer.mergeAll(...)
      then run this command again and use --outputs to select which outputs to include in composition.
      Example: --outputs 1,2,3
    
      [ ] 1. Cache
      [x] 2. UserRepository
    
      export const simplePipeIn = UserRepository.Default.pipe(
        Layer.provide(Cache.Default)
      )
    

    This allows users to see all available outputs from a layer composition and choose which ones to include in the suggested composition order.

  • #​577 0ed50c3 Thanks @​mattiamanzati! - Refactor catchAllToMapError diagnostic to use the piping flows parser for detecting Effect.catchAll calls.

    This change also:

    • Makes outType optional in ParsedPipingFlowSubject to handle cases where type information is unavailable
    • Sorts piping flows by position for consistent ordering
  • #​578 cab6ce8 Thanks @​mattiamanzati! - refactor: use piping flows parser in catchUnfailableEffect diagnostic

  • #​579 2a82522 Thanks @​mattiamanzati! - refactor: use piping flows parser in multipleEffectProvide diagnostic

  • #​570 0db6e28 Thanks @​mattiamanzati! - Refactor CLI overview command to extract symbol collection logic into reusable utility

    • Extract collectSourceFileExportedSymbols into src/cli/utils/ExportedSymbols.ts for reuse across CLI commands
    • Add --max-symbol-depth option to overview command (default: 3) to control how deep to traverse nested symbol properties
    • Add tests for the overview command with snapshot testing
  • #​574 9d0695e Thanks @​mattiamanzati! - Remove deprecated ts-patch documentation from README. The Effect LSP CLI Patch is now the only recommended approach for getting diagnostics at compile time.

  • #​576 5017d75 Thanks @​mattiamanzati! - Add piping flows parser for caching piping flow analysis per source file.

    This internal improvement introduces a pipingFlows function in TypeParser that analyzes and caches all piping flows (both pipe() calls and .pipe() method chains) in a source file. The parser:

    • Identifies piping flows including nested pipes and mixed call styles (e.g., Effect.map(effect, fn).pipe(...))
    • Tracks the subject, transformations, and intermediate types for each flow
    • Enables more efficient diagnostic implementations by reusing cached analysis

    The missedPipeableOpportunity diagnostic has been refactored to use this new parser, improving performance when analyzing files with multiple piping patterns.

v0.64.1

Compare Source

Patch Changes
  • #​568 477271d Thanks @​mattiamanzati! - Fix auto-import with namespace import packages generating malformed code when the identifier is at the beginning of the file.

    When using namespaceImportPackages configuration and auto-completing an export like isAnyKeyword from effect/SchemaAST, the code was incorrectly generated as:

    SchemaAST.import * as SchemaAST from "effect/SchemaAST";
    

    Instead of the expected:

    import * as SchemaAST from "effect/SchemaAST";
    
    SchemaAST.isAnyKeyword;
    

    The fix ensures the import statement is added before the namespace prefix when both changes target position 0.

v0.64.0

Compare Source

Minor Changes
  • #​567 dcb3fe5 Thanks @​mattiamanzati! - Added new diagnostic catchAllToMapError that suggests using Effect.mapError instead of Effect.catchAll + Effect.fail when the callback only wraps the error.

    Before:

    Effect.catchAll((cause) => Effect.fail(new MyError(cause)));
    

    After:

    Effect.mapError((cause) => new MyError(cause));
    

    The diagnostic includes a quick fix that automatically transforms the code.

  • #​555 0424000 Thanks @​mattiamanzati! - Add globalErrorInEffectCatch diagnostic to detect global Error types in catch callbacks

    This new diagnostic warns when catch callbacks in Effect.tryPromise, Effect.try, Effect.tryMap, or Effect.tryMapPromise return the global Error type instead of typed errors.

    Using the global Error type in Effect failures is not recommended as they can get merged together, making it harder to distinguish between different error cases. Instead, it's better to use tagged errors (like Data.TaggedError) or custom errors with discriminator properties to enable proper type checking and error handling.

    Example of code that triggers the diagnostic:

    Effect.tryPromise({
      try: () => fetch("http://example.com"),
      catch: () => new Error("Request failed"), // ⚠️ Warning: returns global Error type
    });
    

    Recommended approach:

    class FetchError extends Data.TaggedError("FetchError")<{
      cause: unknown;
    }> {}
    
    Effect.tryPromise({
      try: () => fetch("http://example.com"),
      catch: (e) => new FetchError({ cause: e }), // ✅ Uses typed error
    });
    

    This diagnostic also improves the clarity message for the leakingRequirements diagnostic by adding additional guidance on how services should be collected in the layer creation body.

  • #​558 cc5feb1 Thanks @​mattiamanzati! - Add layerMergeAllWithDependencies diagnostic to detect interdependencies in Layer.mergeAll calls

    This new diagnostic warns when Layer.mergeAll is called with layers that have interdependencies, where one layer provides a service that another layer in the same call requires.

    Layer.mergeAll creates layers in parallel, so dependencies between layers will not be satisfied. This can lead to runtime errors when trying to use the merged layer.

    Example of code that triggers the diagnostic:

    export class DbConnection extends Effect.Service<DbConnection>()(
      "DbConnection",
      {
        succeed: {},
      }
    ) {}
    export class FileSystem extends Effect.Service<FileSystem>()("FileSystem", {
      succeed: {},
    }) {}
    export class Cache extends Effect.Service<Cache>()("Cache", {
      effect: Effect.as(FileSystem, {}), // Cache requires FileSystem
    }) {}
    
    // ⚠️ Warning on FileSystem.Default
    const layers = Layer.mergeAll(
      DbConnection.Default,
      FileSystem.Default, // This provides FileSystem
      Cache.Default // This requires FileSystem
    );
    

    Recommended approach:

    // Provide FileSystem separately before merging
    const layers = Layer.mergeAll(DbConnection.Default, Cache.Default).pipe(
      Layer.provideMerge(FileSystem.Default)
    );
    

    The diagnostic correctly handles pass-through layers (layers that both provide and require the same type) and only reports on layers that actually provide dependencies needed by other layers in the same mergeAll call.

  • #​557 83ce411 Thanks @​mattiamanzati! - Add missingLayerContext diagnostic to detect missing service requirements in Layer definitions

    This new diagnostic provides better error readability when you're missing service requirements in your Layer type definitions. It works similarly to the existing missingEffectContext diagnostic but specifically checks the RIn (requirements input) parameter of Layer types.

    Example of code that triggers the diagnostic:

    import * as Effect from "effect/Effect";
    import * as Layer from "effect/Layer";
    
    class ServiceA extends Effect.Service<ServiceA>()("ServiceA", {
      succeed: { a: 1 },
    }) {}
    
    class ServiceB extends Effect.Service<ServiceB>()("ServiceB", {
      succeed: { a: 2 },
    }) {}
    
    declare const layerWithServices: Layer.Layer<ServiceA, never, ServiceB>;
    
    function testFn(layer: Layer.Layer<ServiceA>) {
      return layer;
    }
    
    // ⚠️ Error: Missing 'ServiceB' in the expected Layer context.
    testFn(layerWithServices);
    

    The diagnostic helps catch type mismatches early by clearly indicating which service requirements are missing when passing layers between functions or composing layers together.

  • #​562 57d5af2 Thanks @​mattiamanzati! - Add overview CLI command that provides an overview of Effect-related exports in a project.

    The command analyzes TypeScript files and reports all exported yieldable errors, services (Context.Tag, Effect.Tag, Effect.Service), and layers with their types, file locations, and JSDoc descriptions. A progress spinner shows real-time file processing status.

    Usage:

    effect-language-service overview --file path/to/file.ts
    effect-language-service overview --project tsconfig.json
    

    Example output:

    ✔ Processed 3 file(s)
    Overview for 3 file(s).
    
    Yieldable Errors (1)
      NotFoundError
        ./src/errors.ts:5:1
        NotFoundError
    
    Services (2)
      DbConnection
        ./src/services/db.ts:6:1
        Manages database connections
    
    Layers (1)
      AppLive
        ./src/layers/app.ts:39:14
        Layer<Cache | UserRepository, never, never>
    
Patch Changes
  • #​561 c3b3bd3 Thanks @​mattiamanzati! - Add descriptions to CLI commands using Command.withDescription for improved help output when using --help flag.

  • #​565 2274aef Thanks @​mattiamanzati! - Fix unnecessaryPipe diagnostic and refactor not working with namespace imports from effect/Function (e.g., Function.pipe() or Fn.pipe())

  • #​560 75a480e Thanks @​mattiamanzati! - Improve diagnostic message for unsupportedServiceAccessors when used with Effect.Tag

    When the unsupportedServiceAccessors diagnostic is triggered on an Effect.Tag class (which doesn't allow disabling accessors), the message now includes a helpful suggestion to use Context.Tag instead:

    export class MyService extends Effect.Tag("MyService")<
      MyService,
      {
        method: <A>(value: A) => Effect.Effect<A>;
      }
    >() {}
    // Diagnostic: Even if accessors are enabled, accessors for 'method' won't be available
    // because the signature have generic type parameters or multiple call signatures.
    // Effect.Tag does not allow to disable accessors, so you may want to use Context.Tag instead.
    
  • #​559 4c1f809 Thanks @​mattiamanzati! - Improve Layer Magic refactor ordering by considering both provided and required service counts

    The Layer Magic refactor now uses a combined ordering heuristic that considers both:

    1. The number of services a layer provides
    2. The number of services a layer requires

    This results in more optimal layer composition order, especially in complex dependency graphs where layers have varying numbers of dependencies.

  • #​566 036c491 Thanks @​mattiamanzati! - Simplify diagnostic messages for global Error type usage

    The diagnostic messages for globalErrorInEffectCatch and globalErrorInEffectFailure now use the more generic term "tagged errors" instead of "tagged errors (Data.TaggedError)" to provide cleaner, more concise guidance.

v0.63.2

Compare Source

Patch Changes
  • #​553 e64e3df Thanks @​mattiamanzati! - fix: ensure correct path resolution in CLI setup

    • Use process.cwd() explicitly in path.resolve() for consistent behavior
    • Resolve the selected tsconfig path to an absolute path before validation
    • Simplify error handling by using direct yield* for TsConfigNotFoundError

v0.63.1

Compare Source

Patch Changes
  • #​551 9b3d807 Thanks @​mattiamanzati! - fix: resolve TypeScript from project's working directory

    The CLI now attempts to resolve TypeScript from the current working directory first before falling back to the package's bundled version. This ensures the CLI uses the same TypeScript version as the project being analyzed.

v0.63.0

Compare Source

Minor Changes
  • #​548 ef8c2de Thanks @​mattiamanzati! - Add globalErrorInEffectFailure diagnostic

    This diagnostic warns when Effect.fail is called with the global Error type. Using the global Error type in Effect failures is not recommended as they can get merged together, making it harder to distinguish between different error types.

    Instead, the diagnostic recommends using:

    • Tagged errors with Data.TaggedError
    • Custom error classes with a discriminator property (like _tag)

    Example:

    // This will trigger a warning
    Effect.fail(new Error("global error"));
    
    // These are recommended alternatives
    Effect.fail(new CustomError()); // where CustomError extends Data.TaggedError
    Effect.fail(new MyError()); // where MyError has a _tag property
    
  • #​545 c590b5a Thanks @​mattiamanzati! - Add effect-language-service setup CLI command

    This new command provides an interactive wizard to guide users through the complete installation and configuration of the Effect Language Service. The setup command:

    • Analyzes your repository structure (package.json, tsconfig files)
    • Guides you through adding the package to devDependencies
    • Configures the TypeScript plugin in your tsconfig.json
    • Allows customizing diagnostic severity levels
    • Optionally adds prepare script for automatic patching
    • Optionally configures VS Code settings for workspace TypeScript usage
    • Shows a review of all changes before applying them

    Example usage:

    effect-language-service setup
    

    The wizard will walk you through each step and show you exactly what changes will be made before applying them.

  • #​550 4912ee4 Thanks @​mattiamanzati! - Add support for @effect/sql's Model.Class in completions and diagnostics

    • Added effectSqlModelSelfInClasses completion: Auto-completes the Self type parameter when extending Model.Class from @effect/sql
    • Extended classSelfMismatch diagnostic: Now detects when the Self type parameter in Model.Class<Self> doesn't match the actual class name

    Example:

    import { Model } from "@&#8203;effect/sql";
    import * as Schema from "effect/Schema";
    
    // Completion triggers after "Model." to generate the full class boilerplate
    export class User extends Model.Class<User>("User")({
      id: Schema.String,
    }) {}
    
    // Diagnostic warns when Self type parameter doesn't match class name
    export class User extends Model.Class<WrongName>("User")({
      //                                    ^^^^^^^^^ Self type should be "User"
      id: Schema.String,
    }) {}
    
Patch Changes
  • #​547 9058a37 Thanks @​mattiamanzati! - refactor: simplify unnecessaryFailYieldableError diagnostic implementation

    Changed the implementation to check if a type extends Cause.YieldableError on-demand rather than fetching all yieldable error types upfront.

  • #​549 039f4b2 Thanks @​mattiamanzati! - Add getTypeAtLocation utility to TypeCheckerUtils

    This refactoring adds a new getTypeAtLocation function to TypeCheckerUtils that safely retrieves types while filtering out JSX-specific nodes (JSX elements, opening/closing tags, and JSX attributes) that could cause issues when calling typeChecker.getTypeAtLocation.

    The utility is now used across multiple diagnostics and features, reducing code duplication and ensuring consistent handling of edge cases:

    • anyUnknownInErrorContext
    • catchUnfailableEffect
    • floatingEffect
    • globalErrorInEffectFailure
    • leakingRequirements
    • missedPipeableOpportunity
    • missingEffectServiceDependency
    • missingReturnYieldStar
    • multipleEffectProvide
    • nonObjectEffectServiceType
    • overriddenSchemaConstructor
    • returnEffectInGen
    • scopeInLayerEffect
    • strictBooleanExpressions
    • strictEffectProvide
    • unnecessaryFailYieldableError
    • And other features like quick info, goto definition, and refactors

v0.62.5

Compare Source

Patch Changes
  • #​543 0b13f3c Thanks @​mattiamanzati! - Fix unwanted autocompletions inside import declarations

    Previously, Effect., Option., and Either.__ completions were incorrectly suggested inside import statements. This has been fixed by detecting when the completion is requested inside an import declaration and preventing these completions from appearing.

    Closes #​541

v0.62.4

Compare Source

Patch Changes
  • #​539 4cc88d2 Thanks @​mattiamanzati! - Improve layerMagic refactor to prioritize layers with more provided services

    The layerMagic refactor now uses a heuristic that prioritizes nodes with more provided services when generating layer composition code. This ensures that telemetry and tracing layers (which typically provide fewer services) are positioned as late as possible in the dependency graph, resulting in more intuitive and correct layer ordering.

    Example: When composing layers for services that depend on HttpClient with telemetry, the refactor now correctly places the telemetry layer (which provides fewer services) later in the composition chain.

v0.62.3

Compare Source

Patch Changes
  • #​537 e31c03b Thanks @​mattiamanzati! - Fix counter increment timing in structural type to schema refactor to ensure proper naming of conflicting schemas (e.g., User_1 instead of User_0 for the first conflict)

v0.62.2

Compare Source

Patch Changes
  • #​535 361fc1e Thanks @​mattiamanzati! - Fix duplicate schema names in "Refactor to Schema (Recursive Structural)" code generation.

    When the refactor encountered types with conflicting names, it was generating a unique suffix but not properly tracking the usage count, causing duplicate schema identifiers with different contents to be generated.

    This fix ensures that when a name conflict is detected and a unique suffix is added (e.g., Tax, Tax_1, Tax_2), the usage counter is properly incremented to prevent duplicate identifiers in the generated code.

    Fixes #​534

v0.62.1

Compare Source

Patch Changes
  • #​532 8f189aa Thanks @​mattiamanzati! - Fix handling of read-only arrays in "Refactor to Schema (Recursive Structural)" code generation.

    The refactor now correctly distinguishes between mutable arrays (Array<T>) and read-only arrays (ReadonlyArray<T> or readonly T[]):

    • Array<T> is now converted to Schema.mutable(Schema.Array(...)) to preserve mutability
    • ReadonlyArray<T> and readonly T[] are converted to Schema.Array(...) (read-only by default)

    This fixes compatibility issues with external libraries (like Stripe, BetterAuth) that expect mutable arrays in their API parameters.

    Fixes #​531

v0.62.0

Compare Source

Minor Changes
  • #​528 7dc14cf Thanks @​mattiamanzati! - Add typeToSchema codegen

    This adds a new // @&#8203;effect-codegens typeToSchema codegen that automatically generates Effect Schema classes from TypeScript types. Given a type alias with object members representing schemas to generate (e.g., type ToGenerate = { UserSchema: User, TodoSchema: Todo }), the codegen will create the corresponding Schema class definitions.

    The generated schemas:

    • Automatically detect and reuse existing schema definitions in the file
    • Support both type aliases and interfaces
    • Include outdated detection to warn when the source type changes
    • Work with the outdatedEffectCodegen diagnostic to provide automatic fix actions

    Example usage:

    type User = {
      id: number;
      name: string;
    };
    
    // @&#8203;effect-codegens typeToSchema
    export type ToGenerate = {
      UserSchema: User;
    };
    
    // Generated by the codegen:
    export class UserSchema extends Schema.Class<UserSchema>("UserSchema")({
      id: Schema.Number,
      name: Schema.String,
    }) {}
    
Patch Changes
  • #​530 5ecdc62 Thanks @​mattiamanzati! - Fix Refactor to Schema (Recursive Structural) to support exactOptionalPropertyTypes

    When exactOptionalPropertyTypes is enabled in tsconfig, optional properties with types like string | undefined are not assignable to types defined as prop?: string. This fix generates Schema.optionalWith(Schema.String, { exact: true }) instead of Schema.optional(Schema.Union(Schema.Undefined, Schema.String)) to maintain type compatibility with external libraries that don't always include undefined in their optional property types.

    Example:

    // With exactOptionalPropertyTypes enabled
    type User = {
      name?: string; // External library type (e.g., Stripe API)
    };
    
    // Generated schema now uses:
    Schema.optionalWith(Schema.String, { exact: true });
    
    // Instead of:
    Schema.optional(Schema.Union(Schema.Undefined, Schema.String));
    

    This ensures the generated schema maintains proper type compatibility with external libraries when using strict TypeScript configurations.

v0.61.0

Compare Source

Minor Changes
  • #​525 e2dbbad Thanks @​mattiamanzati! - Add Structural Type to Schema refactor

    Adds a new "Structural Type to Schema" refactor that converts TypeScript interfaces and type aliases to Effect Schema classes. This refactor analyzes the structure of types and generates appropriate Schema definitions, with intelligent detection and reuse of existing schemas.

    Example:

    // Before
    export interface User {
      id: number;
      name: string;
    }
    
    // After (using the refactor)
    export class User extends Schema.Class<User>("User")({
      id: Schema.Number,
      name: Schema.String,
    }) {}
    

    The refactor supports:

    • All primitive types and common TypeScript constructs
    • Automatic reuse of existing Schema definitions for referenced types
    • Optional properties, unions, intersections, and nested structures
    • Both interface and type alias declarations
Effect-TS/effect (@​effect/opentelemetry)

v0.61.0

Compare Source

Minor Changes
  • #​5927 f4972ed Thanks @​davidgoli! - Add protobuf protocol support for OTLP exporters

    This introduces an OtlpSerialization service for choosing between JSON and Protobuf encoding.

    Breaking changes:

    • Otlp.layer now requires an OtlpSerialization layer to be provided for
      the desired encoding format.

    JSON encoding:

    import { Layer } from "effect"
    import { Otlp, OtlpSerialization } from "@&#8203;effect/opentelemetry"
    
    // Option 1: Explicit JSON layer
    const layer = Otlp.layerJson({
      baseUrl: "http://localhost:4318",
      resource: { serviceName: "my-service" }
    })
    
    // Option 2: Use `layer` and provide OtlpSerialization JSON layer
    const layer = Otlp.layer({
      baseUrl: "http://localhost:4318",
      resource: { serviceName: "my-service" }
    }).pipe(Layer.provide(OtlpSerialization.layerJson))
    

    Protobuf encoding:

    import { Otlp } from "@&#8203;effect/opentelemetry"
    
    // Simply use layerProtobuf for protobuf encoding
    const layer = Otlp.layerProtobuf({
      baseUrl: "http://localhost:4318",
      resource: { serviceName: "my-service" }
    })
    
  • #​5952 4725a7e Thanks @​clayroach! - Make @​opentelemetry/sdk-trace-node and @​opentelemetry/sdk-trace-web required peer dependencies instead of optional. This fixes module resolution errors when importing from the main entry point.

Patch Changes
  • #​5929 abdab5c Thanks @​schickling! - Fix Span.addEvent to correctly handle the 2-argument overload with attributes.

    Previously, calling span.addEvent("name", { foo: "bar" }) would throw TypeError: {} is not iterable because the implementation incorrectly treated the attributes object as a TimeInput. The fix adds proper runtime type discrimination to distinguish between TimeInput (number, Date, or HrTime tuple) and Attributes (plain object).

  • Updated dependencies [7e925ea, 118e7a4, d7e75d6, 4860d1e]:

v0.60.0

Compare Source

Patch Changes
Effect-TS/effect (@​effect/platform)

v0.94.5

Compare Source

Patch Changes
  • #​6050 d67c708 Thanks @​tim-smart! - Backport Effect 4 contentType support for HttpBody JSON / URL-encoded constructors and HttpServerResponse JSON / URL-encoded helpers.

  • Updated dependencies [a8c436f]:

    • effect@​3.19.17

v0.94.4

Compare Source

Patch Changes

v0.94.3

Compare Source

Patch Changes
  • #​6021 0023c19 Thanks @​codewithkenzo! - Fix HttpClientRequest.appendUrl to properly join URL paths.

    Previously, appendUrl used simple string concatenation which could produce invalid URLs:

    // Before (broken):
    appendUrl("https://api.example.com/v1", "users")
    // Result: "https://api.example.com/v1users" (missing slash!)
    

    Now it ensures proper path joining:

    // After (fixed):
    appendUrl("https://api.example.com/v1", "users")
    // Result: "https://api.example.com/v1/users"
    
  • #​6019 9a96b87 Thanks @​codewithkenzo! - Fix retryTransient to use correct transient status codes

    Changed isTransientResponse from status >= 429 to an explicit allowlist (408, 429, 500, 502, 503, 504). This correctly excludes 501 (Not Implemented) and 505+ permanent errors, while including 408 (Request Timeout) which was previously missed.

    Also aligned response retry behavior with v4: the while predicate now only applies to error retries, not response retries. Response retries are determined solely by isTransientResponse. This matches the semantic intent since while is typed for errors, not responses.

    Fixes #​5995

  • Updated dependencies [e71889f]:

    • effect@​3.19.16

v0.94.2

Compare Source

Patch Changes

v0.94.1

Compare Source

Patch Changes
  • #​5936 65e9e35 Thanks @​schickling! - Document subtle CORS middleware allowedHeaders behavior: when empty array (default), it reflects back the client's Access-Control-Request-Headers (permissive), and when non-empty array, it only allows specified headers (restrictive). Added comprehensive JSDoc with examples.

  • #​5940 ee69cd7 Thanks @​kitlangton! - HttpServerResponse: fix fromWeb to preserve Content-Type header when response has a body

    Previously, when converting a web Response to an HttpServerResponse via fromWeb, the Content-Type header was not passed to Body.stream(), causing it to default to application/octet-stream. This affected any code using HttpApp.fromWebHandler to wrap web handlers, as JSON responses would incorrectly have their Content-Type set to application/octet-stream instead of application/json.

  • Updated dependencies [488d6e8]:

    • effect@​3.19.14

v0.94.0

Compare Source

Minor Changes
Patch Changes
Effect-TS/effect (@​effect/platform-browser)

v0.74.0

Compare Source

Patch Changes
Effect-TS/effect (@​effect/platform-bun)

v0.87.1

Compare Source

Patch Changes

v0.87.0

Compare Source

Patch Changes
Effect-TS/effect (@​effect/platform-node)

v0.104.1

Compare Source

Patch Changes

v0.104.0

Compare Source

Patch Changes
Effect-TS/effect (@​effect/rpc)

v0.73.2

Compare Source

Patch Changes
  • #​6065 94b00c8 Thanks @​marbemac! - Add optional defect parameter to Rpc.make for customizing defect serialization per-RPC. Defaults to Schema.Defect, preserving existing behavior.

  • Updated dependencies [12b1f1e]:

    • effect@​3.19.18

v0.73.1

Compare Source

Patch Changes

v0.73.0

Compare Source

Patch Changes
open-telemetry/opentelemetry-js (@​opentelemetry/exporter-trace-otlp-http)

v0.213.0

Compare Source

v0.212.0

Compare Source

v0.211.0

Compare Source

v0.210.0

Compare Source

v0.209.0

Compare Source

lucide-icons/lucide (lucide-react)

v0.577.0: Version 0.577.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.576.0...0.577.0

v0.576.0: Version 0.576.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.575.0...0.576.0

v0.575.0: Version 0.575.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.573.0...0.575.0

v0.574.0: Version 0.574.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.572.0...0.574.0

v0.573.0: Version 0.573.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.572.0...0.573.0

v0.572.0: Version 0.572.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.571.0...0.572.0

v0.571.0: Version 0.571.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.570.0...0.571.0

v0.570.0: Version 0.570.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.569.0...0.570.0

v0.569.0: Version 0.569.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.568.0...0.569.0

v0.568.0: Version 0.568.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.567.0...0.568.0

v0.567.0: Version 0.567.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.566.0...0.567.0

v0.566.0: Version 0.566.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.565.0...0.566.0

v0.565.0: Version 0.565.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.564.0...0.565.0

v0.564.0: Version 0.564.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.563.1...0.564.0

v0.563.0: Version 0.563.0

Compare Source

What's Changed

aria-hidden is by default added to icons components in all packages. This was already added to lucide-react before.
Making icons accessible, you can add an aria-label or a title. See docs about accessibility.

All changes

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.562.0...0.563.0

v0.562.0: Version 0.562.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.561.0...0.562.0

v0.561.0: Version 0.561.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.560.0...0.561.0

v0.560.0: Version 0.560.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.559.0...0.560.0

v0.559.0: Version 0.559.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.558.0...0.559.0

v0.558.0: Version 0.558.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.557.0...0.558.0

v0.557.0: Version 0.557.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.556.0...0.557.0


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@effect/language-service](https://github.com/Effect-TS/language-service) | [`^0.60.0` → `^0.80.0`](https://renovatebot.com/diffs/npm/@effect%2flanguage-service/0.60.0/0.80.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@effect%2flanguage-service/0.80.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@effect%2flanguage-service/0.60.0/0.80.0?slim=true) | | [@effect/opentelemetry](https://effect.website) ([source](https://github.com/Effect-TS/effect/tree/HEAD/packages/opentelemetry)) | [`^0.59.0` → `^0.61.0`](https://renovatebot.com/diffs/npm/@effect%2fopentelemetry/0.59.3/0.61.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@effect%2fopentelemetry/0.61.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@effect%2fopentelemetry/0.59.3/0.61.0?slim=true) | | [@effect/platform](https://effect.website) ([source](https://github.com/Effect-TS/effect/tree/HEAD/packages/platform)) | [`^0.93.0` → `^0.94.0`](https://renovatebot.com/diffs/npm/@effect%2fplatform/0.93.8/0.94.5) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@effect%2fplatform/0.94.5?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@effect%2fplatform/0.93.8/0.94.5?slim=true) | | [@effect/platform-browser](https://effect.website) ([source](https://github.com/Effect-TS/effect/tree/HEAD/packages/platform-browser)) | [`^0.73.0` → `^0.74.0`](https://renovatebot.com/diffs/npm/@effect%2fplatform-browser/0.73.0/0.74.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@effect%2fplatform-browser/0.74.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@effect%2fplatform-browser/0.73.0/0.74.0?slim=true) | | [@effect/platform-bun](https://effect.website) ([source](https://github.com/Effect-TS/effect/tree/HEAD/packages/platform-bun)) | [`^0.86.0` → `^0.87.0`](https://renovatebot.com/diffs/npm/@effect%2fplatform-bun/0.86.0/0.87.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@effect%2fplatform-bun/0.87.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@effect%2fplatform-bun/0.86.0/0.87.1?slim=true) | | [@effect/platform-node](https://effect.website) ([source](https://github.com/Effect-TS/effect/tree/HEAD/packages/platform-node)) | [`^0.103.0` → `^0.104.0`](https://renovatebot.com/diffs/npm/@effect%2fplatform-node/0.103.0/0.104.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@effect%2fplatform-node/0.104.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@effect%2fplatform-node/0.103.0/0.104.1?slim=true) | | [@effect/rpc](https://effect.website) ([source](https://github.com/Effect-TS/effect/tree/HEAD/packages/rpc)) | [`^0.72.0` → `^0.73.0`](https://renovatebot.com/diffs/npm/@effect%2frpc/0.72.2/0.73.2) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@effect%2frpc/0.73.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@effect%2frpc/0.72.2/0.73.2?slim=true) | | [@opentelemetry/exporter-trace-otlp-http](https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http) ([source](https://github.com/open-telemetry/opentelemetry-js)) | [`^0.208.0` → `^0.213.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fexporter-trace-otlp-http/0.208.0/0.213.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fexporter-trace-otlp-http/0.213.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fexporter-trace-otlp-http/0.208.0/0.213.0?slim=true) | | [lucide-react](https://lucide.dev) ([source](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.556.0` → `^0.577.0`](https://renovatebot.com/diffs/npm/lucide-react/0.556.0/0.577.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.577.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.556.0/0.577.0?slim=true) | --- ### Release Notes <details> <summary>Effect-TS/language-service (@&#8203;effect/language-service)</summary> ### [`v0.80.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.80.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.79.0...@effect/language-service@0.80.0) ##### Minor Changes - [#&#8203;681](https://github.com/Effect-TS/language-service/pull/681) [`1017a54`](https://github.com/Effect-TS/language-service/commit/1017a5443b2e6919f18e57afb86373ba825037c9) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Generate a root `schema.json` for `tsconfig.json` plugin configuration, add typed Effect Language Service plugin options to that schema, and have `effect-language-service setup` add or remove the matching `$schema` entry automatically. - [#&#8203;679](https://github.com/Effect-TS/language-service/pull/679) [`3664197`](https://github.com/Effect-TS/language-service/commit/3664197f271012d001f6074d40c5303826d632ce) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add inline `--lspconfig` support to the `effect-language-service diagnostics` CLI command so diagnostics runs can override the project plugin configuration without editing `tsconfig.json`. ### [`v0.79.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.79.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.78.0...@effect/language-service@0.79.0) ##### Minor Changes - [#&#8203;671](https://github.com/Effect-TS/language-service/pull/671) [`6b9c378`](https://github.com/Effect-TS/language-service/commit/6b9c378c4e1d0c83e4afe322cf44ccacd75d1cb4) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add the `extendsNativeError` diagnostic to warn when classes directly extend the native `Error` constructor, including common local aliases such as `const E = Error`. This helps steer users toward tagged errors that preserve stronger typing in the Effect failure channel. - [#&#8203;678](https://github.com/Effect-TS/language-service/pull/678) [`0e9c11b`](https://github.com/Effect-TS/language-service/commit/0e9c11b4b3c076adef62e31722855ebc0071aaf6) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Generate the README diagnostics table from the diagnostic registry. Each diagnostic now declares: - whether it is fixable - which Effect versions it supports The generated table is checked in CI, and diagnostics tests verify that `fixable` matches the presence of non-suppression quick fixes. - [#&#8203;676](https://github.com/Effect-TS/language-service/pull/676) [`2f982d6`](https://github.com/Effect-TS/language-service/commit/2f982d69541633aca2cd3bcdc89bdae7d17cb97b) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add the `nodeBuiltinImport` diagnostic to warn when importing Node.js built-in modules (`fs`, `path`, `child_process`) that have Effect-native counterparts in `@effect/platform`. This diagnostic covers ES module imports and top-level `require()` calls, matching both bare and `node:`-prefixed specifiers as well as subpath variants like `fs/promises`, `path/posix`, and `path/win32`. It defaults to severity `off` and provides no code fixes. - [#&#8203;673](https://github.com/Effect-TS/language-service/pull/673) [`f9e24df`](https://github.com/Effect-TS/language-service/commit/f9e24df5db70110d5e84da45810bd82cf12fadc7) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add plugin options to better control patched `tsc` behavior. `ignoreEffectErrorsInTscExitCode` allows Effect diagnostics reported as errors to be ignored for exit-code purposes, and `skipDisabledOptimiziation` keeps disabled diagnostics eligible for comment-based overrides when patch mode is active. - [#&#8203;674](https://github.com/Effect-TS/language-service/pull/674) [`54e8c16`](https://github.com/Effect-TS/language-service/commit/54e8c16865e99be9b6faec3e50c17d1e501242f9) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add the `serviceNotAsClass` diagnostic to warn when `ServiceMap.Service` is used as a variable assignment instead of in a class declaration. Includes an auto-fix that converts `const Config = ServiceMap.Service<Shape>("Config")` to `class Config extends ServiceMap.Service<Config, Shape>()("Config") {}`. ##### Patch Changes - [#&#8203;675](https://github.com/Effect-TS/language-service/pull/675) [`d1f09c3`](https://github.com/Effect-TS/language-service/commit/d1f09c364bde5a14905b4a9d030830309b6aab43) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Rename the `skipDisabledOptimiziation` plugin option to `skipDisabledOptimization`. Example: ```json { "compilerOptions": { "plugins": [ { "name": "@&#8203;effect/language-service", "skipDisabledOptimization": true } ] } } ``` ### [`v0.78.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.78.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.77.0...@effect/language-service@0.78.0) ##### Minor Changes - [#&#8203;663](https://github.com/Effect-TS/language-service/pull/663) [`0e82d43`](https://github.com/Effect-TS/language-service/commit/0e82d437e91fe0b98c51b4b53c8d06f29aa41b8e) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve `effectFnOpportunity` inferred span naming for service-layer methods and align examples for Effect v4. The inferred span can now include service + method names (for example `MyService.log`) when the convertible function is a method inside a layer service object for strict supported patterns like: - `Layer.succeed(Service)(...)` - `Layer.sync(Service)(...)` - `Layer.effect(Service)(Effect.gen(...))` - `Layer.effect(Service, Effect.gen(...))` Also add Effect v4 diagnostics fixtures for: - `effectFnOpportunity_inferred.ts` - `effectFnOpportunity_inferredLayer.ts` - [#&#8203;669](https://github.com/Effect-TS/language-service/pull/669) [`a010a29`](https://github.com/Effect-TS/language-service/commit/a010a29d219a22da2553d82da3bbabc3312106f5) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add a new `effectInFailure` diagnostic that warns when an `Effect` computation appears in the failure channel (`E`) of another `Effect`. The rule traverses Effect-typed expressions, unrolls union members of `E`, and reports when any member is itself a strict Effect type. It prefers innermost matches for nested cases (for example nested `Effect.try` in `catch`) to avoid noisy parent reports. ##### Patch Changes - [#&#8203;666](https://github.com/Effect-TS/language-service/pull/666) [`06b3a6c`](https://github.com/Effect-TS/language-service/commit/06b3a6ce41c24459120c6a396804dadaf420786a) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix `effectFnOpportunity` inferred span naming for `Layer.*(this, ...)` patterns in class static members. When the inferred layer target is `this`, the diagnostic now uses the nearest enclosing class name (for example `MyService`) instead of the literal `this` token. - [#&#8203;665](https://github.com/Effect-TS/language-service/pull/665) [`a95a679`](https://github.com/Effect-TS/language-service/commit/a95a6792e313ac920f6621858439b18d52c9c0d9) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve yield-based diagnostics and hover behavior by introducing `effectYieldableType` in `TypeParser` and using it in `missingReturnYieldStar`. - In Effect v4, yieldable values are recognized through `asEffect()` and mapped to Effect `A/E/R`. - In Effect v3, `effectYieldableType` falls back to standard `effectType` behavior. - `missingReturnYieldStar` now correctly handles yieldable values such as `Option.none()`. - Hover support for `yield*` was updated to use yieldable parsing paths. - [#&#8203;664](https://github.com/Effect-TS/language-service/pull/664) [`934ef7e`](https://github.com/Effect-TS/language-service/commit/934ef7e0b58bc5260425b47a9efe1f4d0ccc26f0) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve `missingReturnYieldStar` safety by targeting only expression statements with top-level `yield*` expressions and validating the enclosing `Effect.gen` scope via `findEnclosingScopes`. This avoids edge cases where nested or wrapped `yield*` expressions could be matched incorrectly. - [#&#8203;661](https://github.com/Effect-TS/language-service/pull/661) [`0f92686`](https://github.com/Effect-TS/language-service/commit/0f92686ac86b4f90eea436c542914ce59c39afb6) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Update effect dependency to v4.0.0-beta.19 and fix compatibility issues: - Fix `layerMagic` refactor producing `any` types in Layer channels by replacing `Array.partition` (which now uses the v4 `Filter.Filter` API) with a native loop for boolean partition logic - Add v4 Layer type detection shortcut using `"~effect/Layer"` TypeId property, matching the pattern already used for Effect type detection - Mark `Effect.filterMap` as unchanged in the outdated API migration database since it was re-added in v4 ### [`v0.77.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.77.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.76.0...@effect/language-service@0.77.0) ##### Minor Changes - [#&#8203;655](https://github.com/Effect-TS/language-service/pull/655) [`c875de2`](https://github.com/Effect-TS/language-service/commit/c875de2c2334f740155f5a1e8a1a44636506d157) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `outdatedApi` diagnostic that warns when using outdated Effect APIs in a project targeting a newer version of Effect. ##### Patch Changes - [#&#8203;660](https://github.com/Effect-TS/language-service/pull/660) [`99a97a6`](https://github.com/Effect-TS/language-service/commit/99a97a6a4e275d03562de7ede2a2510f1c06f230) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Dispose TypeScript language services in tests to prevent resource leaks Added `languageService.dispose()` calls via `try/finally` patterns to all test files that create language services through `createServicesWithMockedVFS()`. This ensures proper cleanup of TypeScript compiler resources after each test completes, preventing memory leaks during test runs. - [#&#8203;658](https://github.com/Effect-TS/language-service/pull/658) [`0154667`](https://github.com/Effect-TS/language-service/commit/0154667a23c95a8133751b3454b9233ddc39d8e3) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix outdated API diagnostic for Effect v4 compatibility - Fixed `TaggedError` completion to use `TaggedErrorClass` matching the v4 API - Removed `Schema.RequestClass` examples that no longer exist in v4 - Updated Effect v4 harness to latest version - [#&#8203;659](https://github.com/Effect-TS/language-service/pull/659) [`2699a80`](https://github.com/Effect-TS/language-service/commit/2699a80e3ecbce91db269cd34689752950d8d278) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add support for `Model.Class` from `effect/unstable/schema` in completions and diagnostics. The `classSelfMismatch` diagnostic now detects mismatched Self type parameters in `Model.Class` declarations, and the autocomplete for Self type in classes now suggests `Model.Class` when typing after `Model.`. ```ts import { Model } from "effect/unstable/schema"; // autocomplete triggers after `Model.` export class MyDataModel extends Model.Class<MyDataModel>("MyDataModel")({ id: Schema.String, }) {} ``` ### [`v0.76.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.76.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.75.1...@effect/language-service@0.76.0) ##### Minor Changes - [#&#8203;651](https://github.com/Effect-TS/language-service/pull/651) [`aeab349`](https://github.com/Effect-TS/language-service/commit/aeab349b498c5bea4d050409a57f8f1900190c39) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add refactor to convert `Effect.Service` to `Context.Tag` with a static `Layer` property. Supports all combinator kinds (`effect`, `scoped`, `sync`, `succeed`) and `dependencies`. The refactor replaces the `Effect.Service` class declaration with a `Context.Tag` class that has a `static layer` property using the corresponding `Layer` combinator. Before: ```ts export class MyService extends Effect.Service<MyService>()("MyService", { effect: Effect.gen(function* () { return { value: "hello" }; }), }) {} ``` After: ```ts export class MyService extends Context.Tag("MyService")< MyService, { value: string } >() { static layer = Layer.effect( this, Effect.gen(function* () { return { value: "hello" }; }) ); } ``` - [#&#8203;654](https://github.com/Effect-TS/language-service/pull/654) [`2c93eab`](https://github.com/Effect-TS/language-service/commit/2c93eabfd7b799543832dc84304f20c90382c7eb) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Migrate internal Effect dependency from v3 to v4. This updates all CLI and core modules to use the Effect v4 API while maintaining full backward compatibility with existing functionality. ### [`v0.75.1`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.75.1) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.75.0...@effect/language-service@0.75.1) ##### Patch Changes - [#&#8203;647](https://github.com/Effect-TS/language-service/pull/647) [`489e3f0`](https://github.com/Effect-TS/language-service/commit/489e3f05727ded4bf62585042135a0b5cec1068b) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Expose diagnostic quick fixes as refactoring actions to work around TypeScript's limited quick fix handling in some contexts - [#&#8203;650](https://github.com/Effect-TS/language-service/pull/650) [`6f568cf`](https://github.com/Effect-TS/language-service/commit/6f568cf37a76b23a1a864c4852250f62083379ad) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix TypeParser to skip types with generic call signatures. When parsing covariant, contravariant, or invariant types, signatures with type parameters are now correctly rejected instead of being treated as concrete types. - [#&#8203;649](https://github.com/Effect-TS/language-service/pull/649) [`5858fd1`](https://github.com/Effect-TS/language-service/commit/5858fd1d87a4cc1e16f0f1bdb69532b2a1fefac0) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Performance improvements: replace `Nano.gen` with `Nano.fn` named functions across diagnostics, refactors, and code generation modules for better performance tracking and reduced runtime overhead. Add conditional `debugPerformance` flag to avoid unnecessary timing collection when not debugging. ### [`v0.75.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.75.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.74.0...@effect/language-service@0.75.0) ##### Minor Changes - [#&#8203;645](https://github.com/Effect-TS/language-service/pull/645) [`a8a7d33`](https://github.com/Effect-TS/language-service/commit/a8a7d33f3a4ff0762c18c0858084f61e149da33f) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `ServiceMap.Service` class completion for Effect v4, and fix Schema class completions for v4 (`TaggedErrorClass`, `TaggedClass` now available, `ErrorClass` fully-qualified form fixed, `RequestClass` removed) ### [`v0.74.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.74.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.73.1...@effect/language-service@0.74.0) ##### Minor Changes - [#&#8203;641](https://github.com/Effect-TS/language-service/pull/641) [`693e5a5`](https://github.com/Effect-TS/language-service/commit/693e5a5ef2ee184e0a7d72cb3abc8485c2c0f855) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Added Effect v4 support for diagnostics, refactors, and piping features. **Diagnostics:** - `multipleEffectProvide`: Warns when multiple `Effect.provide` calls are chained, suggesting consolidation - `strictEffectProvide`: Warns when using `Effect.provide` with Layer outside of application entry points - `missingLayerContext`: Detects missing Layer context requirements - `deterministicKeys`: Extended to support `ServiceMap.Service` patterns - `leakingRequirements`: Extended to detect leaking requirements in ServiceMap services - `schemaSyncInEffect`: Updated with v4-specific method mappings (e.g., `decodeSync` -> `decodeEffect`) **Refactors:** - `layerMagic`: Automatically compose and build layers based on service dependencies - `structuralTypeToSchema`: Convert TypeScript interfaces and type aliases to Effect Schema classes - `makeSchemaOpaque`: Enhanced for v4 with support for `Codec`, `DecodingServices`, and `EncodingServices` types - `typeToEffectSchema`: Enhanced to support Effect v4 schema patterns **Piping:** - Added pipe transformation support for Effect v4 including `Effect.fn`, nested pipes, and function call conversions ##### Patch Changes - [#&#8203;643](https://github.com/Effect-TS/language-service/pull/643) [`68f6d12`](https://github.com/Effect-TS/language-service/commit/68f6d120adb3dbf46593ca125e10a070e41fbc46) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Disable `schemaUnionOfLiterals` diagnostic for Effect v4, as `Schema.Union` of multiple `Schema.Literal` calls is no longer applicable in v4. ### [`v0.73.1`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.73.1) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.73.0...@effect/language-service@0.73.1) ##### Patch Changes - [#&#8203;639](https://github.com/Effect-TS/language-service/pull/639) [`ff72045`](https://github.com/Effect-TS/language-service/commit/ff72045531c2b04318b89bb131f131b114b22818) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add wildcard (`*`) support for `@effect-diagnostics` comment directives. You can now use `*` as a rule name to apply a severity override to all diagnostics at once, e.g. `@effect-diagnostics *:off` disables all Effect diagnostics from that point on. Rule-specific overrides still take precedence over wildcard overrides. ### [`v0.73.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.73.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.72.1...@effect/language-service@0.73.0) ##### Minor Changes - [#&#8203;637](https://github.com/Effect-TS/language-service/pull/637) [`616c2cc`](https://github.com/Effect-TS/language-service/commit/616c2cc21c9526da9b97f5c122ef0e2789f9bdff) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add Effect v4 completions support - Detect installed Effect version (v3 or v4) and conditionally enable version-specific completions - Add `Schema.ErrorClass` and `Schema.RequestClass` completions for Effect v4 - Disable v3-only completions (`Effect.Service`, `Effect.Tag`, `Schema.TaggedError`, `Schema.TaggedClass`, `Schema.TaggedRequest`, `Context.Tag` self, `Rpc.make` classes, `Schema.brand`, `Model.Class`) when Effect v4 is detected - Support lowercase `taggedEnum` in addition to `TaggedEnum` for v4 API compatibility ### [`v0.72.1`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.72.1) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.72.0...@effect/language-service@0.72.1) ##### Patch Changes - [#&#8203;635](https://github.com/Effect-TS/language-service/pull/635) [`b16fd37`](https://github.com/Effect-TS/language-service/commit/b16fd378797be05462ff7a9537a799613abd7be5) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix effectGenToFn refactor to convert `Effect<A, E, R>` return types to `Effect.fn.Return<A, E, R>` Before this fix, the "Convert to fn" refactor would keep the original `Effect.Effect<A, E, R>` return type, producing code that doesn't compile. Now it correctly transforms the return type: ```ts // Before refactor const someFunction = (value: string): Effect.Effect<number, boolean> => Effect.gen(function* () { /* ... */ }); // After refactor (fixed) const someFunction = Effect.fn("someFunction")(function* ( value: string ): Effect.fn.Return<number, boolean, never> { /* ... */ }); ``` - [#&#8203;630](https://github.com/Effect-TS/language-service/pull/630) [`689a012`](https://github.com/Effect-TS/language-service/commit/689a01258a62bda671408045572649936c09ea39) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Restructure test harness setup by moving shared test utilities and updating package dependencies ### [`v0.72.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.72.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.71.2...@effect/language-service@0.72.0) ##### Minor Changes - [#&#8203;627](https://github.com/Effect-TS/language-service/pull/627) [`a34f997`](https://github.com/Effect-TS/language-service/commit/a34f997af3b97f0d97ac755ee044f9653724b7d2) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Refactor internal structure and harness ### [`v0.71.2`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0712) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.71.1...v0.71.2) ##### Patch Changes - [#&#8203;625](https://github.com/Effect-TS/language-service/pull/625) [`422087d`](https://github.com/Effect-TS/language-service/commit/422087d01211da6e917da0a5f67cf1d8b08924e5) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix CLI patching to target `emitFilesAndReportErrors` function instead of `emitFilesAndReportErrorsAndGetExitStatus`, updating the injection approach to replace the diagnostics property in the return statement's object literal. ### [`v0.71.1`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0711) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.71.0...v0.71.1) ##### Patch Changes - [#&#8203;624](https://github.com/Effect-TS/language-service/pull/624) [`d279457`](https://github.com/Effect-TS/language-service/commit/d279457ed54c389e6725b4ed8a19edf53f4e7094) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `ignoreEffectSuggestionsInTscExitCode` option (default: `true`) to control whether Effect-related suggestions affect the TSC exit code. When enabled, suggestions won't cause `tsc` to return a non-zero exit code. - [#&#8203;622](https://github.com/Effect-TS/language-service/pull/622) [`5eab20a`](https://github.com/Effect-TS/language-service/commit/5eab20a1a8fd86f19360a573f074f1dec0dcf308) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `ignoreEffectWarningsInTscExitCode` option to allow Effect-related warnings to not affect the TSC exit code. When enabled, `tsc` will compile successfully even if Effect warnings are emitted. This is useful for CI/CD pipelines where Effect diagnostics should be informational rather than blocking. ### [`v0.71.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0710) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.70.0...v0.71.0) ##### Minor Changes - [#&#8203;619](https://github.com/Effect-TS/language-service/pull/619) [`f171350`](https://github.com/Effect-TS/language-service/commit/f171350ffc34d9dfe0989027ec3d39eed42eaabe) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `effectSucceedWithVoid` diagnostic to suggest using `Effect.void` instead of `Effect.succeed(undefined)` or `Effect.succeed(void 0)`. The diagnostic detects calls to `Effect.succeed` where the argument is exactly `undefined` or `void 0` (including parenthesized variants) and suggests replacing them with the more idiomatic `Effect.void`. A quick fix is provided to automatically apply the replacement. Before: ```typescript Effect.succeed(undefined); Effect.succeed(void 0); ``` After: ```typescript Effect.void; ``` ##### Patch Changes - [#&#8203;621](https://github.com/Effect-TS/language-service/pull/621) [`74ef937`](https://github.com/Effect-TS/language-service/commit/74ef937ae072e051b113d75429b48338fcc57bc4) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve diagnostic messages for `globalErrorInEffectFailure` and `globalErrorInEffectCatch` to be more concise and actionable. Before: ``` The global Error type is used in an Effect failure channel. It's not recommended to use the global Error type in Effect failures as they can get merged together. Instead, use tagged errors or custom errors with a discriminator property to get properly type-checked errors. ``` After: ``` Global 'Error' loses type safety as untagged errors merge together in the Effect failure channel. Consider using a tagged error and optionally wrapping the original in a 'cause' property. ``` ### [`v0.70.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0700) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.69.2...v0.70.0) ##### Minor Changes - [#&#8203;618](https://github.com/Effect-TS/language-service/pull/618) [`ed689f8`](https://github.com/Effect-TS/language-service/commit/ed689f8e557481eddee3ed4bdd56d8e1320f164d) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve `globalErrorInEffectFailure` diagnostic to detect global Error type in any Effect failure channel. The diagnostic now works by finding `new Error()` expressions and checking if they end up in an Effect's failure channel, rather than only checking `Effect.fail` calls. This means it will now detect global Error usage in: - `Effect.fail(new Error(...))` - `Effect.gen` functions that fail with global Error - `Effect.mapError` converting to global Error - `Effect.flatMap` chains that include global Error The diagnostic now reports at the `new Error()` location for better precision. ##### Patch Changes - [#&#8203;616](https://github.com/Effect-TS/language-service/pull/616) [`b32da44`](https://github.com/Effect-TS/language-service/commit/b32da446de65bcc1dad802a9b6c82c43ae4dd6fd) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve `missedPipeableOpportunity` diagnostic message to show the suggested subject for `.pipe(...)`. Before: ``` Nested function calls can be converted to pipeable style for better readability. ``` After: ``` Nested function calls can be converted to pipeable style for better readability; consider using addOne(5).pipe(...) instead. ``` ### [`v0.69.2`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0692) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.69.1...v0.69.2) ##### Patch Changes - [#&#8203;612](https://github.com/Effect-TS/language-service/pull/612) [`2b49181`](https://github.com/Effect-TS/language-service/commit/2b49181323b5d969897749412af896a0a7d2325f) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve effectFnIife diagnostic message to suggest Effect.withSpan with the trace name when available When `Effect.fn("traceName")` is used as an IIFE, the diagnostic now suggests using `Effect.gen` with `Effect.withSpan("traceName")` piped at the end to maintain tracing spans. For `Effect.fnUntraced`, it simply suggests using `Effect.gen` without the span suggestion. - [#&#8203;615](https://github.com/Effect-TS/language-service/pull/615) [`ae4f054`](https://github.com/Effect-TS/language-service/commit/ae4f054cdd6d1c6c2c5f906d7c6dd25ab2b35526) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve effectFnOpportunity diagnostic with more specific messages and configurable fixes - Add new `effectFn` configuration option to control which code fix variants are offered: `"untraced"`, `"span"`, `"inferred-span"`, `"no-span"` (defaults to `["span"]`) - Diagnostic message now shows the exact expected signature for the rewrite - Distinguish between explicit trace from `Effect.withSpan` vs inferred trace from function name - Skip functions with return type annotations to avoid issues with recursive functions **Before:** ``` This function could benefit from Effect.fn's automatic tracing... ``` **After:** ``` Can be rewritten as a reusable function: Effect.fn("myFunction")(function*() { ... }) ``` ### [`v0.69.1`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0691) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.69.0...v0.69.1) ##### Patch Changes - [#&#8203;610](https://github.com/Effect-TS/language-service/pull/610) [`990ccbc`](https://github.com/Effect-TS/language-service/commit/990ccbc98f784fe2aea8f12be4fa8c138de2feca) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve effectFnOpportunity diagnostic message to mention that quickfixes are available in the editor or via the CLI quickfixes command. ### [`v0.69.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0690) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.68.0...v0.69.0) ##### Minor Changes - [#&#8203;608](https://github.com/Effect-TS/language-service/pull/608) [`bc7da1e`](https://github.com/Effect-TS/language-service/commit/bc7da1ef6f0f3d4aa0e88ef28de49e6845c764df) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `effectFnIife` diagnostic to warn when `Effect.fn` or `Effect.fnUntraced` is used as an IIFE (Immediately Invoked Function Expression). `Effect.fn` is designed to create reusable functions that can take arguments and provide tracing. When used as an IIFE, `Effect.gen` is more appropriate. **Example:** ```ts // Before (triggers warning) const result = Effect.fn("test")(function* () { yield* Effect.succeed(1); })(); // After (using Effect.gen) const result = Effect.gen(function* () { yield* Effect.succeed(1); }); ``` A quick fix is provided to automatically convert `Effect.fn` IIFEs to `Effect.gen`. ### [`v0.68.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0680) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.67.0...v0.68.0) ##### Minor Changes - [#&#8203;603](https://github.com/Effect-TS/language-service/pull/603) [`d747210`](https://github.com/Effect-TS/language-service/commit/d747210f173d87e068ad2370f6b7667be7cde07d) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Added `instanceOfSchema` diagnostic that suggests using `Schema.is` instead of `instanceof` for Effect Schema types. Example: ```typescript import { Schema } from "effect" const MySchema = Schema.Struct({ name: Schema.String }) // Before - triggers diagnostic if (value instanceof MySchema) { ... } // After - using Schema.is if (Schema.is(MySchema)(value)) { ... } ``` The diagnostic is disabled by default and can be enabled with `instanceOfSchema:suggestion` or `instanceOfSchema:warning`. ##### Patch Changes - [#&#8203;605](https://github.com/Effect-TS/language-service/pull/605) [`d63d5df`](https://github.com/Effect-TS/language-service/commit/d63d5df97858c8fd5a5af325141b08414f3d6eca) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve `leakingRequirements` diagnostic message for clarity ### [`v0.67.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0670) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.66.1...v0.67.0) ##### Minor Changes - [#&#8203;599](https://github.com/Effect-TS/language-service/pull/599) [`4c9f5c7`](https://github.com/Effect-TS/language-service/commit/4c9f5c7c27e551e23c12ba31e07a955c5e15f5c9) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `quickfixes` CLI command that shows diagnostics with available quick fixes and their proposed code changes. Example usage: ```bash # Check a specific file effect-language-service quickfixes --file ./src/index.ts # Check an entire project effect-language-service quickfixes --project ./tsconfig.json ``` The command displays each diagnostic along with the available code fixes and a diff preview of the proposed changes, making it easy to see what automatic fixes are available before applying them. ##### Patch Changes - [#&#8203;601](https://github.com/Effect-TS/language-service/pull/601) [`c0a6da3`](https://github.com/Effect-TS/language-service/commit/c0a6da3811915b53e04cc1a237c4fa93d6fc91b0) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Reduce over-suggestion of effectFnOpportunity diagnostic for regular functions. The diagnostic now only suggests `Effect.fn` for regular functions (not using `Effect.gen`) when: - The function has a block body (not a concise arrow expression) - The function body has more than 5 statements Functions using `Effect.gen` are still always suggested regardless of body size. ### [`v0.66.1`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0661) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.65.0...v0.66.1) ##### Patch Changes - [#&#8203;597](https://github.com/Effect-TS/language-service/pull/597) [`3833a10`](https://github.com/Effect-TS/language-service/commit/3833a10e3188c4ebf113625c00f60e17b8bf6b80) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improved `effectFnOpportunity` diagnostic message to mention that Effect.fn accepts piped transformations as additional arguments when pipe transformations are detected. When a function has `.pipe()` calls that would be absorbed by Effect.fn, the message now includes: "Effect.fn also accepts the piped transformations as additional arguments." ### [`v0.65.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0650) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.64.1...v0.65.0) ##### Minor Changes - [#&#8203;581](https://github.com/Effect-TS/language-service/pull/581) [`4569328`](https://github.com/Effect-TS/language-service/commit/456932800d7abe81e14d910b25d91399277a23f5) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `effectFnOpportunity` diagnostic that suggests converting functions returning `Effect.gen` to `Effect.fn` for better tracing and concise syntax. The diagnostic triggers on: - Arrow functions returning `Effect.gen(...)` - Function expressions returning `Effect.gen(...)` - Function declarations returning `Effect.gen(...)` - Functions with `Effect.gen(...).pipe(...)` patterns It provides two code fixes: - Convert to `Effect.fn` (traced) - includes the function name as the span name - Convert to `Effect.fnUntraced` - without tracing The diagnostic skips: - Generator functions (can't be converted) - Named function expressions (typically used for recursion) - Functions with multiple call signatures (overloads) When the original function has a return type annotation, the converted function will use `Effect.fn.Return<A, E, R>` as the return type. Example: ```ts // Before export const myFunction = (a: number) => Effect.gen(function* () { yield* Effect.succeed(1); return a; }); // After (with Effect.fn) export const myFunction = Effect.fn("myFunction")(function* (a: number) { yield* Effect.succeed(1); return a; }); // Before (with pipe) export const withPipe = () => Effect.gen(function* () { return yield* Effect.succeed(1); }).pipe(Effect.withSpan("withPipe")); // After (with Effect.fn) export const withPipe = Effect.fn("withPipe")(function* () { return yield* Effect.succeed(1); }, Effect.withSpan("withPipe")); ``` - [#&#8203;575](https://github.com/Effect-TS/language-service/pull/575) [`00aeed0`](https://github.com/Effect-TS/language-service/commit/00aeed0c8aadcd0b0c521e4339aa6a1a18eae772) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `effectMapVoid` diagnostic that suggests using `Effect.asVoid` instead of `Effect.map(() => void 0)`, `Effect.map(() => undefined)`, or `Effect.map(() => {})`. Also adds two new TypeParser utilities: - `lazyExpression`: matches zero-argument arrow functions or function expressions that return a single expression - `emptyFunction`: matches arrow functions or function expressions with an empty block body And adds `isVoidExpression` utility to TypeScriptUtils for detecting `void 0` or `undefined` expressions. Example: ```ts // Before Effect.succeed(1).pipe(Effect.map(() => void 0)); Effect.succeed(1).pipe(Effect.map(() => undefined)); Effect.succeed(1).pipe(Effect.map(() => {})); // After (suggested fix) Effect.succeed(1).pipe(Effect.asVoid); ``` - [#&#8203;582](https://github.com/Effect-TS/language-service/pull/582) [`94d4a6b`](https://github.com/Effect-TS/language-service/commit/94d4a6bcaa39d8b33e66390d1ead5b1da1a8f16f) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Added `layerinfo` CLI command that provides detailed information about a specific exported layer. Features: - Shows layer type, location, and description - Lists services the layer provides and requires - Suggests optimal layer composition order using `Layer.provide`, `Layer.provideMerge`, and `Layer.merge` Example usage: ```bash effect-language-service layerinfo --file ./src/layers/app.ts --name AppLive ``` Also added a tip to both `overview` and `layerinfo` commands about using `Layer.mergeAll(...)` to get suggested composition order. - [#&#8203;583](https://github.com/Effect-TS/language-service/pull/583) [`b0aa78f`](https://github.com/Effect-TS/language-service/commit/b0aa78fb75f2afed944fb062e8e74ec6eb1492c1) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `redundantSchemaTagIdentifier` diagnostic that suggests removing redundant identifier arguments when they equal the tag value in `Schema.TaggedClass`, `Schema.TaggedError`, or `Schema.TaggedRequest`. **Before:** ```typescript class MyError extends Schema.TaggedError<MyError>("MyError")("MyError", { message: Schema.String, }) {} ``` **After applying the fix:** ```typescript class MyError extends Schema.TaggedError<MyError>()("MyError", { message: Schema.String, }) {} ``` Also updates the completions to not include the redundant identifier when autocompleting `Schema.TaggedClass`, `Schema.TaggedError`, and `Schema.TaggedRequest`. - [#&#8203;573](https://github.com/Effect-TS/language-service/pull/573) [`6715f91`](https://github.com/Effect-TS/language-service/commit/6715f9131059737cf4b2d2988d7981971943ac0e) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Rename `reportSuggestionsAsWarningsInTsc` option to `includeSuggestionsInTsc` and change default to `true`. This option controls whether diagnostics with "suggestion" severity are included in TSC output when using the `effect-language-service patch` feature. When enabled, suggestions are reported as messages in TSC output, which is useful for LLM-based development tools to see all suggestions. **Breaking change**: The option has been renamed and the default behavior has changed: - Old: `reportSuggestionsAsWarningsInTsc: false` (suggestions not included by default) - New: `includeSuggestionsInTsc: true` (suggestions included by default) To restore the previous behavior, set `"includeSuggestionsInTsc": false` in your tsconfig.json plugin configuration. - [#&#8203;586](https://github.com/Effect-TS/language-service/pull/586) [`e225b5f`](https://github.com/Effect-TS/language-service/commit/e225b5fb242d269b75eb6a04c89ae6372e53c8ec) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add markdown documentation support to setup command The setup command now automatically manages Effect Language Service documentation in AGENTS.md and CLAUDE.md files: - When installing: Adds or updates the Effect Language Service section with markers - When uninstalling: Removes the section if present - Case-insensitive file detection (supports both lowercase and uppercase filenames) - Skips symlinked files to avoid modifying linked content - Shows proper diff view for markdown file changes Example section added to markdown files: ```markdown <!-- effect-language-service:start --> ## Effect Language Service The Effect Language Service comes in with a useful CLI that can help you with commands to get a better understanding your Effect Layers and Services, and to help you compose them correctly. <!-- effect-language-service:end --> ``` ##### Patch Changes - [#&#8203;580](https://github.com/Effect-TS/language-service/pull/580) [`a45606b`](https://github.com/Effect-TS/language-service/commit/a45606b2b0d64bd06436c1e6c3a1c5410dcda6a9) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `Effect.fn` and `Effect.fnUntraced` support to the piping flows parser. The piping flows parser now recognizes pipe transformations passed as additional arguments to `Effect.fn`, `Effect.fn("traced")`, and `Effect.fnUntraced`. This enables diagnostics like `catchAllToMapError`, `catchUnfailableEffect`, and `multipleEffectProvide` to work with these patterns. Example: ```ts // This will now trigger the catchAllToMapError diagnostic const example = Effect.fn( function* () { return yield* Effect.fail("error"); }, Effect.catchAll((cause) => Effect.fail(new MyError(cause))) ); ``` - [#&#8203;587](https://github.com/Effect-TS/language-service/pull/587) [`7316859`](https://github.com/Effect-TS/language-service/commit/7316859ba221a212d3e8adcf458032e5c5d1b354) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Mark deprecated TypeScript Signature methods and migrate to property accessors Added `@deprecated` annotations to TypeScript Signature interface methods (`getParameters`, `getTypeParameters`, `getDeclaration`, `getReturnType`, `getTypeParameterAtPosition`) with guidance to use their modern property alternatives. Updated codebase usage of `getParameters()` to use `.parameters` property instead. - [#&#8203;584](https://github.com/Effect-TS/language-service/pull/584) [`ed12861`](https://github.com/Effect-TS/language-service/commit/ed12861c12a1fa1298fd53c97a5e01a2d02b96ac) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix TypeError in setup command when updating existing diagnosticSeverity configuration The setup command was throwing `TypeError: Cannot read properties of undefined (reading 'text')` when trying to update the `diagnosticSeverity` option of an existing `@effect/language-service` plugin configuration in tsconfig.json. This occurred because TypeScript's ChangeTracker formatter needed to compute indentation by traversing the AST tree, which failed when replacing a PropertyAssignment node inside a nested list context. The fix replaces just the initializer value (ObjectLiteralExpression) instead of the entire PropertyAssignment, avoiding the problematic list indentation calculation. - [#&#8203;585](https://github.com/Effect-TS/language-service/pull/585) [`7ebe5db`](https://github.com/Effect-TS/language-service/commit/7ebe5db2d60f36510e666e7c816623c0f9be88ab) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Enhanced `layerinfo` CLI command with output type selection for layer composition. **New Features:** - Added `--outputs` option to select which output types to include in the suggested composition (e.g., `--outputs 1,2,3`) - Shows all available output types from the layer graph with indexed checkboxes - By default, only types that are in the layer's declared `ROut` are selected - Composition code now includes `export const <name> = ...` prefix for easy copy-paste **Example output:** ``` Suggested Composition: Not sure you got your composition right? Just write all layers inside a Layer.mergeAll(...) then run this command again and use --outputs to select which outputs to include in composition. Example: --outputs 1,2,3 [ ] 1. Cache [x] 2. UserRepository export const simplePipeIn = UserRepository.Default.pipe( Layer.provide(Cache.Default) ) ``` This allows users to see all available outputs from a layer composition and choose which ones to include in the suggested composition order. - [#&#8203;577](https://github.com/Effect-TS/language-service/pull/577) [`0ed50c3`](https://github.com/Effect-TS/language-service/commit/0ed50c33c08ae6ae81fbd4af49ac4d75fd2b7f74) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Refactor `catchAllToMapError` diagnostic to use the piping flows parser for detecting Effect.catchAll calls. This change also: - Makes `outType` optional in `ParsedPipingFlowSubject` to handle cases where type information is unavailable - Sorts piping flows by position for consistent ordering - [#&#8203;578](https://github.com/Effect-TS/language-service/pull/578) [`cab6ce8`](https://github.com/Effect-TS/language-service/commit/cab6ce85ff2720c0d09cdb0b708d77d1917a50c5) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - refactor: use piping flows parser in catchUnfailableEffect diagnostic - [#&#8203;579](https://github.com/Effect-TS/language-service/pull/579) [`2a82522`](https://github.com/Effect-TS/language-service/commit/2a82522cdbcb59465ccb93dcb797f55d9408752c) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - refactor: use piping flows parser in multipleEffectProvide diagnostic - [#&#8203;570](https://github.com/Effect-TS/language-service/pull/570) [`0db6e28`](https://github.com/Effect-TS/language-service/commit/0db6e28df1caba1bb5bc42faf82f8ffab276a184) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Refactor CLI overview command to extract symbol collection logic into reusable utility - Extract `collectSourceFileExportedSymbols` into `src/cli/utils/ExportedSymbols.ts` for reuse across CLI commands - Add `--max-symbol-depth` option to overview command (default: 3) to control how deep to traverse nested symbol properties - Add tests for the overview command with snapshot testing - [#&#8203;574](https://github.com/Effect-TS/language-service/pull/574) [`9d0695e`](https://github.com/Effect-TS/language-service/commit/9d0695e3c82333400575a9d266cad4ac6af45ccc) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Remove deprecated ts-patch documentation from README. The Effect LSP CLI Patch is now the only recommended approach for getting diagnostics at compile time. - [#&#8203;576](https://github.com/Effect-TS/language-service/pull/576) [`5017d75`](https://github.com/Effect-TS/language-service/commit/5017d75f1db93f6e5d8c1fc0d8ea26c2b2db613a) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add piping flows parser for caching piping flow analysis per source file. This internal improvement introduces a `pipingFlows` function in `TypeParser` that analyzes and caches all piping flows (both `pipe()` calls and `.pipe()` method chains) in a source file. The parser: - Identifies piping flows including nested pipes and mixed call styles (e.g., `Effect.map(effect, fn).pipe(...)`) - Tracks the subject, transformations, and intermediate types for each flow - Enables more efficient diagnostic implementations by reusing cached analysis The `missedPipeableOpportunity` diagnostic has been refactored to use this new parser, improving performance when analyzing files with multiple piping patterns. ### [`v0.64.1`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0641) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.64.0...v0.64.1) ##### Patch Changes - [#&#8203;568](https://github.com/Effect-TS/language-service/pull/568) [`477271d`](https://github.com/Effect-TS/language-service/commit/477271d4df19391dca4131a13c8962b134156272) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix auto-import with namespace import packages generating malformed code when the identifier is at the beginning of the file. When using `namespaceImportPackages` configuration and auto-completing an export like `isAnyKeyword` from `effect/SchemaAST`, the code was incorrectly generated as: ```ts SchemaAST.import * as SchemaAST from "effect/SchemaAST"; ``` Instead of the expected: ```ts import * as SchemaAST from "effect/SchemaAST"; SchemaAST.isAnyKeyword; ``` The fix ensures the import statement is added before the namespace prefix when both changes target position 0. ### [`v0.64.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0640) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.63.2...v0.64.0) ##### Minor Changes - [#&#8203;567](https://github.com/Effect-TS/language-service/pull/567) [`dcb3fe5`](https://github.com/Effect-TS/language-service/commit/dcb3fe5f36f5c2727870e1fbc148e2a935a1a77e) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Added new diagnostic `catchAllToMapError` that suggests using `Effect.mapError` instead of `Effect.catchAll` + `Effect.fail` when the callback only wraps the error. Before: ```ts Effect.catchAll((cause) => Effect.fail(new MyError(cause))); ``` After: ```ts Effect.mapError((cause) => new MyError(cause)); ``` The diagnostic includes a quick fix that automatically transforms the code. - [#&#8203;555](https://github.com/Effect-TS/language-service/pull/555) [`0424000`](https://github.com/Effect-TS/language-service/commit/04240003bbcb04db1eda967153d185fd53a3f669) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `globalErrorInEffectCatch` diagnostic to detect global Error types in catch callbacks This new diagnostic warns when catch callbacks in `Effect.tryPromise`, `Effect.try`, `Effect.tryMap`, or `Effect.tryMapPromise` return the global `Error` type instead of typed errors. Using the global `Error` type in Effect failures is not recommended as they can get merged together, making it harder to distinguish between different error cases. Instead, it's better to use tagged errors (like `Data.TaggedError`) or custom errors with discriminator properties to enable proper type checking and error handling. Example of code that triggers the diagnostic: ```typescript Effect.tryPromise({ try: () => fetch("http://example.com"), catch: () => new Error("Request failed"), // ⚠️ Warning: returns global Error type }); ``` Recommended approach: ```typescript class FetchError extends Data.TaggedError("FetchError")<{ cause: unknown; }> {} Effect.tryPromise({ try: () => fetch("http://example.com"), catch: (e) => new FetchError({ cause: e }), // ✅ Uses typed error }); ``` This diagnostic also improves the clarity message for the `leakingRequirements` diagnostic by adding additional guidance on how services should be collected in the layer creation body. - [#&#8203;558](https://github.com/Effect-TS/language-service/pull/558) [`cc5feb1`](https://github.com/Effect-TS/language-service/commit/cc5feb146de351a5466e8f8476e5b9d9020c797e) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `layerMergeAllWithDependencies` diagnostic to detect interdependencies in `Layer.mergeAll` calls This new diagnostic warns when `Layer.mergeAll` is called with layers that have interdependencies, where one layer provides a service that another layer in the same call requires. `Layer.mergeAll` creates layers in parallel, so dependencies between layers will not be satisfied. This can lead to runtime errors when trying to use the merged layer. Example of code that triggers the diagnostic: ```typescript export class DbConnection extends Effect.Service<DbConnection>()( "DbConnection", { succeed: {}, } ) {} export class FileSystem extends Effect.Service<FileSystem>()("FileSystem", { succeed: {}, }) {} export class Cache extends Effect.Service<Cache>()("Cache", { effect: Effect.as(FileSystem, {}), // Cache requires FileSystem }) {} // ⚠️ Warning on FileSystem.Default const layers = Layer.mergeAll( DbConnection.Default, FileSystem.Default, // This provides FileSystem Cache.Default // This requires FileSystem ); ``` Recommended approach: ```typescript // Provide FileSystem separately before merging const layers = Layer.mergeAll(DbConnection.Default, Cache.Default).pipe( Layer.provideMerge(FileSystem.Default) ); ``` The diagnostic correctly handles pass-through layers (layers that both provide and require the same type) and only reports on layers that actually provide dependencies needed by other layers in the same `mergeAll` call. - [#&#8203;557](https://github.com/Effect-TS/language-service/pull/557) [`83ce411`](https://github.com/Effect-TS/language-service/commit/83ce411288977606f8390641dc7127e36c6f3c5b) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `missingLayerContext` diagnostic to detect missing service requirements in Layer definitions This new diagnostic provides better error readability when you're missing service requirements in your Layer type definitions. It works similarly to the existing `missingEffectContext` diagnostic but specifically checks the `RIn` (requirements input) parameter of Layer types. Example of code that triggers the diagnostic: ```typescript import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; class ServiceA extends Effect.Service<ServiceA>()("ServiceA", { succeed: { a: 1 }, }) {} class ServiceB extends Effect.Service<ServiceB>()("ServiceB", { succeed: { a: 2 }, }) {} declare const layerWithServices: Layer.Layer<ServiceA, never, ServiceB>; function testFn(layer: Layer.Layer<ServiceA>) { return layer; } // ⚠️ Error: Missing 'ServiceB' in the expected Layer context. testFn(layerWithServices); ``` The diagnostic helps catch type mismatches early by clearly indicating which service requirements are missing when passing layers between functions or composing layers together. - [#&#8203;562](https://github.com/Effect-TS/language-service/pull/562) [`57d5af2`](https://github.com/Effect-TS/language-service/commit/57d5af251d3e477a8cf4c41dfae4593cede4c960) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `overview` CLI command that provides an overview of Effect-related exports in a project. The command analyzes TypeScript files and reports all exported yieldable errors, services (Context.Tag, Effect.Tag, Effect.Service), and layers with their types, file locations, and JSDoc descriptions. A progress spinner shows real-time file processing status. Usage: ```bash effect-language-service overview --file path/to/file.ts effect-language-service overview --project tsconfig.json ``` Example output: ``` ✔ Processed 3 file(s) Overview for 3 file(s). Yieldable Errors (1) NotFoundError ./src/errors.ts:5:1 NotFoundError Services (2) DbConnection ./src/services/db.ts:6:1 Manages database connections Layers (1) AppLive ./src/layers/app.ts:39:14 Layer<Cache | UserRepository, never, never> ``` ##### Patch Changes - [#&#8203;561](https://github.com/Effect-TS/language-service/pull/561) [`c3b3bd3`](https://github.com/Effect-TS/language-service/commit/c3b3bd364ff3c0567995b3c12e579459b69448e7) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add descriptions to CLI commands using `Command.withDescription` for improved help output when using `--help` flag. - [#&#8203;565](https://github.com/Effect-TS/language-service/pull/565) [`2274aef`](https://github.com/Effect-TS/language-service/commit/2274aef53902f2c31443b7e504d2add0bf24d6e4) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix `unnecessaryPipe` diagnostic and refactor not working with namespace imports from `effect/Function` (e.g., `Function.pipe()` or `Fn.pipe()`) - [#&#8203;560](https://github.com/Effect-TS/language-service/pull/560) [`75a480e`](https://github.com/Effect-TS/language-service/commit/75a480ebce3c5dfe29f22ee9d556ba1a043ba91b) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve diagnostic message for `unsupportedServiceAccessors` when used with `Effect.Tag` When the `unsupportedServiceAccessors` diagnostic is triggered on an `Effect.Tag` class (which doesn't allow disabling accessors), the message now includes a helpful suggestion to use `Context.Tag` instead: ```typescript export class MyService extends Effect.Tag("MyService")< MyService, { method: <A>(value: A) => Effect.Effect<A>; } >() {} // Diagnostic: Even if accessors are enabled, accessors for 'method' won't be available // because the signature have generic type parameters or multiple call signatures. // Effect.Tag does not allow to disable accessors, so you may want to use Context.Tag instead. ``` - [#&#8203;559](https://github.com/Effect-TS/language-service/pull/559) [`4c1f809`](https://github.com/Effect-TS/language-service/commit/4c1f809d2f88102652ceea67b93df8909b408d14) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve Layer Magic refactor ordering by considering both provided and required service counts The Layer Magic refactor now uses a combined ordering heuristic that considers both: 1. The number of services a layer provides 2. The number of services a layer requires This results in more optimal layer composition order, especially in complex dependency graphs where layers have varying numbers of dependencies. - [#&#8203;566](https://github.com/Effect-TS/language-service/pull/566) [`036c491`](https://github.com/Effect-TS/language-service/commit/036c49142581a1ea428205e3d3d1647963c556f9) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Simplify diagnostic messages for global Error type usage The diagnostic messages for `globalErrorInEffectCatch` and `globalErrorInEffectFailure` now use the more generic term "tagged errors" instead of "tagged errors (Data.TaggedError)" to provide cleaner, more concise guidance. ### [`v0.63.2`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0632) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.63.1...v0.63.2) ##### Patch Changes - [#&#8203;553](https://github.com/Effect-TS/language-service/pull/553) [`e64e3df`](https://github.com/Effect-TS/language-service/commit/e64e3dfe235398af388e7d3ffdd36dbd02422730) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - fix: ensure correct path resolution in CLI setup - Use `process.cwd()` explicitly in `path.resolve()` for consistent behavior - Resolve the selected tsconfig path to an absolute path before validation - Simplify error handling by using direct `yield*` for `TsConfigNotFoundError` ### [`v0.63.1`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0631) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.63.0...v0.63.1) ##### Patch Changes - [#&#8203;551](https://github.com/Effect-TS/language-service/pull/551) [`9b3d807`](https://github.com/Effect-TS/language-service/commit/9b3d8071ec3af88ce219cc5a6a96e792bbdca2a2) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - fix: resolve TypeScript from project's working directory The CLI now attempts to resolve TypeScript from the current working directory first before falling back to the package's bundled version. This ensures the CLI uses the same TypeScript version as the project being analyzed. ### [`v0.63.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0630) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.62.5...v0.63.0) ##### Minor Changes - [#&#8203;548](https://github.com/Effect-TS/language-service/pull/548) [`ef8c2de`](https://github.com/Effect-TS/language-service/commit/ef8c2de288a8450344157f726986a4f35736dd78) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `globalErrorInEffectFailure` diagnostic This diagnostic warns when `Effect.fail` is called with the global `Error` type. Using the global `Error` type in Effect failures is not recommended as they can get merged together, making it harder to distinguish between different error types. Instead, the diagnostic recommends using: - Tagged errors with `Data.TaggedError` - Custom error classes with a discriminator property (like `_tag`) Example: ```ts // This will trigger a warning Effect.fail(new Error("global error")); // These are recommended alternatives Effect.fail(new CustomError()); // where CustomError extends Data.TaggedError Effect.fail(new MyError()); // where MyError has a _tag property ``` - [#&#8203;545](https://github.com/Effect-TS/language-service/pull/545) [`c590b5a`](https://github.com/Effect-TS/language-service/commit/c590b5af59cc5b656c02ea6e03ba63d110ea65d3) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `effect-language-service setup` CLI command This new command provides an interactive wizard to guide users through the complete installation and configuration of the Effect Language Service. The setup command: - Analyzes your repository structure (package.json, tsconfig files) - Guides you through adding the package to devDependencies - Configures the TypeScript plugin in your tsconfig.json - Allows customizing diagnostic severity levels - Optionally adds prepare script for automatic patching - Optionally configures VS Code settings for workspace TypeScript usage - Shows a review of all changes before applying them Example usage: ```bash effect-language-service setup ``` The wizard will walk you through each step and show you exactly what changes will be made before applying them. - [#&#8203;550](https://github.com/Effect-TS/language-service/pull/550) [`4912ee4`](https://github.com/Effect-TS/language-service/commit/4912ee41531dc91ad0ba2828ea555cb79f2c6d9e) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add support for `@effect/sql`'s `Model.Class` in completions and diagnostics - Added `effectSqlModelSelfInClasses` completion: Auto-completes the `Self` type parameter when extending `Model.Class` from `@effect/sql` - Extended `classSelfMismatch` diagnostic: Now detects when the `Self` type parameter in `Model.Class<Self>` doesn't match the actual class name Example: ```ts import { Model } from "@&#8203;effect/sql"; import * as Schema from "effect/Schema"; // Completion triggers after "Model." to generate the full class boilerplate export class User extends Model.Class<User>("User")({ id: Schema.String, }) {} // Diagnostic warns when Self type parameter doesn't match class name export class User extends Model.Class<WrongName>("User")({ // ^^^^^^^^^ Self type should be "User" id: Schema.String, }) {} ``` ##### Patch Changes - [#&#8203;547](https://github.com/Effect-TS/language-service/pull/547) [`9058a37`](https://github.com/Effect-TS/language-service/commit/9058a373ba1567a9336d0c3b36de981337757219) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - refactor: simplify `unnecessaryFailYieldableError` diagnostic implementation Changed the implementation to check if a type extends `Cause.YieldableError` on-demand rather than fetching all yieldable error types upfront. - [#&#8203;549](https://github.com/Effect-TS/language-service/pull/549) [`039f4b2`](https://github.com/Effect-TS/language-service/commit/039f4b21da6e1d6ae695ba26cce0516d09f86643) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add `getTypeAtLocation` utility to `TypeCheckerUtils` This refactoring adds a new `getTypeAtLocation` function to `TypeCheckerUtils` that safely retrieves types while filtering out JSX-specific nodes (JSX elements, opening/closing tags, and JSX attributes) that could cause issues when calling `typeChecker.getTypeAtLocation`. The utility is now used across multiple diagnostics and features, reducing code duplication and ensuring consistent handling of edge cases: - `anyUnknownInErrorContext` - `catchUnfailableEffect` - `floatingEffect` - `globalErrorInEffectFailure` - `leakingRequirements` - `missedPipeableOpportunity` - `missingEffectServiceDependency` - `missingReturnYieldStar` - `multipleEffectProvide` - `nonObjectEffectServiceType` - `overriddenSchemaConstructor` - `returnEffectInGen` - `scopeInLayerEffect` - `strictBooleanExpressions` - `strictEffectProvide` - `unnecessaryFailYieldableError` - And other features like quick info, goto definition, and refactors ### [`v0.62.5`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0625) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.62.4...v0.62.5) ##### Patch Changes - [#&#8203;543](https://github.com/Effect-TS/language-service/pull/543) [`0b13f3c`](https://github.com/Effect-TS/language-service/commit/0b13f3c862b69a84e2b3368ab301a35af8a8bf63) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix unwanted autocompletions inside import declarations Previously, Effect.**, Option.**, and Either.\_\_ completions were incorrectly suggested inside import statements. This has been fixed by detecting when the completion is requested inside an import declaration and preventing these completions from appearing. Closes [#&#8203;541](https://github.com/Effect-TS/language-service/issues/541) ### [`v0.62.4`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0624) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.62.3...v0.62.4) ##### Patch Changes - [#&#8203;539](https://github.com/Effect-TS/language-service/pull/539) [`4cc88d2`](https://github.com/Effect-TS/language-service/commit/4cc88d2c72535ef7608c4c0b0ecdd8b676699874) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Improve layerMagic refactor to prioritize layers with more provided services The layerMagic refactor now uses a heuristic that prioritizes nodes with more provided services when generating layer composition code. This ensures that telemetry and tracing layers (which typically provide fewer services) are positioned as late as possible in the dependency graph, resulting in more intuitive and correct layer ordering. Example: When composing layers for services that depend on HttpClient with telemetry, the refactor now correctly places the telemetry layer (which provides fewer services) later in the composition chain. ### [`v0.62.3`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0623) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.62.2...v0.62.3) ##### Patch Changes - [#&#8203;537](https://github.com/Effect-TS/language-service/pull/537) [`e31c03b`](https://github.com/Effect-TS/language-service/commit/e31c03b086eebb2bb55f23cfb9eb4c26344785d7) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix counter increment timing in structural type to schema refactor to ensure proper naming of conflicting schemas (e.g., `User_1` instead of `User_0` for the first conflict) ### [`v0.62.2`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0622) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.62.1...v0.62.2) ##### Patch Changes - [#&#8203;535](https://github.com/Effect-TS/language-service/pull/535) [`361fc1e`](https://github.com/Effect-TS/language-service/commit/361fc1ee5b6cf7684e0cf1ff8806ef267936b9cd) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix duplicate schema names in "Refactor to Schema (Recursive Structural)" code generation. When the refactor encountered types with conflicting names, it was generating a unique suffix but not properly tracking the usage count, causing duplicate schema identifiers with different contents to be generated. This fix ensures that when a name conflict is detected and a unique suffix is added (e.g., `Tax`, `Tax_1`, `Tax_2`), the usage counter is properly incremented to prevent duplicate identifiers in the generated code. Fixes [#&#8203;534](https://github.com/Effect-TS/language-service/issues/534) ### [`v0.62.1`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0621) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.62.0...v0.62.1) ##### Patch Changes - [#&#8203;532](https://github.com/Effect-TS/language-service/pull/532) [`8f189aa`](https://github.com/Effect-TS/language-service/commit/8f189aa7d21b8a638e3bc9cf4fc834c684f1b70f) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix handling of read-only arrays in "Refactor to Schema (Recursive Structural)" code generation. The refactor now correctly distinguishes between mutable arrays (`Array<T>`) and read-only arrays (`ReadonlyArray<T>` or `readonly T[]`): - `Array<T>` is now converted to `Schema.mutable(Schema.Array(...))` to preserve mutability - `ReadonlyArray<T>` and `readonly T[]` are converted to `Schema.Array(...)` (read-only by default) This fixes compatibility issues with external libraries (like Stripe, BetterAuth) that expect mutable arrays in their API parameters. Fixes [#&#8203;531](https://github.com/Effect-TS/language-service/issues/531) ### [`v0.62.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0620) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.61.0...v0.62.0) ##### Minor Changes - [#&#8203;528](https://github.com/Effect-TS/language-service/pull/528) [`7dc14cf`](https://github.com/Effect-TS/language-service/commit/7dc14cfaebe737f4c13ebd55f30e39207a5029bb) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add typeToSchema codegen This adds a new `// @&#8203;effect-codegens typeToSchema` codegen that automatically generates Effect Schema classes from TypeScript types. Given a type alias with object members representing schemas to generate (e.g., `type ToGenerate = { UserSchema: User, TodoSchema: Todo }`), the codegen will create the corresponding Schema class definitions. The generated schemas: - Automatically detect and reuse existing schema definitions in the file - Support both type aliases and interfaces - Include outdated detection to warn when the source type changes - Work with the `outdatedEffectCodegen` diagnostic to provide automatic fix actions Example usage: ```typescript type User = { id: number; name: string; }; // @&#8203;effect-codegens typeToSchema export type ToGenerate = { UserSchema: User; }; // Generated by the codegen: export class UserSchema extends Schema.Class<UserSchema>("UserSchema")({ id: Schema.Number, name: Schema.String, }) {} ``` ##### Patch Changes - [#&#8203;530](https://github.com/Effect-TS/language-service/pull/530) [`5ecdc62`](https://github.com/Effect-TS/language-service/commit/5ecdc626dd6dcaad3e866b7e89decb10b99fca2d) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Fix `Refactor to Schema (Recursive Structural)` to support `exactOptionalPropertyTypes` When `exactOptionalPropertyTypes` is enabled in tsconfig, optional properties with types like `string | undefined` are not assignable to types defined as `prop?: string`. This fix generates `Schema.optionalWith(Schema.String, { exact: true })` instead of `Schema.optional(Schema.Union(Schema.Undefined, Schema.String))` to maintain type compatibility with external libraries that don't always include `undefined` in their optional property types. Example: ```typescript // With exactOptionalPropertyTypes enabled type User = { name?: string; // External library type (e.g., Stripe API) }; // Generated schema now uses: Schema.optionalWith(Schema.String, { exact: true }); // Instead of: Schema.optional(Schema.Union(Schema.Undefined, Schema.String)); ``` This ensures the generated schema maintains proper type compatibility with external libraries when using strict TypeScript configurations. ### [`v0.61.0`](https://github.com/Effect-TS/language-service/blob/HEAD/CHANGELOG.md#0610) [Compare Source](https://github.com/Effect-TS/language-service/compare/v0.60.0...v0.61.0) ##### Minor Changes - [#&#8203;525](https://github.com/Effect-TS/language-service/pull/525) [`e2dbbad`](https://github.com/Effect-TS/language-service/commit/e2dbbad00b06fb576767a5330e1cca048480264a) Thanks [@&#8203;mattiamanzati](https://github.com/mattiamanzati)! - Add Structural Type to Schema refactor Adds a new "Structural Type to Schema" refactor that converts TypeScript interfaces and type aliases to Effect Schema classes. This refactor analyzes the structure of types and generates appropriate Schema definitions, with intelligent detection and reuse of existing schemas. Example: ```typescript // Before export interface User { id: number; name: string; } // After (using the refactor) export class User extends Schema.Class<User>("User")({ id: Schema.Number, name: Schema.String, }) {} ``` The refactor supports: - All primitive types and common TypeScript constructs - Automatic reuse of existing Schema definitions for referenced types - Optional properties, unions, intersections, and nested structures - Both interface and type alias declarations </details> <details> <summary>Effect-TS/effect (@&#8203;effect/opentelemetry)</summary> ### [`v0.61.0`](https://github.com/Effect-TS/effect/blob/HEAD/packages/opentelemetry/CHANGELOG.md#0610) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/opentelemetry@0.60.0...@effect/opentelemetry@0.61.0) ##### Minor Changes - [#&#8203;5927](https://github.com/Effect-TS/effect/pull/5927) [`f4972ed`](https://github.com/Effect-TS/effect/commit/f4972eda6c3179070d0167a30985b760afa0a9f9) Thanks [@&#8203;davidgoli](https://github.com/davidgoli)! - Add protobuf protocol support for OTLP exporters This introduces an `OtlpSerialization` service for choosing between JSON and Protobuf encoding. **Breaking changes:** - `Otlp.layer` now requires an `OtlpSerialization` layer to be provided for the desired encoding format. **JSON encoding:** ```typescript import { Layer } from "effect" import { Otlp, OtlpSerialization } from "@&#8203;effect/opentelemetry" // Option 1: Explicit JSON layer const layer = Otlp.layerJson({ baseUrl: "http://localhost:4318", resource: { serviceName: "my-service" } }) // Option 2: Use `layer` and provide OtlpSerialization JSON layer const layer = Otlp.layer({ baseUrl: "http://localhost:4318", resource: { serviceName: "my-service" } }).pipe(Layer.provide(OtlpSerialization.layerJson)) ``` **Protobuf encoding:** ```typescript import { Otlp } from "@&#8203;effect/opentelemetry" // Simply use layerProtobuf for protobuf encoding const layer = Otlp.layerProtobuf({ baseUrl: "http://localhost:4318", resource: { serviceName: "my-service" } }) ``` - [#&#8203;5952](https://github.com/Effect-TS/effect/pull/5952) [`4725a7e`](https://github.com/Effect-TS/effect/commit/4725a7eceac8b8b66ee55bbd975e1adab67df271) Thanks [@&#8203;clayroach](https://github.com/clayroach)! - Make [@&#8203;opentelemetry/sdk-trace-node](https://github.com/opentelemetry/sdk-trace-node) and [@&#8203;opentelemetry/sdk-trace-web](https://github.com/opentelemetry/sdk-trace-web) required peer dependencies instead of optional. This fixes module resolution errors when importing from the main entry point. ##### Patch Changes - [#&#8203;5929](https://github.com/Effect-TS/effect/pull/5929) [`abdab5c`](https://github.com/Effect-TS/effect/commit/abdab5cc4ede8272799f86caa6557a8a9674ab37) Thanks [@&#8203;schickling](https://github.com/schickling)! - Fix `Span.addEvent` to correctly handle the 2-argument overload with attributes. Previously, calling `span.addEvent("name", { foo: "bar" })` would throw `TypeError: {} is not iterable` because the implementation incorrectly treated the attributes object as a `TimeInput`. The fix adds proper runtime type discrimination to distinguish between `TimeInput` (number, Date, or HrTime tuple) and `Attributes` (plain object). - Updated dependencies \[[`7e925ea`](https://github.com/Effect-TS/effect/commit/7e925eae4a9db556bcbf7e8b6a762ccf8588aa3b), [`118e7a4`](https://github.com/Effect-TS/effect/commit/118e7a4af5b86f6d707a40d3b03157b6bf5827e7), [`d7e75d6`](https://github.com/Effect-TS/effect/commit/d7e75d6d15294bbcd7ac49a0e9005848379ea86f), [`4860d1e`](https://github.com/Effect-TS/effect/commit/4860d1e09b436061ea4aeca07605a669793560fc)]: - effect\@&#8203;3.19.15 - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.2 ### [`v0.60.0`](https://github.com/Effect-TS/effect/blob/HEAD/packages/opentelemetry/CHANGELOG.md#0600) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/opentelemetry@0.59.3...@effect/opentelemetry@0.60.0) ##### Patch Changes - Updated dependencies \[[`77eeb86`](https://github.com/Effect-TS/effect/commit/77eeb86ddf208e51ec25932af83d52d3b4700371), [`ff7053f`](https://github.com/Effect-TS/effect/commit/ff7053f6d8508567b6145239f97aacc5773b0c53), [`287c32c`](https://github.com/Effect-TS/effect/commit/287c32c9f10da8e96f2b9ef8424316189d9ad4b3)]: - effect\@&#8203;3.19.13 - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.0 </details> <details> <summary>Effect-TS/effect (@&#8203;effect/platform)</summary> ### [`v0.94.5`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform/CHANGELOG.md#0945) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform@0.94.4...@effect/platform@0.94.5) ##### Patch Changes - [#&#8203;6050](https://github.com/Effect-TS/effect/pull/6050) [`d67c708`](https://github.com/Effect-TS/effect/commit/d67c7089ba8616b2d48ef7324312267a2a6f310a) Thanks [@&#8203;tim-smart](https://github.com/tim-smart)! - Backport Effect 4 `contentType` support for `HttpBody` JSON / URL-encoded constructors and `HttpServerResponse` JSON / URL-encoded helpers. - Updated dependencies \[[`a8c436f`](https://github.com/Effect-TS/effect/commit/a8c436f7004cc2a8ce2daec589ea7256b91c324f)]: - effect\@&#8203;3.19.17 ### [`v0.94.4`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform/CHANGELOG.md#0944) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform@0.94.3...@effect/platform@0.94.4) ##### Patch Changes - [#&#8203;6035](https://github.com/Effect-TS/effect/pull/6035) [`22d9d27`](https://github.com/Effect-TS/effect/commit/22d9d27bc007db86d9e4748c17324fab5f950c7d) Thanks [@&#8203;tim-smart](https://github.com/tim-smart)! - Fix `HttpServerError.causeResponse` to prefer 499 when a client abort interrupt is present. ### [`v0.94.3`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform/CHANGELOG.md#0943) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform@0.94.2...@effect/platform@0.94.3) ##### Patch Changes - [#&#8203;6021](https://github.com/Effect-TS/effect/pull/6021) [`0023c19`](https://github.com/Effect-TS/effect/commit/0023c19c63c402c050d496817ba92aceea7f25b7) Thanks [@&#8203;codewithkenzo](https://github.com/codewithkenzo)! - Fix `HttpClientRequest.appendUrl` to properly join URL paths. Previously, `appendUrl` used simple string concatenation which could produce invalid URLs: ```typescript // Before (broken): appendUrl("https://api.example.com/v1", "users") // Result: "https://api.example.com/v1users" (missing slash!) ``` Now it ensures proper path joining: ```typescript // After (fixed): appendUrl("https://api.example.com/v1", "users") // Result: "https://api.example.com/v1/users" ``` - [#&#8203;6019](https://github.com/Effect-TS/effect/pull/6019) [`9a96b87`](https://github.com/Effect-TS/effect/commit/9a96b87a33a75ebc277c585e60758ab4409c0d9e) Thanks [@&#8203;codewithkenzo](https://github.com/codewithkenzo)! - Fix `retryTransient` to use correct transient status codes Changed `isTransientResponse` from `status >= 429` to an explicit allowlist (408, 429, 500, 502, 503, 504). This correctly excludes 501 (Not Implemented) and 505+ permanent errors, while including 408 (Request Timeout) which was previously missed. Also aligned response retry behavior with v4: the `while` predicate now only applies to error retries, not response retries. Response retries are determined solely by `isTransientResponse`. This matches the semantic intent since `while` is typed for errors, not responses. Fixes [#&#8203;5995](https://github.com/Effect-TS/effect/issues/5995) - Updated dependencies \[[`e71889f`](https://github.com/Effect-TS/effect/commit/e71889f35b081d13b7da2c04d2f81d6933056b49)]: - effect\@&#8203;3.19.16 ### [`v0.94.2`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform/CHANGELOG.md#0942) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform@0.94.1...@effect/platform@0.94.2) ##### Patch Changes - [#&#8203;5977](https://github.com/Effect-TS/effect/pull/5977) [`118e7a4`](https://github.com/Effect-TS/effect/commit/118e7a4af5b86f6d707a40d3b03157b6bf5827e7) Thanks [@&#8203;scotttrinh](https://github.com/scotttrinh)! - Added `rows` and `isTTY` properties to `Terminal` - Updated dependencies \[[`7e925ea`](https://github.com/Effect-TS/effect/commit/7e925eae4a9db556bcbf7e8b6a762ccf8588aa3b), [`d7e75d6`](https://github.com/Effect-TS/effect/commit/d7e75d6d15294bbcd7ac49a0e9005848379ea86f), [`4860d1e`](https://github.com/Effect-TS/effect/commit/4860d1e09b436061ea4aeca07605a669793560fc)]: - effect\@&#8203;3.19.15 ### [`v0.94.1`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform/CHANGELOG.md#0941) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform@0.94.0...@effect/platform@0.94.1) ##### Patch Changes - [#&#8203;5936](https://github.com/Effect-TS/effect/pull/5936) [`65e9e35`](https://github.com/Effect-TS/effect/commit/65e9e35157cbdfb40826ddad34555c4ebcf7c0b0) Thanks [@&#8203;schickling](https://github.com/schickling)! - Document subtle CORS middleware `allowedHeaders` behavior: when empty array (default), it reflects back the client's `Access-Control-Request-Headers` (permissive), and when non-empty array, it only allows specified headers (restrictive). Added comprehensive JSDoc with examples. - [#&#8203;5940](https://github.com/Effect-TS/effect/pull/5940) [`ee69cd7`](https://github.com/Effect-TS/effect/commit/ee69cd796feb3d8d1046f52edd8950404cd4ed0e) Thanks [@&#8203;kitlangton](https://github.com/kitlangton)! - HttpServerResponse: fix `fromWeb` to preserve Content-Type header when response has a body Previously, when converting a web `Response` to an `HttpServerResponse` via `fromWeb`, the `Content-Type` header was not passed to `Body.stream()`, causing it to default to `application/octet-stream`. This affected any code using `HttpApp.fromWebHandler` to wrap web handlers, as JSON responses would incorrectly have their Content-Type set to `application/octet-stream` instead of `application/json`. - Updated dependencies \[[`488d6e8`](https://github.com/Effect-TS/effect/commit/488d6e870eda3dfc137f4940bb69416f61ed8fe3)]: - effect\@&#8203;3.19.14 ### [`v0.94.0`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform/CHANGELOG.md#0940) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform@0.93.8...@effect/platform@0.94.0) ##### Minor Changes - [#&#8203;5917](https://github.com/Effect-TS/effect/pull/5917) [`ff7053f`](https://github.com/Effect-TS/effect/commit/ff7053f6d8508567b6145239f97aacc5773b0c53) Thanks [@&#8203;tim-smart](https://github.com/tim-smart)! - support non-errors in HttpClient.retryTransient ##### Patch Changes - Updated dependencies \[[`77eeb86`](https://github.com/Effect-TS/effect/commit/77eeb86ddf208e51ec25932af83d52d3b4700371), [`287c32c`](https://github.com/Effect-TS/effect/commit/287c32c9f10da8e96f2b9ef8424316189d9ad4b3)]: - effect\@&#8203;3.19.13 </details> <details> <summary>Effect-TS/effect (@&#8203;effect/platform-browser)</summary> ### [`v0.74.0`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform-browser/CHANGELOG.md#0740) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform-browser@0.73.0...@effect/platform-browser@0.74.0) ##### Patch Changes - Updated dependencies \[[`77eeb86`](https://github.com/Effect-TS/effect/commit/77eeb86ddf208e51ec25932af83d52d3b4700371), [`ff7053f`](https://github.com/Effect-TS/effect/commit/ff7053f6d8508567b6145239f97aacc5773b0c53), [`287c32c`](https://github.com/Effect-TS/effect/commit/287c32c9f10da8e96f2b9ef8424316189d9ad4b3)]: - effect\@&#8203;3.19.13 - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.0 </details> <details> <summary>Effect-TS/effect (@&#8203;effect/platform-bun)</summary> ### [`v0.87.1`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform-bun/CHANGELOG.md#0871) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform-bun@0.87.0...@effect/platform-bun@0.87.1) ##### Patch Changes - [#&#8203;5977](https://github.com/Effect-TS/effect/pull/5977) [`118e7a4`](https://github.com/Effect-TS/effect/commit/118e7a4af5b86f6d707a40d3b03157b6bf5827e7) Thanks [@&#8203;scotttrinh](https://github.com/scotttrinh)! - Added `rows` and `isTTY` properties to `Terminal` - Updated dependencies \[[`7e925ea`](https://github.com/Effect-TS/effect/commit/7e925eae4a9db556bcbf7e8b6a762ccf8588aa3b), [`118e7a4`](https://github.com/Effect-TS/effect/commit/118e7a4af5b86f6d707a40d3b03157b6bf5827e7), [`d7e75d6`](https://github.com/Effect-TS/effect/commit/d7e75d6d15294bbcd7ac49a0e9005848379ea86f), [`4860d1e`](https://github.com/Effect-TS/effect/commit/4860d1e09b436061ea4aeca07605a669793560fc)]: - effect\@&#8203;3.19.15 - [@&#8203;effect/platform-node-shared](https://github.com/effect/platform-node-shared)@&#8203;0.57.1 - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.2 ### [`v0.87.0`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform-bun/CHANGELOG.md#0870) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform-bun@0.86.0...@effect/platform-bun@0.87.0) ##### Patch Changes - Updated dependencies \[[`77eeb86`](https://github.com/Effect-TS/effect/commit/77eeb86ddf208e51ec25932af83d52d3b4700371), [`ff7053f`](https://github.com/Effect-TS/effect/commit/ff7053f6d8508567b6145239f97aacc5773b0c53), [`287c32c`](https://github.com/Effect-TS/effect/commit/287c32c9f10da8e96f2b9ef8424316189d9ad4b3)]: - effect\@&#8203;3.19.13 - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.0 - [@&#8203;effect/cluster](https://github.com/effect/cluster)@&#8203;0.56.0 - [@&#8203;effect/platform-node-shared](https://github.com/effect/platform-node-shared)@&#8203;0.57.0 - [@&#8203;effect/rpc](https://github.com/effect/rpc)@&#8203;0.73.0 - [@&#8203;effect/sql](https://github.com/effect/sql)@&#8203;0.49.0 </details> <details> <summary>Effect-TS/effect (@&#8203;effect/platform-node)</summary> ### [`v0.104.1`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform-node/CHANGELOG.md#01041) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform-node@0.104.0...@effect/platform-node@0.104.1) ##### Patch Changes - [#&#8203;5977](https://github.com/Effect-TS/effect/pull/5977) [`118e7a4`](https://github.com/Effect-TS/effect/commit/118e7a4af5b86f6d707a40d3b03157b6bf5827e7) Thanks [@&#8203;scotttrinh](https://github.com/scotttrinh)! - Added `rows` and `isTTY` properties to `Terminal` - Updated dependencies \[[`7e925ea`](https://github.com/Effect-TS/effect/commit/7e925eae4a9db556bcbf7e8b6a762ccf8588aa3b), [`118e7a4`](https://github.com/Effect-TS/effect/commit/118e7a4af5b86f6d707a40d3b03157b6bf5827e7), [`d7e75d6`](https://github.com/Effect-TS/effect/commit/d7e75d6d15294bbcd7ac49a0e9005848379ea86f), [`4860d1e`](https://github.com/Effect-TS/effect/commit/4860d1e09b436061ea4aeca07605a669793560fc)]: - effect\@&#8203;3.19.15 - [@&#8203;effect/platform-node-shared](https://github.com/effect/platform-node-shared)@&#8203;0.57.1 - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.2 ### [`v0.104.0`](https://github.com/Effect-TS/effect/blob/HEAD/packages/platform-node/CHANGELOG.md#01040) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/platform-node@0.103.0...@effect/platform-node@0.104.0) ##### Patch Changes - Updated dependencies \[[`77eeb86`](https://github.com/Effect-TS/effect/commit/77eeb86ddf208e51ec25932af83d52d3b4700371), [`ff7053f`](https://github.com/Effect-TS/effect/commit/ff7053f6d8508567b6145239f97aacc5773b0c53), [`287c32c`](https://github.com/Effect-TS/effect/commit/287c32c9f10da8e96f2b9ef8424316189d9ad4b3)]: - effect\@&#8203;3.19.13 - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.0 - [@&#8203;effect/cluster](https://github.com/effect/cluster)@&#8203;0.56.0 - [@&#8203;effect/platform-node-shared](https://github.com/effect/platform-node-shared)@&#8203;0.57.0 - [@&#8203;effect/rpc](https://github.com/effect/rpc)@&#8203;0.73.0 - [@&#8203;effect/sql](https://github.com/effect/sql)@&#8203;0.49.0 </details> <details> <summary>Effect-TS/effect (@&#8203;effect/rpc)</summary> ### [`v0.73.2`](https://github.com/Effect-TS/effect/blob/HEAD/packages/rpc/CHANGELOG.md#0732) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/rpc@0.73.1...@effect/rpc@0.73.2) ##### Patch Changes - [#&#8203;6065](https://github.com/Effect-TS/effect/pull/6065) [`94b00c8`](https://github.com/Effect-TS/effect/commit/94b00c8e4c5c150f858c95262d0ff1433276ede5) Thanks [@&#8203;marbemac](https://github.com/marbemac)! - Add optional `defect` parameter to `Rpc.make` for customizing defect serialization per-RPC. Defaults to `Schema.Defect`, preserving existing behavior. - Updated dependencies \[[`12b1f1e`](https://github.com/Effect-TS/effect/commit/12b1f1eadf649e30dec581b7351ba3abb12f8004)]: - effect\@&#8203;3.19.18 ### [`v0.73.1`](https://github.com/Effect-TS/effect/blob/HEAD/packages/rpc/CHANGELOG.md#0731) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/rpc@0.73.0...@effect/rpc@0.73.1) ##### Patch Changes - [#&#8203;6055](https://github.com/Effect-TS/effect/pull/6055) [`598ff76`](https://github.com/Effect-TS/effect/commit/598ff7642fdee7f3379bca49e378a0e9647bbe75) Thanks [@&#8203;marbemac](https://github.com/marbemac)! - Fix `sendRequestDefect` and `sendDefect` to encode defects with `Schema.Defect`, preventing `Error` objects from being serialized as `{}` due to non-enumerable properties. - Updated dependencies \[[`d67c708`](https://github.com/Effect-TS/effect/commit/d67c7089ba8616b2d48ef7324312267a2a6f310a), [`a8c436f`](https://github.com/Effect-TS/effect/commit/a8c436f7004cc2a8ce2daec589ea7256b91c324f)]: - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.5 - effect\@&#8203;3.19.17 ### [`v0.73.0`](https://github.com/Effect-TS/effect/blob/HEAD/packages/rpc/CHANGELOG.md#0730) [Compare Source](https://github.com/Effect-TS/effect/compare/@effect/rpc@0.72.2...@effect/rpc@0.73.0) ##### Patch Changes - Updated dependencies \[[`77eeb86`](https://github.com/Effect-TS/effect/commit/77eeb86ddf208e51ec25932af83d52d3b4700371), [`ff7053f`](https://github.com/Effect-TS/effect/commit/ff7053f6d8508567b6145239f97aacc5773b0c53), [`287c32c`](https://github.com/Effect-TS/effect/commit/287c32c9f10da8e96f2b9ef8424316189d9ad4b3)]: - effect\@&#8203;3.19.13 - [@&#8203;effect/platform](https://github.com/effect/platform)@&#8203;0.94.0 </details> <details> <summary>open-telemetry/opentelemetry-js (@&#8203;opentelemetry/exporter-trace-otlp-http)</summary> ### [`v0.213.0`](https://github.com/open-telemetry/opentelemetry-js/compare/ad92be4c2c1094745a85b0b7eeff1444a11b1b4a...541e1b4ad83ad2093459794a18283228fe58d199) [Compare Source](https://github.com/open-telemetry/opentelemetry-js/compare/ad92be4c2c1094745a85b0b7eeff1444a11b1b4a...541e1b4ad83ad2093459794a18283228fe58d199) ### [`v0.212.0`](https://github.com/open-telemetry/opentelemetry-js/compare/38924cbff2a6e924ce8a2a227d3a72de52fbcd35...ad92be4c2c1094745a85b0b7eeff1444a11b1b4a) [Compare Source](https://github.com/open-telemetry/opentelemetry-js/compare/38924cbff2a6e924ce8a2a227d3a72de52fbcd35...ad92be4c2c1094745a85b0b7eeff1444a11b1b4a) ### [`v0.211.0`](https://github.com/open-telemetry/opentelemetry-js/compare/5e6504d2a3a7ce3aaa211d9e2a5b002a0e4d7da1...38924cbff2a6e924ce8a2a227d3a72de52fbcd35) [Compare Source](https://github.com/open-telemetry/opentelemetry-js/compare/5e6504d2a3a7ce3aaa211d9e2a5b002a0e4d7da1...38924cbff2a6e924ce8a2a227d3a72de52fbcd35) ### [`v0.210.0`](https://github.com/open-telemetry/opentelemetry-js/compare/228cb920bbededf4f3fd6355e88409e84bfd87b6...5e6504d2a3a7ce3aaa211d9e2a5b002a0e4d7da1) [Compare Source](https://github.com/open-telemetry/opentelemetry-js/compare/228cb920bbededf4f3fd6355e88409e84bfd87b6...5e6504d2a3a7ce3aaa211d9e2a5b002a0e4d7da1) ### [`v0.209.0`](https://github.com/open-telemetry/opentelemetry-js/compare/5eaa869bf08e6a16eec37eac44084257e8e21209...228cb920bbededf4f3fd6355e88409e84bfd87b6) [Compare Source](https://github.com/open-telemetry/opentelemetry-js/compare/5eaa869bf08e6a16eec37eac44084257e8e21209...228cb920bbededf4f3fd6355e88409e84bfd87b6) </details> <details> <summary>lucide-icons/lucide (lucide-react)</summary> ### [`v0.577.0`](https://github.com/lucide-icons/lucide/releases/tag/0.577.0): Version 0.577.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.576.0...0.577.0) #### What's Changed - chore(deps): bump rollup from 4.53.3 to 4.59.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;4106](https://github.com/lucide-icons/lucide/pull/4106) - fix(repo): correctly ignore docs/releaseMetadata via .gitignore by [@&#8203;bhavberi](https://github.com/bhavberi) in [#&#8203;4100](https://github.com/lucide-icons/lucide/pull/4100) - feat(icons): added `ellipse` icon by [@&#8203;KISHORE-KUMAR-S](https://github.com/KISHORE-KUMAR-S) in [#&#8203;3749](https://github.com/lucide-icons/lucide/pull/3749) #### New Contributors - [@&#8203;bhavberi](https://github.com/bhavberi) made their first contribution in [#&#8203;4100](https://github.com/lucide-icons/lucide/pull/4100) - [@&#8203;KISHORE-KUMAR-S](https://github.com/KISHORE-KUMAR-S) made their first contribution in [#&#8203;3749](https://github.com/lucide-icons/lucide/pull/3749) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.576.0...0.577.0> ### [`v0.576.0`](https://github.com/lucide-icons/lucide/releases/tag/0.576.0): Version 0.576.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.575.0...0.576.0) #### What's Changed - Added zodiac signs by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;712](https://github.com/lucide-icons/lucide/pull/712) - fix(icons): fixes guideline violations in `package-*` icons. by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4074](https://github.com/lucide-icons/lucide/pull/4074) - fix(icons): changed `receipt` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4075](https://github.com/lucide-icons/lucide/pull/4075) - fix(icons): updated `cuboid` icon tags and categories by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4095](https://github.com/lucide-icons/lucide/pull/4095) - fix(icons): changed `cuboid` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;4098](https://github.com/lucide-icons/lucide/pull/4098) - fix(lucide-font, lucide-static): Fixing stable code points by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3894](https://github.com/lucide-icons/lucide/pull/3894) - feat(icons): added `fishing-rod` icon by [@&#8203;7ender](https://github.com/7ender) in [#&#8203;3839](https://github.com/lucide-icons/lucide/pull/3839) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.575.0...0.576.0> ### [`v0.575.0`](https://github.com/lucide-icons/lucide/releases/tag/0.575.0): Version 0.575.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.574.0...0.575.0) #### What's Changed - feat(icons): added `message-square-check` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4076](https://github.com/lucide-icons/lucide/pull/4076) - fix(lucide): Fix ESM Module output path in build by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;4084](https://github.com/lucide-icons/lucide/pull/4084) - feat(icons): added `metronome` icon by [@&#8203;edwloef](https://github.com/edwloef) in [#&#8203;4063](https://github.com/lucide-icons/lucide/pull/4063) - fix(icons): remove execution permission of SVG files by [@&#8203;duckafire](https://github.com/duckafire) in [#&#8203;4053](https://github.com/lucide-icons/lucide/pull/4053) - fix(icons): changed `file-pen-line` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3970](https://github.com/lucide-icons/lucide/pull/3970) - feat(icons): added `square-arrow-right-exit` and `square-arrow-right-enter` icons by [@&#8203;EthanHazel](https://github.com/EthanHazel) in [#&#8203;3958](https://github.com/lucide-icons/lucide/pull/3958) - fix(icons): renamed `flip-*` to `square-centerline-dashed-*` by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3945](https://github.com/lucide-icons/lucide/pull/3945) #### New Contributors - [@&#8203;edwloef](https://github.com/edwloef) made their first contribution in [#&#8203;4063](https://github.com/lucide-icons/lucide/pull/4063) - [@&#8203;duckafire](https://github.com/duckafire) made their first contribution in [#&#8203;4053](https://github.com/lucide-icons/lucide/pull/4053) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.573.0...0.575.0> ### [`v0.574.0`](https://github.com/lucide-icons/lucide/releases/tag/0.574.0): Version 0.574.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.573.0...0.574.0) #### What's Changed - fix(icons): changed `rocking-chair` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3445](https://github.com/lucide-icons/lucide/pull/3445) - fix(icons): flipped `coins` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3158](https://github.com/lucide-icons/lucide/pull/3158) - feat(icons): added `x-line-top` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;2838](https://github.com/lucide-icons/lucide/pull/2838) - feat(icons): added `mouse-left` icon by [@&#8203;marvfash](https://github.com/marvfash) in [#&#8203;2788](https://github.com/lucide-icons/lucide/pull/2788) - feat(icons): added `mouse-right` icon by [@&#8203;marvfash](https://github.com/marvfash) in [#&#8203;2787](https://github.com/lucide-icons/lucide/pull/2787) #### New Contributors - [@&#8203;marvfash](https://github.com/marvfash) made their first contribution in [#&#8203;2788](https://github.com/lucide-icons/lucide/pull/2788) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.572.0...0.574.0> ### [`v0.573.0`](https://github.com/lucide-icons/lucide/releases/tag/0.573.0): Version 0.573.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.572.0...0.573.0) #### What's Changed - fix(icons): changed `rocking-chair` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3445](https://github.com/lucide-icons/lucide/pull/3445) - fix(icons): flipped `coins` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3158](https://github.com/lucide-icons/lucide/pull/3158) - feat(icons): added `x-line-top` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;2838](https://github.com/lucide-icons/lucide/pull/2838) - feat(icons): added `mouse-left` icon by [@&#8203;marvfash](https://github.com/marvfash) in [#&#8203;2788](https://github.com/lucide-icons/lucide/pull/2788) - feat(icons): added `mouse-right` icon by [@&#8203;marvfash](https://github.com/marvfash) in [#&#8203;2787](https://github.com/lucide-icons/lucide/pull/2787) #### New Contributors - [@&#8203;marvfash](https://github.com/marvfash) made their first contribution in [#&#8203;2788](https://github.com/lucide-icons/lucide/pull/2788) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.572.0...0.573.0> ### [`v0.572.0`](https://github.com/lucide-icons/lucide/releases/tag/0.572.0): Version 0.572.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.571.0...0.572.0) #### What's Changed - feat(icons): added `message-circle-check` icon by [@&#8203;Shrinks99](https://github.com/Shrinks99) in [#&#8203;3770](https://github.com/lucide-icons/lucide/pull/3770) #### New Contributors - [@&#8203;Shrinks99](https://github.com/Shrinks99) made their first contribution in [#&#8203;3770](https://github.com/lucide-icons/lucide/pull/3770) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.571.0...0.572.0> ### [`v0.571.0`](https://github.com/lucide-icons/lucide/releases/tag/0.571.0): Version 0.571.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.570.0...0.571.0) #### What's Changed - fix(icons): rearange `circle`-icons path and circle order by [@&#8203;adamlindqvist](https://github.com/adamlindqvist) in [#&#8203;3746](https://github.com/lucide-icons/lucide/pull/3746) - feat(icons): added `shelving-unit` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3041](https://github.com/lucide-icons/lucide/pull/3041) #### New Contributors - [@&#8203;adamlindqvist](https://github.com/adamlindqvist) made their first contribution in [#&#8203;3746](https://github.com/lucide-icons/lucide/pull/3746) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.570.0...0.571.0> ### [`v0.570.0`](https://github.com/lucide-icons/lucide/releases/tag/0.570.0): Version 0.570.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.569.0...0.570.0) #### What's Changed - feat(icons): added `towel-rack` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3350](https://github.com/lucide-icons/lucide/pull/3350) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.569.0...0.570.0> ### [`v0.569.0`](https://github.com/lucide-icons/lucide/releases/tag/0.569.0): Version 0.569.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.568.0...0.569.0) #### What's Changed - fix(icons): changed `clipboard-pen` icon by [@&#8203;Spleefies](https://github.com/Spleefies) in [#&#8203;4006](https://github.com/lucide-icons/lucide/pull/4006) - feat(icons): add `mirror-round` and `mirror-rectangular` by [@&#8203;Muhammad-Aqib-Bashir](https://github.com/Muhammad-Aqib-Bashir) in [#&#8203;3832](https://github.com/lucide-icons/lucide/pull/3832) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.568.0...0.569.0> ### [`v0.568.0`](https://github.com/lucide-icons/lucide/releases/tag/0.568.0): Version 0.568.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.567.0...0.568.0) #### What's Changed - fix(icons): adjusted `clapperboard` so slash is no longer protruding by [@&#8203;torfmuer](https://github.com/torfmuer) in [#&#8203;3764](https://github.com/lucide-icons/lucide/pull/3764) - feat(icons): Add `git-merge-conflict` icon by [@&#8203;timmy471](https://github.com/timmy471) in [#&#8203;3008](https://github.com/lucide-icons/lucide/pull/3008) #### New Contributors - [@&#8203;torfmuer](https://github.com/torfmuer) made their first contribution in [#&#8203;3764](https://github.com/lucide-icons/lucide/pull/3764) - [@&#8203;timmy471](https://github.com/timmy471) made their first contribution in [#&#8203;3008](https://github.com/lucide-icons/lucide/pull/3008) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.567.0...0.568.0> ### [`v0.567.0`](https://github.com/lucide-icons/lucide/releases/tag/0.567.0): Version 0.567.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.566.0...0.567.0) #### What's Changed - chore(tags): added tags to `info` by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;4047](https://github.com/lucide-icons/lucide/pull/4047) - fix(icons): changed `gift` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3977](https://github.com/lucide-icons/lucide/pull/3977) - feat(icons): added `line-dot-right-horizontal` icon by [@&#8203;nathan-de-pachtere](https://github.com/nathan-de-pachtere) in [#&#8203;3742](https://github.com/lucide-icons/lucide/pull/3742) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.566.0...0.567.0> ### [`v0.566.0`](https://github.com/lucide-icons/lucide/releases/tag/0.566.0): Version 0.566.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.565.0...0.566.0) #### What's Changed - fix(icons): changed `forklift` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;4069](https://github.com/lucide-icons/lucide/pull/4069) - fix(icons): changed `rocket` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;4067](https://github.com/lucide-icons/lucide/pull/4067) - feat(icons): added `globe-off` icon by [@&#8203;TimNekk](https://github.com/TimNekk) in [#&#8203;4051](https://github.com/lucide-icons/lucide/pull/4051) #### New Contributors - [@&#8203;TimNekk](https://github.com/TimNekk) made their first contribution in [#&#8203;4051](https://github.com/lucide-icons/lucide/pull/4051) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.565.0...0.566.0> ### [`v0.565.0`](https://github.com/lucide-icons/lucide/releases/tag/0.565.0): Version 0.565.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.564.0...0.565.0) #### What's Changed - feat(icons): add `lens-concave` and `lens-convex` by [@&#8203;Muhammad-Aqib-Bashir](https://github.com/Muhammad-Aqib-Bashir) in [#&#8203;3831](https://github.com/lucide-icons/lucide/pull/3831) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.564.0...0.565.0> ### [`v0.564.0`](https://github.com/lucide-icons/lucide/releases/tag/0.564.0): Version 0.564.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.563.0...0.564.0) #### What's Changed - chore(docs): Improve SEO icon detail pages by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;4040](https://github.com/lucide-icons/lucide/pull/4040) - feat(icons): added `database-search` icon by [@&#8203;Spleefies](https://github.com/Spleefies) in [#&#8203;4003](https://github.com/lucide-icons/lucide/pull/4003) - fix(icons): changed `user-lock` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3971](https://github.com/lucide-icons/lucide/pull/3971) - fix(icons): changed `bug-off` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3972](https://github.com/lucide-icons/lucide/pull/3972) - fix(icons): changed `bell-dot` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3973](https://github.com/lucide-icons/lucide/pull/3973) - fix(icons): changed `bandage` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3967](https://github.com/lucide-icons/lucide/pull/3967) - fix(icons): changed `hard-drive` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3622](https://github.com/lucide-icons/lucide/pull/3622) - fix(icons): changed `git-branch` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3938](https://github.com/lucide-icons/lucide/pull/3938) - fix(icons): changed `file-cog` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3965](https://github.com/lucide-icons/lucide/pull/3965) - fix(icons): changed `cloud-alert` and `cloud-check` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3976](https://github.com/lucide-icons/lucide/pull/3976) - feat(icons): adds `user-key` and `user-round-key`, updates other `-key` icons to match by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4044](https://github.com/lucide-icons/lucide/pull/4044) #### New Contributors - [@&#8203;Spleefies](https://github.com/Spleefies) made their first contribution in [#&#8203;4003](https://github.com/lucide-icons/lucide/pull/4003) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.563.1...0.564.0> ### [`v0.563.0`](https://github.com/lucide-icons/lucide/releases/tag/0.563.0): Version 0.563.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.562.0...0.563.0) #### What's Changed `aria-hidden` is by default added to icons components in all packages. This was already added to `lucide-react` before. Making icons accessible, you can add an `aria-label` or a `title`. See docs about [accessibility](https://lucide.dev/guide/advanced/accessibility). #### All changes - chore(dev): Enable ligatures in font build configuration by [@&#8203;dcxo](https://github.com/dcxo) in [#&#8203;3876](https://github.com/lucide-icons/lucide/pull/3876) - chore(repo): add Android to brand stopwords by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3895](https://github.com/lucide-icons/lucide/pull/3895) - fix(site): add missing titles and a title template by [@&#8203;taimar](https://github.com/taimar) in [#&#8203;3920](https://github.com/lucide-icons/lucide/pull/3920) - fix(site): unify and improve the styling of input fields by [@&#8203;taimar](https://github.com/taimar) in [#&#8203;3919](https://github.com/lucide-icons/lucide/pull/3919) - fix(icons): changed `star-off` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3952](https://github.com/lucide-icons/lucide/pull/3952) - fix(icons): changed `tickets-plane` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3928](https://github.com/lucide-icons/lucide/pull/3928) - fix(icons): changed `monitor-off` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3962](https://github.com/lucide-icons/lucide/pull/3962) - fix(icons): changed `lasso` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3961](https://github.com/lucide-icons/lucide/pull/3961) - fix(icons): changed `cloud-off` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3942](https://github.com/lucide-icons/lucide/pull/3942) - docs(site): added lucide-web-components third-party package by [@&#8203;midesweb](https://github.com/midesweb) in [#&#8203;3948](https://github.com/lucide-icons/lucide/pull/3948) - chore(deps-dev): bump preact from 10.27.2 to 10.27.3 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3955](https://github.com/lucide-icons/lucide/pull/3955) - feat(icon): add globe-x icon with metadata by [@&#8203;Muhammad-Aqib-Bashir](https://github.com/Muhammad-Aqib-Bashir) in [#&#8203;3827](https://github.com/lucide-icons/lucide/pull/3827) - fix(icons): changed `waypoints` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3990](https://github.com/lucide-icons/lucide/pull/3990) - fix(icons): changed `bookmark` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;2906](https://github.com/lucide-icons/lucide/pull/2906) - fix(icons): changed `message-square-dashed` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3959](https://github.com/lucide-icons/lucide/pull/3959) - fix(icons): changed `cloudy` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3966](https://github.com/lucide-icons/lucide/pull/3966) - fix(github-actions): resolved spelling mistake in gh issue close command by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;4000](https://github.com/lucide-icons/lucide/pull/4000) - Update LICENSE by [@&#8203;alxgraphy](https://github.com/alxgraphy) in [#&#8203;4009](https://github.com/lucide-icons/lucide/pull/4009) - feat(packages): Added aria-hidden fallback for decorative icons to all packages by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3604](https://github.com/lucide-icons/lucide/pull/3604) - chore(deps): bump lodash from 4.17.21 to 4.17.23 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;4020](https://github.com/lucide-icons/lucide/pull/4020) - chore(deps): bump lodash-es from 4.17.21 to 4.17.23 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;4019](https://github.com/lucide-icons/lucide/pull/4019) - Suggest anchoring to a specific lucide version when using a cdn by [@&#8203;drago1520](https://github.com/drago1520) in [#&#8203;3727](https://github.com/lucide-icons/lucide/pull/3727) - feat(docs): upgraded backers block by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4014](https://github.com/lucide-icons/lucide/pull/4014) - fix(site): hide native search input clear "X" icon by [@&#8203;epifaniofrancisco](https://github.com/epifaniofrancisco) in [#&#8203;3933](https://github.com/lucide-icons/lucide/pull/3933) - feat(icons): added `printer-x` icon by [@&#8203;lt25106](https://github.com/lt25106) in [#&#8203;3941](https://github.com/lucide-icons/lucide/pull/3941) #### New Contributors - [@&#8203;dcxo](https://github.com/dcxo) made their first contribution in [#&#8203;3876](https://github.com/lucide-icons/lucide/pull/3876) - [@&#8203;midesweb](https://github.com/midesweb) made their first contribution in [#&#8203;3948](https://github.com/lucide-icons/lucide/pull/3948) - [@&#8203;alxgraphy](https://github.com/alxgraphy) made their first contribution in [#&#8203;4009](https://github.com/lucide-icons/lucide/pull/4009) - [@&#8203;drago1520](https://github.com/drago1520) made their first contribution in [#&#8203;3727](https://github.com/lucide-icons/lucide/pull/3727) - [@&#8203;lt25106](https://github.com/lt25106) made their first contribution in [#&#8203;3941](https://github.com/lucide-icons/lucide/pull/3941) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.562.0...0.563.0> ### [`v0.562.0`](https://github.com/lucide-icons/lucide/releases/tag/0.562.0): Version 0.562.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.561.0...0.562.0) #### What's Changed - fix(icons): changed `paint-bucket` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3880](https://github.com/lucide-icons/lucide/pull/3880) - fix(site): Fix and unify color-picker font-size by [@&#8203;taimar](https://github.com/taimar) in [#&#8203;3889](https://github.com/lucide-icons/lucide/pull/3889) - fix(react-native-web): only add className prop to parent Icon component by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3892](https://github.com/lucide-icons/lucide/pull/3892) - fix(lucide-react-native): remove icons namespace export to enable tree-shaking by [@&#8203;jtomaszewski](https://github.com/jtomaszewski) in [#&#8203;3868](https://github.com/lucide-icons/lucide/pull/3868) - feat(icons): added `toolbox` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3871](https://github.com/lucide-icons/lucide/pull/3871) #### New Contributors - [@&#8203;taimar](https://github.com/taimar) made their first contribution in [#&#8203;3889](https://github.com/lucide-icons/lucide/pull/3889) - [@&#8203;jtomaszewski](https://github.com/jtomaszewski) made their first contribution in [#&#8203;3868](https://github.com/lucide-icons/lucide/pull/3868) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.561.0...0.562.0> ### [`v0.561.0`](https://github.com/lucide-icons/lucide/releases/tag/0.561.0): Version 0.561.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.560.0...0.561.0) #### What's Changed - fix(site): Small adjustments color picker and add clear button search bar by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3851](https://github.com/lucide-icons/lucide/pull/3851) - feat(icons): added `stone` icon by [@&#8203;Alportan](https://github.com/Alportan) in [#&#8203;3850](https://github.com/lucide-icons/lucide/pull/3850) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.560.0...0.561.0> ### [`v0.560.0`](https://github.com/lucide-icons/lucide/releases/tag/0.560.0): Version 0.560.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.559.0...0.560.0) #### What's Changed - feat(icons): added `cannabis-off` icon by [@&#8203;NickVeles](https://github.com/NickVeles) in [#&#8203;3748](https://github.com/lucide-icons/lucide/pull/3748) #### New Contributors - [@&#8203;NickVeles](https://github.com/NickVeles) made their first contribution in [#&#8203;3748](https://github.com/lucide-icons/lucide/pull/3748) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.559.0...0.560.0> ### [`v0.559.0`](https://github.com/lucide-icons/lucide/releases/tag/0.559.0): Version 0.559.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.558.0...0.559.0) #### What's Changed - feat(icons): added `fishing-hook` icon by [@&#8203;7ender](https://github.com/7ender) in [#&#8203;3837](https://github.com/lucide-icons/lucide/pull/3837) #### New Contributors - [@&#8203;7ender](https://github.com/7ender) made their first contribution in [#&#8203;3837](https://github.com/lucide-icons/lucide/pull/3837) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.558.0...0.559.0> ### [`v0.558.0`](https://github.com/lucide-icons/lucide/releases/tag/0.558.0): Version 0.558.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.557.0...0.558.0) #### What's Changed - feat(icons): added `hd` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;2958](https://github.com/lucide-icons/lucide/pull/2958) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.557.0...0.558.0> ### [`v0.557.0`](https://github.com/lucide-icons/lucide/releases/tag/0.557.0): Version 0.557.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.556.0...0.557.0) #### What's Changed - fix(github/workflows/ci): fixes linting issues by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3858](https://github.com/lucide-icons/lucide/pull/3858) - fix(icons): changed `memory-stick` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3017](https://github.com/lucide-icons/lucide/pull/3017) - fix(icons): changed `microchip` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3018](https://github.com/lucide-icons/lucide/pull/3018) - chore(repo): Update Node version and overal cleanup by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3861](https://github.com/lucide-icons/lucide/pull/3861) - fix(icons): changed `paint-bucket` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3865](https://github.com/lucide-icons/lucide/pull/3865) - fix(icons): changed `brush-cleaning` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3863](https://github.com/lucide-icons/lucide/pull/3863) - fix(icons): Swap `thumbs-up` `thumbs-down` paths to fix fill issue by [@&#8203;theianjones](https://github.com/theianjones) in [#&#8203;3873](https://github.com/lucide-icons/lucide/pull/3873) - fix(icons): changed `tickets` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3859](https://github.com/lucide-icons/lucide/pull/3859) - feat(icons): added `layers-plus` icon by [@&#8203;juanisidoro](https://github.com/juanisidoro) in [#&#8203;3367](https://github.com/lucide-icons/lucide/pull/3367) - docs(dev): Fix code sample for vanilla JS by [@&#8203;wavebeem](https://github.com/wavebeem) in [#&#8203;3836](https://github.com/lucide-icons/lucide/pull/3836) - feat(icons): add `search-error` icon by [@&#8203;Veatec22](https://github.com/Veatec22) in [#&#8203;3292](https://github.com/lucide-icons/lucide/pull/3292) - feat(icons): Add `cloud-sync` and `cloud-backup` by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3466](https://github.com/lucide-icons/lucide/pull/3466) - feat(icons): added `circle-pile` icon by [@&#8203;nathan-de-pachtere](https://github.com/nathan-de-pachtere) in [#&#8203;3681](https://github.com/lucide-icons/lucide/pull/3681) - feat(icons): added `balloon` icon by [@&#8203;peteruithoven](https://github.com/peteruithoven) in [#&#8203;2519](https://github.com/lucide-icons/lucide/pull/2519) #### New Contributors - [@&#8203;theianjones](https://github.com/theianjones) made their first contribution in [#&#8203;3873](https://github.com/lucide-icons/lucide/pull/3873) - [@&#8203;juanisidoro](https://github.com/juanisidoro) made their first contribution in [#&#8203;3367](https://github.com/lucide-icons/lucide/pull/3367) - [@&#8203;wavebeem](https://github.com/wavebeem) made their first contribution in [#&#8203;3836](https://github.com/lucide-icons/lucide/pull/3836) - [@&#8203;Veatec22](https://github.com/Veatec22) made their first contribution in [#&#8203;3292](https://github.com/lucide-icons/lucide/pull/3292) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.556.0...0.557.0> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi40Mi4zIiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNSIsInRhcmdldEJyYW5jaCI6Im5leHQiLCJsYWJlbHMiOltdfQ==-->
renovate-bot added 1 commit 2025-12-10 13:03:08 +01:00
Update dependency @effect/language-service to ^0.62.0
Some checks failed
Lint / lint (push) Failing after 14s
Build / build (pull_request) Failing after 23s
d499a6aa28
renovate-bot changed title from Update dependency @effect/language-service to ^0.62.0 to Update bun minor+patch updates 2025-12-11 13:03:02 +01:00
renovate-bot added 2 commits 2025-12-11 13:03:03 +01:00
Update dependency @effect/language-service to ^0.62.0
Some checks failed
Lint / lint (push) Failing after 14s
Build / build (pull_request) Failing after 23s
d499a6aa28
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 18s
e193146d03
renovate-bot added 2 commits 2025-12-12 13:03:08 +01:00
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 18s
e193146d03
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 18s
d686bc4eac
renovate-bot added 2 commits 2025-12-18 13:03:25 +01:00
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 18s
d686bc4eac
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 19s
50deb3d0fa
renovate-bot added 2 commits 2025-12-19 13:06:44 +01:00
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 19s
50deb3d0fa
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 18s
423fb0e00f
renovate-bot added 2 commits 2025-12-29 13:06:44 +01:00
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 18s
423fb0e00f
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 5s
Build / build (pull_request) Failing after 18s
2024438fa4
renovate-bot added 2 commits 2026-01-04 13:06:44 +01:00
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 5s
Build / build (pull_request) Failing after 18s
2024438fa4
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 5s
Build / build (pull_request) Failing after 18s
1a7cb5c963
renovate-bot added 2 commits 2026-01-09 13:06:49 +01:00
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 5s
Build / build (pull_request) Failing after 18s
1a7cb5c963
Update bun minor+patch updates
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 18s
c9112fff52
renovate-bot force-pushed renovate/bun-minor-patch from c9112fff52 to a36a6dcead 2026-01-13 13:07:03 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from a36a6dcead to e0fa6ddcf0 2026-01-15 13:06:30 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from e0fa6ddcf0 to 32dd51932d 2026-01-17 13:06:29 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 32dd51932d to 1182ba64bb 2026-01-18 13:06:18 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 1182ba64bb to c449b70d80 2026-01-20 12:48:16 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from c449b70d80 to 7573bb614f 2026-01-21 13:06:53 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 7573bb614f to 05a0de1513 2026-01-22 13:06:53 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 05a0de1513 to cadb35cf78 2026-01-23 13:06:20 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from cadb35cf78 to c5f82113da 2026-02-05 13:07:10 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from c5f82113da to 812bc30a1a 2026-02-13 13:06:27 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 812bc30a1a to 31a9e69899 2026-02-16 13:06:23 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 31a9e69899 to dfa6d6a632 2026-02-17 13:06:26 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from dfa6d6a632 to 65b33052c2 2026-02-18 13:07:02 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 65b33052c2 to f829eae90e 2026-02-19 13:07:27 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from f829eae90e to 50cb7f6d40 2026-02-20 13:06:51 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 50cb7f6d40 to 4d157063cb 2026-02-25 13:07:00 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 4d157063cb to 043ead7937 2026-02-27 13:06:42 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 043ead7937 to 9508185429 2026-03-02 13:06:56 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 9508185429 to 7a6851f544 2026-03-04 13:06:43 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 7a6851f544 to 4b2e3961ab 2026-03-06 13:07:20 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 4b2e3961ab to 63502dcdfa 2026-03-08 13:06:18 +01:00 Compare
renovate-bot force-pushed renovate/bun-minor-patch from 63502dcdfa to 2e08b45961 2026-03-13 13:06:52 +01:00 Compare
Some checks failed
Lint / lint (push) Failing after 6s
Build / build (pull_request) Failing after 20s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/bun-minor-patch:renovate/bun-minor-patch
git checkout renovate/bun-minor-patch
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Thilawyn/website#77