fun run()

in gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/web/tasks/WebCompatibilityTask.kt [49:122]


    fun run() {
        val prefix = "origin"
        val jsAppFileName = jsOutputName.orNull ?: return
        val jsAppRenamed = joinLowerCamelCase(prefix, "js", jsAppFileName)
        val wasmAppFileName = wasmOutputName.orNull ?: return
        val wasmAppRenamed = joinLowerCamelCase(prefix, "wasm", wasmAppFileName)

        fileOperations.clearDirs(outputDir)

        fileOperations.copy { copySpec ->
            copySpec.duplicatesStrategy = DuplicatesStrategy.WARN

            copySpec.from(jsDistFiles) {
                it.rename { name ->
                    when (name) {
                        jsAppFileName -> jsAppRenamed
                        "${jsAppFileName}.map" -> "${jsAppRenamed}.map"
                        else -> name
                    }
                }
            }
            copySpec.from(wasmDistFiles) {
                it.rename { name ->
                    when (name) {
                        wasmAppFileName -> wasmAppRenamed
                        "${wasmAppFileName}.map" -> "${wasmAppRenamed}.map"
                        else -> name
                    }
                }
            }

            copySpec.into(outputDir)
        }

        val fallbackResolverCode = """
            const loadApp = () => {
                 const simpleWasmModule = new Uint8Array([
                    0,  97, 115, 109,   1,   0,   0,  0,   1,   8,   2,  95,
                    1, 120,   0,  96,   0,   0,   3,  3,   2,   1,   1,  10,
                   14,   2,   6,   0,   6,  64,  25, 11,  11,   5,   0, 208,
                  112,  26,  11,   0,  45,   4, 110, 97, 109, 101,   1,  15,
                    2,   0,   5, 102, 117, 110,  99, 48,   1,   5, 102, 117,
                  110,  99,  49,   4,   8,   1,   0,  5, 116, 121, 112, 101,
                   48,  10,  11,   1,   0,   1,   0,  6, 102, 105, 101, 108,
                  100,  48
                    ]);

                const hasSupportOfAllRequiredWasmFeatures = () =>
                    typeof WebAssembly !== "undefined" &&
                    typeof WebAssembly?.validate === "function" &&
                    WebAssembly.validate(simpleWasmModule);

                const createScript = (src) => {
                    const script = document.createElement("script");
                    script.src = src;
                    script.type = "application/javascript";
                    return script;
                }

                document.body.appendChild(createScript(hasSupportOfAllRequiredWasmFeatures() ? "$wasmAppRenamed" : "$jsAppRenamed"));
            }

            if (document.readyState === "loading") {
                document.addEventListener("DOMContentLoaded", loadApp);
            } else {
                loadApp();
            }
            """.trimIndent()


        val outputDir = outputDir.get().asFile
        File(outputDir, jsAppFileName).writeText(fallbackResolverCode)
        File(outputDir, wasmAppFileName).writeText(fallbackResolverCode)
    }