Browse Source

Refactor NPM generator for CLI and development support

Improve the NPM generator to handle both CLI and development scenarios. Added conditional logic for CLI package deployments and development environment package generation. Simplified error handling and adjusted file-saving logic for better maintainability.

NP-637
pull/21/head
Jelle Spijker 1 year ago
parent
commit
f46170f765
  1. 21
      extensions/generators/npm.py

21
extensions/generators/npm.py

@ -1,8 +1,8 @@
import os
import json
from conan import ConanFile
from conan.errors import ConanException
from conan.tools.files import copy, save
from conan.tools.files import copy, mkdir, save
from pathlib import Path
@ -13,18 +13,27 @@ class npm:
def generate(self):
if self._conanfile.settings.os != "Emscripten":
self._conanfile.output.error("Can only deploy to NPM when build for Emscripten")
raise ConanException("Can only deploy to NPM when build for Emscripten")
return
if self._conanfile.display_name == "cli": # We're installing a CLI package from the conan local cache
root_package = [dep for dep in self._conanfile.dependencies.direct_host.values()][0]
src_folder = root_package.package_folder
conf_info = root_package.conf_info
name = root_package.ref.name
# Copy the *.js and *.d.ts
copy(self._conanfile, "*.js", src=root_package.package_folder, dst=self._conanfile.generators_folder)
copy(self._conanfile, "*.d.ts", src=root_package.package_folder, dst=self._conanfile.generators_folder)
copy(self._conanfile, "*.js", src=src_folder, dst=self._conanfile.generators_folder)
copy(self._conanfile, "*.d.ts", src=src_folder, dst=self._conanfile.generators_folder)
# Create the package.json
save(self._conanfile, str(Path(self._conanfile.generators_folder, "package.json")),
json.dumps(root_package.conf_info.get(f"user.{root_package.ref.name.lower()}:package_json")))
json.dumps(conf_info.get(f"user.{name.lower()}:package_json")))
# Create the .npmrc file
save(self._conanfile, str(Path(self._conanfile.generators_folder, ".npmrc")),
"//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}\n@ultimaker:registry=https://npm.pkg.github.com\nalways-auth=true")
else: # We're generating a package for a development environment
package_json = self._conanfile.python_requires["npmpackage"].module.generate_package_json(self._conanfile,
os.path.join(self._conanfile.cpp.build.bindirs[0], self._conanfile.cpp.build.bin[0]))
save(self._conanfile, str(Path(self._conanfile.build_folder, "package.json")),
json.dumps(package_json))

Loading…
Cancel
Save