Converter icon indicating copy to clipboard operation
Converter copied to clipboard

method apply is defined twice

Open fdietze opened this issue 2 years ago • 2 comments

Hi! I just tried to use knex (https://knexjs.org/#Installation-node) from scalajs, and got the following error:

sbt-converter: 1.0.0-beta37

[error] ZincCompiler.scala:230 msg.get() [Error] /.../core/target/streams/_global/stImport/_global/streams/sources/k/knex/src/main/scala/typings/knex/mod/Knex_.scala:7115: method apply is defined twice;
[error]   the conflicting method apply was defined at line 7086:9 [project => core, ms => 110731]
[error] ZincCompiler.scala:230 msg.get() one error found [project => core, ms => 110912]
[error] Phase3Compile.scala:147 err Compilation failed: -Xplugin:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-compiler_2.13.8/1.8.0/scalajs-compiler_2.13.8-1.8.0.jar, -encoding, utf-8, -feature, -g:notailcalls, -language:implicitConversions, -language:higherKinds, -language:existentials, -bootclasspath, /.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.8/scala-library-2.13.8.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.8/scala-library-2.13.8.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.8/scala-library-2.13.8.jar, -classpath, /.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.13.8/scala-compiler-2.13.8.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.8/scala-reflect-2.13.8.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/jline/jline/3.21.0/jline-3.21.0.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/net/java/dev/jna/jna/5.9.0/jna-5.9.0.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.13/1.8.0/scalajs-library_2.13-1.8.0.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-compiler_2.13.8/1.8.0/scalajs-compiler_2.13.8-1.8.0.jar:/.../.ivy2/local/org.scalablytyped/node_sjs1_2.13/17.0.10-2f3058/jars/node_sjs1_2.13.jar:/.../.ivy2/local/org.scalablytyped/tarn_sjs1_2.13/3.0.2-2d0a02/jars/tarn_sjs1_2.13.jar:/.../.ivy2/local/org.scalablytyped/std_sjs1_2.13/4.3-8f2b57/jars/std_sjs1_2.13.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-dom_sjs1_2.13/2.0.0/scalajs-dom_sjs1_2.13-2.0.0.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.13/1.5.1/scalajs-library_2.13-1.5.1.jar:/.../.cache/coursier/v1/https/repo1.maven.org/maven2/com/olvind/scalablytyped-runtime_sjs1_2.13/2.4.2/scalablytyped-runtime_sjs1_2.13-2.4.2.jar [Error] /.../core/target/streams/_global/stImport/_global/streams/sources/k/knex/src/main/scala/typings/knex/mod/Knex_.scala:7115: method apply is defined twice;
[error]   the conflicting method apply was defined at line 7086:9 [thread => 159, project => core, ms => 111129, phase => build, id => knex, flavour => NormalFlavour]

Typescript interface: https://github.com/knex/knex/blob/22f954435672650e85b4fb741391313e56aab2e4/types/index.d.ts#L1440

 interface Where<TRecord = any, TResult = unknown>
    extends WhereRaw<TRecord, TResult>,
    WhereWrapped<TRecord, TResult>,
    WhereNull<TRecord, TResult> {
    (raw: Raw): QueryBuilder<TRecord, TResult>;
    (callback: QueryCallback<TRecord, TResult>): QueryBuilder<TRecord, TResult>;
    (object: DbRecord<ResolveTableType<TRecord>>): QueryBuilder<TRecord, TResult>;
    (object: Readonly<Object>): QueryBuilder<TRecord, TResult>;
    <T extends keyof ResolveTableType<TRecord>>(
      columnName: T,
      value: DbColumn<ResolveTableType<TRecord>[T]> | null
    ): QueryBuilder<TRecord, TResult>;
    (columnName: string, value: Value | null): QueryBuilder<TRecord, TResult>;
    <T extends keyof ResolveTableType<TRecord>>(
      columnName: T,
      operator: ComparisonOperator,
      value: DbColumn<ResolveTableType<TRecord>[T]> | null
    ): QueryBuilder<TRecord, TResult>;
    (columnName: string, operator: string, value: Value | null): QueryBuilder<
      TRecord,
      TResult
    >;
    <T extends keyof ResolveTableType<TRecord>, TRecordInner, TResultInner>(
      columnName: T,
      operator: ComparisonOperator,
      value: QueryBuilder<TRecordInner, TResultInner>
    ): QueryBuilder<TRecord, TResult>;
    <TRecordInner, TResultInner>(
      columnName: string,
      operator: string,
      value: QueryBuilder<TRecordInner, TResultInner>
    ): QueryBuilder<TRecord, TResult>;
    (left: Raw, operator: string, right: Value | null): QueryBuilder<
      TRecord,
      TResult
    >;
    <TRecordInner, TResultInner>(
      left: Raw,
      operator: string,
      right: QueryBuilder<TRecordInner, TResultInner>
    ): QueryBuilder<TRecord, TResult>;
  }

Generated Scala code:

(first and last apply methods conflict)

  @js.native
  trait Where[TRecord, TResult]
    extends WhereWrapped[TRecord, TResult]
       with WhereRaw[TRecord, TResult]
       with WhereNull[TRecord, TResult] {
    
    def apply(callback: QueryCallback[TRecord, TResult]): QueryBuilder[TRecord, TResult] = js.native
    def apply(columnName: String, operator: String): QueryBuilder[TRecord, TResult] = js.native
    def apply(columnName: String, operator: String, value: Value): QueryBuilder[TRecord, TResult] = js.native
    def apply(left: Raw[Any], operator: String): QueryBuilder[TRecord, TResult] = js.native
    def apply(left: Raw[Any], operator: String, right: Value): QueryBuilder[TRecord, TResult] = js.native
    def apply(`object`: ReadonlyObject): QueryBuilder[TRecord, TResult] = js.native
    def apply(`object`: DbRecord[ResolveTableType[TRecord, base]]): QueryBuilder[TRecord, TResult] = js.native
    def apply[T /* <: /* keyof knex.knex.Knex.ResolveTableType<TRecord, 'base'> */ String */](columnName: T): QueryBuilder[TRecord, TResult] = js.native
    def apply[T /* <: /* keyof knex.knex.Knex.ResolveTableType<TRecord, 'base'> */ String */](columnName: T, operator: ComparisonOperator): QueryBuilder[TRecord, TResult] = js.native
    def apply[T /* <: /* keyof knex.knex.Knex.ResolveTableType<TRecord, 'base'> */ String */](
      columnName: T,
      operator: ComparisonOperator,
      value: DbColumn[
          /* import warning: importer.ImportType#apply Failed type conversion: knex.knex.Knex.ResolveTableType<TRecord, 'base'>[T] */ js.Any
        ]
    ): QueryBuilder[TRecord, TResult] = js.native
    def apply[T /* <: /* keyof knex.knex.Knex.ResolveTableType<TRecord, 'base'> */ String */](
      columnName: T,
      value: DbColumn[
          /* import warning: importer.ImportType#apply Failed type conversion: knex.knex.Knex.ResolveTableType<TRecord, 'base'>[T] */ js.Any
        ]
    ): QueryBuilder[TRecord, TResult] = js.native
    /* InferMemberOverrides */
    override def apply[TResult2](sql: String): (QueryBuilder[TRecord, TResult2]) with (QueryBuilder[TRecord, TResult]) = js.native
    def apply[TRecordInner, TResultInner](columnName: String, operator: String, value: QueryBuilder[TRecordInner, TResultInner]): QueryBuilder[TRecord, TResult] = js.native
    def apply[TRecordInner, TResultInner](left: Raw[Any], operator: String, right: QueryBuilder[TRecordInner, TResultInner]): QueryBuilder[TRecord, TResult] = js.native
    def apply[T /* <: /* keyof knex.knex.Knex.ResolveTableType<TRecord, 'base'> */ String */, TRecordInner, TResultInner](columnName: T, operator: ComparisonOperator, value: QueryBuilder[TRecordInner, TResultInner]): QueryBuilder[TRecord, TResult] = js.native
    
    /* InferMemberOverrides */
    override def apply(arg1: /* callback */ QueryCallback[TRecord, TResult]): QueryBuilder[TRecord, TResult] = js.native
  }

fdietze avatar Jan 19 '22 14:01 fdietze

Thanks for the report.

Good thing there are so few overloads! Scala 2 or 3?

oyvindberg avatar Jan 19 '22 16:01 oyvindberg

Scala 2

fdietze avatar Jan 19 '22 19:01 fdietze