DO_NOT_MERGE [JS] Break the order of dependencies in JS IC
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt
index 6533335..01e7928 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt
@@ -19,7 +19,7 @@
 import org.jetbrains.kotlin.ir.util.*
 import org.jetbrains.kotlin.js.config.JSConfigurationKeys
 import org.jetbrains.kotlin.library.KotlinLibrary
-import org.jetbrains.kotlin.library.metadata.resolver.TopologicalLibraryOrder
+import org.jetbrains.kotlin.library.isAnyPlatformStdlib
 import org.jetbrains.kotlin.name.FqName
 import org.jetbrains.kotlin.utils.memoryOptimizedFilter
 import org.jetbrains.kotlin.utils.memoryOptimizedMap
@@ -134,8 +134,8 @@
     private inner class CacheUpdaterInternal {
         val signatureHashCalculator = IdSignatureHashCalculator(icHasher)
 
-        // libraries in topological order: [stdlib, ..., main]
-        val orderedLibraries = stopwatch.measure("Resolving and loading klib dependencies") {
+        // libraries in JS-specific order: [stdlib, <dependencies in CLI order>, main]
+        val orderedLibraries: List<KotlinLibrary> = stopwatch.measure("Resolving and loading klib dependencies") {
             val zipAccessor = compilerConfiguration.get(JSConfigurationKeys.ZIP_FILE_SYSTEM_ACCESSOR)
             val allResolvedDependencies = CommonKLibResolver.resolve(
                 allModules,
@@ -147,17 +147,20 @@
                 ),
             )
 
-            allResolvedDependencies.getFullList(TopologicalLibraryOrder).let { resolvedLibraries ->
-                val mainLibraryIndex = resolvedLibraries.indexOfLast {
-                    KotlinLibraryFile(it) == mainLibraryFile
-                }.takeIf { it >= 0 } ?: notFoundIcError("main library", mainLibraryFile)
+            val resolvedLibraries: List<KotlinLibrary> = allResolvedDependencies
+                .getFullList()
+                .partition { it.isAnyPlatformStdlib }
+                .let { (stdlib, other) -> stdlib + other.reversed()}
 
-                when (mainLibraryIndex) {
-                    resolvedLibraries.lastIndex -> resolvedLibraries
-                    else -> resolvedLibraries.filterIndexedTo(ArrayList(resolvedLibraries.size)) { index, _ ->
-                        index != mainLibraryIndex
-                    }.apply { add(resolvedLibraries[mainLibraryIndex]) }
-                }
+            val mainLibraryIndex = resolvedLibraries.indexOfLast {
+                KotlinLibraryFile(it) == mainLibraryFile
+            }.takeIf { it >= 0 } ?: notFoundIcError("main library", mainLibraryFile)
+
+            when (mainLibraryIndex) {
+                resolvedLibraries.lastIndex -> resolvedLibraries
+                else -> resolvedLibraries.filterIndexedTo(ArrayList(resolvedLibraries.size)) { index, _ ->
+                    index != mainLibraryIndex
+                }.apply { add(resolvedLibraries[mainLibraryIndex]) }
             }
         }
 
diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.3.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.3.d.ts
index 55cfa8b..3157e94 100644
--- a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.3.d.ts
+++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.3.d.ts
@@ -1,8 +1,8 @@
 type Nullable<T> = T | null | undefined
-export declare function bar(): number;
 export declare class MyClass {
     constructor(stepId: number);
     get stepId(): number;
     qux(): number;
 }
+export declare function bar(): number;
 export declare function box(stepId: number, isWasm: boolean): string;
\ No newline at end of file