From patchwork Tue May 30 22:27:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: belouargamohamed@gmail.com X-Patchwork-Id: 24725 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 672DDC7EE24 for ; Tue, 30 May 2023 22:28:18 +0000 (UTC) Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) by mx.groups.io with SMTP id smtpd.web11.27.1685485695374536919 for ; Tue, 30 May 2023 15:28:15 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@gmail.com header.s=20221208 header.b=rFmf3oGF; spf=pass (domain: gmail.com, ip: 209.85.128.53, mailfrom: belouargamohamed@gmail.com) Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-3f6dfc4dffaso37546375e9.0 for ; Tue, 30 May 2023 15:28:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685485693; x=1688077693; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=8bUpakl76o27hJf6ZRoQnS9ltw01zvaQbrcJZKpx2eI=; b=rFmf3oGFyQSwD8vGcF8pskMR+GNJiZLGZdJOx44dnIR3F07e6hL0zzkJhKwVhfA3lQ OpJ5E9sJSIAMEcibmxU6nb1aVjHGUYhBajQoHO0jDTrIAgBwGsqPlRzsxb9txA1zZDvx uJspsf4+btRX//QbEdVfugaGAs7pz+dGv4LxUm5ZA0y2njXTV+7gR1vSIO/5zG0493I5 TyLNzHJ7iSYyJM0+uSMEDWq8ZIHzRb1norIqcde2Na9Hx9TmhzbqU7nt3C8Sxzgm92QO fbmPQFrKki0wuCETMLRoqBxzThV6WSIFMrOE/wWt3INK57CKaLU8yArDW181h0GRE0cs QPNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685485693; x=1688077693; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8bUpakl76o27hJf6ZRoQnS9ltw01zvaQbrcJZKpx2eI=; b=S/p3jwWHMZzd/+J7uQmTDmtw45Eu/q/9JQzDvcXU+SRMdQt+NFNq0X+JTGfzehjxig dc0yb1Cw0imujDUmbJs2zAj04sVxgz+1cZLLJQAQuqGOLIgFJD58wNJQFb8+U9A07epY IVhvxf6oIrBhY1FL2bgIFD8unKUFpjUL/we4HTIJzNqck3CdGv1SZu3qSKHW3Qij8UQw tM6OjJLpt3hmZmBh6VbxE3JLZwifm+0fwF1OYduNgCsJiXdW6FTWvZ1lnOqjBIVWxLfA +vIjvqXxWBgYrk0zlDUyMglTwIgCf8hQATTVb/FxuOJOQDKYUgP9O7ksOb6KC166ehYQ STEw== X-Gm-Message-State: AC+VfDxiYMiJtDjnq2VSoWMCL6yXIqNuRR0/eqvbK7GWeTFUOvia8pFU uYswKSGDd6LHy6yZNCRiJUKDL3UmLrJPMG5I X-Google-Smtp-Source: ACHHUZ5TjehObQEUlbquGWihj/Tyc9YzYNQsfRW8nZg3dAlkL4s5BFJG8Ob2O0l5Og1rAq4FKPRZig== X-Received: by 2002:a1c:7918:0:b0:3f6:244:55e3 with SMTP id l24-20020a1c7918000000b003f6024455e3mr2411461wme.35.1685485692700; Tue, 30 May 2023 15:28:12 -0700 (PDT) Received: from localhost.localdomain (2a02-842a-002e-7001-af81-84f4-744a-71c9.rev.sfr.net. [2a02:842a:2e:7001:af81:84f4:744a:71c9]) by smtp.gmail.com with ESMTPSA id f16-20020a7bcc10000000b003f60fb2addbsm22515276wmh.44.2023.05.30.15.28.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 15:28:12 -0700 (PDT) From: belouargamohamed@gmail.com X-Google-Original-From: m.belouarga@technologyandstrategy.com To: openembedded-core@lists.openembedded.org Cc: f.lahoudere@technologyandstrategy.com, e.aubineau@technologyandstrategy.com, j.guignard@technologyandstrategy.com, BELOUARGA Mohamed Subject: [master][PATCH 1/6] recipetool: create: npm: Remove duplicate function to not have future conflicts Date: Wed, 31 May 2023 00:27:47 +0200 Message-Id: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 May 2023 22:28:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/181961 From: BELOUARGA Mohamed Npm packages do not have yocto friendly names. fore instance we can have names like "@example/npmPackage" npm fetcher has a function that convert these names to yocto friendly names. But in recipe tool we have an other function (duplicate). Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index 3394a89970..e667a4d19b 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -13,6 +13,7 @@ import sys import tempfile import bb from bb.fetch2.npm import NpmEnvironment +from bb.fetch2.npm import npm_package from bb.fetch2.npmsw import foreach_dependencies from recipetool.create import RecipeHandler from recipetool.create import get_license_md5sums @@ -30,15 +31,6 @@ def tinfoil_init(instance): class NpmRecipeHandler(RecipeHandler): """Class to handle the npm recipe creation""" - @staticmethod - def _npm_name(name): - """Generate a Yocto friendly npm name""" - name = re.sub("/", "-", name) - name = name.lower() - name = re.sub(r"[^\-a-z0-9]", "", name) - name = name.strip("-") - return name - @staticmethod def _get_registry(lines): """Get the registry value from the 'npm://registry' url""" @@ -143,7 +135,7 @@ class NpmRecipeHandler(RecipeHandler): # Handle the dependencies def _handle_dependency(name, params, deptree): - suffix = "-".join([self._npm_name(dep) for dep in deptree]) + suffix = "-".join([npm_package(dep) for dep in deptree]) destdirs = [os.path.join("node_modules", dep) for dep in deptree] destdir = os.path.join(*destdirs) packages["${PN}-" + suffix] = destdir @@ -173,7 +165,7 @@ class NpmRecipeHandler(RecipeHandler): if "name" not in data or "version" not in data: return False - extravalues["PN"] = self._npm_name(data["name"]) + extravalues["PN"] = npm_package(data["name"]) extravalues["PV"] = data["version"] if "description" in data: From patchwork Tue May 30 22:27:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: belouargamohamed@gmail.com X-Patchwork-Id: 24724 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 65BD3C7EE23 for ; Tue, 30 May 2023 22:28:18 +0000 (UTC) Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by mx.groups.io with SMTP id smtpd.web11.30.1685485697002116670 for ; Tue, 30 May 2023 15:28:17 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@gmail.com header.s=20221208 header.b=q1IAVjwN; spf=pass (domain: gmail.com, ip: 209.85.128.47, mailfrom: belouargamohamed@gmail.com) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-3f6e1393f13so36942035e9.0 for ; Tue, 30 May 2023 15:28:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685485695; x=1688077695; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZJUzj4Q2oJwjjB/exvQciTX3ARutOqjyziKMxGWGc1k=; b=q1IAVjwN5uPYsmJhtOkeNEvzm8eTw4W2KxvEAcrSAM4j2a+IuIb9jwEZMkHy9OQVRo G+PIjmlSzHYMbCtyNO1TcFaTwxNoswj3GBwsmh03Dwjy3zF1RzsXaQ7fVCscAx4/61K4 /6dtoIEZy9H+Dj1TtKQyKVs3dg8JMibarRbK1MIhm/VigS2yautP+B8Q7jNum6vOvXj9 S2H44WHrCQQibK9GS34jcYPJzgSMjcl09s8bwELMGohoz5y8YQ1dh/1g5EFnuG5O3q+k 3TsOnZqzNcXLpsNv1iMv6RZeWuVwtz0mZHoswn+yrgN9QCd2Z4L304ZfHZXz2ZkHyUst BKgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685485695; x=1688077695; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZJUzj4Q2oJwjjB/exvQciTX3ARutOqjyziKMxGWGc1k=; b=YqVzh74hmkNAeR9UzrKw/vZ9E8XNoeb/k6/R53fyjwzihlgZUbVqc+GThquJA7sWV3 B6w898sW7KjVcyybHtEtVBjtloaqwZs/kBpt4Rrd7I7SF01YoufDbbzWz43W7QMkBVpf tbjAOd+ydPHkWtqkJ/qDOQNaAy1/OI5TlGItn+uQud2CEpi54bq+s8lfjgI4vnTp0EZm +7s32v5U1VGJkdA6qlCsCX2q5YT+7usTvj20SkPC59IC5+I5XjkL0qyKQfkD6rRCbqa9 Z8vYNonUhxIFQiu1eSS9fxf00BAWwqFgvEcc08ASTlpbFi9HtSCeC+NIrzZQhzGfl5Nf xdsQ== X-Gm-Message-State: AC+VfDwVNXqro7s7NBg+T9BirZX5nmHdbHqzZfJNwP3jFNyiH6+QYzjD SyZPFJH1rw8unmCUWlljOHQXK40MEZVW/UXg X-Google-Smtp-Source: ACHHUZ6BI+YBhkcQr4xWU8oQF1cFSCAkBagg1jH28s4AksYXaZm6VXRy2wj2jgWPuVNs6yRoUl9ncw== X-Received: by 2002:a7b:c3c6:0:b0:3f6:ed5:7e8a with SMTP id t6-20020a7bc3c6000000b003f60ed57e8amr2596701wmj.30.1685485695001; Tue, 30 May 2023 15:28:15 -0700 (PDT) Received: from localhost.localdomain (2a02-842a-002e-7001-af81-84f4-744a-71c9.rev.sfr.net. [2a02:842a:2e:7001:af81:84f4:744a:71c9]) by smtp.gmail.com with ESMTPSA id f16-20020a7bcc10000000b003f60fb2addbsm22515276wmh.44.2023.05.30.15.28.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 15:28:14 -0700 (PDT) From: belouargamohamed@gmail.com X-Google-Original-From: m.belouarga@technologyandstrategy.com To: openembedded-core@lists.openembedded.org Cc: f.lahoudere@technologyandstrategy.com, e.aubineau@technologyandstrategy.com, j.guignard@technologyandstrategy.com, BELOUARGA Mohamed Subject: [master][PATCH 2/6] classes: npm: Handle peer dependencies for npm packages Date: Wed, 31 May 2023 00:27:48 +0200 Message-Id: <20230530222752.42503-2-m.belouarga@technologyandstrategy.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> References: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 May 2023 22:28:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/181962 From: BELOUARGA Mohamed NPM changed its manner to handle peer dependencies over its versions. Before NPM 3: NPM installs automatically peer dependencies between NPM 3 and 7: NPM shows a warning about peer dependencies After NPM 3: NPM reworked its manner how to handle peer dependencies The shrinkwrap doesn't have the parameters of the peer dependencies, so we cannot fetch them. in the same time peer dependencies are not direct dependencies, they should be installed as run time dependencies. Signed-off-by: BELOUARGA Mohamed --- meta/classes-recipe/npm.bbclass | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/meta/classes-recipe/npm.bbclass b/meta/classes-recipe/npm.bbclass index 639f461a3a..92e59fefce 100644 --- a/meta/classes-recipe/npm.bbclass +++ b/meta/classes-recipe/npm.bbclass @@ -109,6 +109,7 @@ python npm_do_configure() { import tempfile from bb.fetch2.npm import NpmEnvironment from bb.fetch2.npm import npm_unpack + from bb.fetch2.npm import npm_package from bb.fetch2.npmsw import foreach_dependencies from bb.progress import OutOfProgressHandler from oe.npm_registry import NpmRegistry @@ -169,6 +170,7 @@ python npm_do_configure() { if has_shrinkwrap_file: cached_shrinkwrap = copy.deepcopy(orig_shrinkwrap) cached_shrinkwrap.pop("dependencies", None) + cached_shrinkwrap["packages"][""].pop("peerDependencies", None) # Manage the dependencies progress = OutOfProgressHandler(d, r"^(\d+)/(\d+)$") @@ -203,6 +205,19 @@ python npm_do_configure() { if has_shrinkwrap_file: foreach_dependencies(orig_shrinkwrap, _count_dependency, dev) foreach_dependencies(orig_shrinkwrap, _cache_dependency, dev) + + # Manage Peer Dependencies + if has_shrinkwrap_file: + packages = orig_shrinkwrap.get("packages", {}) + peer_deps = packages.get("", {}).get("peerDependencies", {}) + package_runtime_dependencies = d.getVar("RDEPENDS:%s" % d.getVar("PN")) + + for peer_dep in peer_deps: + peer_dep_yocto_name = npm_package(peer_dep) + if peer_dep_yocto_name not in package_runtime_dependencies: + bb.warn(peer_dep + " is a peer dependencie that is not in RDEPENDS variable. " + + "Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool" + % peer_dep_yocto_name) # Configure the main package with tempfile.TemporaryDirectory() as tmpdir: @@ -279,6 +294,9 @@ python npm_do_compile() { args.append(("target_arch", d.getVar("NPM_ARCH"))) args.append(("build-from-source", "true")) + # Don't install peer dependencies as they should be in RDEPENDS variable + args.append(("legacy-peer-deps", "true")) + # Pack and install the main package (tarball, _) = npm_pack(env, d.getVar("NPM_PACKAGE"), tmpdir) cmd = "npm install %s %s" % (shlex.quote(tarball), d.getVar("EXTRA_OENPM")) From patchwork Tue May 30 22:27:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: belouargamohamed@gmail.com X-Patchwork-Id: 24728 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46109C7EE24 for ; Tue, 30 May 2023 22:28:28 +0000 (UTC) Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by mx.groups.io with SMTP id smtpd.web10.32.1685485698764451858 for ; Tue, 30 May 2023 15:28:19 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@gmail.com header.s=20221208 header.b=soqAgaRH; spf=pass (domain: gmail.com, ip: 209.85.128.48, mailfrom: belouargamohamed@gmail.com) Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-3f6d38a140bso2819625e9.1 for ; Tue, 30 May 2023 15:28:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685485697; x=1688077697; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2irKUYwyYh1dcWlnjohfgaLhlT8ND93pcpRz1tlDtpw=; b=soqAgaRHQRqhs/wnMzAXFpX2f/jBqahJbYFggWctMOxp5uWtbrXIFFs6J8AvQhEzsw yEayiKBhITMFr/vXxATRmw7eTvZ2L+3H8cJPYSgtiHm/c8vor5bmSopmBCDvv3SRXCno c1y80hSG8ANQkKbXIJNbH5unzxxqBhMnDMlCHyRycE5mGvaDlELPYfwG0Hjf9kJUnnZ/ KqRF7kOoDKW39hr1s/DueQupNkvTkI4WV1iptH9hLhH4rjo4K7UsAZFgPpEAqRGKCtIB 3iM05tVOceXShTWG4c3/PY4074cavnpRClI+VHd85sqZaizyIj+CvNeA6jfand3bdrNa Ac6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685485697; x=1688077697; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2irKUYwyYh1dcWlnjohfgaLhlT8ND93pcpRz1tlDtpw=; b=VCl1D4c5uAbFhLP5OCr8V+5JaWQ9iUc0Wx1DyoMoWT0HL0Za+PRV6AF+gat93VwGRn DAbOvhSL3dtMu6I4wsdQhChrf4MOeO5Q0qpeX/BS6g6VtIMsfA8FOAIG1mArwLCq4Doe bzvKs9a4wS0PiiHW9kDZ3ILMu8ZYCMtW3SSKOhJAm69MiRr9ZKHw8DK7VD7SKNIEGdDC 7KPeYYVgHBra53NCHN9/PWDlWUsLgR3LH7wdVU4cqRzK0O1kLZJb79xuvdT0DqVQnekC /mCJC/D0fs1dlzheQ5JfOxnH0xSkF8CiuHyA8hJ4F3pWXXIILgW9Fk76fGpjluAkVXX/ QcFQ== X-Gm-Message-State: AC+VfDxCEs7A0/7bfby7vbgdxLvI43DE/N39nYeHS78fbySWVFWyKQcG IyIyQERkihyRXNn2DgMV1UtLZTopM6t7IqUs X-Google-Smtp-Source: ACHHUZ5gBkc9S2HxdWuD7lZuBS7Ln6WdXMq3FU9k7Ssxnxqm3F94EbRi8WVz5JWpBKFpa7gGBKpRbg== X-Received: by 2002:a1c:4c17:0:b0:3f1:731e:cdb1 with SMTP id z23-20020a1c4c17000000b003f1731ecdb1mr2912688wmf.6.1685485696916; Tue, 30 May 2023 15:28:16 -0700 (PDT) Received: from localhost.localdomain (2a02-842a-002e-7001-af81-84f4-744a-71c9.rev.sfr.net. [2a02:842a:2e:7001:af81:84f4:744a:71c9]) by smtp.gmail.com with ESMTPSA id f16-20020a7bcc10000000b003f60fb2addbsm22515276wmh.44.2023.05.30.15.28.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 15:28:16 -0700 (PDT) From: belouargamohamed@gmail.com X-Google-Original-From: m.belouarga@technologyandstrategy.com To: openembedded-core@lists.openembedded.org Cc: f.lahoudere@technologyandstrategy.com, e.aubineau@technologyandstrategy.com, j.guignard@technologyandstrategy.com, BELOUARGA Mohamed Subject: [master][PATCH 3/6] recipetool: create: npm: Add support for the new format of the shrinkwrap file Date: Wed, 31 May 2023 00:27:49 +0200 Message-Id: <20230530222752.42503-3-m.belouarga@technologyandstrategy.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> References: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 May 2023 22:28:28 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/181963 From: BELOUARGA Mohamed The shrinkwrap file changed its format, but npm does not version this file. So we can use it properly. The actual changes make the script check if the npm package has dependencies in the actual shrinkwrap format. Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index e667a4d19b..25e7ddb472 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -134,11 +134,10 @@ class NpmRecipeHandler(RecipeHandler): licfiles.append(os.path.relpath(readme, srctree)) # Handle the dependencies - def _handle_dependency(name, params, deptree): + def _handle_dependency(name, params, destdir): + deptree = destdir.split('node_modules/') suffix = "-".join([npm_package(dep) for dep in deptree]) - destdirs = [os.path.join("node_modules", dep) for dep in deptree] - destdir = os.path.join(*destdirs) - packages["${PN}-" + suffix] = destdir + packages["${PN}" + suffix] = destdir _licfiles_append_fallback_readme_files(destdir) with open(shrinkwrap_file, "r") as f: @@ -234,7 +233,7 @@ class NpmRecipeHandler(RecipeHandler): value = origvalue.replace("version=" + data["version"], "version=${PV}") value = value.replace("version=latest", "version=${PV}") values = [line.strip() for line in value.strip('\n').splitlines()] - if "dependencies" in shrinkwrap: + if "dependencies" in shrinkwrap.get("packages", {}).get("", {}): values.append(url_recipe) return values, None, 4, False From patchwork Tue May 30 22:27:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: belouargamohamed@gmail.com X-Patchwork-Id: 24726 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46182C7EE23 for ; Tue, 30 May 2023 22:28:28 +0000 (UTC) Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by mx.groups.io with SMTP id smtpd.web11.36.1685485700862219807 for ; Tue, 30 May 2023 15:28:21 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@gmail.com header.s=20221208 header.b=geYqkVEe; spf=pass (domain: gmail.com, ip: 209.85.128.51, mailfrom: belouargamohamed@gmail.com) Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-3f611ccd06eso36948275e9.0 for ; Tue, 30 May 2023 15:28:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685485699; x=1688077699; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=O3WGXlnuP33E1ry0jo/DgUUKk31riL5yEjPdb4Y7jVQ=; b=geYqkVEeqK4ktTWMcxukZUjHx1O2AvNjizL3bSXVb+xaH9lNaVvx7Bt6bJhO1Y6I9l mnjDzpM0gdUI4PzvhTmYi193HfCHcZTEiZPwFbkW4MOgZRdP0h37c4EIszLQyGAt0aP0 2cIErQb6lcF8tGtCq5FbX7/SWlZRU1Jn4oofYepH3K/SXx8h091ZOXEIUJtnsWwWu3Bf 1WIgFkD8EY2xHe15OFvJkR6NBnlsiOynuIMwWMeQSAicfg6zXsufyGTNqmN9FWe1ChhO dgPxKBVsehb+ym/dS07XFCa2HW1H3qbsHqurQuGIPKxtO1yyLMi7pp4Rr1UZsI/h8WT4 SZew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685485699; x=1688077699; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O3WGXlnuP33E1ry0jo/DgUUKk31riL5yEjPdb4Y7jVQ=; b=YvADH98viBdr1XhFiPheo69XYjacqs1QZJHuOZ8liyXEDcKxJ4JAlLtDMPwkbbfGfu zwaAknAWedfIpuOtYSzQU1yvzs8Y4ydXQu2VTjV4EVYV+Feiu0L8dXu26qtPPmUBHJ90 jaLeeKArQRgYPyVMSxQ+sgJK9+25ou2+NrEawHGMeJxes3I4R7GmpZL1ODORUZrYuWCd c7sdL46nXLCQsD2WOng9/FVCIC7oJsxHOR0eH3WbkAN1F5o9qe21zfgFzDw5k2tXD3Sg L9UJZfvRME8sJ7V83WNvTrGmbCh7k6sTLlnfiObFEqoTJFRyYh32nc4vjI5+AwUsNw3Q ZEqg== X-Gm-Message-State: AC+VfDzbWrmWlDAK5p4HXmniIiWivemcKYdCwpYrK+OCdNlQi9at8uae BHF7SuV13YC7q3MRsKnSIx9nlRigUacAMDqL X-Google-Smtp-Source: ACHHUZ51WrFvxImOkDw47dnRyQ9oL/+FIj976MySp5Bm/Sz+mDaRagFJZGU6md3DWL3J6sYRd820QQ== X-Received: by 2002:a1c:4b09:0:b0:3f6:d09:5d46 with SMTP id y9-20020a1c4b09000000b003f60d095d46mr2665680wma.20.1685485698797; Tue, 30 May 2023 15:28:18 -0700 (PDT) Received: from localhost.localdomain (2a02-842a-002e-7001-af81-84f4-744a-71c9.rev.sfr.net. [2a02:842a:2e:7001:af81:84f4:744a:71c9]) by smtp.gmail.com with ESMTPSA id f16-20020a7bcc10000000b003f60fb2addbsm22515276wmh.44.2023.05.30.15.28.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 15:28:18 -0700 (PDT) From: belouargamohamed@gmail.com X-Google-Original-From: m.belouarga@technologyandstrategy.com To: openembedded-core@lists.openembedded.org Cc: f.lahoudere@technologyandstrategy.com, e.aubineau@technologyandstrategy.com, j.guignard@technologyandstrategy.com, BELOUARGA Mohamed Subject: [master][PATCH 4/6] recipetool: create: npm: Add support to handle peer dependencies Date: Wed, 31 May 2023 00:27:50 +0200 Message-Id: <20230530222752.42503-4-m.belouarga@technologyandstrategy.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> References: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 May 2023 22:28:28 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/181964 From: BELOUARGA Mohamed NPM changed its manner to handle peer dependencies over its versions. Before NPM 3: NPM installs automatically peer dependencies between NPM 3 and 7: NPM shows a warning about peer dependencies After NPM 3: NPM reworked its manner how to handle peer dependencies The shrinkwrap doesn't have the parameters of the peer dependencies, so we cannot fetch them. in the same time peer dependencies are not direct dependencies, they should be installed as run time dependencies. Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index 25e7ddb472..113a89f6a6 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -146,6 +146,23 @@ class NpmRecipeHandler(RecipeHandler): foreach_dependencies(shrinkwrap, _handle_dependency, dev) return licfiles, packages + + # Handle the peer dependencies + def _handle_peer_dependency(self, shrinkwrap_file): + """Check if package has peer dependencies and show warning if it is the case""" + with open(shrinkwrap_file, "r") as f: + shrinkwrap = json.load(f) + + packages = shrinkwrap.get("packages", {}) + peer_deps = packages.get("", {}).get("peerDependencies", {}) + + for peer_dep in peer_deps: + peer_dep_yocto_name = npm_package(peer_dep) + bb.warn(peer_dep + " is a peer dependencie of the actual package. " + + "Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool" + % peer_dep_yocto_name) + + def process(self, srctree, classes, lines_before, lines_after, handled, extravalues): """Handle the npm recipe creation""" @@ -283,6 +300,9 @@ class NpmRecipeHandler(RecipeHandler): classes.append("npm") handled.append("buildsystem") + # Check if package has peer dependencies and inform the user + self._handle_peer_dependency(shrinkwrap_file) + return True def register_recipe_handlers(handlers): From patchwork Tue May 30 22:27:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: belouargamohamed@gmail.com X-Patchwork-Id: 24727 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4D2ACC77B7A for ; Tue, 30 May 2023 22:28:28 +0000 (UTC) Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by mx.groups.io with SMTP id smtpd.web10.35.1685485702775091472 for ; Tue, 30 May 2023 15:28:23 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@gmail.com header.s=20221208 header.b=JZvusfXi; spf=pass (domain: gmail.com, ip: 209.85.128.45, mailfrom: belouargamohamed@gmail.com) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-3f6042d610fso52230255e9.1 for ; Tue, 30 May 2023 15:28:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685485701; x=1688077701; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1i9z/PGc1Z1SXlUgJq8JK3J3Dhxd9BXF4iy1AuCHOO0=; b=JZvusfXiD/7g97s47o601hWYF6vvc0dPl3ly5ahuqVinCVB8iqPMsYWfqO4kpxOoUY lLOFBjhn/KeT34kqQDJmgpjDoS+1suhwcUT1WkyAW1gaCJlBnrJbg2yNXIWwiHhPY60x KKz+narrTFZsefYlpI2C14o2utH9zqXRPdBg640z2wq+qNxmysu7bNpbWybrF/NFHlvV oqqnTPuGXnKzECdHqOp+QvO0yx0v/tASUsXKR91uVcn0RQ6B4WiW3OApRPUolEGZjWdl UhOYDlO9Ef/IBw0wJIp+FErLfho0+zfp3zUVpFZFVUCBE7gfNHFPX8uC2nLOLjeVVSci mGHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685485701; x=1688077701; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1i9z/PGc1Z1SXlUgJq8JK3J3Dhxd9BXF4iy1AuCHOO0=; b=A1f4IqeZyM9dwo/7t2Sc0ZNUL5/QnYqPLLjqlWOeTV/Hs2GHB0YeDAZQNN3nO4BxCj mRCeudNuYcJb8X6d9tYgJTUc5pQCHn5HkNa8vXzRCPUhqn9nX7ulHEiM1Z+lOT3/rnSr eJ6tnyq55iBC7dMgV+1zh4psrtrCNwVAAT+sHrQnt8bbV7PTSoc1MLE7jg0pbK6e3B1W E/b8BuPr9rOHeubDHblOEkoeX8bgs5Gilfr168T6FFQv71yH31C6OY8/2uUokU9W1pwj UlPpaSuZtAdUWOHJdqSrbRc5uKHtivP4ipsRdTTntMWL7iBsWgzMLNLvbHNu7P2p/T9c 1Sow== X-Gm-Message-State: AC+VfDzwD9i4BuVu7IRXYU1YPZjKbhshGvti4OVwIevIWb86qxdoCam/ CrX+7u7mXrNUUFoWBGM9qIgUp9TK/Yg3Arbm X-Google-Smtp-Source: ACHHUZ7Pz2n0FU1v3J1iEqC5J1C9eBi15L+/IrD5JXFARbfj3Gt1CN4Kq+syyPeDos31M4bvZbkZPA== X-Received: by 2002:a1c:cc07:0:b0:3f1:93c2:4df7 with SMTP id h7-20020a1ccc07000000b003f193c24df7mr2550153wmb.5.1685485700780; Tue, 30 May 2023 15:28:20 -0700 (PDT) Received: from localhost.localdomain (2a02-842a-002e-7001-af81-84f4-744a-71c9.rev.sfr.net. [2a02:842a:2e:7001:af81:84f4:744a:71c9]) by smtp.gmail.com with ESMTPSA id f16-20020a7bcc10000000b003f60fb2addbsm22515276wmh.44.2023.05.30.15.28.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 15:28:20 -0700 (PDT) From: belouargamohamed@gmail.com X-Google-Original-From: m.belouarga@technologyandstrategy.com To: openembedded-core@lists.openembedded.org Cc: f.lahoudere@technologyandstrategy.com, e.aubineau@technologyandstrategy.com, j.guignard@technologyandstrategy.com, BELOUARGA Mohamed Subject: [master][PATCH 5/6] classes: npm: Add support for the new format of the shrinkwrap file Date: Wed, 31 May 2023 00:27:51 +0200 Message-Id: <20230530222752.42503-5-m.belouarga@technologyandstrategy.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> References: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 May 2023 22:28:28 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/181965 From: BELOUARGA Mohamed 1 - Adapt do_configure to the new format of the shrinkwrap 2 - Remove useless function _npmsw_dependency_dict because the dictionnary is already given by npmsw:foreach_dependencies 3 - Rename arguments of callback functions Signed-off-by: BELOUARGA Mohamed --- meta/classes-recipe/npm.bbclass | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/meta/classes-recipe/npm.bbclass b/meta/classes-recipe/npm.bbclass index 92e59fefce..c1944ca14e 100644 --- a/meta/classes-recipe/npm.bbclass +++ b/meta/classes-recipe/npm.bbclass @@ -130,22 +130,6 @@ python npm_do_configure() { sha512 = bb.utils.sha512_file(tarball) return "sha512-" + base64.b64encode(bytes.fromhex(sha512)).decode() - def _npmsw_dependency_dict(orig, deptree): - """ - Return the sub dictionary in the 'orig' dictionary corresponding to the - 'deptree' dependency tree. This function follows the shrinkwrap file - format. - """ - ptr = orig - for dep in deptree: - if "dependencies" not in ptr: - ptr["dependencies"] = {} - ptr = ptr["dependencies"] - if dep not in ptr: - ptr[dep] = {} - ptr = ptr[dep] - return ptr - # Manage the manifest file and shrinkwrap files orig_manifest_file = d.expand("${S}/package.json") orig_shrinkwrap_file = d.expand("${S}/npm-shrinkwrap.json") @@ -177,24 +161,25 @@ python npm_do_configure() { progress_total = 1 # also count the main package progress_done = 0 - def _count_dependency(name, params, deptree): + def _count_dependency(name, params, destsuffix): nonlocal progress_total progress_total += 1 - def _cache_dependency(name, params, deptree): - destsubdirs = [os.path.join("node_modules", dep) for dep in deptree] - destsuffix = os.path.join(*destsubdirs) + def _cache_dependency(name, params, destsuffix): with tempfile.TemporaryDirectory() as tmpdir: # Add the dependency to the npm cache destdir = os.path.join(d.getVar("S"), destsuffix) (tarball, pkg) = npm_pack(env, destdir, tmpdir) _npm_cache_add(tarball, pkg) # Add its signature to the cached shrinkwrap - dep = _npmsw_dependency_dict(cached_shrinkwrap, deptree) + dep = params dep["version"] = pkg['version'] dep["integrity"] = _npm_integrity(tarball) if params.get("dev", False): dep["dev"] = True + if "dependencies" not in cached_shrinkwrap: + cached_shrinkwrap["dependencies"] = {} + cached_shrinkwrap["dependencies"][name] = dep # Display progress nonlocal progress_done progress_done += 1 From patchwork Tue May 30 22:27:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: belouargamohamed@gmail.com X-Patchwork-Id: 24729 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 540B9C7EE2F for ; Tue, 30 May 2023 22:28:28 +0000 (UTC) Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by mx.groups.io with SMTP id smtpd.web11.41.1685485704504445814 for ; Tue, 30 May 2023 15:28:24 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@gmail.com header.s=20221208 header.b=qCbACiKN; spf=pass (domain: gmail.com, ip: 209.85.128.48, mailfrom: belouargamohamed@gmail.com) Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-3f6da07ff00so53754825e9.3 for ; Tue, 30 May 2023 15:28:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685485702; x=1688077702; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bMD7EyVX2OrlngbQaE672YAgUmndMTtl+bj5fJxXQcI=; b=qCbACiKN9K1WYOQ3xXZkAKjhLVLtvsUmxaojlz1CnGlHiIUv6Y8eOzFP8LsXEevrIq r65VlrFoyfaD2KBiMQMMAhMm86fzxztjWtNiG2QXAbCi5PbamLlffW/aMwRcTX/11wHG PA3hyC9zyBnVXGmJRttlX3j2NTALua74jrHVMDa7qmlj5dQYB7vuoT27sQrovupQTwfH fj0xHwa0bISUcMUc4nOEwDEirvZlDj3esPW+Nm8AHR7Qr1z7lv8rXy6KbknPe3eWbY0C ul+XsgmCimngRH4u85RyVCf62H2DQBxTJb8dOE834r+SGWgQmQeyL9P2T1CZrnzbsary YWVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685485702; x=1688077702; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bMD7EyVX2OrlngbQaE672YAgUmndMTtl+bj5fJxXQcI=; b=Fwujq1nL/jlShu6gRpQuR0QebgTBkulpSejMcsZ5viIJ04bL3S8fWqXse0A+xUd/oE cwOSqpPHUl3LmDcxr/Fup0M5ra5aTH2iNYtD0R7uGKfgOW1MIFNkENcSHQN5+gWfSkxi rYJZh1Lgx+T1fNd5/jq9bsmAIX4+OyA6roHX9vYM6GDspayt+RgO4CaDO9ueJ1xTomI9 oSAG+rNpn8u3BxQcKidSa3GRD6ReTwOIAuOlTRC0RU6HHHWD0mbGnJhvbB+3T1+ZIgaM mA66VImV5p8a20GQGeo5Oy9Gqcc4ZoA3sA0jftKpYIRrJnPWlIKKIIe/WSO2f2pIYvWH 4oAQ== X-Gm-Message-State: AC+VfDxx2QUOiZ/QJapzSkYkG8SQDO0JYzjTEOZvnBcnU+oZX7xkh7fE TrbGm0hIxCu8mV5byj5z7dihtDjLwje8lhE5 X-Google-Smtp-Source: ACHHUZ5xUSJWD8QzOFqYaFT675JFUB6MUZMur5t8/yB6T/kWdL4oXOAfSAxqbpq3apPOKnZkUIo8LA== X-Received: by 2002:a7b:cb9a:0:b0:3f4:23a4:7a93 with SMTP id m26-20020a7bcb9a000000b003f423a47a93mr2973033wmi.25.1685485702421; Tue, 30 May 2023 15:28:22 -0700 (PDT) Received: from localhost.localdomain (2a02-842a-002e-7001-af81-84f4-744a-71c9.rev.sfr.net. [2a02:842a:2e:7001:af81:84f4:744a:71c9]) by smtp.gmail.com with ESMTPSA id f16-20020a7bcc10000000b003f60fb2addbsm22515276wmh.44.2023.05.30.15.28.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 15:28:22 -0700 (PDT) From: belouargamohamed@gmail.com X-Google-Original-From: m.belouarga@technologyandstrategy.com To: openembedded-core@lists.openembedded.org Cc: f.lahoudere@technologyandstrategy.com, e.aubineau@technologyandstrategy.com, j.guignard@technologyandstrategy.com, BELOUARGA Mohamed Subject: [master][PATCH 6/6] classe-recipes: npm: Add support for dependencies and devDependencies Date: Wed, 31 May 2023 00:27:52 +0200 Message-Id: <20230530222752.42503-6-m.belouarga@technologyandstrategy.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> References: <20230530222752.42503-1-m.belouarga@technologyandstrategy.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 May 2023 22:28:28 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/181966 From: BELOUARGA Mohamed Adapt the npm classe for the shrinkwrap of Nodejs 18, and seperate dependencies and dev dependencies. Signed-off-by: BELOUARGA Mohamed --- meta/classes-recipe/npm.bbclass | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/meta/classes-recipe/npm.bbclass b/meta/classes-recipe/npm.bbclass index c1944ca14e..91da3295f2 100644 --- a/meta/classes-recipe/npm.bbclass +++ b/meta/classes-recipe/npm.bbclass @@ -153,7 +153,11 @@ python npm_do_configure() { if has_shrinkwrap_file: cached_shrinkwrap = copy.deepcopy(orig_shrinkwrap) - cached_shrinkwrap.pop("dependencies", None) + for package in orig_shrinkwrap["packages"]: + if package != "": + cached_shrinkwrap["packages"].pop(package, None) + cached_shrinkwrap["packages"][""].pop("dependencies", None) + cached_shrinkwrap["packages"][""].pop("devDependencies", None) cached_shrinkwrap["packages"][""].pop("peerDependencies", None) # Manage the dependencies @@ -177,9 +181,16 @@ python npm_do_configure() { dep["integrity"] = _npm_integrity(tarball) if params.get("dev", False): dep["dev"] = True - if "dependencies" not in cached_shrinkwrap: - cached_shrinkwrap["dependencies"] = {} - cached_shrinkwrap["dependencies"][name] = dep + if "devDependencies" not in cached_shrinkwrap["packages"][""]: + cached_shrinkwrap["packages"][""]["devDependencies"] = {} + cached_shrinkwrap["packages"][""]["devDependencies"][name] = pkg['version'] + + else: + if "dependencies" not in cached_shrinkwrap["packages"][""]: + cached_shrinkwrap["packages"][""]["dependencies"] = {} + cached_shrinkwrap["packages"][""]["dependencies"][name] = pkg['version'] + + cached_shrinkwrap["packages"][destsuffix] = dep # Display progress nonlocal progress_done progress_done += 1 @@ -212,7 +223,7 @@ python npm_do_configure() { # Configure the cached manifest file and cached shrinkwrap file def _update_manifest(depkey): for name in orig_manifest.get(depkey, {}): - version = cached_shrinkwrap["dependencies"][name]["version"] + version = cached_shrinkwrap["packages"][""][depkey][name] if depkey not in cached_manifest: cached_manifest[depkey] = {} cached_manifest[depkey][name] = version