Compare commits

...

5 Commits

Author SHA1 Message Date
ChandonPierre
e1fedcf1fc
Merge 9fd7ba5b5e into 3958ee4805 2026-09-02 13:35:14 +08:00
renovate[bot]
3958ee4805
chore(deps): lock file maintenance (#1089)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-01 09:46:28 +02:00
renovate[bot]
e7905b9da9
chore(deps): update dependency serialize-javascript to v7.1.1 (#1040)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-01 09:31:43 +02:00
Marco Nenciarini
cd71e7d5fd
docs(web): use active doc version for install manifest link (#1074)
The install snippet always linked to the manifest of the latest released
version, regardless of which versioned docs page it was rendered on.
Viewing the 0.13.0 installation page therefore pointed at the 0.14.0
manifest.

Build the manifest URL from the active doc version directly: each
versioned page links its own release tag, and the unreleased "current"
docs link the manifest built off `main` instead of a (nonexistent)
release tag.

---------

Signed-off-by: Marco Nenciarini <marco.nenciarini@enterprisedb.com>
Signed-off-by: Danish <danish.khan@enterprisedb.com>
Co-authored-by: Danish <danish.khan@enterprisedb.com>
2026-08-31 11:14:07 +02:00
Chandon Pierre
9fd7ba5b5e feat: allow ObjectStore sidecar image override
The current configuration derives the sidecar image from configuration paramter `sidecar-image`: 1e13020fe5/internal/cnpgi/operator/lifecycle.go (L418)

However, this is challenging for multi-tenant Kubernetes clusters, as the plugin deployment defines the target sidecar image for all CNPG clusters within a given Kubernetes cluster.

In this PR, we add an optional `sidecarImage` field to `ObjectStore.spec.instanceSidecarConfiguration`.

This allows workloads using a specific ObjectStore to override the Barman Cloud sidecar image configured globally on the plugin deployment.

Signed-off-by: Chandon Pierre <cpierre@coreweave.com>
2026-08-03 23:23:35 -04:00
11 changed files with 337 additions and 152 deletions

View File

@ -27,6 +27,11 @@ import (
// InstanceSidecarConfiguration defines the configuration for the sidecar that runs in the instance pods. // InstanceSidecarConfiguration defines the configuration for the sidecar that runs in the instance pods.
type InstanceSidecarConfiguration struct { type InstanceSidecarConfiguration struct {
// SidecarImage overrides the plugin sidecar image for workloads that use this ObjectStore.
// When omitted, the image configured on the plugin deployment is used.
// +optional
SidecarImage string `json:"sidecarImage,omitempty"`
// The environment to be explicitly passed to the sidecar // The environment to be explicitly passed to the sidecar
// +optional // +optional
Env []corev1.EnvVar `json:"env,omitempty"` Env []corev1.EnvVar `json:"env,omitempty"`

View File

@ -666,6 +666,11 @@ spec:
The retentionCheckInterval defines the frequency at which the The retentionCheckInterval defines the frequency at which the
system checks and enforces retention policies. system checks and enforces retention policies.
type: integer type: integer
sidecarImage:
description: |-
SidecarImage overrides the plugin sidecar image for workloads that use this ObjectStore.
When omitted, the image configured on the plugin deployment is used.
type: string
type: object type: object
retentionPolicy: retentionPolicy:
description: |- description: |-

View File

@ -150,10 +150,16 @@ func (impl LifecycleImplementation) reconcileJob(
return nil, err return nil, err
} }
image, err := impl.collectSidecarImageForRecoveryJob(ctx, pluginConfiguration)
if err != nil {
return nil, err
}
return reconcileJob(ctx, cluster, request, sidecarConfiguration{ return reconcileJob(ctx, cluster, request, sidecarConfiguration{
env: env, env: env,
certificates: certificates, certificates: certificates,
resources: resources, resources: resources,
image: image,
}) })
} }
@ -162,6 +168,7 @@ type sidecarConfiguration struct {
certificates []corev1.VolumeProjection certificates []corev1.VolumeProjection
resources corev1.ResourceRequirements resources corev1.ResourceRequirements
additionalArgs []string additionalArgs []string
image string
} }
func reconcileJob( func reconcileJob(
@ -248,11 +255,17 @@ func (impl LifecycleImplementation) reconcilePod(
return nil, err return nil, err
} }
image, err := impl.collectSidecarImageForPod(ctx, pluginConfiguration)
if err != nil {
return nil, err
}
return reconcileInstancePod(ctx, cluster, request, pluginConfiguration, sidecarConfiguration{ return reconcileInstancePod(ctx, cluster, request, pluginConfiguration, sidecarConfiguration{
env: env, env: env,
certificates: certificates, certificates: certificates,
resources: resources, resources: resources,
additionalArgs: additionalArgs, additionalArgs: additionalArgs,
image: image,
}) })
} }
@ -450,7 +463,10 @@ func reconcilePodSpec(
// fixed values // fixed values
sidecarTemplate.Name = "plugin-barman-cloud" sidecarTemplate.Name = "plugin-barman-cloud"
sidecarTemplate.Image = viper.GetString("sidecar-image") sidecarTemplate.Image = config.image
if sidecarTemplate.Image == "" {
sidecarTemplate.Image = viper.GetString("sidecar-image")
}
sidecarTemplate.ImagePullPolicy = cluster.Spec.ImagePullPolicy sidecarTemplate.ImagePullPolicy = cluster.Spec.ImagePullPolicy
sidecarTemplate.StartupProbe = baseProbe.DeepCopy() sidecarTemplate.StartupProbe = baseProbe.DeepCopy()
sidecarTemplate.SecurityContext = &corev1.SecurityContext{ sidecarTemplate.SecurityContext = &corev1.SecurityContext{

View File

@ -0,0 +1,75 @@
/*
Copyright © contributors to CloudNativePG, established as
CloudNativePG a Series of LF Projects, LLC.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
SPDX-License-Identifier: Apache-2.0
*/
package operator
import (
"context"
barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
"github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/operator/config"
)
func (impl LifecycleImplementation) collectSidecarImageForRecoveryJob(
ctx context.Context,
configuration *config.PluginConfiguration,
) (string, error) {
if len(configuration.RecoveryBarmanObjectName) == 0 {
return "", nil
}
var objectStore barmancloudv1.ObjectStore
if err := impl.Client.Get(ctx, configuration.GetRecoveryBarmanObjectKey(), &objectStore); err != nil {
return "", err
}
return objectStore.Spec.InstanceSidecarConfiguration.SidecarImage, nil
}
func (impl LifecycleImplementation) collectSidecarImageForPod(
ctx context.Context,
configuration *config.PluginConfiguration,
) (string, error) {
// Keep the same precedence used for sidecar resources and arguments.
switch {
case len(configuration.BarmanObjectName) > 0:
var objectStore barmancloudv1.ObjectStore
if err := impl.Client.Get(ctx, configuration.GetBarmanObjectKey(), &objectStore); err != nil {
return "", err
}
return objectStore.Spec.InstanceSidecarConfiguration.SidecarImage, nil
case len(configuration.RecoveryBarmanObjectName) > 0:
var objectStore barmancloudv1.ObjectStore
if err := impl.Client.Get(ctx, configuration.GetRecoveryBarmanObjectKey(), &objectStore); err != nil {
return "", err
}
return objectStore.Spec.InstanceSidecarConfiguration.SidecarImage, nil
case len(configuration.ReplicaSourceBarmanObjectName) > 0:
var objectStore barmancloudv1.ObjectStore
if err := impl.Client.Get(ctx, configuration.GetReplicaSourceBarmanObjectKey(), &objectStore); err != nil {
return "", err
}
return objectStore.Spec.InstanceSidecarConfiguration.SidecarImage, nil
default:
return "", nil
}
}

View File

@ -26,6 +26,7 @@ import (
"github.com/cloudnative-pg/cloudnative-pg/pkg/utils" "github.com/cloudnative-pg/cloudnative-pg/pkg/utils"
"github.com/cloudnative-pg/cnpg-i/pkg/lifecycle" "github.com/cloudnative-pg/cnpg-i/pkg/lifecycle"
barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1" barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
"github.com/spf13/viper"
batchv1 "k8s.io/api/batch/v1" batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
@ -580,6 +581,101 @@ var _ = Describe("LifecycleImplementation", func() {
Expect(err).To(HaveOccurred()) Expect(err).To(HaveOccurred())
}) })
}) })
Describe("collectSidecarImage", func() {
makeStoreWithImageFunc := func(ns, name, image string) *barmancloudv1.ObjectStore {
return &barmancloudv1.ObjectStore{
TypeMeta: metav1.TypeMeta{Kind: "ObjectStore", APIVersion: barmancloudv1.GroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: ns},
Spec: barmancloudv1.ObjectStoreSpec{
InstanceSidecarConfiguration: barmancloudv1.InstanceSidecarConfiguration{
SidecarImage: image,
},
},
}
}
It("uses the cluster object store image when multiple stores are configured", func(ctx SpecContext) {
ns := "test-ns"
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
pc := &config.PluginConfiguration{
Cluster: cluster,
BarmanObjectName: "primary-store",
RecoveryBarmanObjectName: "recovery-store",
ReplicaSourceBarmanObjectName: "replica-store",
}
cli := buildClientFunc(
makeStoreWithImageFunc(ns, pc.BarmanObjectName, "example.com/primary:v1"),
makeStoreWithImageFunc(ns, pc.RecoveryBarmanObjectName, "example.com/recovery:v1"),
makeStoreWithImageFunc(ns, pc.ReplicaSourceBarmanObjectName, "example.com/replica:v1"),
).Build()
impl := LifecycleImplementation{Client: cli}
image, err := impl.collectSidecarImageForPod(ctx, pc)
Expect(err).NotTo(HaveOccurred())
Expect(image).To(Equal("example.com/primary:v1"))
})
It("uses the recovery object store image for recovery jobs", func(ctx SpecContext) {
ns := "test-ns"
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
pc := &config.PluginConfiguration{
Cluster: cluster,
RecoveryBarmanObjectName: "recovery-store",
}
cli := buildClientFunc(
makeStoreWithImageFunc(ns, pc.RecoveryBarmanObjectName, "example.com/recovery:v1"),
).Build()
impl := LifecycleImplementation{Client: cli}
image, err := impl.collectSidecarImageForRecoveryJob(ctx, pc)
Expect(err).NotTo(HaveOccurred())
Expect(image).To(Equal("example.com/recovery:v1"))
})
It("returns an empty override when no object store is configured", func(ctx SpecContext) {
pc := &config.PluginConfiguration{Cluster: &cnpgv1.Cluster{}}
impl := LifecycleImplementation{Client: buildClientFunc().Build()}
image, err := impl.collectSidecarImageForPod(ctx, pc)
Expect(err).NotTo(HaveOccurred())
Expect(image).To(BeEmpty())
})
})
Describe("sidecar image selection", func() {
It("prefers the ObjectStore image override", func() {
spec := corev1.PodSpec{Containers: []corev1.Container{{Name: "postgres"}}}
err := reconcilePodSpec(
cluster,
&spec,
"postgres",
corev1.Container{Args: []string{"instance"}},
sidecarConfiguration{image: "example.com/override:v1"},
)
Expect(err).NotTo(HaveOccurred())
Expect(spec.InitContainers).To(HaveLen(1))
Expect(spec.InitContainers[0].Image).To(Equal("example.com/override:v1"))
})
It("falls back to the deployment sidecar image", func() {
previousImage := viper.GetString("sidecar-image")
viper.Set("sidecar-image", "example.com/global:v1")
DeferCleanup(viper.Set, "sidecar-image", previousImage)
spec := corev1.PodSpec{Containers: []corev1.Container{{Name: "postgres"}}}
err := reconcilePodSpec(
cluster,
&spec,
"postgres",
corev1.Container{Args: []string{"instance"}},
sidecarConfiguration{},
)
Expect(err).NotTo(HaveOccurred())
Expect(spec.InitContainers).To(HaveLen(1))
Expect(spec.InitContainers[0].Image).To(Equal("example.com/global:v1"))
})
})
}) })
var _ = Describe("Volume utilities", func() { var _ = Describe("Volume utilities", func() {

View File

@ -54,10 +54,9 @@ Both checks are required before proceeding with the installation.
## Installing the Barman Cloud Plugin ## Installing the Barman Cloud Plugin
import { InstallationSnippet } from '@site/src/components/Installation'; import { InstallationSnippet, ManifestVersion } from '@site/src/components/Installation';
Install the plugin using `kubectl` by applying the manifest for the latest Install the plugin using `kubectl` by applying the manifest for <ManifestVersion />:
release:
<InstallationSnippet /> <InstallationSnippet />
@ -100,10 +99,6 @@ This confirms that the plugin is deployed and ready to use.
## Testing the latest development snapshot ## Testing the latest development snapshot
You can also test the latest development snapshot of the plugin with the import { DevSnapshotSection } from '@site/src/components/Installation';
following command:
```sh <DevSnapshotSection />
kubectl apply -f \
https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml
```

View File

@ -1,16 +1,55 @@
import {ReactElement} from 'react'; import {ReactElement} from 'react';
import CodeBlock from '@theme/CodeBlock'; import CodeBlock from '@theme/CodeBlock';
import {useCurrentVersion} from '@site/src/hooks/versions'; import {useActiveVersion} from '@docusaurus/plugin-content-docs/client';
// InstallationSnippet is the kubectl incantation to install the lastest // DEV_MANIFEST_URL is the URL of the manifest.yaml on the main branch of the plugin repo.
// available version of the Barman Cloud Plugin. const DEV_MANIFEST_URL =
'https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml';
// InstallationSnippet is the kubectl incantation to install the Barman
// Cloud Plugin: the manifest matching the doc version being viewed, or
// (on the unreleased "current" docs) the latest manifest on main.
export function InstallationSnippet(): ReactElement<null> { export function InstallationSnippet(): ReactElement<null> {
const latest = useCurrentVersion('latestReleased'); const activeVersion = useActiveVersion('default');
const url = activeVersion && activeVersion.name !== 'current'
? `https://github.com/cloudnative-pg/plugin-barman-cloud/releases/download/v${activeVersion.name}/manifest.yaml`
: DEV_MANIFEST_URL;
return ( return (
<CodeBlock language="sh"> <CodeBlock language="sh">
{`kubectl apply -f \\ {`kubectl apply -f \\
https://github.com/cloudnative-pg/plugin-barman-cloud/releases/download/v${latest}/manifest.yaml`} ${url}`}
</CodeBlock> </CodeBlock>
); );
} }
// ManifestVersion names the manifest the snippet below installs: the
// release tag for a versioned docs page, or the main branch on Dev docs.
export function ManifestVersion(): ReactElement<null> {
const activeVersion = useActiveVersion('default');
return activeVersion && activeVersion.name !== 'current'
? <code>v{activeVersion.name}</code>
: <>the latest development snapshot from the <code>main</code> branch</>;
}
// DevSnapshotSection offers the main-branch manifest as an alternative;
// on the Dev docs the main install already is that manifest, so hide it.
export function DevSnapshotSection(): ReactElement {
const activeVersion = useActiveVersion('default');
if (!activeVersion || activeVersion.name === 'current') {
return (
<p>The <a href="#installing-the-barman-cloud-plugin">install
command above</a> already applies the latest development
snapshot from the <code>main</code> branch.</p>
);
}
return (
<>
<p>You can also test the latest development snapshot of the plugin
with the following command:</p>
<CodeBlock language="sh">
{`kubectl apply -f \\
${DEV_MANIFEST_URL}`}
</CodeBlock>
</>
);
}

View File

@ -1,36 +0,0 @@
import {useActiveVersion, useLatestVersion, useVersions} from '@docusaurus/plugin-content-docs/client';
export function useCurrentVersion(fallback: 'latest' | 'latestReleased' = 'latest'): string {
switch (fallback) {
case 'latestReleased':
return useLatestReleasedVersion();
case 'latest': {
const version = useActiveVersion('default');
return version?.name ?? useLatestVersion('default')?.name;
}
default:
// The following line ensures that if `fallback` is not 'latest' or 'latestReleased',
// an error is thrown. This can be useful for catching unexpected states.
throw new Error(`Unhandled fallback type: ${fallback}`);
}
}
export function useLatestReleasedVersion(): string {
const allVersions = useVersions('default');
// Filter out "current" to only consider versioned docs
const versionedDocs = allVersions.filter(version => version.name !== 'current');
// Handle the case where no versioned documents are found
if (versionedDocs.length === 0) {
return "unknown_version";
}
const sortedVersions = versionedDocs.sort((a, b) => {
return b.name.localeCompare(a.name, undefined, { numeric: true, sensitivity: 'base' });
});
// The latest version is the first in the sorted list since versionedDocs was not empty,
return sortedVersions[0].name;
}

View File

@ -54,10 +54,9 @@ Both checks are required before proceeding with the installation.
## Installing the Barman Cloud Plugin ## Installing the Barman Cloud Plugin
import { InstallationSnippet } from '@site/src/components/Installation'; import { InstallationSnippet, ManifestVersion } from '@site/src/components/Installation';
Install the plugin using `kubectl` by applying the manifest for the latest Install the plugin using `kubectl` by applying the manifest for <ManifestVersion />:
release:
<InstallationSnippet /> <InstallationSnippet />
@ -100,10 +99,6 @@ This confirms that the plugin is deployed and ready to use.
## Testing the latest development snapshot ## Testing the latest development snapshot
You can also test the latest development snapshot of the plugin with the import { DevSnapshotSection } from '@site/src/components/Installation';
following command:
```sh <DevSnapshotSection />
kubectl apply -f \
https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml
```

View File

@ -54,10 +54,9 @@ Both checks are required before proceeding with the installation.
## Installing the Barman Cloud Plugin ## Installing the Barman Cloud Plugin
import { InstallationSnippet } from '@site/src/components/Installation'; import { InstallationSnippet, ManifestVersion } from '@site/src/components/Installation';
Install the plugin using `kubectl` by applying the manifest for the latest Install the plugin using `kubectl` by applying the manifest for <ManifestVersion />:
release:
<InstallationSnippet /> <InstallationSnippet />
@ -100,10 +99,6 @@ This confirms that the plugin is deployed and ready to use.
## Testing the latest development snapshot ## Testing the latest development snapshot
You can also test the latest development snapshot of the plugin with the import { DevSnapshotSection } from '@site/src/components/Installation';
following command:
```sh <DevSnapshotSection />
kubectl apply -f \
https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml
```

View File

@ -2099,9 +2099,9 @@
"@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/trace-mapping" "^0.3.25"
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
version "1.5.5" version "1.6.0"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz#f4c663e862f06dc98ca4d453862c46902789a18d"
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== integrity sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==
"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28", "@jridgewell/trace-mapping@^0.3.31": "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28", "@jridgewell/trace-mapping@^0.3.31":
version "0.3.31" version "0.3.31"
@ -2141,75 +2141,75 @@
resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207"
integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==
"@jsonjoy.com/fs-core@4.68.1": "@jsonjoy.com/fs-core@4.68.2":
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.68.1.tgz#15fed282af2a8efbd1a335a83ae1bd3507fa0237" resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.68.2.tgz#ea3e3e3e07e0d808844ba7ee908dd47ad121eddf"
integrity sha512-V5oZ4Gt9WJKyQef0n9cAd0N9qjSkIBm3E4MYsgNIWBk5aINCDPKxMPo1i29rBxqiT4Ixf1epklqV9VJMKIxwlw== integrity sha512-PoBeUNEbjyLKKwCap2z8LkkqdhdfttS4rTHCALVuP65BdF+sAoyBqHo1m+uGTRBiQWv3H7MGfr8f7lY4pDwanw==
dependencies: dependencies:
"@jsonjoy.com/fs-node-builtins" "4.68.1" "@jsonjoy.com/fs-node-builtins" "4.68.2"
"@jsonjoy.com/fs-node-utils" "4.68.1" "@jsonjoy.com/fs-node-utils" "4.68.2"
thingies "^2.5.0" thingies "^2.5.0"
"@jsonjoy.com/fs-fsa@4.68.1": "@jsonjoy.com/fs-fsa@4.68.2":
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.68.1.tgz#009ebc90396622d37df984691fbe8bad51fdedea" resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.68.2.tgz#01d59e3bedb3cfe4b32334abbb1004a75b481a76"
integrity sha512-HCG72UioncuO7Gw09XNVG+S85e3cq2hrUC/mexBrsWsa3mI7eePkkqWie3uVYbtsb64OR9YGQs5SqaufDRYBcg== integrity sha512-h6eGXlLGGMyPfNliDQrbuHKTB9Z29ksCLjreAmdBqrDOBdfrTrHssi+b9WLfrF+J2KzAbIt9OMjJu6AEpTnYkg==
dependencies: dependencies:
"@jsonjoy.com/fs-core" "4.68.1" "@jsonjoy.com/fs-core" "4.68.2"
"@jsonjoy.com/fs-node-builtins" "4.68.1" "@jsonjoy.com/fs-node-builtins" "4.68.2"
"@jsonjoy.com/fs-node-utils" "4.68.1" "@jsonjoy.com/fs-node-utils" "4.68.2"
thingies "^2.5.0" thingies "^2.5.0"
"@jsonjoy.com/fs-node-builtins@4.68.1": "@jsonjoy.com/fs-node-builtins@4.68.2":
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.68.1.tgz#3c4ee9877e12d76eab8611663bea127d0e261fc5" resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.68.2.tgz#ef82d558a6894b54537857ba153daa38a5326a05"
integrity sha512-HK1BTksysokNZxNspqDH0yPaqN9YgR/AYIlYiIaU2Ys4BOk5CdybI7r6BgiZuiiPiV8n4sK/kZdice7Znpy2Kw== integrity sha512-V8WzQsW2YIrH3RxBGY6HZisxn+dDUltHgksVRuCdPEOXEkAfXuhL/01eHFrabNu84Dn13XuLqvcQUKOYVKAUOA==
"@jsonjoy.com/fs-node-to-fsa@4.68.1": "@jsonjoy.com/fs-node-to-fsa@4.68.2":
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.68.1.tgz#d0dab7f007f9e01dcd1e62d2e27ec0fdd0126554" resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.68.2.tgz#faf01a277752868d90681f6dcb86d3e01f05a296"
integrity sha512-lpKmU4X9e/oh8GIuAI7EXaS5QiLNM3KD15CkdhfS6PYmrGvoJqKQcyEfnLgnnaGslh/PFUMYSIZBCf2ejJGw8g== integrity sha512-4O1K4w5G4oJIpKpoa3WSLG83AsQYVnGv+aUSBGOvIUph9Axm6bB1mPlvldkNg2tBx/4dkiTlZnqNrK5SQ21Wtg==
dependencies: dependencies:
"@jsonjoy.com/fs-fsa" "4.68.1" "@jsonjoy.com/fs-fsa" "4.68.2"
"@jsonjoy.com/fs-node-builtins" "4.68.1" "@jsonjoy.com/fs-node-builtins" "4.68.2"
"@jsonjoy.com/fs-node-utils" "4.68.1" "@jsonjoy.com/fs-node-utils" "4.68.2"
"@jsonjoy.com/fs-node-utils@4.68.1": "@jsonjoy.com/fs-node-utils@4.68.2":
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.68.1.tgz#25fa70c1c11986eef75c1e6c52caea9fe2e69778" resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.68.2.tgz#78311a84df4e4edc51f8e41fc042d3eed21cb0d4"
integrity sha512-/GxfW1DWm9SCdkfbvqevLO/P5duobQfmKkHXxdMIDbcZMQeAgooAstIfZhkXpATzq9QbCQsnoWFM/dGHdZfndw== integrity sha512-CxFwyG9fJr7dAKAd1uanNRNrRMtDDqbYJA8do53+M4LY7SxcBEEmMjC1zi9MOsBlVLHTXvA7OP9+n639UqtIcw==
dependencies: dependencies:
"@jsonjoy.com/fs-node-builtins" "4.68.1" "@jsonjoy.com/fs-node-builtins" "4.68.2"
glob-to-regex.js "^1.0.1" glob-to-regex.js "^1.0.1"
"@jsonjoy.com/fs-node@4.68.1": "@jsonjoy.com/fs-node@4.68.2":
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.68.1.tgz#0ca716e6c3ef5ed8887fbd4b4557094f99293d19" resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.68.2.tgz#166b641f7c810e12cbf92c483e9c7084123ed669"
integrity sha512-R5D9mWtqdURzcOWj1vdXr3APCwX0xchtFT+kmW7fXLNDifWdDrnh26jSID8pdnUfFBxTyfHtFtTL/NWKzIH7kQ== integrity sha512-Kpj519Qk4OXG4+mZ8vTf9BEflliJrPueIDEVcbx8tAOufMJJ8IxR0WwdbcEvJol2KQog3PJjtALXVclorE+xbQ==
dependencies: dependencies:
"@jsonjoy.com/fs-core" "4.68.1" "@jsonjoy.com/fs-core" "4.68.2"
"@jsonjoy.com/fs-node-builtins" "4.68.1" "@jsonjoy.com/fs-node-builtins" "4.68.2"
"@jsonjoy.com/fs-node-utils" "4.68.1" "@jsonjoy.com/fs-node-utils" "4.68.2"
"@jsonjoy.com/fs-print" "4.68.1" "@jsonjoy.com/fs-print" "4.68.2"
"@jsonjoy.com/fs-snapshot" "4.68.1" "@jsonjoy.com/fs-snapshot" "4.68.2"
glob-to-regex.js "^1.0.0" glob-to-regex.js "^1.0.0"
thingies "^2.5.0" thingies "^2.5.0"
"@jsonjoy.com/fs-print@4.68.1": "@jsonjoy.com/fs-print@4.68.2":
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.68.1.tgz#bd830f90764155fb131320624248d33e720d6130" resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.68.2.tgz#1562c2481393359644e2840c25a5082274378f39"
integrity sha512-oGeZOGPYKK9v1CgeVeEDsLomH1lCnslSpqUN5GmPzrmAVGQlsmsdcXNA2O4lV8Y4xkuSuynx2ITBkUHJVaTbow== integrity sha512-cBABQmZJXig6bahwNka3+yPNGUF1GeMWbR76ZM1N2ajgCd+S+twZigCoe9+0ueZmkhM9xd2a7688Gy/ch7T+2w==
dependencies: dependencies:
"@jsonjoy.com/fs-node-utils" "4.68.1" "@jsonjoy.com/fs-node-utils" "4.68.2"
tree-dump "^1.1.0" tree-dump "^1.1.0"
"@jsonjoy.com/fs-snapshot@4.68.1": "@jsonjoy.com/fs-snapshot@4.68.2":
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.68.1.tgz#672d82cb65dad18c3a1fcf7d22254d037e6a794a" resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.68.2.tgz#6f1b2e5aa6827a1075f82162055ca8bedee0fe58"
integrity sha512-XZfP0FDZN32bbc4t2bZN2qRrYHg5AktJnzk22HRoKGK4BprrbNRH2k5ceSNS/kupKYcofCs+O841+xaAbjnxwQ== integrity sha512-Aix7+NM38LzvewM0T3PICSgFdF5BVCtVgsjNsrlDPGc9hiMgJzReTDDl2/elgl0A9USMl3QP27x5WwxZSOtrfw==
dependencies: dependencies:
"@jsonjoy.com/buffers" "^17.65.0" "@jsonjoy.com/buffers" "^17.65.0"
"@jsonjoy.com/fs-node-utils" "4.68.1" "@jsonjoy.com/fs-node-utils" "4.68.2"
"@jsonjoy.com/json-pack" "^17.65.0" "@jsonjoy.com/json-pack" "^17.65.0"
"@jsonjoy.com/util" "^17.65.0" "@jsonjoy.com/util" "^17.65.0"
@ -3564,9 +3564,9 @@ balanced-match@^1.0.0:
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
baseline-browser-mapping@^2.11.12: baseline-browser-mapping@^2.11.12:
version "2.11.19" version "2.11.20"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.19.tgz#4711abac48b88ccb56b5817e86f1b3a9a0764276" resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz#26078c7a4b08299656ea7ddceaebec955dc44303"
integrity sha512-Grytf1xOxOEMTGRwx6rLGKkTabd4vMg3VrKdj/7joCmV0qgh4QwMMO6xh34YEXQqirAuUdgQGa5orJQQ+69RBw== integrity sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==
batch@0.6.1: batch@0.6.1:
version "0.6.1" version "0.6.1"
@ -4241,9 +4241,9 @@ css-what@^6.0.1, css-what@^6.1.0:
integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==
cssdb@^8.6.0: cssdb@^8.6.0:
version "8.10.0" version "8.11.0"
resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.10.0.tgz#fdb9cc7af72c81839265811ad8ca4e0a4db919c1" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.11.0.tgz#e03c9cdc9c5e99d8cddf64a917bfc427b20c143a"
integrity sha512-+JWEEjjoqkPY7iGHps3SaCT2w67Zpaj9zHvhCJ2iPBavKHwgtOOD2YEbZSCU8VO2uVGpKdYjVz+j6bhkNSjZ0g== integrity sha512-VzY/8kcK5M8oCVr/cwh24J8XVlCOITpmzCizKBC28o7Z1s23MMojXoJ3q7a+TQQoMKvxC3YlG0Z9yU10kJF1uQ==
cssesc@^3.0.0: cssesc@^3.0.0:
version "3.0.0" version "3.0.0"
@ -4568,9 +4568,9 @@ ee-first@1.1.1:
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
electron-to-chromium@^1.5.402: electron-to-chromium@^1.5.402:
version "1.5.415" version "1.5.418"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.415.tgz#edd7356bfb4752a12c8293f8e38a00778b13bbb4" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.418.tgz#40ccbf6d572447663041611e05924b53bc9a0331"
integrity sha512-958V+Kbhtgz+SxXeEVKBjrlKRBIDAYvUJfwhjxMZ5S6ut9jAl7l9ZKBkBrvjyjZE36PabLUo2L8kEeV5O4vgJg== integrity sha512-UzS26r3AEbG5wSoGVpJKqwHIU9zwQN7LHdVIThDrJpS0I5KdlXFMEb8543fhc9dVnIIAST6ar8rhwa00AL5MlA==
emoji-regex@^8.0.0: emoji-regex@^8.0.0:
version "8.0.0" version "8.0.0"
@ -4897,9 +4897,9 @@ fast-uri@^3.0.1:
integrity sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q== integrity sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==
fastq@^1.6.0: fastq@^1.6.0:
version "1.20.1" version "1.20.3"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.3.tgz#7ab8731e647b56abcfeee997dae333ca3ee1d04d"
integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== integrity sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==
dependencies: dependencies:
reusify "^1.0.4" reusify "^1.0.4"
@ -6281,18 +6281,18 @@ media-typer@0.3.0:
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
memfs@^4.43.1: memfs@^4.43.1:
version "4.68.1" version "4.68.2"
resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.68.1.tgz#e42fa69c873305a9cd0b28a8d230b96efacd8b5d" resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.68.2.tgz#26aeb07f3774ccf79bf9d79483ea3241e1383254"
integrity sha512-OD+IDRUvIxu3QHL+nFm9gdyugInD27FDJ+sl4B5QgomPHXMlbw+GP918P8VNKu2FkNlVeqBkpzkwROpamVifRw== integrity sha512-Un1ElEBoIdPI9kg0sm3LebVEuEViodfIvlaG8Z1MFXa7ZnR9vWuPKUo3dt/vuWY2ivc05l76B5QOjdgCzAzmGw==
dependencies: dependencies:
"@jsonjoy.com/fs-core" "4.68.1" "@jsonjoy.com/fs-core" "4.68.2"
"@jsonjoy.com/fs-fsa" "4.68.1" "@jsonjoy.com/fs-fsa" "4.68.2"
"@jsonjoy.com/fs-node" "4.68.1" "@jsonjoy.com/fs-node" "4.68.2"
"@jsonjoy.com/fs-node-builtins" "4.68.1" "@jsonjoy.com/fs-node-builtins" "4.68.2"
"@jsonjoy.com/fs-node-to-fsa" "4.68.1" "@jsonjoy.com/fs-node-to-fsa" "4.68.2"
"@jsonjoy.com/fs-node-utils" "4.68.1" "@jsonjoy.com/fs-node-utils" "4.68.2"
"@jsonjoy.com/fs-print" "4.68.1" "@jsonjoy.com/fs-print" "4.68.2"
"@jsonjoy.com/fs-snapshot" "4.68.1" "@jsonjoy.com/fs-snapshot" "4.68.2"
"@jsonjoy.com/json-pack" "^1.11.0" "@jsonjoy.com/json-pack" "^1.11.0"
"@jsonjoy.com/util" "^1.9.0" "@jsonjoy.com/util" "^1.9.0"
glob-to-regex.js "^1.0.1" glob-to-regex.js "^1.0.1"
@ -8446,9 +8446,9 @@ send@~0.19.0, send@~0.19.1:
statuses "~2.0.2" statuses "~2.0.2"
serialize-javascript@>=7.0.5, serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: serialize-javascript@>=7.0.5, serialize-javascript@^6.0.0, serialize-javascript@^6.0.1:
version "7.1.0" version "7.1.1"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-7.1.0.tgz#9e462c5c6dec5dbc8b55d90c52a4ad6aff985b9f" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-7.1.1.tgz#c3b0a7ac13df6cf2fcda71cbb142ba9392a710b9"
integrity sha512-RNEqWOyhhUQYN9V1GfHwu9AR/g+NTciH6Z5u3/no6X3/w+04J2lVDL+svFQVXgXrEGBMG2puMVN3gq2SNGuTGw== integrity sha512-k3CMsaIvvdSwm8oLB4MXSl0wH2/cwlH7xGcnRd2DaeRmBkbzYmyT8j0tsX60DwD1eRwHTpNpH8ljKu9oUT1MeQ==
serve-handler@^6.1.7: serve-handler@^6.1.7:
version "6.1.7" version "6.1.7"
@ -9117,9 +9117,9 @@ unpipe@~1.0.0:
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
update-browserslist-db@^1.3.0: update-browserslist-db@^1.3.0:
version "1.3.1" version "1.3.2"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz#a71c28dd22f505481dbc4689087b18d933e90afd" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz#9d99fbff56c50bb11ba5fd35cece5916da595836"
integrity sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ== integrity sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==
dependencies: dependencies:
escalade "^3.2.0" escalade "^3.2.0"
picocolors "^1.1.1" picocolors "^1.1.1"
@ -9326,9 +9326,9 @@ webpack-sources@^3.5.1:
integrity sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw== integrity sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==
webpack@^5.88.1, webpack@^5.95.0: webpack@^5.88.1, webpack@^5.95.0:
version "5.110.0" version "5.110.2"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.110.0.tgz#504e6195f3a729ed3904b24961e43f0f51e1b79b" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.110.2.tgz#ef23a0e62fe5e1ba71b033e3505b7f005d8d5c6e"
integrity sha512-vzGjrgzXNYRs0MBVkdF288cJt0RIJMxlZy+3pLFo6KIeZI57sBGCgjBp+yNQWf5g9c1us34rjivM1sfNLijQYg== integrity sha512-TciLrfM7zgEjqGdY851HkirDsSPQgTFsWQpl9oHqMAMYsHhEC0bKjscvjpnz+pzx10hLC8qISApGrsnrCP4UtQ==
dependencies: dependencies:
"@types/estree" "^1.0.8" "@types/estree" "^1.0.8"
"@types/json-schema" "^7.0.15" "@types/json-schema" "^7.0.15"