From e170bb5bbb87212eaeab986e62b9459531396a78 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Mon, 9 Dec 2024 09:42:21 +0100 Subject: [PATCH] Add npm generator for Emscripten and WebAssembly builds Introduce a new npm generator in the Conan extensions for deploying to NPM when building for Emscripten and WebAssembly architectures. This generator copies JavaScript and TypeScript declaration files to a distribution directory and creates a package.json file using configuration information from the root package. Contribute to NP-637 --- extensions/generators/npm.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 extensions/generators/npm.py diff --git a/extensions/generators/npm.py b/extensions/generators/npm.py new file mode 100644 index 0000000..dfcb5cb --- /dev/null +++ b/extensions/generators/npm.py @@ -0,0 +1,27 @@ +import json + +from conan import ConanFile +from conan.tools.files import copy, mkdir, save +from pathlib import Path + + +class npm: + def __init__(self, conanfile: ConanFile): + self._conanfile = conanfile + + def generate(self): + if self._conanfile.settings.os != "Emscripten": + self._conanfile.output.error("Can only deploy to NPM when build for Emscripten") + return + + root_package = [dep for dep in self._conanfile.dependencies.direct_host.values()][0] + dist_path = Path(self._conanfile.generators_folder, "dist") + mkdir(self._conanfile, str(dist_path)) + + # Copy the *.js and *.d.ts + copy(self._conanfile, "*.js", src=root_package.package_folder, dst=str(dist_path)) + copy(self._conanfile, "*.d.ts", src=root_package.package_folder, dst=str(dist_path)) + + # Create the package.json + save(self._conanfile, str(Path(dist_path.parent, "package.json")), + json.dumps(root_package.conf_info.get(f"user.{root_package.ref.name.lower()}:package_json")))