diff --git a/bit-ignore.bazelrc b/bit-ignore.bazelrc index cdffbc156..80e07e0fc 100644 --- a/bit-ignore.bazelrc +++ b/bit-ignore.bazelrc @@ -1 +1 @@ -common --deleted_packages=examples/jetpack_compose,examples/jetpack_compose/app,examples/jetpack_compose/compose-ui,examples/jetpack_compose/stub,examples/jetpack_compose/stub/sun,examples/jetpack_compose/stub/sun/misc,examples/ksp,examples/ksp/third_party,examples/dagger,examples/dagger/third_party,examples/dagger/src,examples/dagger/src/coffee,examples/plugin,examples/plugin/src,examples/plugin/src/parcelize,examples/plugin/src/noarg,examples/plugin/src/serialization,examples/plugin/src/allopen,examples/plugin/src/sam_with_receiver,examples/plugin/src/allopennoarg,examples/trivial,examples/trivial/app,examples/android,examples/android/libKtAndroid,examples/android/libKtAndroid/res,examples/android/libKtAndroid/res/values,examples/android/libKtAndroid/res2,examples/android/libKtAndroid/res2/values,examples/android/libKtAndroid/src,examples/android/libKtAndroid/src/test,examples/android/libKtAndroid/src/test/java,examples/android/libKtAndroid/src/test/java/examples,examples/android/libKtAndroid/src/test/java/examples/android,examples/android/libKtAndroid/src/test/java/examples/android/lib,examples/android/libKtAndroid/src/main,examples/android/libKtAndroid/src/main/java,examples/android/libKtAndroid/src/main/java/examples,examples/android/libKtAndroid/src/main/java/examples/android,examples/android/libKtAndroid/src/main/java/examples/android/lib,examples/android/app,examples/android/app/src,examples/android/app/src/main,examples/android/exclude,examples/android/bzl,examples/android/components,examples/android/third_party,examples/android/libJava,examples/android/libJava/src,examples/android/libJava/src/main,examples/android/libJava/src/main/java,examples/android/libJava/src/main/java/examples,examples/android/libJava/src/main/java/examples/java,examples/android/libJava/src/main/java/examples/java/lib,examples/android/libAndroid,examples/android/libAndroid/res,examples/android/libAndroid/res/values-ja,examples/android/libAndroid/res/values-en-rCA,examples/android/libAndroid/res/values,examples/android/libAndroid/res/values-fr-rCA,examples/android/libAndroid/res/values-en-rGB,examples/android/libAndroid/res/values-en-rAU,examples/android/libAndroid/res/values-es,examples/android/libAndroid/src,examples/android/libAndroid/src/main,examples/android/libAndroid/src/main/java,examples/android/libAndroid/src/main/java/examples,examples/android/libAndroid/src/main/java/examples/android,examples/android/libAndroid/src/main/java/examples/android/lib2,examples/android/libAndroid/src/main/kotlin,examples/android/libAndroid/src/main/kotlin/examples,examples/android/libAndroid/src/main/kotlin/examples/android,examples/android/libAndroid/src/main/kotlin/examples/android/lib2,examples/deps,examples/deps/libKtAndroid1,examples/deps/libKtAndroid1/src,examples/deps/libKtAndroid1/src/main,examples/deps/libKtAndroid1/src/main/res,examples/deps/libKtAndroid1/src/main/res/values,examples/deps/libKtAndroid1/src/main/kt,examples/deps/libKtAndroid1/src/main/kt/examples,examples/deps/libKtAndroid1/src/main/kt/examples/deps,examples/deps/libKt2,examples/deps/libKt2/src,examples/deps/libKt2/src/main,examples/deps/libKt2/src/main/kt,examples/deps/libKt2/src/main/kt/examples,examples/deps/libKt2/src/main/kt/examples/deps,examples/deps/libKt3,examples/deps/libKt3/src,examples/deps/libKt3/src/main,examples/deps/libKt3/src/main/kt,examples/deps/libKt3/src/main/kt/examples,examples/deps/libKt3/src/main/kt/examples/deps,examples/deps/libKt4,examples/deps/libKt4/src,examples/deps/libKt4/src/main,examples/deps/libKt4/src/main/kt,examples/deps/libKt4/src/main/kt/examples,examples/deps/libKt4/src/main/kt/examples/deps,examples/deps/libAndroid2,examples/deps/libAndroid2/src,examples/deps/libAndroid2/src/main,examples/deps/libAndroid2/src/main/res,examples/deps/libAndroid2/src/main/res/values,examples/deps/libAndroid2/src/main/java,examples/deps/libAndroid2/src/main/java/examples,examples/deps/libAndroid2/src/main/java/examples/deps,examples/deps/libJava1,examples/deps/libJava1/src,examples/deps/libJava1/src/main,examples/deps/libJava1/src/main/java,examples/deps/libJava1/src/main/java/examples,examples/deps/libJava1/src/main/java/examples/deps,examples/deps/libAndroid3,examples/deps/libAndroid3/src,examples/deps/libAndroid3/src/main,examples/deps/libAndroid3/src/main/res,examples/deps/libAndroid3/src/main/res/values,examples/deps/libAndroid3/src/main/java,examples/deps/libAndroid3/src/main/java/examples,examples/deps/libAndroid3/src/main/java/examples/deps,examples/deps/libAndroid4,examples/deps/libAndroid4/src,examples/deps/libAndroid4/src/main,examples/deps/libAndroid4/src/main/res,examples/deps/libAndroid4/src/main/res/values,examples/deps/libAndroid4/src/main/java,examples/deps/libAndroid4/src/main/java/examples,examples/deps/libAndroid4/src/main/java/examples/deps,examples/deps/bzl,examples/deps/libKt1,examples/deps/libKt1/src,examples/deps/libKt1/src/main,examples/deps/libKt1/src/main/kt,examples/deps/libKt1/src/main/kt/examples,examples/deps/libKt1/src/main/kt/examples/deps,examples/deps/libKtAndroid2,examples/deps/libKtAndroid2/src,examples/deps/libKtAndroid2/src/main,examples/deps/libKtAndroid2/src/main/res,examples/deps/libKtAndroid2/src/main/res/values,examples/deps/libKtAndroid2/src/main/kt,examples/deps/libKtAndroid2/src/main/kt/examples,examples/deps/libKtAndroid2/src/main/kt/examples/deps,examples/deps/libKtAndroid4,examples/deps/libKtAndroid4/src,examples/deps/libKtAndroid4/src/main,examples/deps/libKtAndroid4/src/main/res,examples/deps/libKtAndroid4/src/main/res/values,examples/deps/libKtAndroid4/src/main/kt,examples/deps/libKtAndroid4/src/main/kt/examples,examples/deps/libKtAndroid4/src/main/kt/examples/deps,examples/deps/libKtAndroid3,examples/deps/libKtAndroid3/src,examples/deps/libKtAndroid3/src/main,examples/deps/libKtAndroid3/src/main/res,examples/deps/libKtAndroid3/src/main/res/values,examples/deps/libKtAndroid3/src/main/kt,examples/deps/libKtAndroid3/src/main/kt/examples,examples/deps/libKtAndroid3/src/main/kt/examples/deps,examples/deps/libJava2,examples/deps/libJava2/src,examples/deps/libJava2/src/main,examples/deps/libJava2/src/main/java,examples/deps/libJava2/src/main/java/examples,examples/deps/libJava2/src/main/java/examples/deps,examples/deps/libAndroid1,examples/deps/libAndroid1/src,examples/deps/libAndroid1/src/main,examples/deps/libAndroid1/src/main/res,examples/deps/libAndroid1/src/main/res/values,examples/deps/libAndroid1/src/main/java,examples/deps/libAndroid1/src/main/java/examples,examples/deps/libAndroid1/src/main/java/examples/deps,examples/deps/libJava3,examples/deps/libJava3/src,examples/deps/libJava3/src/main,examples/deps/libJava3/src/main/java,examples/deps/libJava3/src/main/java/examples,examples/deps/libJava3/src/main/java/examples/deps,examples/deps/libJava4,examples/deps/libJava4/src,examples/deps/libJava4/src/main,examples/deps/libJava4/src/main/java,examples/deps/libJava4/src/main/java/examples,examples/deps/libJava4/src/main/java/examples/deps,examples/node,examples/multiplex,examples/multiplex/exclude,examples/multiplex/src,examples/anvil,examples/anvil/app,examples/anvil/app/src,examples/anvil/app/src/androidTest,examples/anvil/app/src/androidTest/java,examples/anvil/app/src/androidTest/java/com,examples/anvil/app/src/androidTest/java/com/squareup,examples/anvil/app/src/androidTest/java/com/squareup/anvil,examples/anvil/app/src/androidTest/java/com/squareup/anvil/sample,examples/anvil/app/src/test,examples/anvil/app/src/test/java,examples/anvil/app/src/test/java/com,examples/anvil/app/src/test/java/com/squareup,examples/anvil/app/src/test/java/com/squareup/anvil,examples/anvil/app/src/test/java/com/squareup/anvil/sample,examples/anvil/app/src/main,examples/anvil/app/src/main/java,examples/anvil/app/src/main/java/com,examples/anvil/app/src/main/java/com/squareup,examples/anvil/app/src/main/java/com/squareup/anvil,examples/anvil/app/src/main/java/com/squareup/anvil/sample,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-mdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/drawable-v24,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-hdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/drawable,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-xxxhdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-ja,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-en-rCA,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/layout,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-xxhdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-night,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-fr-rCA,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-en-rGB,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-en-rAU,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-xhdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-es,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-anydpi-v26,examples/anvil/library,examples/anvil/library/src,examples/anvil/library/src/main,examples/anvil/library/src/main/java,examples/anvil/library/src/main/java/com,examples/anvil/library/src/main/java/com/squareup,examples/anvil/library/src/main/java/com/squareup/anvil,examples/anvil/library/src/main/java/com/squareup/anvil/sample,examples/anvil/library/src/main/java/com/squareup/anvil/sample/father,examples/anvil/library/src/main/java/com/squareup/anvil/sample/mother,examples/anvil/third_party,examples/anvil/repro,examples/anvil/repro/src,examples/anvil/repro/src/main,examples/anvil/repro/src/main/java,examples/anvil/repro/src/main/java/com,examples/anvil/repro/src/main/java/com/repro,examples/anvil/repro/src/main/java/com/repro/lib,examples/anvil/scopes,examples/anvil/scopes/src,examples/anvil/scopes/src/main,examples/anvil/scopes/src/main/java,examples/anvil/scopes/src/main/java/com,examples/anvil/scopes/src/main/java/com/squareup,examples/anvil/scopes/src/main/java/com/squareup/scopes,examples/associates,examples/associates/projects,examples/associates/projects/core,examples/associates/projects/core/impl,examples/associates/projects/core/impl/src,examples/associates/projects/core/impl/src/test,examples/associates/projects/core/impl/src/test/kotlin,examples/associates/projects/core/impl/src/test/kotlin/core,examples/associates/projects/core/impl/src/test/kotlin/core/impl,examples/associates/projects/core/impl/src/main,examples/associates/projects/core/impl/src/main/kotlin,examples/associates/projects/core/impl/src/main/kotlin/core,examples/associates/projects/core/impl/src/main/kotlin/core/impl,examples/associates/projects/core/api,examples/associates/projects/core/api/src,examples/associates/projects/core/api/src/test,examples/associates/projects/core/api/src/test/kotlin,examples/associates/projects/core/api/src/test/kotlin/core,examples/associates/projects/core/api/src/test/kotlin/core/api,examples/associates/projects/core/api/src/main,examples/associates/projects/core/api/src/main/kotlin,examples/associates/projects/core/api/src/main/kotlin/core,examples/associates/projects/core/api/src/main/kotlin/core/api +common --deleted_packages=examples/jetpack_compose,examples/jetpack_compose/app,examples/jetpack_compose/compose-ui,examples/ksp,examples/ksp/third_party,examples/dagger,examples/dagger/third_party,examples/dagger/src,examples/dagger/src/coffee,examples/plugin,examples/plugin/src,examples/plugin/src/parcelize,examples/plugin/src/noarg,examples/plugin/src/serialization,examples/plugin/src/allopen,examples/plugin/src/sam_with_receiver,examples/plugin/src/allopennoarg,examples/trivial,examples/trivial/app,examples/android,examples/android/libKtAndroid,examples/android/libKtAndroid/res,examples/android/libKtAndroid/res/values,examples/android/libKtAndroid/res2,examples/android/libKtAndroid/res2/values,examples/android/libKtAndroid/src,examples/android/libKtAndroid/src/test,examples/android/libKtAndroid/src/test/java,examples/android/libKtAndroid/src/test/java/examples,examples/android/libKtAndroid/src/test/java/examples/android,examples/android/libKtAndroid/src/test/java/examples/android/lib,examples/android/libKtAndroid/src/main,examples/android/libKtAndroid/src/main/java,examples/android/libKtAndroid/src/main/java/examples,examples/android/libKtAndroid/src/main/java/examples/android,examples/android/libKtAndroid/src/main/java/examples/android/lib,examples/android/app,examples/android/app/src,examples/android/app/src/main,examples/android/bzl,examples/android/third_party,examples/android/libJava,examples/android/libJava/src,examples/android/libJava/src/main,examples/android/libJava/src/main/java,examples/android/libJava/src/main/java/examples,examples/android/libJava/src/main/java/examples/java,examples/android/libJava/src/main/java/examples/java/lib,examples/android/libAndroid,examples/android/libAndroid/res,examples/android/libAndroid/res/values-ja,examples/android/libAndroid/res/values-en-rCA,examples/android/libAndroid/res/values,examples/android/libAndroid/res/values-fr-rCA,examples/android/libAndroid/res/values-en-rGB,examples/android/libAndroid/res/values-en-rAU,examples/android/libAndroid/res/values-es,examples/android/libAndroid/src,examples/android/libAndroid/src/main,examples/android/libAndroid/src/main/java,examples/android/libAndroid/src/main/java/examples,examples/android/libAndroid/src/main/java/examples/android,examples/android/libAndroid/src/main/java/examples/android/lib2,examples/android/libAndroid/src/main/kotlin,examples/android/libAndroid/src/main/kotlin/examples,examples/android/libAndroid/src/main/kotlin/examples/android,examples/android/libAndroid/src/main/kotlin/examples/android/lib2,examples/deps,examples/deps/libKtAndroid1,examples/deps/libKtAndroid1/src,examples/deps/libKtAndroid1/src/main,examples/deps/libKtAndroid1/src/main/res,examples/deps/libKtAndroid1/src/main/res/values,examples/deps/libKtAndroid1/src/main/kt,examples/deps/libKtAndroid1/src/main/kt/examples,examples/deps/libKtAndroid1/src/main/kt/examples/deps,examples/deps/libKt2,examples/deps/libKt2/src,examples/deps/libKt2/src/main,examples/deps/libKt2/src/main/kt,examples/deps/libKt2/src/main/kt/examples,examples/deps/libKt2/src/main/kt/examples/deps,examples/deps/libKt3,examples/deps/libKt3/src,examples/deps/libKt3/src/main,examples/deps/libKt3/src/main/kt,examples/deps/libKt3/src/main/kt/examples,examples/deps/libKt3/src/main/kt/examples/deps,examples/deps/libKt4,examples/deps/libKt4/src,examples/deps/libKt4/src/main,examples/deps/libKt4/src/main/kt,examples/deps/libKt4/src/main/kt/examples,examples/deps/libKt4/src/main/kt/examples/deps,examples/deps/libAndroid2,examples/deps/libAndroid2/src,examples/deps/libAndroid2/src/main,examples/deps/libAndroid2/src/main/res,examples/deps/libAndroid2/src/main/res/values,examples/deps/libAndroid2/src/main/java,examples/deps/libAndroid2/src/main/java/examples,examples/deps/libAndroid2/src/main/java/examples/deps,examples/deps/libJava1,examples/deps/libJava1/src,examples/deps/libJava1/src/main,examples/deps/libJava1/src/main/java,examples/deps/libJava1/src/main/java/examples,examples/deps/libJava1/src/main/java/examples/deps,examples/deps/libAndroid3,examples/deps/libAndroid3/src,examples/deps/libAndroid3/src/main,examples/deps/libAndroid3/src/main/res,examples/deps/libAndroid3/src/main/res/values,examples/deps/libAndroid3/src/main/java,examples/deps/libAndroid3/src/main/java/examples,examples/deps/libAndroid3/src/main/java/examples/deps,examples/deps/libAndroid4,examples/deps/libAndroid4/src,examples/deps/libAndroid4/src/main,examples/deps/libAndroid4/src/main/res,examples/deps/libAndroid4/src/main/res/values,examples/deps/libAndroid4/src/main/java,examples/deps/libAndroid4/src/main/java/examples,examples/deps/libAndroid4/src/main/java/examples/deps,examples/deps/bzl,examples/deps/libKt1,examples/deps/libKt1/src,examples/deps/libKt1/src/main,examples/deps/libKt1/src/main/kt,examples/deps/libKt1/src/main/kt/examples,examples/deps/libKt1/src/main/kt/examples/deps,examples/deps/libKtAndroid2,examples/deps/libKtAndroid2/src,examples/deps/libKtAndroid2/src/main,examples/deps/libKtAndroid2/src/main/res,examples/deps/libKtAndroid2/src/main/res/values,examples/deps/libKtAndroid2/src/main/kt,examples/deps/libKtAndroid2/src/main/kt/examples,examples/deps/libKtAndroid2/src/main/kt/examples/deps,examples/deps/libKtAndroid4,examples/deps/libKtAndroid4/src,examples/deps/libKtAndroid4/src/main,examples/deps/libKtAndroid4/src/main/res,examples/deps/libKtAndroid4/src/main/res/values,examples/deps/libKtAndroid4/src/main/kt,examples/deps/libKtAndroid4/src/main/kt/examples,examples/deps/libKtAndroid4/src/main/kt/examples/deps,examples/deps/libKtAndroid3,examples/deps/libKtAndroid3/src,examples/deps/libKtAndroid3/src/main,examples/deps/libKtAndroid3/src/main/res,examples/deps/libKtAndroid3/src/main/res/values,examples/deps/libKtAndroid3/src/main/kt,examples/deps/libKtAndroid3/src/main/kt/examples,examples/deps/libKtAndroid3/src/main/kt/examples/deps,examples/deps/libJava2,examples/deps/libJava2/src,examples/deps/libJava2/src/main,examples/deps/libJava2/src/main/java,examples/deps/libJava2/src/main/java/examples,examples/deps/libJava2/src/main/java/examples/deps,examples/deps/libAndroid1,examples/deps/libAndroid1/src,examples/deps/libAndroid1/src/main,examples/deps/libAndroid1/src/main/res,examples/deps/libAndroid1/src/main/res/values,examples/deps/libAndroid1/src/main/java,examples/deps/libAndroid1/src/main/java/examples,examples/deps/libAndroid1/src/main/java/examples/deps,examples/deps/libJava3,examples/deps/libJava3/src,examples/deps/libJava3/src/main,examples/deps/libJava3/src/main/java,examples/deps/libJava3/src/main/java/examples,examples/deps/libJava3/src/main/java/examples/deps,examples/deps/libJava4,examples/deps/libJava4/src,examples/deps/libJava4/src/main,examples/deps/libJava4/src/main/java,examples/deps/libJava4/src/main/java/examples,examples/deps/libJava4/src/main/java/examples/deps,examples/node,examples/node/express,examples/node/node_modules,examples/node/node_modules/.pnpm,examples/node/node_modules/.pnpm/accepts@1.3.8,examples/node/node_modules/.pnpm/accepts@1.3.8/node_modules,examples/node/node_modules/.pnpm/accepts@1.3.8/node_modules/accepts,examples/node/node_modules/.pnpm/side-channel-list@1.0.0,examples/node/node_modules/.pnpm/side-channel-list@1.0.0/node_modules,examples/node/node_modules/.pnpm/side-channel-list@1.0.0/node_modules/side-channel-list,examples/node/node_modules/.pnpm/side-channel-list@1.0.0/node_modules/side-channel-list/test,examples/node/node_modules/.pnpm/side-channel-list@1.0.0/node_modules/side-channel-list/.github,examples/node/node_modules/.pnpm/es-object-atoms@1.1.1,examples/node/node_modules/.pnpm/es-object-atoms@1.1.1/node_modules,examples/node/node_modules/.pnpm/es-object-atoms@1.1.1/node_modules/es-object-atoms,examples/node/node_modules/.pnpm/es-object-atoms@1.1.1/node_modules/es-object-atoms/test,examples/node/node_modules/.pnpm/es-object-atoms@1.1.1/node_modules/es-object-atoms/.github,examples/node/node_modules/.pnpm/qs@6.11.0,examples/node/node_modules/.pnpm/qs@6.11.0/node_modules,examples/node/node_modules/.pnpm/qs@6.11.0/node_modules/qs,examples/node/node_modules/.pnpm/qs@6.11.0/node_modules/qs/test,examples/node/node_modules/.pnpm/qs@6.11.0/node_modules/qs/dist,examples/node/node_modules/.pnpm/qs@6.11.0/node_modules/qs/.github,examples/node/node_modules/.pnpm/qs@6.11.0/node_modules/qs/lib,examples/node/node_modules/.pnpm/math-intrinsics@1.1.0,examples/node/node_modules/.pnpm/math-intrinsics@1.1.0/node_modules,examples/node/node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics,examples/node/node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/test,examples/node/node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/constants,examples/node/node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/.github,examples/node/node_modules/.pnpm/vary@1.1.2,examples/node/node_modules/.pnpm/vary@1.1.2/node_modules,examples/node/node_modules/.pnpm/vary@1.1.2/node_modules/vary,examples/node/node_modules/.pnpm/cookie@0.6.0,examples/node/node_modules/.pnpm/cookie@0.6.0/node_modules,examples/node/node_modules/.pnpm/cookie@0.6.0/node_modules/cookie,examples/node/node_modules/.pnpm/raw-body@2.5.2,examples/node/node_modules/.pnpm/raw-body@2.5.2/node_modules,examples/node/node_modules/.pnpm/raw-body@2.5.2/node_modules/raw-body,examples/node/node_modules/.pnpm/call-bound@1.0.4,examples/node/node_modules/.pnpm/call-bound@1.0.4/node_modules,examples/node/node_modules/.pnpm/call-bound@1.0.4/node_modules/call-bound,examples/node/node_modules/.pnpm/call-bound@1.0.4/node_modules/call-bound/test,examples/node/node_modules/.pnpm/call-bound@1.0.4/node_modules/call-bound/.github,examples/node/node_modules/.pnpm/content-type@1.0.5,examples/node/node_modules/.pnpm/content-type@1.0.5/node_modules,examples/node/node_modules/.pnpm/content-type@1.0.5/node_modules/content-type,examples/node/node_modules/.pnpm/unpipe@1.0.0,examples/node/node_modules/.pnpm/unpipe@1.0.0/node_modules,examples/node/node_modules/.pnpm/unpipe@1.0.0/node_modules/unpipe,examples/node/node_modules/.pnpm/media-typer@0.3.0,examples/node/node_modules/.pnpm/media-typer@0.3.0/node_modules,examples/node/node_modules/.pnpm/media-typer@0.3.0/node_modules/media-typer,examples/node/node_modules/.pnpm/methods@1.1.2,examples/node/node_modules/.pnpm/methods@1.1.2/node_modules,examples/node/node_modules/.pnpm/methods@1.1.2/node_modules/methods,examples/node/node_modules/.pnpm/buffer-from@1.1.2,examples/node/node_modules/.pnpm/buffer-from@1.1.2/node_modules,examples/node/node_modules/.pnpm/buffer-from@1.1.2/node_modules/buffer-from,examples/node/node_modules/.pnpm/destroy@1.2.0,examples/node/node_modules/.pnpm/destroy@1.2.0/node_modules,examples/node/node_modules/.pnpm/destroy@1.2.0/node_modules/destroy,examples/node/node_modules/.pnpm/statuses@2.0.1,examples/node/node_modules/.pnpm/statuses@2.0.1/node_modules,examples/node/node_modules/.pnpm/statuses@2.0.1/node_modules/statuses,examples/node/node_modules/.pnpm/send@0.18.0,examples/node/node_modules/.pnpm/send@0.18.0/node_modules,examples/node/node_modules/.pnpm/send@0.18.0/node_modules/send,examples/node/node_modules/.pnpm/send@0.18.0/node_modules/send/node_modules,examples/node/node_modules/.pnpm/send@0.18.0/node_modules/send/node_modules/.bin,examples/node/node_modules/.pnpm/proxy-addr@2.0.7,examples/node/node_modules/.pnpm/proxy-addr@2.0.7/node_modules,examples/node/node_modules/.pnpm/proxy-addr@2.0.7/node_modules/proxy-addr,examples/node/node_modules/.pnpm/express@4.19.2,examples/node/node_modules/.pnpm/express@4.19.2/node_modules,examples/node/node_modules/.pnpm/express@4.19.2/node_modules/express,examples/node/node_modules/.pnpm/express@4.19.2/node_modules/express/lib,examples/node/node_modules/.pnpm/express@4.19.2/node_modules/express/lib/middleware,examples/node/node_modules/.pnpm/express@4.19.2/node_modules/express/lib/router,examples/node/node_modules/.pnpm/safe-buffer@5.2.1,examples/node/node_modules/.pnpm/safe-buffer@5.2.1/node_modules,examples/node/node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer,examples/node/node_modules/.pnpm/etag@1.8.1,examples/node/node_modules/.pnpm/etag@1.8.1/node_modules,examples/node/node_modules/.pnpm/etag@1.8.1/node_modules/etag,examples/node/node_modules/.pnpm/encodeurl@1.0.2,examples/node/node_modules/.pnpm/encodeurl@1.0.2/node_modules,examples/node/node_modules/.pnpm/encodeurl@1.0.2/node_modules/encodeurl,examples/node/node_modules/.pnpm/safer-buffer@2.1.2,examples/node/node_modules/.pnpm/safer-buffer@2.1.2/node_modules,examples/node/node_modules/.pnpm/safer-buffer@2.1.2/node_modules/safer-buffer,examples/node/node_modules/.pnpm/range-parser@1.2.1,examples/node/node_modules/.pnpm/range-parser@1.2.1/node_modules,examples/node/node_modules/.pnpm/range-parser@1.2.1/node_modules/range-parser,examples/node/node_modules/.pnpm/merge-descriptors@1.0.1,examples/node/node_modules/.pnpm/merge-descriptors@1.0.1/node_modules,examples/node/node_modules/.pnpm/merge-descriptors@1.0.1/node_modules/merge-descriptors,examples/node/node_modules/.pnpm/has-symbols@1.1.0,examples/node/node_modules/.pnpm/has-symbols@1.1.0/node_modules,examples/node/node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols,examples/node/node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/test,examples/node/node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/test/shams,examples/node/node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/.github,examples/node/node_modules/.pnpm/node_modules,examples/node/node_modules/.pnpm/node_modules/.bin,examples/node/node_modules/.pnpm/toidentifier@1.0.1,examples/node/node_modules/.pnpm/toidentifier@1.0.1/node_modules,examples/node/node_modules/.pnpm/toidentifier@1.0.1/node_modules/toidentifier,examples/node/node_modules/.pnpm/debug@2.6.9,examples/node/node_modules/.pnpm/debug@2.6.9/node_modules,examples/node/node_modules/.pnpm/debug@2.6.9/node_modules/debug,examples/node/node_modules/.pnpm/debug@2.6.9/node_modules/debug/src,examples/node/node_modules/.pnpm/inherits@2.0.4,examples/node/node_modules/.pnpm/inherits@2.0.4/node_modules,examples/node/node_modules/.pnpm/inherits@2.0.4/node_modules/inherits,examples/node/node_modules/.pnpm/dunder-proto@1.0.1,examples/node/node_modules/.pnpm/dunder-proto@1.0.1/node_modules,examples/node/node_modules/.pnpm/dunder-proto@1.0.1/node_modules/dunder-proto,examples/node/node_modules/.pnpm/dunder-proto@1.0.1/node_modules/dunder-proto/test,examples/node/node_modules/.pnpm/dunder-proto@1.0.1/node_modules/dunder-proto/.github,examples/node/node_modules/.pnpm/es-define-property@1.0.1,examples/node/node_modules/.pnpm/es-define-property@1.0.1/node_modules,examples/node/node_modules/.pnpm/es-define-property@1.0.1/node_modules/es-define-property,examples/node/node_modules/.pnpm/es-define-property@1.0.1/node_modules/es-define-property/test,examples/node/node_modules/.pnpm/es-define-property@1.0.1/node_modules/es-define-property/.github,examples/node/node_modules/.pnpm/negotiator@0.6.3,examples/node/node_modules/.pnpm/negotiator@0.6.3/node_modules,examples/node/node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator,examples/node/node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib,examples/node/node_modules/.pnpm/object-inspect@1.13.4,examples/node/node_modules/.pnpm/object-inspect@1.13.4/node_modules,examples/node/node_modules/.pnpm/object-inspect@1.13.4/node_modules/object-inspect,examples/node/node_modules/.pnpm/object-inspect@1.13.4/node_modules/object-inspect/test,examples/node/node_modules/.pnpm/object-inspect@1.13.4/node_modules/object-inspect/test/browser,examples/node/node_modules/.pnpm/object-inspect@1.13.4/node_modules/object-inspect/example,examples/node/node_modules/.pnpm/object-inspect@1.13.4/node_modules/object-inspect/.github,examples/node/node_modules/.pnpm/utils-merge@1.0.1,examples/node/node_modules/.pnpm/utils-merge@1.0.1/node_modules,examples/node/node_modules/.pnpm/utils-merge@1.0.1/node_modules/utils-merge,examples/node/node_modules/.pnpm/side-channel-weakmap@1.0.2,examples/node/node_modules/.pnpm/side-channel-weakmap@1.0.2/node_modules,examples/node/node_modules/.pnpm/side-channel-weakmap@1.0.2/node_modules/side-channel-weakmap,examples/node/node_modules/.pnpm/side-channel-weakmap@1.0.2/node_modules/side-channel-weakmap/test,examples/node/node_modules/.pnpm/side-channel-weakmap@1.0.2/node_modules/side-channel-weakmap/.github,examples/node/node_modules/.pnpm/source-map-support@0.5.6,examples/node/node_modules/.pnpm/source-map-support@0.5.6/node_modules,examples/node/node_modules/.pnpm/source-map-support@0.5.6/node_modules/source-map-support,examples/node/node_modules/.pnpm/mime-types@2.1.35,examples/node/node_modules/.pnpm/mime-types@2.1.35/node_modules,examples/node/node_modules/.pnpm/mime-types@2.1.35/node_modules/mime-types,examples/node/node_modules/.pnpm/bytes@3.1.2,examples/node/node_modules/.pnpm/bytes@3.1.2/node_modules,examples/node/node_modules/.pnpm/bytes@3.1.2/node_modules/bytes,examples/node/node_modules/.pnpm/ee-first@1.1.1,examples/node/node_modules/.pnpm/ee-first@1.1.1/node_modules,examples/node/node_modules/.pnpm/ee-first@1.1.1/node_modules/ee-first,examples/node/node_modules/.pnpm/hasown@2.0.2,examples/node/node_modules/.pnpm/hasown@2.0.2/node_modules,examples/node/node_modules/.pnpm/hasown@2.0.2/node_modules/hasown,examples/node/node_modules/.pnpm/hasown@2.0.2/node_modules/hasown/.github,examples/node/node_modules/.pnpm/path-to-regexp@0.1.7,examples/node/node_modules/.pnpm/path-to-regexp@0.1.7/node_modules,examples/node/node_modules/.pnpm/path-to-regexp@0.1.7/node_modules/path-to-regexp,examples/node/node_modules/.pnpm/content-disposition@0.5.4,examples/node/node_modules/.pnpm/content-disposition@0.5.4/node_modules,examples/node/node_modules/.pnpm/content-disposition@0.5.4/node_modules/content-disposition,examples/node/node_modules/.pnpm/cookie-signature@1.0.6,examples/node/node_modules/.pnpm/cookie-signature@1.0.6/node_modules,examples/node/node_modules/.pnpm/cookie-signature@1.0.6/node_modules/cookie-signature,examples/node/node_modules/.pnpm/http-errors@2.0.0,examples/node/node_modules/.pnpm/http-errors@2.0.0/node_modules,examples/node/node_modules/.pnpm/http-errors@2.0.0/node_modules/http-errors,examples/node/node_modules/.pnpm/gopd@1.2.0,examples/node/node_modules/.pnpm/gopd@1.2.0/node_modules,examples/node/node_modules/.pnpm/gopd@1.2.0/node_modules/gopd,examples/node/node_modules/.pnpm/gopd@1.2.0/node_modules/gopd/test,examples/node/node_modules/.pnpm/gopd@1.2.0/node_modules/gopd/.github,examples/node/node_modules/.pnpm/forwarded@0.2.0,examples/node/node_modules/.pnpm/forwarded@0.2.0/node_modules,examples/node/node_modules/.pnpm/forwarded@0.2.0/node_modules/forwarded,examples/node/node_modules/.pnpm/side-channel@1.1.0,examples/node/node_modules/.pnpm/side-channel@1.1.0/node_modules,examples/node/node_modules/.pnpm/side-channel@1.1.0/node_modules/side-channel,examples/node/node_modules/.pnpm/side-channel@1.1.0/node_modules/side-channel/test,examples/node/node_modules/.pnpm/side-channel@1.1.0/node_modules/side-channel/.github,examples/node/node_modules/.pnpm/mime@1.6.0,examples/node/node_modules/.pnpm/mime@1.6.0/node_modules,examples/node/node_modules/.pnpm/mime@1.6.0/node_modules/mime,examples/node/node_modules/.pnpm/mime@1.6.0/node_modules/mime/node_modules,examples/node/node_modules/.pnpm/mime@1.6.0/node_modules/mime/node_modules/.bin,examples/node/node_modules/.pnpm/mime@1.6.0/node_modules/mime/src,examples/node/node_modules/.pnpm/on-finished@2.4.1,examples/node/node_modules/.pnpm/on-finished@2.4.1/node_modules,examples/node/node_modules/.pnpm/on-finished@2.4.1/node_modules/on-finished,examples/node/node_modules/.pnpm/array-flatten@1.1.1,examples/node/node_modules/.pnpm/array-flatten@1.1.1/node_modules,examples/node/node_modules/.pnpm/array-flatten@1.1.1/node_modules/array-flatten,examples/node/node_modules/.pnpm/ms@2.0.0,examples/node/node_modules/.pnpm/ms@2.0.0/node_modules,examples/node/node_modules/.pnpm/ms@2.0.0/node_modules/ms,examples/node/node_modules/.pnpm/source-map@0.6.1,examples/node/node_modules/.pnpm/source-map@0.6.1/node_modules,examples/node/node_modules/.pnpm/source-map@0.6.1/node_modules/source-map,examples/node/node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/dist,examples/node/node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib,examples/node/node_modules/.pnpm/iconv-lite@0.4.24,examples/node/node_modules/.pnpm/iconv-lite@0.4.24/node_modules,examples/node/node_modules/.pnpm/iconv-lite@0.4.24/node_modules/iconv-lite,examples/node/node_modules/.pnpm/iconv-lite@0.4.24/node_modules/iconv-lite/encodings,examples/node/node_modules/.pnpm/iconv-lite@0.4.24/node_modules/iconv-lite/encodings/tables,examples/node/node_modules/.pnpm/iconv-lite@0.4.24/node_modules/iconv-lite/lib,examples/node/node_modules/.pnpm/ipaddr.js@1.9.1,examples/node/node_modules/.pnpm/ipaddr.js@1.9.1/node_modules,examples/node/node_modules/.pnpm/ipaddr.js@1.9.1/node_modules/ipaddr.js,examples/node/node_modules/.pnpm/ipaddr.js@1.9.1/node_modules/ipaddr.js/lib,examples/node/node_modules/.pnpm/serve-static@1.15.0,examples/node/node_modules/.pnpm/serve-static@1.15.0/node_modules,examples/node/node_modules/.pnpm/serve-static@1.15.0/node_modules/serve-static,examples/node/node_modules/.pnpm/body-parser@1.20.2,examples/node/node_modules/.pnpm/body-parser@1.20.2/node_modules,examples/node/node_modules/.pnpm/body-parser@1.20.2/node_modules/body-parser,examples/node/node_modules/.pnpm/body-parser@1.20.2/node_modules/body-parser/lib,examples/node/node_modules/.pnpm/body-parser@1.20.2/node_modules/body-parser/lib/types,examples/node/node_modules/.pnpm/es-errors@1.3.0,examples/node/node_modules/.pnpm/es-errors@1.3.0/node_modules,examples/node/node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors,examples/node/node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/test,examples/node/node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/.github,examples/node/node_modules/.pnpm/fresh@0.5.2,examples/node/node_modules/.pnpm/fresh@0.5.2/node_modules,examples/node/node_modules/.pnpm/fresh@0.5.2/node_modules/fresh,examples/node/node_modules/.pnpm/depd@2.0.0,examples/node/node_modules/.pnpm/depd@2.0.0/node_modules,examples/node/node_modules/.pnpm/depd@2.0.0/node_modules/depd,examples/node/node_modules/.pnpm/depd@2.0.0/node_modules/depd/lib,examples/node/node_modules/.pnpm/depd@2.0.0/node_modules/depd/lib/browser,examples/node/node_modules/.pnpm/side-channel-map@1.0.1,examples/node/node_modules/.pnpm/side-channel-map@1.0.1/node_modules,examples/node/node_modules/.pnpm/side-channel-map@1.0.1/node_modules/side-channel-map,examples/node/node_modules/.pnpm/side-channel-map@1.0.1/node_modules/side-channel-map/test,examples/node/node_modules/.pnpm/side-channel-map@1.0.1/node_modules/side-channel-map/.github,examples/node/node_modules/.pnpm/setprototypeof@1.2.0,examples/node/node_modules/.pnpm/setprototypeof@1.2.0/node_modules,examples/node/node_modules/.pnpm/setprototypeof@1.2.0/node_modules/setprototypeof,examples/node/node_modules/.pnpm/setprototypeof@1.2.0/node_modules/setprototypeof/test,examples/node/node_modules/.pnpm/finalhandler@1.2.0,examples/node/node_modules/.pnpm/finalhandler@1.2.0/node_modules,examples/node/node_modules/.pnpm/finalhandler@1.2.0/node_modules/finalhandler,examples/node/node_modules/.pnpm/get-proto@1.0.1,examples/node/node_modules/.pnpm/get-proto@1.0.1/node_modules,examples/node/node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto,examples/node/node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/test,examples/node/node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/.github,examples/node/node_modules/.pnpm/mime-db@1.52.0,examples/node/node_modules/.pnpm/mime-db@1.52.0/node_modules,examples/node/node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db,examples/node/node_modules/.pnpm/function-bind@1.1.2,examples/node/node_modules/.pnpm/function-bind@1.1.2/node_modules,examples/node/node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind,examples/node/node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/test,examples/node/node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/.github,examples/node/node_modules/.pnpm/parseurl@1.3.3,examples/node/node_modules/.pnpm/parseurl@1.3.3/node_modules,examples/node/node_modules/.pnpm/parseurl@1.3.3/node_modules/parseurl,examples/node/node_modules/.pnpm/type-is@1.6.18,examples/node/node_modules/.pnpm/type-is@1.6.18/node_modules,examples/node/node_modules/.pnpm/type-is@1.6.18/node_modules/type-is,examples/node/node_modules/.pnpm/call-bind-apply-helpers@1.0.2,examples/node/node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules,examples/node/node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers,examples/node/node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/test,examples/node/node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/.github,examples/node/node_modules/.pnpm/ms@2.1.3,examples/node/node_modules/.pnpm/ms@2.1.3/node_modules,examples/node/node_modules/.pnpm/ms@2.1.3/node_modules/ms,examples/node/node_modules/.pnpm/escape-html@1.0.3,examples/node/node_modules/.pnpm/escape-html@1.0.3/node_modules,examples/node/node_modules/.pnpm/escape-html@1.0.3/node_modules/escape-html,examples/node/node_modules/.pnpm/get-intrinsic@1.3.0,examples/node/node_modules/.pnpm/get-intrinsic@1.3.0/node_modules,examples/node/node_modules/.pnpm/get-intrinsic@1.3.0/node_modules/get-intrinsic,examples/node/node_modules/.pnpm/get-intrinsic@1.3.0/node_modules/get-intrinsic/test,examples/node/node_modules/.pnpm/get-intrinsic@1.3.0/node_modules/get-intrinsic/.github,examples/multiplex,examples/multiplex/src,examples/anvil,examples/anvil/app,examples/anvil/app/src,examples/anvil/app/src/androidTest,examples/anvil/app/src/androidTest/java,examples/anvil/app/src/androidTest/java/com,examples/anvil/app/src/androidTest/java/com/squareup,examples/anvil/app/src/androidTest/java/com/squareup/anvil,examples/anvil/app/src/androidTest/java/com/squareup/anvil/sample,examples/anvil/app/src/test,examples/anvil/app/src/test/java,examples/anvil/app/src/test/java/com,examples/anvil/app/src/test/java/com/squareup,examples/anvil/app/src/test/java/com/squareup/anvil,examples/anvil/app/src/test/java/com/squareup/anvil/sample,examples/anvil/app/src/main,examples/anvil/app/src/main/java,examples/anvil/app/src/main/java/com,examples/anvil/app/src/main/java/com/squareup,examples/anvil/app/src/main/java/com/squareup/anvil,examples/anvil/app/src/main/java/com/squareup/anvil/sample,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-mdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/drawable-v24,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-hdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/drawable,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-xxxhdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-ja,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-en-rCA,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/layout,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-xxhdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-night,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-fr-rCA,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-en-rGB,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-en-rAU,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-xhdpi,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/values-es,examples/anvil/app/src/main/java/com/squareup/anvil/sample/res/mipmap-anydpi-v26,examples/anvil/library,examples/anvil/library/src,examples/anvil/library/src/main,examples/anvil/library/src/main/java,examples/anvil/library/src/main/java/com,examples/anvil/library/src/main/java/com/squareup,examples/anvil/library/src/main/java/com/squareup/anvil,examples/anvil/library/src/main/java/com/squareup/anvil/sample,examples/anvil/library/src/main/java/com/squareup/anvil/sample/father,examples/anvil/library/src/main/java/com/squareup/anvil/sample/mother,examples/anvil/third_party,examples/anvil/repro,examples/anvil/repro/src,examples/anvil/repro/src/main,examples/anvil/repro/src/main/java,examples/anvil/repro/src/main/java/com,examples/anvil/repro/src/main/java/com/repro,examples/anvil/repro/src/main/java/com/repro/lib,examples/anvil/scopes,examples/anvil/scopes/src,examples/anvil/scopes/src/main,examples/anvil/scopes/src/main/java,examples/anvil/scopes/src/main/java/com,examples/anvil/scopes/src/main/java/com/squareup,examples/anvil/scopes/src/main/java/com/squareup/scopes,examples/associates,examples/associates/projects,examples/associates/projects/core,examples/associates/projects/core/impl,examples/associates/projects/core/impl/src,examples/associates/projects/core/impl/src/test,examples/associates/projects/core/impl/src/test/kotlin,examples/associates/projects/core/impl/src/test/kotlin/core,examples/associates/projects/core/impl/src/test/kotlin/core/impl,examples/associates/projects/core/impl/src/main,examples/associates/projects/core/impl/src/main/kotlin,examples/associates/projects/core/impl/src/main/kotlin/core,examples/associates/projects/core/impl/src/main/kotlin/core/impl,examples/associates/projects/core/api,examples/associates/projects/core/api/src,examples/associates/projects/core/api/src/test,examples/associates/projects/core/api/src/test/kotlin,examples/associates/projects/core/api/src/test/kotlin/core,examples/associates/projects/core/api/src/test/kotlin/core/api,examples/associates/projects/core/api/src/main,examples/associates/projects/core/api/src/main/kotlin,examples/associates/projects/core/api/src/main/kotlin/core,examples/associates/projects/core/api/src/main/kotlin/core/api diff --git a/docs/kotlin.md b/docs/kotlin.md index 1c96221eb..6b734eee9 100755 --- a/docs/kotlin.md +++ b/docs/kotlin.md @@ -216,6 +216,57 @@ Setup a simple kotlin_test. + + +## kt_js_import + +
+load("@rules_kotlin//kotlin:js.bzl", "kt_js_import") + +kt_js_import(name, klibs) ++ + + +**ATTRIBUTES** + + +| Name | Description | Type | Mandatory | Default | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | A unique name for this target. | Name | required | | +| klibs | One or more klib targets that model a kotlin/js library | List of labels | optional | `[]` | + + + + +## kt_js_library + +
+load("@rules_kotlin//kotlin:js.bzl", "kt_js_library") + +kt_js_library(name, deps, srcs, es_target, module_kind, output_kind, sourcemap) ++ + + +**ATTRIBUTES** + + +| Name | Description | Type | Mandatory | Default | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | A unique name for this target. | Name | required | | +| deps | A list of other kt_js_library that this library depends on for compilation | List of labels | optional | `[]` | +| srcs | A list of source files to be transpiled to JS | List of labels | optional | `[]` | +| es_target | - | String | optional | `"es5"` | +| module_kind | - | String | optional | `"commonjs"` | +| output_kind | The output to be generated with the rule, either only a klib or klib + js | String | optional | `"klib"` | +| sourcemap | Indicates whether sourcemaps (.js.map) files should be emitted if output_kind is set to js | Boolean | optional | `False` | + + + + + + ## ktlint_config diff --git a/examples/BUILD b/examples/BUILD index 6c71273a0..c237ed2ca 100644 --- a/examples/BUILD +++ b/examples/BUILD @@ -75,8 +75,6 @@ genrule( # Exclude files in `examples`. exclude = [ "*", - # Node is currently broken. - "node/**", # Anvil is broken by a verison upgrade. "anvil/**", ], diff --git a/examples/node/.bazelignore b/examples/node/.bazelignore new file mode 100644 index 000000000..b512c09d4 --- /dev/null +++ b/examples/node/.bazelignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/examples/node/.bazelrc b/examples/node/.bazelrc new file mode 100644 index 000000000..e69de29bb diff --git a/examples/node/.bazelversion b/examples/node/.bazelversion new file mode 120000 index 000000000..96cf94962 --- /dev/null +++ b/examples/node/.bazelversion @@ -0,0 +1 @@ +../../.bazelversion \ No newline at end of file diff --git a/examples/node/.gitignore b/examples/node/.gitignore new file mode 100644 index 000000000..8a14e43d4 --- /dev/null +++ b/examples/node/.gitignore @@ -0,0 +1,2 @@ +bazel-node/ +node_modules/ \ No newline at end of file diff --git a/examples/node/BUILD.bazel b/examples/node/BUILD.bazel new file mode 100644 index 000000000..e98a04523 --- /dev/null +++ b/examples/node/BUILD.bazel @@ -0,0 +1,3 @@ +load("@npm//:defs.bzl", "npm_link_all_packages") + +npm_link_all_packages(name = "node_modules") diff --git a/examples/node/MODULE.bazel b/examples/node/MODULE.bazel new file mode 100644 index 000000000..d2838af31 --- /dev/null +++ b/examples/node/MODULE.bazel @@ -0,0 +1,26 @@ +module( + name = "node", +) + +bazel_dep(name = "protobuf", version = "29.0", repo_name = "com_google_protobuf") +bazel_dep(name = "rules_kotlin", version = "2.1.1") +local_path_override( + module_name = "rules_kotlin", + path = "../..", +) + +bazel_dep(name = "aspect_rules_js", version = "2.3.8") + +npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm", dev_dependency = True) +npm.npm_translate_lock( + name = "npm", + pnpm_lock = "//:pnpm-lock.yaml", + verify_node_modules_ignored = "//:.bazelignore", +) +use_repo(npm, "npm") + +pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm") + +# Allows developers to use the matching pnpm version, for example: +# bazel run -- @pnpm --dir /home/runner/work/rules_js/rules_js install +use_repo(pnpm, "pnpm") diff --git a/examples/node/WORKSPACE b/examples/node/WORKSPACE new file mode 100644 index 000000000..ccdbc50a7 --- /dev/null +++ b/examples/node/WORKSPACE @@ -0,0 +1,107 @@ +workspace(name = "node") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +local_repository( + name = "rules_kotlin", + path = "../..", +) + +# required with Bazel 8/workspace +http_archive( + name = "rules_python", + sha256 = "2ef40fdcd797e07f0b6abda446d1d84e2d9570d234fddf8fcd2aa262da852d1c", + strip_prefix = "rules_python-1.2.0", + url = "https://github.com/bazelbuild/rules_python/releases/download/1.2.0/rules_python-1.2.0.tar.gz", +) + +load("@rules_python//python:repositories.bzl", "py_repositories") + +py_repositories() + +# required with Bazel 8/workspace +http_archive( + name = "rules_shell", + sha256 = "bc61ef94facc78e20a645726f64756e5e285a045037c7a61f65af2941f4c25e1", + strip_prefix = "rules_shell-0.4.1", + url = "https://github.com/bazelbuild/rules_shell/releases/download/v0.4.1/rules_shell-v0.4.1.tar.gz", +) + +load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains") + +rules_shell_dependencies() + +rules_shell_toolchains() + +http_archive( + name = "rules_java", + sha256 = "6d8c6d5cd86fed031ee48424f238fa35f33abc9921fd97dd4ae1119a29fc807f", + urls = [ + "https://github.com/bazelbuild/rules_java/releases/download/8.6.3/rules_java-8.6.3.tar.gz", + ], +) + +load("@rules_java//java:rules_java_deps.bzl", "rules_java_dependencies") + +rules_java_dependencies() + +# note that the following line is what is minimally required from protobuf for the java rules +# consider using the protobuf_deps() public API from @com_google_protobuf//:protobuf_deps.bzl +load("@com_google_protobuf//bazel/private:proto_bazel_features.bzl", "proto_bazel_features") # buildifier: disable=bzl-visibility + +proto_bazel_features(name = "proto_bazel_features") + +# register toolchains +load("@rules_java//java:repositories.bzl", "rules_java_toolchains") + +rules_java_toolchains() + +http_archive( + name = "rules_proto", + sha256 = "8e195dbb6a505ca4c7aafa6b7cffa47fe49a261b27a342053cfb2b973cc4aa12", + strip_prefix = "rules_proto-7.0.0", + url = "https://github.com/bazelbuild/rules_proto/releases/download/7.0.0/rules_proto-7.0.0.tar.gz", +) + +load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") + +rules_proto_dependencies() + +load("@rules_proto//proto:setup.bzl", "rules_proto_setup") + +rules_proto_setup() + +http_archive( + name = "aspect_rules_js", + sha256 = "304c51726b727d53277dd28fcda1b8e43b7e46818530b8d6265e7be98d5e2b25", + strip_prefix = "rules_js-2.3.8", + url = "https://github.com/aspect-build/rules_js/releases/download/v2.3.8/rules_js-v2.3.8.tar.gz", +) + +load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies") + +rules_js_dependencies() + +load("@aspect_rules_js//js:toolchains.bzl", "DEFAULT_NODE_VERSION", "rules_js_register_toolchains") + +rules_js_register_toolchains(node_version = DEFAULT_NODE_VERSION) + +load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock") + +npm_translate_lock( + name = "npm", + pnpm_lock = "//:pnpm-lock.yaml", + verify_node_modules_ignored = "//:.bazelignore", +) + +load("@npm//:repositories.bzl", "npm_repositories") + +npm_repositories() + +load("@rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories") + +kotlin_repositories() # if you want the default. Otherwise see custom kotlinc distribution below + +load("@rules_kotlin//kotlin:core.bzl", "kt_register_toolchains") + +kt_register_toolchains() # to use the default toolchain, otherwise see toolchains below diff --git a/examples/node/WORKSPACE.bzlmod b/examples/node/WORKSPACE.bzlmod new file mode 100644 index 000000000..e69de29bb diff --git a/examples/node/express/App.kt b/examples/node/express/App.kt new file mode 100644 index 000000000..1e3a92950 --- /dev/null +++ b/examples/node/express/App.kt @@ -0,0 +1,15 @@ +package express + +@JsModule("express") +@JsNonModule +external fun express(): ExpressApp + +external interface ExpressApp { + fun get(path: String, handler: (Request, Response) -> Unit) + fun listen(port: Int, callback: () -> Unit) +} + +external interface Request +external interface Response { + fun send(body: String) +} diff --git a/examples/node/express/BUILD.bazel b/examples/node/express/BUILD.bazel new file mode 100644 index 000000000..bd971aea5 --- /dev/null +++ b/examples/node/express/BUILD.bazel @@ -0,0 +1,23 @@ +load("@aspect_rules_js//js:defs.bzl", "js_binary") +load("@rules_kotlin//kotlin:js.bzl", "kt_js_library") + +kt_js_library( + name = "app", + srcs = [ + "App.kt", + "Main.kt", + ], + output_kind = "js", +) + +filegroup( + name = "js-file", + srcs = [":app"], + output_group = "js", +) + +js_binary( + name = "express", + data = ["//:node_modules/express"], + entry_point = ":js-file", +) diff --git a/examples/node/express/Main.kt b/examples/node/express/Main.kt new file mode 100644 index 000000000..86deb9874 --- /dev/null +++ b/examples/node/express/Main.kt @@ -0,0 +1,13 @@ +package express + +fun main() { + val app = express() + + app.get("/") { _, res -> + res.send("Hello from Kotlin/JS Node server!") + } + + app.listen(3000) { + println("Server started on http://localhost:3000") + } +} diff --git a/examples/node/package.json b/examples/node/package.json new file mode 100644 index 000000000..63dc504f4 --- /dev/null +++ b/examples/node/package.json @@ -0,0 +1,10 @@ +{ + "name": "node", + "version": "1.0.0", + "dependencies": { + "express": "^4.19.2" + }, + "devDependencies": { + "source-map-support": "^0.5.6" + } +} \ No newline at end of file diff --git a/examples/node/pnpm-lock.yaml b/examples/node/pnpm-lock.yaml new file mode 100644 index 000000000..3c9c05316 --- /dev/null +++ b/examples/node/pnpm-lock.yaml @@ -0,0 +1,527 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + express: + specifier: ^4.19.2 + version: 4.19.2 + +devDependencies: + source-map-support: + specifier: ^0.5.6 + version: 0.5.6 + +packages: + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + dev: false + + /call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + dev: false + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + dev: false + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + dev: false + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: false + + /es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: false + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.2 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.6.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false + + /get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + dev: false + + /get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + dev: false + + /gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + dev: false + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + dev: false + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.1.0 + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + dev: false + + /side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + dev: false + + /side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + dev: false + + /side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + dev: false + + /source-map-support@0.5.6: + resolution: {integrity: sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false diff --git a/kotlin/BUILD b/kotlin/BUILD index 86671b3bd..d5f6fda11 100644 --- a/kotlin/BUILD +++ b/kotlin/BUILD @@ -44,6 +44,7 @@ release_archive( ) for doc in [ "jvm", + "js", "lint", "core", "repositories.doc", @@ -54,6 +55,7 @@ genrule( name = "stardoc", srcs = [doc for doc in [ "jvm", + "js", "lint", "core", "repositories.doc", diff --git a/kotlin/compiler/compiler.bzl b/kotlin/compiler/compiler.bzl index 390cc9188..987b58b44 100644 --- a/kotlin/compiler/compiler.bzl +++ b/kotlin/compiler/compiler.bzl @@ -13,6 +13,7 @@ # limitations under the License. load("@com_github_jetbrains_kotlin//:artifacts.bzl", "KOTLINC_ARTIFACTS") +load("//kotlin:js.bzl", "kt_js_import") load("//kotlin:jvm.bzl", "kt_jvm_import") load("//kotlin/internal:defs.bzl", _KT_COMPILER_REPO = "KT_COMPILER_REPO") @@ -32,7 +33,7 @@ def _import_artifacts(artifacts, rule_kind): def _import_labels(labels, rule_kind, **rule_args): for (label, file) in labels.items(): - if not file.endswith(".jar"): + if not file.endswith(".jar") and not file.endswith(".klib"): native.filegroup( name = label, srcs = [ @@ -40,6 +41,12 @@ def _import_labels(labels, rule_kind, **rule_args): ], ) return + elif file.endswith(".klib"): + kt_js_import( + name = label, + klibs = ["@%s//:%s" % (_KT_COMPILER_REPO, label)], + ) + return if "-sources" in label: continue @@ -62,4 +69,5 @@ def kt_configure_compiler(): fail("kt_configure_compiler must be called in kotlin/compiler not %s" % native.package_name()) _import_artifacts(KOTLINC_ARTIFACTS.jvm, kt_jvm_import) + _import_artifacts(KOTLINC_ARTIFACTS.js, kt_js_import) _import_artifacts(KOTLINC_ARTIFACTS.core, kt_jvm_import) diff --git a/kotlin/internal/BUILD b/kotlin/internal/BUILD index 019803452..f7bca2043 100644 --- a/kotlin/internal/BUILD +++ b/kotlin/internal/BUILD @@ -28,6 +28,7 @@ release_archive( "BUILD.release.bazel": "BUILD.bazel", }, deps = [ + "//kotlin/internal/js:pkg", "//kotlin/internal/jvm:pkg", "//kotlin/internal/lint:pkg", "//kotlin/internal/utils:pkg", @@ -39,6 +40,7 @@ bzl_library( srcs = glob(["*.bzl"]), visibility = ["//kotlin:__subpackages__"], deps = [ + "//kotlin/internal/js", "//kotlin/internal/jvm", "//kotlin/internal/lint", "//kotlin/internal/utils", diff --git a/kotlin/internal/defs.bzl b/kotlin/internal/defs.bzl index 8fc952f30..d8082bac1 100644 --- a/kotlin/internal/defs.bzl +++ b/kotlin/internal/defs.bzl @@ -15,6 +15,7 @@ load( "//src/main/starlark/core/compile:common.bzl", _JAVA_RUNTIME_TOOLCHAIN_TYPE = "JAVA_RUNTIME_TOOLCHAIN_TYPE", _JAVA_TOOLCHAIN_TYPE = "JAVA_TOOLCHAIN_TYPE", + _KtJsInfo = "KtJsInfo", _KtJvmInfo = "KtJvmInfo", ) load( @@ -47,3 +48,5 @@ KspPluginInfo = _KspPluginInfo KtCompilerPluginOption = _KtCompilerPluginOption KtPluginConfiguration = _KtPluginConfiguration + +KtJsInfo = _KtJsInfo diff --git a/kotlin/internal/js/BUILD.bazel b/kotlin/internal/js/BUILD.bazel new file mode 100644 index 000000000..0203676a0 --- /dev/null +++ b/kotlin/internal/js/BUILD.bazel @@ -0,0 +1,21 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") +load("//src/main/starlark/release:packager.bzl", "release_archive") + +release_archive( + name = "pkg", + srcs = glob( + ["*.bzl"], + exclude = ["packager.bzl"], + ), + src_map = { + "BUILD.release.bazel": "BUILD.bazel", + }, +) + +bzl_library( + name = "js", + srcs = glob(["*.bzl"]), + visibility = ["//kotlin:__subpackages__"], + deps = [ + ], +) diff --git a/kotlin/internal/js/BUILD.release.bazel b/kotlin/internal/js/BUILD.release.bazel new file mode 100644 index 000000000..126e88a12 --- /dev/null +++ b/kotlin/internal/js/BUILD.release.bazel @@ -0,0 +1,9 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "js", + srcs = glob(["*.bzl"]), + visibility = ["//kotlin:__subpackages__"], + deps = [ + ], +) diff --git a/kotlin/internal/js/impl.bzl b/kotlin/internal/js/impl.bzl new file mode 100644 index 000000000..cb21a0cfb --- /dev/null +++ b/kotlin/internal/js/impl.bzl @@ -0,0 +1,88 @@ +load( + "//kotlin/internal:defs.bzl", + _KtJsInfo = "KtJsInfo", + _TOOLCHAIN_TYPE = "TOOLCHAIN_TYPE", +) +load("//kotlin/internal/utils:utils.bzl", "utils") + +def kt_js_import_impl(ctx): + return [ + DefaultInfo(files = depset(ctx.files.klibs)), + _KtJsInfo( + klibs = depset(ctx.files.klibs), + ), + ] + +def kt_js_library_impl(ctx): + if ctx.attr.output_kind == "klib" and ctx.attr.sourcemap: + fail("sourcemap can be only generated with js output_kind") + + js_file = None + klib = None + outputs = [] + additional_providers = [] + module_name = utils.derive_module_name(ctx) + builder_args = utils.init_args(ctx, "kt_js_library", module_name) + + klib = ctx.actions.declare_file("{}.klib".format(ctx.label.name)) + builder_args.add("--kotlin_output_js_klib", klib.path) + outputs.append(klib) + if ctx.attr.output_kind == "js": + js_file = ctx.actions.declare_file("{}.js".format(ctx.label.name)) + builder_args.add("--kotlin_output_js", js_file.path) + outputs.append(js_file) + additional_providers.append(OutputGroupInfo( + js = depset([js_file]), + klib = depset([klib]), + )) + else: + additional_providers.append(OutputGroupInfo( + klib = depset([klib]), + )) + + toolchains = ctx.toolchains[_TOOLCHAIN_TYPE] + deps_klibs = [] + for dep in ctx.attr.deps: + deps_klibs.append(dep[_KtJsInfo].klibs) + libraries = depset(transitive = [ctx.attr._js_stdlib[_KtJsInfo].klibs] + deps_klibs) + builder_args.add_all("--sources", ctx.files.srcs) + builder_inputs, _, input_manifests = ctx.resolve_command(tools = [toolchains.kotlinbuilder, toolchains.kotlin_home]) + + builder_args.add_all( + "--kotlin_js_passthrough_flags", + [ + "-target={}".format(ctx.attr.es_target), + "-module-kind={}".format(ctx.attr.module_kind), + ], + ) + builder_args.add("--strict_kotlin_deps", "off") + builder_args.add("--reduced_classpath_mode", "off") + builder_args.add_all("--kotlin_js_libraries", libraries, omit_if_empty = False) + + ctx.actions.run( + mnemonic = "KotlinJsCompile", + inputs = depset(builder_inputs + ctx.files.srcs, transitive = [libraries]), + outputs = outputs, + executable = toolchains.kotlinbuilder.files_to_run.executable, + tools = [ + toolchains.kotlinbuilder.files_to_run, + toolchains.kotlin_home.files_to_run, + ], + execution_requirements = {"supports-workers": "1"}, + arguments = [ctx.actions.args().add_all(toolchains.builder_args), builder_args], + progress_message = "Compiling Kotlin to JS %%{label} { kt: %d }" % len(ctx.files.srcs), + input_manifests = input_manifests, + env = { + "REPOSITORY_NAME": utils.builder_workspace_name(ctx), + }, + ) + + return [ + DefaultInfo( + files = depset(outputs), + ), + _KtJsInfo( + js_file = depset([js_file]), + klibs = depset(direct = [klib]), + ), + ] + additional_providers diff --git a/kotlin/internal/js/js.bzl b/kotlin/internal/js/js.bzl new file mode 100644 index 000000000..26aab010f --- /dev/null +++ b/kotlin/internal/js/js.bzl @@ -0,0 +1,63 @@ +load( + "//kotlin/internal:defs.bzl", + _KtJsInfo = "KtJsInfo", + _TOOLCHAIN_TYPE = "TOOLCHAIN_TYPE", +) +load(":impl.bzl", "kt_js_import_impl", "kt_js_library_impl") + +""" +kt_js_import exposes .klib files to other kt_js_library targets +""" +kt_js_import = rule( + implementation = kt_js_import_impl, + attrs = { + "klibs": attr.label_list( + doc = "One or more klib targets that model a kotlin/js library", + allow_files = [".klib"], + ), + }, + toolchains = [_TOOLCHAIN_TYPE], + provides = [_KtJsInfo], +) + +""" +kt_js_library runs the compilation of Kotlin to intermediate klib files to be shared +with other kt_js_library targets or generates JS directly to then run directly with Node/Javascript +runtim +""" +kt_js_library = rule( + implementation = kt_js_library_impl, + attrs = { + "srcs": attr.label_list( + doc = "A list of source files to be transpiled to JS", + allow_files = [".kt"], + ), + "deps": attr.label_list( + doc = "A list of other kt_js_library that this library depends on for compilation", + providers = [_KtJsInfo], + ), + "output_kind": attr.string( + values = ["klib", "js"], + default = "klib", + doc = "The output to be generated with the rule, either only a klib or klib + js", + ), + "sourcemap": attr.bool( + default = False, + doc = "Indicates whether sourcemaps (.js.map) files should be emitted if output_kind is set to js", + ), + "_js_stdlib": attr.label( + default = Label("//kotlin/compiler:kotlin-stdlib-js-klib"), + providers = [_KtJsInfo], + ), + "es_target": attr.string( + values = ["es5", "es2015"], + default = "es5", + ), + "module_kind": attr.string( + values = ["plain", "umd", "amd", "commonjs", "umd", "es"], + default = "commonjs", + ), + }, + toolchains = [_TOOLCHAIN_TYPE], + provides = [_KtJsInfo], +) diff --git a/kotlin/js.bzl b/kotlin/js.bzl new file mode 100644 index 000000000..a78dd8e96 --- /dev/null +++ b/kotlin/js.bzl @@ -0,0 +1,8 @@ +load( + "//kotlin/internal/js:js.bzl", + _kt_js_import = "kt_js_import", + _kt_js_library = "kt_js_library", +) + +kt_js_import = _kt_js_import +kt_js_library = _kt_js_library diff --git a/src/main/kotlin/io/bazel/kotlin/builder/KotlinBuilderComponent.java b/src/main/kotlin/io/bazel/kotlin/builder/KotlinBuilderComponent.java index 9cda68bd8..d9da55e95 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/KotlinBuilderComponent.java +++ b/src/main/kotlin/io/bazel/kotlin/builder/KotlinBuilderComponent.java @@ -20,6 +20,7 @@ import dagger.Component; import dagger.Provides; import io.bazel.kotlin.builder.tasks.CompileKotlin; +import io.bazel.kotlin.builder.tasks.js.Kotlin2JsTaskExecutor; import io.bazel.kotlin.builder.tasks.jvm.InternalCompilerPlugins; import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor; import io.bazel.kotlin.builder.toolchain.KotlinToolchain; @@ -33,6 +34,8 @@ public interface KotlinBuilderComponent { KotlinJvmTaskExecutor jvmTaskExecutor(); + Kotlin2JsTaskExecutor jsTaskExecutor(); + CompileKotlin work(); @Component.Builder diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt index e4ab30c5d..65fe3f25f 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt @@ -16,6 +16,7 @@ */ package io.bazel.kotlin.builder.tasks +import io.bazel.kotlin.builder.tasks.js.Kotlin2JsTaskExecutor import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor import io.bazel.kotlin.builder.toolchain.CompilationStatusException import io.bazel.kotlin.builder.toolchain.CompilationTaskContext @@ -25,6 +26,7 @@ import io.bazel.kotlin.builder.utils.Flag import io.bazel.kotlin.builder.utils.partitionJvmSources import io.bazel.kotlin.builder.utils.resolveNewDirectories import io.bazel.kotlin.model.CompilationTaskInfo +import io.bazel.kotlin.model.JsCompilationTask import io.bazel.kotlin.model.JvmCompilationTask import io.bazel.kotlin.model.Platform import io.bazel.kotlin.model.RuleKind @@ -43,6 +45,7 @@ class KotlinBuilder @Inject internal constructor( private val jvmTaskExecutor: KotlinJvmTaskExecutor, + private val jsTaskExecutor: Kotlin2JsTaskExecutor, ) { companion object { @JvmStatic @@ -89,6 +92,11 @@ class KotlinBuilder INSTRUMENT_COVERAGE("--instrument_coverage"), KSP_GENERATED_JAVA_SRCJAR("--ksp_generated_java_srcjar"), BUILD_TOOLS_API("--build_tools_api"), + JS_PASSTHROUGH_FLAGS("--kotlin_js_passthrough_flags"), + JS_KLIBS("--kotlin_js_libraries"), + OUTPUT_JS("--kotlin_output_js"), + OUTPUT_JS_KLIB("--kotlin_output_js_klib"), + OUTPUT_JS_SOURCEMAP("--kotlint_output_js_sourcemap"), } } @@ -105,6 +113,7 @@ class KotlinBuilder Platform.JVM, Platform.ANDROID, -> executeJvmTask(compileContext, taskContext.directory, argMap) + Platform.JS -> executeJsTask(compileContext, taskContext.directory, argMap) Platform.UNRECOGNIZED -> throw IllegalStateException( "unrecognized platform: ${compileContext.info}", ) @@ -310,6 +319,44 @@ class KotlinBuilder root.build() } + private fun executeJsTask( + context: CompilationTaskContext, + workingDir: Path, + argMap: ArgMap, + ) = buildJsTask(context.info, workingDir, argMap).let { jsTask -> + context.whenTracing { printProto("js task input", jsTask) } + jsTaskExecutor.execute(context, jsTask) + } + + private fun buildJsTask( + info: CompilationTaskInfo, + workingDir: Path, + argMap: ArgMap, + ): JsCompilationTask = + with(JsCompilationTask.newBuilder()) { + this.info = info + + with(directoriesBuilder) { + temp = workingDir.toString() + } + + with(inputsBuilder) { + addAllLibraries(argMap.mandatory(KotlinBuilderFlags.JS_KLIBS)) + addAllKotlinSources(argMap.mandatory(KotlinBuilderFlags.SOURCES)) + } + + argMap.optionalSingle(KotlinBuilderFlags.OUTPUT_JS)?.let { + with(outputsBuilder.jsBuilder) { + this.setJsFile(it) + } + } + argMap.optionalSingle(KotlinBuilderFlags.OUTPUT_JS_KLIB)?.let { + outputsBuilder.setKlib(it) + } + addAllPassThroughFlags(argMap.mandatory(KotlinBuilderFlags.JS_PASSTHROUGH_FLAGS)) + build() + } + private fun getOutputDirPath( moduleName: String, dirName: String, diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/js/Kotlin2JsTaskExecutor.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/js/Kotlin2JsTaskExecutor.kt new file mode 100644 index 000000000..7d7888e08 --- /dev/null +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/js/Kotlin2JsTaskExecutor.kt @@ -0,0 +1,113 @@ +package io.bazel.kotlin.builder.tasks.js + +import io.bazel.kotlin.builder.toolchain.CompilationTaskContext +import io.bazel.kotlin.builder.toolchain.KotlinToolchain +import io.bazel.kotlin.builder.utils.addAll +import io.bazel.kotlin.model.JsCompilationTask +import java.nio.file.FileSystem +import java.nio.file.FileSystems +import java.nio.file.Files +import java.nio.file.Path +import java.util.stream.Collectors +import javax.inject.Inject +import javax.inject.Singleton +import kotlin.io.path.absolute +import kotlin.io.path.absolutePathString +import kotlin.io.path.exists + +@Singleton +class Kotlin2JsTaskExecutor + @Inject + constructor( + private val invoker: KotlinToolchain.K2JSCompilerInvoker, + ) { + private val fileSystem: FileSystem = FileSystems.getDefault() + + fun execute( + context: CompilationTaskContext, + task: JsCompilationTask, + ) { + task.compile(context) + } + + private fun JsCompilationTask.compile(context: CompilationTaskContext) { + compileToKlib(context) + // If producing JS, add a additional compilation step after creating klib + if (outputs.js != null && !outputs.js.jsFile.isNullOrEmpty()) { + compileToJs(context) + } + } + + private fun JsCompilationTask.workingDirectory(): Path = fileSystem.getPath(directories.temp) + + private fun JsCompilationTask.commonArgs(): MutableList