renovate 43.262.3 → 43.263.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/global-config-option-defaults.generated.js +1 -1
- package/dist/global-config-option-defaults.generated.js.map +1 -1
- package/dist/modules/datasource/bazel/schema.js +2 -1
- package/dist/modules/datasource/bazel/schema.js.map +1 -1
- package/dist/modules/datasource/bitbucket-server-tags/schema.js +2 -1
- package/dist/modules/datasource/bitbucket-server-tags/schema.js.map +1 -1
- package/dist/modules/datasource/docker/schema.js +14 -14
- package/dist/modules/datasource/docker/schema.js.map +1 -1
- package/dist/modules/datasource/npm/get.js +5 -4
- package/dist/modules/datasource/npm/get.js.map +1 -1
- package/dist/modules/datasource/npm/schema.d.ts +35 -20
- package/dist/modules/datasource/npm/schema.js +5 -5
- package/dist/modules/datasource/npm/schema.js.map +1 -1
- package/dist/modules/datasource/puppet-forge/schema.js +9 -9
- package/dist/modules/datasource/puppet-forge/schema.js.map +1 -1
- package/dist/modules/datasource/repology/schema.js +6 -6
- package/dist/modules/datasource/repology/schema.js.map +1 -1
- package/dist/modules/manager/helmfile/schema.js +2 -2
- package/dist/modules/manager/helmfile/schema.js.map +1 -1
- package/dist/modules/manager/npm/schema.js +2 -2
- package/dist/modules/manager/npm/schema.js.map +1 -1
- package/dist/modules/manager/swift/schema.js +5 -5
- package/dist/modules/manager/swift/schema.js.map +1 -1
- package/dist/modules/platform/github/schema.d.ts +20 -20
- package/dist/modules/platform/github/schema.js +8 -8
- package/dist/modules/platform/github/schema.js.map +1 -1
- package/dist/modules/platform/gitlab/schema.js +6 -6
- package/dist/modules/platform/gitlab/schema.js.map +1 -1
- package/dist/modules/platform/scm-manager/schema.js +23 -23
- package/dist/modules/platform/scm-manager/schema.js.map +1 -1
- package/package.json +3 -3
- package/renovate-schema.json +2 -2
|
@@ -23,7 +23,7 @@ const globalConfigOptionDefaults = {
|
|
|
23
23
|
"detectHostRulesFromEnv": false,
|
|
24
24
|
"dockerChildPrefix": "renovate_",
|
|
25
25
|
"dockerMaxPages": 20,
|
|
26
|
-
"dockerSidecarImage": "ghcr.io/renovatebot/base-image:13.
|
|
26
|
+
"dockerSidecarImage": "ghcr.io/renovatebot/base-image:13.75.0",
|
|
27
27
|
"dockerUser": "12021",
|
|
28
28
|
"executionTimeout": 15,
|
|
29
29
|
"exposeAllEnv": false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-config-option-defaults.generated.js","names":[],"sources":["../lib/global-config-option-defaults.generated.ts"],"sourcesContent":["\nexport const globalConfigOptionDefaults: Record<string, unknown> = {\n \"allowCustomCrateRegistries\": false,\n \"allowedCommands\": [],\n \"allowedEnv\": [],\n \"allowedHeaders\": [\n \"X-*\"\n ],\n \"allowedUnsafeExecutions\": [],\n \"allowPlugins\": false,\n \"allowScripts\": false,\n \"allowShellExecutorForPostUpgradeCommands\": false,\n \"autodiscover\": false,\n \"bbUseDevelopmentBranch\": false,\n \"binarySource\": \"install\",\n \"cacheHardTtlMinutes\": 10080,\n \"cachePrivatePackages\": false,\n \"cacheTtlOverride\": {},\n \"checkedBranches\": [],\n \"configValidationError\": false,\n \"customEnvVariables\": {},\n \"deleteAdditionalConfigFile\": false,\n \"deleteConfigFile\": false,\n \"detectGlobalManagerConfig\": false,\n \"detectHostRulesFromEnv\": false,\n \"dockerChildPrefix\": \"renovate_\",\n \"dockerMaxPages\": 20,\n \"dockerSidecarImage\": \"ghcr.io/renovatebot/base-image:13.
|
|
1
|
+
{"version":3,"file":"global-config-option-defaults.generated.js","names":[],"sources":["../lib/global-config-option-defaults.generated.ts"],"sourcesContent":["\nexport const globalConfigOptionDefaults: Record<string, unknown> = {\n \"allowCustomCrateRegistries\": false,\n \"allowedCommands\": [],\n \"allowedEnv\": [],\n \"allowedHeaders\": [\n \"X-*\"\n ],\n \"allowedUnsafeExecutions\": [],\n \"allowPlugins\": false,\n \"allowScripts\": false,\n \"allowShellExecutorForPostUpgradeCommands\": false,\n \"autodiscover\": false,\n \"bbUseDevelopmentBranch\": false,\n \"binarySource\": \"install\",\n \"cacheHardTtlMinutes\": 10080,\n \"cachePrivatePackages\": false,\n \"cacheTtlOverride\": {},\n \"checkedBranches\": [],\n \"configValidationError\": false,\n \"customEnvVariables\": {},\n \"deleteAdditionalConfigFile\": false,\n \"deleteConfigFile\": false,\n \"detectGlobalManagerConfig\": false,\n \"detectHostRulesFromEnv\": false,\n \"dockerChildPrefix\": \"renovate_\",\n \"dockerMaxPages\": 20,\n \"dockerSidecarImage\": \"ghcr.io/renovatebot/base-image:13.75.0\",\n \"dockerUser\": \"12021\",\n \"executionTimeout\": 15,\n \"exposeAllEnv\": false,\n \"forceCli\": true,\n \"forkCreation\": true,\n \"githubTokenWarn\": true,\n \"gitNoVerify\": [\n \"commit\",\n \"push\"\n ],\n \"gitTimeout\": 0,\n \"gitUrl\": \"default\",\n \"httpCacheTtlDays\": 90,\n \"ignorePrAuthor\": false,\n \"includeMirrors\": false,\n \"inheritConfig\": false,\n \"inheritConfigFileName\": \"org-inherited-config.json\",\n \"inheritConfigRepoName\": \"{{parentOrg}}/renovate-config\",\n \"inheritConfigStrict\": false,\n \"mergeConfidenceDatasources\": [\n \"go\",\n \"maven\",\n \"npm\",\n \"nuget\",\n \"packagist\",\n \"pypi\",\n \"rubygems\"\n ],\n \"mergeConfidenceEndpoint\": \"https://developer.mend.io/\",\n \"migratePresets\": {},\n \"onboardingBranch\": \"renovate/configure\",\n \"onboardingConfig\": {\n \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\"\n },\n \"onboardingConfigFileName\": \"renovate.json\",\n \"onboardingNoDeps\": \"auto\",\n \"onboardingPrTitle\": \"Configure Renovate\",\n \"onboardingRebaseCheckbox\": false,\n \"optimizeForDisabled\": false,\n \"persistRepoData\": false,\n \"platform\": \"github\",\n \"prCacheSyncMaxPages\": 100,\n \"prCommitsPerRunLimit\": 0,\n \"presetCachePersistence\": false,\n \"processEnv\": {},\n \"productLinks\": {\n \"documentation\": \"https://docs.renovatebot.com/\",\n \"help\": \"https://github.com/renovatebot/renovate/discussions\",\n \"homepage\": \"https://github.com/renovatebot/renovate\"\n },\n \"reportFormatting\": false,\n \"repositoryCache\": \"disabled\",\n \"repositoryCacheForceLocal\": false,\n \"repositoryCacheType\": \"local\",\n \"requireConfig\": \"required\",\n \"s3PathStyle\": false,\n \"secrets\": {},\n \"unicodeEmoji\": true,\n \"useCloudMetadataServices\": true,\n \"userAgent\": \"Renovate/{{renovateVersion}} (https://github.com/renovatebot/renovate)\",\n \"variables\": {}\n};\n"],"mappings":";AACA,MAAa,6BAAsD;CACjE,8BAA8B;CAC9B,mBAAmB,CAAC;CACpB,cAAc,CAAC;CACf,kBAAkB,CAChB,KACF;CACA,2BAA2B,CAAC;CAC5B,gBAAgB;CAChB,gBAAgB;CAChB,4CAA4C;CAC5C,gBAAgB;CAChB,0BAA0B;CAC1B,gBAAgB;CAChB,uBAAuB;CACvB,wBAAwB;CACxB,oBAAoB,CAAC;CACrB,mBAAmB,CAAC;CACpB,yBAAyB;CACzB,sBAAsB,CAAC;CACvB,8BAA8B;CAC9B,oBAAoB;CACpB,6BAA6B;CAC7B,0BAA0B;CAC1B,qBAAqB;CACrB,kBAAkB;CAClB,sBAAsB;CACtB,cAAc;CACd,oBAAoB;CACpB,gBAAgB;CAChB,YAAY;CACZ,gBAAgB;CAChB,mBAAmB;CACnB,eAAe,CACb,UACA,MACF;CACA,cAAc;CACd,UAAU;CACV,oBAAoB;CACpB,kBAAkB;CAClB,kBAAkB;CAClB,iBAAiB;CACjB,yBAAyB;CACzB,yBAAyB;CACzB,uBAAuB;CACvB,8BAA8B;EAC5B;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,2BAA2B;CAC3B,kBAAkB,CAAC;CACnB,oBAAoB;CACpB,oBAAoB,EAClB,WAAW,oDACb;CACA,4BAA4B;CAC5B,oBAAoB;CACpB,qBAAqB;CACrB,4BAA4B;CAC5B,uBAAuB;CACvB,mBAAmB;CACnB,YAAY;CACZ,uBAAuB;CACvB,wBAAwB;CACxB,0BAA0B;CAC1B,cAAc,CAAC;CACf,gBAAgB;EACd,iBAAiB;EACjB,QAAQ;EACR,YAAY;CACd;CACA,oBAAoB;CACpB,mBAAmB;CACnB,6BAA6B;CAC7B,uBAAuB;CACvB,iBAAiB;CACjB,eAAe;CACf,WAAW,CAAC;CACZ,gBAAgB;CAChB,4BAA4B;CAC5B,aAAa;CACb,aAAa,CAAC;AAChB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { Nullish } from "../../../util/schema-utils/index.js";
|
|
1
2
|
import { z } from "zod/v4";
|
|
2
3
|
//#region lib/modules/datasource/bazel/schema.ts
|
|
3
4
|
const BazelModuleMetadata = z.object({
|
|
4
|
-
homepage: z.string()
|
|
5
|
+
homepage: Nullish(z.string()),
|
|
5
6
|
versions: z.array(z.string()),
|
|
6
7
|
yanked_versions: z.record(z.string(), z.string()).optional()
|
|
7
8
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/bazel/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const BazelModuleMetadata = z.object({\n homepage: z.string()
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/bazel/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { Nullish } from '../../../util/schema-utils/index.ts';\n\nexport const BazelModuleMetadata = z.object({\n homepage: Nullish(z.string()),\n versions: z.array(z.string()),\n yanked_versions: z.record(z.string(), z.string()).optional(),\n});\n\nexport type BazelModuleMetadata = z.infer<typeof BazelModuleMetadata>;\n"],"mappings":";;;AAGA,MAAa,sBAAsB,EAAE,OAAO;CAC1C,UAAU,QAAQ,EAAE,OAAO,CAAC;CAC5B,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;CAC5B,iBAAiB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AAC7D,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { Nullish } from "../../../util/schema-utils/index.js";
|
|
1
2
|
import { z } from "zod/v4";
|
|
2
3
|
//#region lib/modules/datasource/bitbucket-server-tags/schema.ts
|
|
3
4
|
const BitbucketServerTag = z.object({
|
|
4
5
|
displayId: z.string(),
|
|
5
|
-
hash: z.string()
|
|
6
|
+
hash: Nullish(z.string())
|
|
6
7
|
});
|
|
7
8
|
const BitbucketServerTags = z.array(BitbucketServerTag);
|
|
8
9
|
const BitbucketServerCommits = z.array(z.object({ id: z.string() }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/bitbucket-server-tags/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const BitbucketServerTag = z.object({\n displayId: z.string(),\n hash: z.string()
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/bitbucket-server-tags/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { Nullish } from '../../../util/schema-utils/index.ts';\n\nexport const BitbucketServerTag = z.object({\n displayId: z.string(),\n hash: Nullish(z.string()),\n});\n\nexport const BitbucketServerTags = z.array(BitbucketServerTag);\n\nexport const BitbucketServerCommits = z.array(\n z.object({\n id: z.string(),\n }),\n);\n"],"mappings":";;;AAGA,MAAa,qBAAqB,EAAE,OAAO;CACzC,WAAW,EAAE,OAAO;CACpB,MAAM,QAAQ,EAAE,OAAO,CAAC;AAC1B,CAAC;AAED,MAAa,sBAAsB,EAAE,MAAM,kBAAkB;AAE7D,MAAa,yBAAyB,EAAE,MACtC,EAAE,OAAO,EACP,IAAI,EAAE,OAAO,EACf,CAAC,CACH"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { logger } from "../../../logger/index.js";
|
|
2
|
-
import { Json, LooseArray } from "../../../util/schema-utils/index.js";
|
|
2
|
+
import { DeepNullish, Json, LooseArray, Nullish } from "../../../util/schema-utils/index.js";
|
|
3
3
|
import { z } from "zod/v4";
|
|
4
4
|
//#region lib/modules/datasource/docker/schema.ts
|
|
5
5
|
/**
|
|
@@ -7,7 +7,7 @@ import { z } from "zod/v4";
|
|
|
7
7
|
*/
|
|
8
8
|
const ManifestObject = z.object({
|
|
9
9
|
schemaVersion: z.literal(2),
|
|
10
|
-
mediaType: z.string()
|
|
10
|
+
mediaType: Nullish(z.string())
|
|
11
11
|
});
|
|
12
12
|
/**
|
|
13
13
|
* Oci descriptor
|
|
@@ -16,33 +16,33 @@ const ManifestObject = z.object({
|
|
|
16
16
|
const Descriptor = z.object({
|
|
17
17
|
mediaType: z.string(),
|
|
18
18
|
digest: z.string(),
|
|
19
|
-
size: z.number().int().gte(0)
|
|
19
|
+
size: Nullish(z.number().int().gte(0))
|
|
20
20
|
});
|
|
21
21
|
/**
|
|
22
22
|
* OCI platform properties
|
|
23
23
|
* https://github.com/opencontainers/image-spec/blob/main/image-index.md
|
|
24
24
|
*/
|
|
25
|
-
const OciPlatform = z.object({ architecture: z.string().
|
|
25
|
+
const OciPlatform = Nullish(DeepNullish(z.object({ architecture: z.string().optional() })));
|
|
26
26
|
/**
|
|
27
27
|
* OCI Image Configuration.
|
|
28
28
|
*
|
|
29
29
|
* Compatible with old docker configiguration.
|
|
30
30
|
* https://github.com/opencontainers/image-spec/blob/main/config.md
|
|
31
31
|
*/
|
|
32
|
-
const OciImageConfig = z.object({
|
|
33
|
-
architecture: z.string().
|
|
34
|
-
config: z.object({ Labels: z.record(z.string(), z.string()).
|
|
35
|
-
});
|
|
32
|
+
const OciImageConfig = DeepNullish(z.object({
|
|
33
|
+
architecture: z.string().optional(),
|
|
34
|
+
config: z.object({ Labels: z.record(z.string(), z.string()).optional() }).optional()
|
|
35
|
+
}));
|
|
36
36
|
/**
|
|
37
37
|
* OCI Helm Configuration
|
|
38
38
|
* https://helm.sh/docs/topics/charts/#the-chartyaml-file
|
|
39
39
|
*/
|
|
40
|
-
const OciHelmConfig = z.object({
|
|
40
|
+
const OciHelmConfig = DeepNullish(z.object({
|
|
41
41
|
name: z.string(),
|
|
42
42
|
version: z.string(),
|
|
43
|
-
home: z.string().
|
|
44
|
-
sources: z.array(z.string()).
|
|
45
|
-
});
|
|
43
|
+
home: z.string().optional(),
|
|
44
|
+
sources: z.array(z.string()).optional()
|
|
45
|
+
}));
|
|
46
46
|
/**
|
|
47
47
|
* OCI Image Manifest
|
|
48
48
|
* The same structure as docker image manifest, but mediaType is not required and is not present in the wild.
|
|
@@ -57,7 +57,7 @@ const OciImageManifest = ManifestObject.extend({
|
|
|
57
57
|
"application/vnd.oci.empty.v1+json",
|
|
58
58
|
"application/vnd.cncf.flux.config.v1+json"
|
|
59
59
|
]) }),
|
|
60
|
-
annotations: z.record(z.string(), z.string())
|
|
60
|
+
annotations: Nullish(z.record(z.string(), z.string()))
|
|
61
61
|
});
|
|
62
62
|
/**
|
|
63
63
|
* OCI Image List
|
|
@@ -70,7 +70,7 @@ const OciImageIndexManifest = ManifestObject.extend({
|
|
|
70
70
|
mediaType: z.enum(["application/vnd.oci.image.manifest.v1+json", "application/vnd.oci.image.index.v1+json"]),
|
|
71
71
|
platform: OciPlatform
|
|
72
72
|
})),
|
|
73
|
-
annotations: z.record(z.string(), z.string())
|
|
73
|
+
annotations: Nullish(z.record(z.string(), z.string()))
|
|
74
74
|
});
|
|
75
75
|
/**
|
|
76
76
|
* Image Manifest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/docker/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { logger } from '../../../logger/index.ts';\nimport {
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/docker/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { logger } from '../../../logger/index.ts';\nimport {\n DeepNullish,\n Json,\n LooseArray,\n Nullish,\n} from '../../../util/schema-utils/index.ts';\n\n// OCI manifests\n\n/**\n * OCI manifest object\n */\nexport const ManifestObject = z.object({\n schemaVersion: z.literal(2),\n mediaType: Nullish(z.string()),\n});\n\n/**\n * Oci descriptor\n * https://github.com/opencontainers/image-spec/blob/main/descriptor.md\n */\nexport const Descriptor = z.object({\n mediaType: z.string(),\n digest: z.string(),\n size: Nullish(z.number().int().gte(0)),\n});\n/**\n * OCI platform properties\n * https://github.com/opencontainers/image-spec/blob/main/image-index.md\n */\nconst OciPlatform = Nullish(\n DeepNullish(\n z.object({\n architecture: z.string().optional(),\n }),\n ),\n);\n\n/**\n * OCI Image Configuration.\n *\n * Compatible with old docker configiguration.\n * https://github.com/opencontainers/image-spec/blob/main/config.md\n */\nexport const OciImageConfig = DeepNullish(\n z.object({\n // This is required by the spec, but probably not present in the wild.\n architecture: z.string().optional(),\n config: z\n .object({ Labels: z.record(z.string(), z.string()).optional() })\n .optional(),\n }),\n);\nexport type OciImageConfig = z.infer<typeof OciImageConfig>;\n\n/**\n * OCI Helm Configuration\n * https://helm.sh/docs/topics/charts/#the-chartyaml-file\n */\nexport const OciHelmConfig = DeepNullish(\n z.object({\n name: z.string(),\n version: z.string(),\n home: z.string().optional(),\n sources: z.array(z.string()).optional(),\n }),\n);\nexport type OciHelmConfig = z.infer<typeof OciHelmConfig>;\n\n/**\n * OCI Image Manifest\n * The same structure as docker image manifest, but mediaType is not required and is not present in the wild.\n * https://github.com/opencontainers/image-spec/blob/main/manifest.md\n */\nexport const OciImageManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.oci.image.manifest.v1+json'),\n config: Descriptor.extend({\n mediaType: z.enum([\n 'application/vnd.oci.image.config.v1+json',\n 'application/vnd.cncf.helm.config.v1+json',\n 'application/vnd.devcontainers',\n 'application/vnd.oci.empty.v1+json',\n 'application/vnd.cncf.flux.config.v1+json',\n ]),\n }),\n annotations: Nullish(z.record(z.string(), z.string())),\n});\nexport type OciImageManifest = z.infer<typeof OciImageManifest>;\n\n/**\n * OCI Image List\n * mediaType is not required.\n * https://github.com/opencontainers/image-spec/blob/main/image-index.md\n */\nexport const OciImageIndexManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.oci.image.index.v1+json'),\n manifests: LooseArray(\n Descriptor.extend({\n mediaType: z.enum([\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ]),\n platform: OciPlatform,\n }),\n ),\n annotations: Nullish(z.record(z.string(), z.string())),\n});\n\n// Old Docker manifests\n\n/**\n * Image Manifest\n * https://docs.docker.com/registry/spec/manifest-v2-2/#image-manifest\n */\nexport const DistributionManifest = ManifestObject.extend({\n mediaType: z.literal('application/vnd.docker.distribution.manifest.v2+json'),\n config: Descriptor.extend({\n mediaType: z.literal('application/vnd.docker.container.image.v1+json'),\n }),\n});\nexport type DistributionManifest = z.infer<typeof DistributionManifest>;\n\n/**\n * Manifest List\n * https://docs.docker.com/registry/spec/manifest-v2-2/#manifest-list\n */\nexport const DistributionListManifest = ManifestObject.extend({\n mediaType: z.literal(\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n ),\n manifests: z.array(\n Descriptor.extend({\n mediaType: z.literal(\n 'application/vnd.docker.distribution.manifest.v2+json',\n ),\n platform: OciPlatform,\n }),\n ),\n});\n\n// Combined manifests\nexport const Manifest = ManifestObject.passthrough()\n .transform((value, ctx) => {\n if (value.mediaType === undefined) {\n if ('config' in value) {\n value.mediaType = 'application/vnd.oci.image.manifest.v1+json';\n } else if ('manifests' in value) {\n value.mediaType = 'application/vnd.oci.image.index.v1+json';\n } else {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid manifest, missing mediaType.',\n });\n return z.NEVER;\n }\n }\n return value;\n })\n .pipe(\n z.discriminatedUnion('mediaType', [\n DistributionManifest,\n DistributionListManifest,\n OciImageManifest,\n OciImageIndexManifest,\n ]),\n );\n\nexport type Manifest = z.infer<typeof Manifest>;\nexport const ManifestJson = Json.pipe(Manifest);\n\nexport const DockerHubTagImage = z.object({\n architecture: z.string().nullable().catch(null),\n digest: z.string().nullable().catch(null),\n});\nexport type DockerHubTagImage = z.infer<typeof DockerHubTagImage>;\n\nexport const DockerHubTag = z.object({\n id: z.number(),\n last_updated: z.string().datetime(),\n name: z.string(),\n tag_last_pushed: z.string().datetime().nullable().catch(null),\n digest: z.string().nullable().catch(null),\n images: z.array(DockerHubTagImage).catch([]),\n});\nexport type DockerHubTag = z.infer<typeof DockerHubTag>;\n\nexport const DockerHubTagsPage = z.object({\n count: z.number(),\n next: z.string().nullable().catch(null),\n results: LooseArray(DockerHubTag, {\n /* v8 ignore next -- TODO: add test */\n onError: ({ error }) => {\n logger.debug(\n { error },\n 'Docker: Failed to parse some tags from Docker Hub',\n );\n },\n }),\n});\n\n/**\n * Docker registry auth token response.\n * https://distribution.github.io/distribution/spec/auth/token/\n */\nexport const RegistryAuthToken = z.object({\n token: z.string().optional(),\n access_token: z.string().optional(),\n});\nexport type RegistryAuthToken = z.infer<typeof RegistryAuthToken>;\n\n/**\n * Docker registry tags list response.\n * https://distribution.github.io/distribution/spec/api/#listing-image-tags\n */\nexport const RegistryTagsList = z.object({\n tags: z.array(z.string()),\n});\nexport type RegistryTagsList = z.infer<typeof RegistryTagsList>;\n\n/**\n * Quay registry tags list response (Quay v1 API).\n */\nexport const QuayTagsResponse = z.object({\n tags: LooseArray(\n z.object({\n name: z.string(),\n }),\n ),\n has_additional: z.boolean().default(false),\n});\nexport type QuayTagsResponse = z.infer<typeof QuayTagsResponse>;\n"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { logger } from "../../../logger/index.js";
|
|
|
4
4
|
import { joinUrlParts } from "../../../util/url.js";
|
|
5
5
|
import { add, find } from "../../../util/host-rules.js";
|
|
6
6
|
import { ExternalHostError } from "../../../types/errors/external-host-error.js";
|
|
7
|
+
import { DeepNullish } from "../../../util/schema-utils/index.js";
|
|
7
8
|
import { asTimestamp } from "../../../util/timestamp.js";
|
|
8
9
|
import { PackageHttpCacheProvider } from "../../../util/http/cache/package-http-cache-provider.js";
|
|
9
10
|
import { defaultRegistryUrl } from "./common.js";
|
|
@@ -29,10 +30,10 @@ const PackageSource = z.union([z.string().nonempty().transform((repository) => {
|
|
|
29
30
|
sourceUrl,
|
|
30
31
|
sourceDirectory
|
|
31
32
|
};
|
|
32
|
-
}), z.object({
|
|
33
|
-
url: z.string().nonempty().
|
|
34
|
-
directory: z.string().nonempty().
|
|
35
|
-
}).transform(({ url, directory }) => {
|
|
33
|
+
}), DeepNullish(z.object({
|
|
34
|
+
url: z.string().nonempty().optional(),
|
|
35
|
+
directory: z.string().nonempty().optional()
|
|
36
|
+
})).transform(({ url, directory }) => {
|
|
36
37
|
const res = {
|
|
37
38
|
sourceUrl: null,
|
|
38
39
|
sourceDirectory: null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","names":["hostRules.find"],"sources":["../../../../lib/modules/datasource/npm/get.ts"],"sourcesContent":["import { isNonEmptyString, isString } from '@sindresorhus/is';\nimport { z } from 'zod/v4';\nimport { HOST_DISABLED } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { PackageHttpCacheProvider } from '../../../util/http/cache/package-http-cache-provider.ts';\nimport type { Http } from '../../../util/http/index.ts';\nimport type { HttpOptions } from '../../../util/http/types.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport type { Release, ReleaseResult } from '../types.ts';\nimport { defaultRegistryUrl } from './common.ts';\nimport { CachedPackument, NpmResponse } from './schema.ts';\n\nconst SHORT_REPO_REGEX = regEx(\n /^((?<platform>bitbucket|github|gitlab):)?(?<shortRepo>[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+)$/,\n);\n\nconst platformMapping: Record<string, string> = {\n bitbucket: 'https://bitbucket.org/',\n github: 'https://github.com/',\n gitlab: 'https://gitlab.com/',\n};\n\ninterface PackageSource {\n sourceUrl: string | null;\n sourceDirectory: string | null;\n}\n\nconst PackageSource = z\n .union([\n z\n .string()\n .nonempty()\n .transform((repository): PackageSource => {\n let sourceUrl: string | null = null;\n const sourceDirectory = null;\n const shortMatch = repository.match(SHORT_REPO_REGEX);\n if (shortMatch?.groups) {\n const { platform = 'github', shortRepo } = shortMatch.groups;\n sourceUrl = platformMapping[platform] + shortRepo;\n } else {\n sourceUrl = repository;\n }\n return { sourceUrl, sourceDirectory };\n }),\n z\n .object({\n url: z.string().nonempty().nullish(),\n directory: z.string().nonempty().nullish(),\n })\n .transform(({ url, directory }) => {\n const res: PackageSource = { sourceUrl: null, sourceDirectory: null };\n\n if (url) {\n res.sourceUrl = url;\n }\n\n if (directory) {\n res.sourceDirectory = directory;\n }\n\n return res;\n }),\n ])\n .catch({ sourceUrl: null, sourceDirectory: null });\n\nexport async function getDependency(\n http: Http,\n registryUrl: string,\n packageName: string,\n): Promise<ReleaseResult | null> {\n logger.trace(`npm.getDependency(${packageName})`);\n\n const packageUrl = joinUrlParts(registryUrl, packageName.replace('/', '%2F'));\n\n try {\n const cacheProvider = new PackageHttpCacheProvider({\n namespace: 'datasource-npm:cache-provider',\n checkAuthorizationHeader: false, // We don't rely on whether user token is provided or not\n checkCacheControlHeader: true,\n writeSchema: CachedPackument,\n });\n const options: HttpOptions = { cacheProvider };\n\n // set abortOnError for registry.npmjs.org if no hostRule with explicit abortOnError exists\n if (\n registryUrl === defaultRegistryUrl &&\n hostRules.find({ url: defaultRegistryUrl })?.abortOnError === undefined\n ) {\n logger.trace(\n { packageName, registry: defaultRegistryUrl },\n 'setting abortOnError hostRule for well known host',\n );\n hostRules.add({\n matchHost: defaultRegistryUrl,\n abortOnError: true,\n });\n }\n\n const resp = await http.getJson(packageUrl, options, NpmResponse);\n const { body: res } = resp;\n if (!res.versions || !Object.keys(res.versions).length) {\n // Registry returned a 200 OK but with no versions\n logger.debug(`No versions returned for npm dependency ${packageName}`);\n return null;\n }\n\n const latestVersion = res.versions[res['dist-tags']?.latest ?? ''];\n res.repository ??= latestVersion?.repository;\n res.homepage ??= latestVersion?.homepage;\n\n const { sourceUrl, sourceDirectory } = PackageSource.parse(res.repository);\n\n // Simplify response before caching and returning\n const dep: ReleaseResult = {\n homepage: res.homepage,\n releases: [],\n tags: res['dist-tags'],\n registryUrl,\n };\n\n if (sourceUrl) {\n dep.sourceUrl = sourceUrl;\n }\n\n if (sourceDirectory) {\n dep.sourceDirectory = sourceDirectory;\n }\n\n if (latestVersion?.deprecated) {\n dep.deprecationMessage = `On registry \\`${registryUrl}\\`, the \"latest\" version of dependency \\`${packageName}\\` has the following deprecation notice:\\n\\n\\`${latestVersion.deprecated}\\`\\n\\nMarking the latest version of an npm package as deprecated results in the entire package being considered deprecated, so contact the package author you think this is a mistake.`;\n }\n dep.releases = Object.keys(res.versions).map((version) => {\n const release: Release = {\n version,\n gitRef: res.versions?.[version].gitHead,\n dependencies: res.versions?.[version].dependencies,\n devDependencies: res.versions?.[version].devDependencies,\n attestation: isString(res.versions?.[version].dist?.attestations?.url),\n };\n const releaseTimestamp = asTimestamp(res.time?.[version]);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n if (res.versions?.[version].deprecated) {\n release.isDeprecated = true;\n }\n const nodeConstraint = res.versions?.[version].engines?.node;\n if (isNonEmptyString(nodeConstraint)) {\n release.constraints = { node: [nodeConstraint] };\n }\n const source = PackageSource.parse(res.versions?.[version].repository);\n if (source.sourceUrl && source.sourceUrl !== dep.sourceUrl) {\n release.sourceUrl = source.sourceUrl;\n }\n if (\n source.sourceDirectory &&\n source.sourceDirectory !== dep.sourceDirectory\n ) {\n release.sourceDirectory = source.sourceDirectory;\n }\n if (dep.deprecationMessage) {\n release.isDeprecated = true;\n }\n return release;\n });\n\n const isPublic = resp.headers?.['cache-control']\n ?.toLocaleLowerCase()\n ?.split(regEx(/\\s*,\\s*/))\n ?.includes('public');\n if (!isPublic) {\n dep.isPrivate = true;\n }\n\n logger.trace({ dep }, 'dep');\n return dep;\n } catch (err) {\n const actualError = err instanceof ExternalHostError ? err.err : err;\n const ignoredStatusCodes = [401, 402, 403, 404];\n const ignoredResponseCodes = ['ENOTFOUND'];\n if (\n actualError.message === HOST_DISABLED ||\n ignoredStatusCodes.includes(actualError.statusCode) ||\n ignoredResponseCodes.includes(actualError.code)\n ) {\n return null;\n }\n\n if (err instanceof ExternalHostError) {\n if (actualError.name === 'ParseError' && actualError.body) {\n actualError.body = 'err.body deleted by Renovate';\n err.err = actualError;\n }\n throw err;\n }\n logger.debug({ err }, 'Unknown npm lookup error');\n return null;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"get.js","names":["hostRules.find"],"sources":["../../../../lib/modules/datasource/npm/get.ts"],"sourcesContent":["import { isNonEmptyString, isString } from '@sindresorhus/is';\nimport { z } from 'zod/v4';\nimport { HOST_DISABLED } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { PackageHttpCacheProvider } from '../../../util/http/cache/package-http-cache-provider.ts';\nimport type { Http } from '../../../util/http/index.ts';\nimport type { HttpOptions } from '../../../util/http/types.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { DeepNullish } from '../../../util/schema-utils/index.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport type { Release, ReleaseResult } from '../types.ts';\nimport { defaultRegistryUrl } from './common.ts';\nimport { CachedPackument, NpmResponse } from './schema.ts';\n\nconst SHORT_REPO_REGEX = regEx(\n /^((?<platform>bitbucket|github|gitlab):)?(?<shortRepo>[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+)$/,\n);\n\nconst platformMapping: Record<string, string> = {\n bitbucket: 'https://bitbucket.org/',\n github: 'https://github.com/',\n gitlab: 'https://gitlab.com/',\n};\n\ninterface PackageSource {\n sourceUrl: string | null;\n sourceDirectory: string | null;\n}\n\nconst PackageSource = z\n .union([\n z\n .string()\n .nonempty()\n .transform((repository): PackageSource => {\n let sourceUrl: string | null = null;\n const sourceDirectory = null;\n const shortMatch = repository.match(SHORT_REPO_REGEX);\n if (shortMatch?.groups) {\n const { platform = 'github', shortRepo } = shortMatch.groups;\n sourceUrl = platformMapping[platform] + shortRepo;\n } else {\n sourceUrl = repository;\n }\n return { sourceUrl, sourceDirectory };\n }),\n DeepNullish(\n z.object({\n url: z.string().nonempty().optional(),\n directory: z.string().nonempty().optional(),\n }),\n ).transform(({ url, directory }) => {\n const res: PackageSource = { sourceUrl: null, sourceDirectory: null };\n\n if (url) {\n res.sourceUrl = url;\n }\n\n if (directory) {\n res.sourceDirectory = directory;\n }\n\n return res;\n }),\n ])\n .catch({ sourceUrl: null, sourceDirectory: null });\n\nexport async function getDependency(\n http: Http,\n registryUrl: string,\n packageName: string,\n): Promise<ReleaseResult | null> {\n logger.trace(`npm.getDependency(${packageName})`);\n\n const packageUrl = joinUrlParts(registryUrl, packageName.replace('/', '%2F'));\n\n try {\n const cacheProvider = new PackageHttpCacheProvider({\n namespace: 'datasource-npm:cache-provider',\n checkAuthorizationHeader: false, // We don't rely on whether user token is provided or not\n checkCacheControlHeader: true,\n writeSchema: CachedPackument,\n });\n const options: HttpOptions = { cacheProvider };\n\n // set abortOnError for registry.npmjs.org if no hostRule with explicit abortOnError exists\n if (\n registryUrl === defaultRegistryUrl &&\n hostRules.find({ url: defaultRegistryUrl })?.abortOnError === undefined\n ) {\n logger.trace(\n { packageName, registry: defaultRegistryUrl },\n 'setting abortOnError hostRule for well known host',\n );\n hostRules.add({\n matchHost: defaultRegistryUrl,\n abortOnError: true,\n });\n }\n\n const resp = await http.getJson(packageUrl, options, NpmResponse);\n const { body: res } = resp;\n if (!res.versions || !Object.keys(res.versions).length) {\n // Registry returned a 200 OK but with no versions\n logger.debug(`No versions returned for npm dependency ${packageName}`);\n return null;\n }\n\n const latestVersion = res.versions[res['dist-tags']?.latest ?? ''];\n res.repository ??= latestVersion?.repository;\n res.homepage ??= latestVersion?.homepage;\n\n const { sourceUrl, sourceDirectory } = PackageSource.parse(res.repository);\n\n // Simplify response before caching and returning\n const dep: ReleaseResult = {\n homepage: res.homepage,\n releases: [],\n tags: res['dist-tags'],\n registryUrl,\n };\n\n if (sourceUrl) {\n dep.sourceUrl = sourceUrl;\n }\n\n if (sourceDirectory) {\n dep.sourceDirectory = sourceDirectory;\n }\n\n if (latestVersion?.deprecated) {\n dep.deprecationMessage = `On registry \\`${registryUrl}\\`, the \"latest\" version of dependency \\`${packageName}\\` has the following deprecation notice:\\n\\n\\`${latestVersion.deprecated}\\`\\n\\nMarking the latest version of an npm package as deprecated results in the entire package being considered deprecated, so contact the package author you think this is a mistake.`;\n }\n dep.releases = Object.keys(res.versions).map((version) => {\n const release: Release = {\n version,\n gitRef: res.versions?.[version].gitHead,\n dependencies: res.versions?.[version].dependencies,\n devDependencies: res.versions?.[version].devDependencies,\n attestation: isString(res.versions?.[version].dist?.attestations?.url),\n };\n const releaseTimestamp = asTimestamp(res.time?.[version]);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n if (res.versions?.[version].deprecated) {\n release.isDeprecated = true;\n }\n const nodeConstraint = res.versions?.[version].engines?.node;\n if (isNonEmptyString(nodeConstraint)) {\n release.constraints = { node: [nodeConstraint] };\n }\n const source = PackageSource.parse(res.versions?.[version].repository);\n if (source.sourceUrl && source.sourceUrl !== dep.sourceUrl) {\n release.sourceUrl = source.sourceUrl;\n }\n if (\n source.sourceDirectory &&\n source.sourceDirectory !== dep.sourceDirectory\n ) {\n release.sourceDirectory = source.sourceDirectory;\n }\n if (dep.deprecationMessage) {\n release.isDeprecated = true;\n }\n return release;\n });\n\n const isPublic = resp.headers?.['cache-control']\n ?.toLocaleLowerCase()\n ?.split(regEx(/\\s*,\\s*/))\n ?.includes('public');\n if (!isPublic) {\n dep.isPrivate = true;\n }\n\n logger.trace({ dep }, 'dep');\n return dep;\n } catch (err) {\n const actualError = err instanceof ExternalHostError ? err.err : err;\n const ignoredStatusCodes = [401, 402, 403, 404];\n const ignoredResponseCodes = ['ENOTFOUND'];\n if (\n actualError.message === HOST_DISABLED ||\n ignoredStatusCodes.includes(actualError.statusCode) ||\n ignoredResponseCodes.includes(actualError.code)\n ) {\n return null;\n }\n\n if (err instanceof ExternalHostError) {\n if (actualError.name === 'ParseError' && actualError.body) {\n actualError.body = 'err.body deleted by Renovate';\n err.err = actualError;\n }\n throw err;\n }\n logger.debug({ err }, 'Unknown npm lookup error');\n return null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -2,10 +2,13 @@ import { z } from "zod/v4";
|
|
|
2
2
|
|
|
3
3
|
//#region lib/modules/datasource/npm/schema.d.ts
|
|
4
4
|
declare const NpmResponseVersion: z.ZodObject<{
|
|
5
|
-
repository: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnknown, z.ZodTransform<any, unknown>>, z.ZodUnion<readonly [z.ZodString, z.
|
|
6
|
-
url
|
|
7
|
-
directory
|
|
8
|
-
}, z.core.$
|
|
5
|
+
repository: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnknown, z.ZodTransform<any, unknown>>, z.ZodUnion<readonly [z.ZodString, z.ZodType<{
|
|
6
|
+
url?: string | undefined;
|
|
7
|
+
directory?: string | undefined;
|
|
8
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
9
|
+
url?: string | undefined;
|
|
10
|
+
directory?: string | undefined;
|
|
11
|
+
}, unknown>>]>>>;
|
|
9
12
|
homepage: z.ZodCatch<z.ZodOptional<z.ZodString>>;
|
|
10
13
|
deprecated: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>;
|
|
11
14
|
gitHead: z.ZodOptional<z.ZodString>;
|
|
@@ -23,10 +26,13 @@ declare const NpmResponseVersion: z.ZodObject<{
|
|
|
23
26
|
type NpmResponseVersion = z.infer<typeof NpmResponseVersion>;
|
|
24
27
|
declare const CachedPackument: z.ZodObject<{
|
|
25
28
|
versions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
26
|
-
repository: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnknown, z.ZodTransform<any, unknown>>, z.ZodUnion<readonly [z.ZodString, z.
|
|
27
|
-
url
|
|
28
|
-
directory
|
|
29
|
-
}, z.core.$
|
|
29
|
+
repository: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnknown, z.ZodTransform<any, unknown>>, z.ZodUnion<readonly [z.ZodString, z.ZodType<{
|
|
30
|
+
url?: string | undefined;
|
|
31
|
+
directory?: string | undefined;
|
|
32
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
33
|
+
url?: string | undefined;
|
|
34
|
+
directory?: string | undefined;
|
|
35
|
+
}, unknown>>]>>>;
|
|
30
36
|
homepage: z.ZodCatch<z.ZodOptional<z.ZodString>>;
|
|
31
37
|
deprecated: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>;
|
|
32
38
|
gitHead: z.ZodOptional<z.ZodString>;
|
|
@@ -41,10 +47,13 @@ declare const CachedPackument: z.ZodObject<{
|
|
|
41
47
|
}, z.core.$strip>>;
|
|
42
48
|
}, z.core.$strip>>;
|
|
43
49
|
}, z.core.$strip>>>;
|
|
44
|
-
repository: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.
|
|
45
|
-
url
|
|
46
|
-
directory
|
|
47
|
-
}, z.core.$
|
|
50
|
+
repository: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodType<{
|
|
51
|
+
url?: string | undefined;
|
|
52
|
+
directory?: string | undefined;
|
|
53
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
54
|
+
url?: string | undefined;
|
|
55
|
+
directory?: string | undefined;
|
|
56
|
+
}, unknown>>]>>;
|
|
48
57
|
homepage: z.ZodOptional<z.ZodString>;
|
|
49
58
|
time: z.ZodOptional<z.ZodType<Record<string, string>, any, z.core.$ZodTypeInternals<Record<string, string>, any>>>;
|
|
50
59
|
'dist-tags': z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
@@ -53,10 +62,13 @@ declare const NpmResponse: z.ZodObject<{
|
|
|
53
62
|
_id: z.ZodOptional<z.ZodString>;
|
|
54
63
|
name: z.ZodOptional<z.ZodString>;
|
|
55
64
|
versions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
56
|
-
repository: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnknown, z.ZodTransform<any, unknown>>, z.ZodUnion<readonly [z.ZodString, z.
|
|
57
|
-
url
|
|
58
|
-
directory
|
|
59
|
-
}, z.core.$
|
|
65
|
+
repository: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnknown, z.ZodTransform<any, unknown>>, z.ZodUnion<readonly [z.ZodString, z.ZodType<{
|
|
66
|
+
url?: string | undefined;
|
|
67
|
+
directory?: string | undefined;
|
|
68
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
69
|
+
url?: string | undefined;
|
|
70
|
+
directory?: string | undefined;
|
|
71
|
+
}, unknown>>]>>>;
|
|
60
72
|
homepage: z.ZodCatch<z.ZodOptional<z.ZodString>>;
|
|
61
73
|
deprecated: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>;
|
|
62
74
|
gitHead: z.ZodOptional<z.ZodString>;
|
|
@@ -71,10 +83,13 @@ declare const NpmResponse: z.ZodObject<{
|
|
|
71
83
|
}, z.core.$strip>>;
|
|
72
84
|
}, z.core.$strip>>;
|
|
73
85
|
}, z.core.$loose>>>;
|
|
74
|
-
repository: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnknown, z.ZodTransform<any, unknown>>, z.ZodUnion<readonly [z.ZodString, z.
|
|
75
|
-
url
|
|
76
|
-
directory
|
|
77
|
-
}, z.core.$
|
|
86
|
+
repository: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnknown, z.ZodTransform<any, unknown>>, z.ZodUnion<readonly [z.ZodString, z.ZodType<{
|
|
87
|
+
url?: string | undefined;
|
|
88
|
+
directory?: string | undefined;
|
|
89
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
90
|
+
url?: string | undefined;
|
|
91
|
+
directory?: string | undefined;
|
|
92
|
+
}, unknown>>]>>>;
|
|
78
93
|
homepage: z.ZodOptional<z.ZodString>;
|
|
79
94
|
time: z.ZodOptional<z.ZodType<Record<string, string>, any, z.core.$ZodTypeInternals<Record<string, string>, any>>>;
|
|
80
95
|
'dist-tags': z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { LooseRecord } from "../../../util/schema-utils/index.js";
|
|
1
|
+
import { DeepNullish, LooseRecord } from "../../../util/schema-utils/index.js";
|
|
2
2
|
import { z } from "zod/v4";
|
|
3
3
|
//#region lib/modules/datasource/npm/schema.ts
|
|
4
|
-
const Repository = z.union([z.string(), z.object({
|
|
5
|
-
url: z.string().
|
|
6
|
-
directory: z.string().
|
|
7
|
-
})]);
|
|
4
|
+
const Repository = z.union([z.string(), DeepNullish(z.object({
|
|
5
|
+
url: z.string().optional(),
|
|
6
|
+
directory: z.string().optional()
|
|
7
|
+
}))]);
|
|
8
8
|
const RepositoryNpmResponse = z.unknown().transform((val) => Array.isArray(val) ? val[0] : val).pipe(Repository);
|
|
9
9
|
const Attestations = z.object({ url: z.string().optional() });
|
|
10
10
|
const Distribution = z.object({ attestations: Attestations.optional() });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/npm/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { LooseRecord } from '../../../util/schema-utils/index.ts';\n\nconst Repository = z.union([\n z.string(),\n z.object({\n
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/npm/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { DeepNullish, LooseRecord } from '../../../util/schema-utils/index.ts';\n\nconst Repository = z.union([\n z.string(),\n DeepNullish(\n z.object({\n url: z.string().optional(),\n directory: z.string().optional(),\n }),\n ),\n]);\n\nconst RepositoryNpmResponse = z\n .unknown()\n .transform((val) => (Array.isArray(val) ? val[0] : val))\n .pipe(Repository);\n\nconst Attestations = z.object({\n url: z.string().optional(),\n});\n\nconst Distribution = z.object({\n attestations: Attestations.optional(),\n});\n\nexport const NpmResponseVersion = z.object({\n repository: RepositoryNpmResponse.optional(),\n homepage: z.string().optional().catch(undefined),\n deprecated: z.union([z.string(), z.boolean()]).optional(),\n gitHead: z.string().optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n devDependencies: z.record(z.string(), z.string()).optional(),\n engines: z\n .object({ node: z.string().optional() })\n .optional()\n .catch(undefined),\n dist: Distribution.optional(),\n});\nexport type NpmResponseVersion = z.infer<typeof NpmResponseVersion>;\n\nexport const CachedPackument = z.object({\n versions: z.record(z.string(), NpmResponseVersion).optional(),\n repository: Repository.optional(),\n homepage: z.string().optional(),\n // `LooseRecord` drops non-string entries (e.g. Artifactory's\n // `\"unpublished\": null`) instead of invalidating the whole packument.\n time: LooseRecord(z.string()).optional(),\n 'dist-tags': z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Full NpmResponse schema — used when fetching from the npm registry.\n * Lenient: only validates fields Renovate actually reads.\n * Uses loose() on the version objects to preserve extra fields\n * (e.g. 'renovate-config' used by config/presets/npm/index.ts).\n */\nconst NpmResponseVersionLoose = NpmResponseVersion.loose();\n\nexport const NpmResponse = z.object({\n _id: z.string().optional(),\n name: z.string().optional(),\n versions: z.record(z.string(), NpmResponseVersionLoose).optional(),\n repository: RepositoryNpmResponse.optional(),\n homepage: z.string().optional(),\n time: LooseRecord(z.string()).optional(),\n 'dist-tags': z.record(z.string(), z.string()).optional(),\n});\n\nexport type NpmResponse = z.infer<typeof NpmResponse>;\n"],"mappings":";;;AAGA,MAAM,aAAa,EAAE,MAAM,CACzB,EAAE,OAAO,GACT,YACE,EAAE,OAAO;CACP,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS;CACzB,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;AACjC,CAAC,CACH,CACF,CAAC;AAED,MAAM,wBAAwB,EAC3B,QAAQ,CAAC,CACT,WAAW,QAAS,MAAM,QAAQ,GAAG,IAAI,IAAI,KAAK,GAAI,CAAC,CACvD,KAAK,UAAU;AAElB,MAAM,eAAe,EAAE,OAAO,EAC5B,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,EAC3B,CAAC;AAED,MAAM,eAAe,EAAE,OAAO,EAC5B,cAAc,aAAa,SAAS,EACtC,CAAC;AAED,MAAa,qBAAqB,EAAE,OAAO;CACzC,YAAY,sBAAsB,SAAS;CAC3C,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAA,CAAS;CAC/C,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;CACxD,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACxD,iBAAiB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CAC3D,SAAS,EACN,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CACvC,SAAS,CAAC,CACV,MAAM,KAAA,CAAS;CAClB,MAAM,aAAa,SAAS;AAC9B,CAAC;AAGD,MAAa,kBAAkB,EAAE,OAAO;CACtC,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,kBAAkB,CAAC,CAAC,SAAS;CAC5D,YAAY,WAAW,SAAS;CAChC,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;CAG9B,MAAM,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACvC,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AACzD,CAAC;;;;;;;AAQD,MAAM,0BAA0B,mBAAmB,MAAM;AAEzD,MAAa,cAAc,EAAE,OAAO;CAClC,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS;CACzB,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,uBAAuB,CAAC,CAAC,SAAS;CACjE,YAAY,sBAAsB,SAAS;CAC3C,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,MAAM,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACvC,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AACzD,CAAC"}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DeepNullish, LooseArray } from "../../../util/schema-utils/index.js";
|
|
2
2
|
import { MaybeTimestamp } from "../../../util/timestamp.js";
|
|
3
3
|
import { isTruthy } from "@sindresorhus/is";
|
|
4
4
|
import { z } from "zod/v4";
|
|
5
5
|
//#region lib/modules/datasource/puppet-forge/schema.ts
|
|
6
|
-
const PuppetReleaseAbbreviated = z.object({
|
|
6
|
+
const PuppetReleaseAbbreviated = DeepNullish(z.object({
|
|
7
7
|
version: z.string(),
|
|
8
8
|
created_at: MaybeTimestamp,
|
|
9
|
-
deleted_at:
|
|
10
|
-
file_uri: z.string().optional()
|
|
11
|
-
}).transform(({ version, created_at, deleted_at, file_uri }) => {
|
|
9
|
+
deleted_at: z.string().optional(),
|
|
10
|
+
file_uri: z.string().optional()
|
|
11
|
+
})).transform(({ version, created_at, deleted_at, file_uri }) => {
|
|
12
12
|
if (deleted_at) return null;
|
|
13
13
|
const release = { version };
|
|
14
14
|
if (file_uri) release.downloadUrl = file_uri;
|
|
15
15
|
if (created_at) release.releaseTimestamp = created_at;
|
|
16
16
|
return release;
|
|
17
17
|
});
|
|
18
|
-
const PuppetModule = z.object({
|
|
18
|
+
const PuppetModule = DeepNullish(z.object({
|
|
19
19
|
releases: LooseArray(PuppetReleaseAbbreviated).default([]),
|
|
20
|
-
homepage_url: z.string().optional()
|
|
21
|
-
deprecated_for: z.string().optional()
|
|
22
|
-
}).transform((module) => {
|
|
20
|
+
homepage_url: z.string().optional(),
|
|
21
|
+
deprecated_for: z.string().optional()
|
|
22
|
+
})).transform((module) => {
|
|
23
23
|
const result = { releases: module.releases.filter(isTruthy) };
|
|
24
24
|
if (module.homepage_url) result.homepage = module.homepage_url;
|
|
25
25
|
if (module.deprecated_for) result.deprecationMessage = module.deprecated_for;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/puppet-forge/schema.ts"],"sourcesContent":["import { isTruthy } from '@sindresorhus/is';\nimport { z } from 'zod/v4';\nimport {
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/puppet-forge/schema.ts"],"sourcesContent":["import { isTruthy } from '@sindresorhus/is';\nimport { z } from 'zod/v4';\nimport { DeepNullish, LooseArray } from '../../../util/schema-utils/index.ts';\nimport { MaybeTimestamp } from '../../../util/timestamp.ts';\nimport type { Release, ReleaseResult } from '../types.ts';\n\nexport const PuppetReleaseAbbreviated = DeepNullish(\n z.object({\n version: z.string(),\n created_at: MaybeTimestamp,\n deleted_at: z.string().optional(),\n file_uri: z.string().optional(),\n }),\n).transform(({ version, created_at, deleted_at, file_uri }): Release | null => {\n if (deleted_at) {\n return null;\n }\n\n const release: Release = { version };\n if (file_uri) {\n release.downloadUrl = file_uri;\n }\n if (created_at) {\n release.releaseTimestamp = created_at;\n }\n return release;\n});\n\nexport const PuppetModule = DeepNullish(\n z.object({\n releases: LooseArray(PuppetReleaseAbbreviated).default([]),\n homepage_url: z.string().optional(),\n deprecated_for: z.string().optional(),\n }),\n).transform((module): ReleaseResult => {\n const releases = module.releases.filter(isTruthy);\n const result: ReleaseResult = { releases };\n if (module.homepage_url) {\n result.homepage = module.homepage_url;\n }\n if (module.deprecated_for) {\n result.deprecationMessage = module.deprecated_for;\n }\n return result;\n});\n"],"mappings":";;;;;AAMA,MAAa,2BAA2B,YACtC,EAAE,OAAO;CACP,SAAS,EAAE,OAAO;CAClB,YAAY;CACZ,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS;CAChC,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;AAChC,CAAC,CACH,CAAC,CAAC,WAAW,EAAE,SAAS,YAAY,YAAY,eAA+B;CAC7E,IAAI,YACF,OAAO;CAGT,MAAM,UAAmB,EAAE,QAAQ;CACnC,IAAI,UACF,QAAQ,cAAc;CAExB,IAAI,YACF,QAAQ,mBAAmB;CAE7B,OAAO;AACT,CAAC;AAED,MAAa,eAAe,YAC1B,EAAE,OAAO;CACP,UAAU,WAAW,wBAAwB,CAAC,CAAC,QAAQ,CAAC,CAAC;CACzD,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;CAClC,gBAAgB,EAAE,OAAO,CAAC,CAAC,SAAS;AACtC,CAAC,CACH,CAAC,CAAC,WAAW,WAA0B;CAErC,MAAM,SAAwB,EAAE,UADf,OAAO,SAAS,OAAO,QACD,EAAE;CACzC,IAAI,OAAO,cACT,OAAO,WAAW,OAAO;CAE3B,IAAI,OAAO,gBACT,OAAO,qBAAqB,OAAO;CAErC,OAAO;AACT,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { LooseArray } from "../../../util/schema-utils/index.js";
|
|
1
|
+
import { DeepNullish, LooseArray } from "../../../util/schema-utils/index.js";
|
|
2
2
|
import { z } from "zod/v4";
|
|
3
3
|
//#region lib/modules/datasource/repology/schema.ts
|
|
4
|
-
const RepologyPackage = z.object({
|
|
4
|
+
const RepologyPackage = DeepNullish(z.object({
|
|
5
5
|
repo: z.string(),
|
|
6
6
|
visiblename: z.string(),
|
|
7
7
|
version: z.string(),
|
|
8
|
-
srcname: z.string().
|
|
9
|
-
binname: z.string().
|
|
10
|
-
origversion: z.string().
|
|
11
|
-
});
|
|
8
|
+
srcname: z.string().optional(),
|
|
9
|
+
binname: z.string().optional(),
|
|
10
|
+
origversion: z.string().optional()
|
|
11
|
+
}));
|
|
12
12
|
const RepologyPackages = LooseArray(RepologyPackage).catch([]);
|
|
13
13
|
//#endregion
|
|
14
14
|
export { RepologyPackage, RepologyPackages };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/repology/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { LooseArray } from '../../../util/schema-utils/index.ts';\n\nexport const RepologyPackage = z.object({\n
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/repology/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { DeepNullish, LooseArray } from '../../../util/schema-utils/index.ts';\n\nexport const RepologyPackage = DeepNullish(\n z.object({\n repo: z.string(),\n visiblename: z.string(),\n version: z.string(),\n srcname: z.string().optional(),\n binname: z.string().optional(),\n origversion: z.string().optional(),\n }),\n);\n\nexport type RepologyPackage = z.infer<typeof RepologyPackage>;\n\nexport const RepologyPackages = LooseArray(RepologyPackage).catch([]);\n"],"mappings":";;;AAGA,MAAa,kBAAkB,YAC7B,EAAE,OAAO;CACP,MAAM,EAAE,OAAO;CACf,aAAa,EAAE,OAAO;CACtB,SAAS,EAAE,OAAO;CAClB,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;AACnC,CAAC,CACH;AAIA,MAAa,mBAAmB,WAAW,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LooseArray, LooseRecord, Yaml } from "../../../util/schema-utils/index.js";
|
|
1
|
+
import { LooseArray, LooseRecord, Nullish, Yaml } from "../../../util/schema-utils/index.js";
|
|
2
2
|
import { z } from "zod/v4";
|
|
3
3
|
//#region lib/modules/manager/helmfile/schema.ts
|
|
4
4
|
const HelmRepository = z.object({
|
|
@@ -9,7 +9,7 @@ const HelmRepository = z.object({
|
|
|
9
9
|
const HelmRelease = z.object({
|
|
10
10
|
name: z.string(),
|
|
11
11
|
chart: z.string(),
|
|
12
|
-
version: z.string().or(z.number())
|
|
12
|
+
version: Nullish(z.string().or(z.number())).transform((version) => version ? version.toString() : null),
|
|
13
13
|
strategicMergePatches: z.unknown().optional(),
|
|
14
14
|
jsonPatches: z.unknown().optional(),
|
|
15
15
|
transformers: z.unknown().optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/helmfile/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport {\n LooseArray,\n LooseRecord,\n Yaml,\n} from '../../../util/schema-utils/index.ts';\n\nexport const HelmRepository = z.object({\n name: z.string(),\n url: z.string(),\n oci: z.boolean().optional(),\n});\nexport type HelmRepository = z.infer<typeof HelmRepository>;\n\nexport const HelmRelease = z.object({\n name: z.string(),\n chart: z.string(),\n version: z
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/helmfile/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport {\n LooseArray,\n LooseRecord,\n Nullish,\n Yaml,\n} from '../../../util/schema-utils/index.ts';\n\nexport const HelmRepository = z.object({\n name: z.string(),\n url: z.string(),\n oci: z.boolean().optional(),\n});\nexport type HelmRepository = z.infer<typeof HelmRepository>;\n\nexport const HelmRelease = z.object({\n name: z.string(),\n chart: z.string(),\n version: Nullish(z.string().or(z.number())).transform((version) =>\n version ? version.toString() : null,\n ),\n strategicMergePatches: z.unknown().optional(),\n jsonPatches: z.unknown().optional(),\n transformers: z.unknown().optional(),\n});\nexport type HelmRelease = z.infer<typeof HelmRelease>;\n\nexport const Doc = z.object({\n releases: LooseArray(HelmRelease).optional(),\n templates: LooseRecord(HelmRelease).optional(),\n repositories: LooseArray(HelmRepository).optional(),\n});\nexport type Doc = z.infer<typeof Doc>;\n\nexport const LockVersion = Yaml.pipe(\n z.object({ version: z.string() }).transform(({ version }) => version),\n);\nexport type LockVersion = z.infer<typeof LockVersion>;\n"],"mappings":";;;AAQA,MAAa,iBAAiB,EAAE,OAAO;CACrC,MAAM,EAAE,OAAO;CACf,KAAK,EAAE,OAAO;CACd,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS;AAC5B,CAAC;AAGD,MAAa,cAAc,EAAE,OAAO;CAClC,MAAM,EAAE,OAAO;CACf,OAAO,EAAE,OAAO;CAChB,SAAS,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,YACrD,UAAU,QAAQ,SAAS,IAAI,IACjC;CACA,uBAAuB,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC5C,aAAa,EAAE,QAAQ,CAAC,CAAC,SAAS;CAClC,cAAc,EAAE,QAAQ,CAAC,CAAC,SAAS;AACrC,CAAC;AAGD,MAAa,MAAM,EAAE,OAAO;CAC1B,UAAU,WAAW,WAAW,CAAC,CAAC,SAAS;CAC3C,WAAW,YAAY,WAAW,CAAC,CAAC,SAAS;CAC7C,cAAc,WAAW,cAAc,CAAC,CAAC,SAAS;AACpD,CAAC;AAGD,MAAa,cAAc,KAAK,KAC9B,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,cAAc,OAAO,CACtE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Json, LooseRecord, Yaml } from "../../../util/schema-utils/index.js";
|
|
1
|
+
import { Json, LooseRecord, Nullish, Yaml } from "../../../util/schema-utils/index.js";
|
|
2
2
|
import { z } from "zod/v4";
|
|
3
3
|
//#region lib/modules/manager/npm/schema.ts
|
|
4
4
|
const PnpmCatalogs = z.object({
|
|
@@ -15,7 +15,7 @@ const YarnConfig = Yaml.pipe(z.object({
|
|
|
15
15
|
}).and(YarnCatalogs));
|
|
16
16
|
const PnpmWorkspaceFile = Yaml.pipe(z.object({
|
|
17
17
|
packages: z.array(z.string()).optional(),
|
|
18
|
-
minimumReleaseAge: z.number()
|
|
18
|
+
minimumReleaseAge: Nullish(z.number()),
|
|
19
19
|
minimumReleaseAgeExclude: z.array(z.string()).optional(),
|
|
20
20
|
overrides: z.record(z.string(), z.string()).optional()
|
|
21
21
|
}).and(PnpmCatalogs));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/npm/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport {
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/npm/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport {\n Json,\n LooseRecord,\n Nullish,\n Yaml,\n} from '../../../util/schema-utils/index.ts';\n\nexport const PnpmCatalogs = z.object({\n catalog: z.optional(z.record(z.string(), z.string())),\n catalogs: z.optional(z.record(z.string(), z.record(z.string(), z.string()))),\n});\nexport type PnpmCatalogs = z.infer<typeof PnpmCatalogs>;\n\nexport const YarnCatalogs = z.object({\n catalog: z.optional(z.record(z.string(), z.string())),\n catalogs: z\n .optional(z.record(z.string(), z.record(z.string(), z.string())))\n .catch(undefined),\n});\nexport type YarnCatalogs = z.infer<typeof YarnCatalogs>;\n\nexport const YarnConfig = Yaml.pipe(\n z\n .object({\n npmRegistryServer: z.string().optional(),\n npmScopes: z\n .record(\n z.string(),\n z.object({\n npmRegistryServer: z.string().optional(),\n }),\n )\n .optional(),\n })\n .and(YarnCatalogs),\n);\nexport type YarnConfig = z.infer<typeof YarnConfig>;\n\nexport const PnpmWorkspaceFile = Yaml.pipe(\n z\n .object({\n packages: z.array(z.string()).optional(),\n minimumReleaseAge: Nullish(z.number()),\n minimumReleaseAgeExclude: z.array(z.string()).optional(),\n overrides: z.record(z.string(), z.string()).optional(),\n })\n .and(PnpmCatalogs),\n);\nexport type PnpmWorkspaceFile = z.infer<typeof PnpmWorkspaceFile>;\n\nexport const PackageManager = z\n .string()\n .transform((val) => val.split('@'))\n .transform(([name, ...version]) => ({ name, version: version.join('@') }));\n\nconst DevEngineDependency = z.object({\n name: z.string(),\n version: z.string().optional(),\n});\n\nconst DevEngine = z.object({\n packageManager: DevEngineDependency.or(\n z.array(DevEngineDependency),\n ).optional(),\n});\n\nexport const PackageJson = Json.pipe(\n z.object({\n devEngines: DevEngine.optional(),\n engines: LooseRecord(z.string()).optional(),\n dependencies: LooseRecord(z.string()).optional(),\n devDependencies: LooseRecord(z.string()).optional(),\n peerDependencies: LooseRecord(z.string()).optional(),\n packageManager: PackageManager.optional(),\n volta: LooseRecord(z.string()).optional(),\n }),\n);\n\nexport type PackageJson = z.infer<typeof PackageJson>;\n\nexport const PackageLockV3 = z.object({\n lockfileVersion: z.literal(3),\n packages: LooseRecord(\n z\n .string()\n .transform((x) => x.replace(/^node_modules\\//, ''))\n .refine((x) => x.trim() !== ''),\n z.object({ version: z.string() }),\n ),\n});\n\nexport const PackageLockPreV3 = z\n .object({\n lockfileVersion: z.union([z.literal(2), z.literal(1)]),\n dependencies: LooseRecord(z.object({ version: z.string() })),\n })\n .transform(({ lockfileVersion, dependencies: packages }) => ({\n lockfileVersion,\n packages,\n }));\n\nexport const PackageLock = Json.pipe(\n z.union([PackageLockV3, PackageLockPreV3]),\n).transform(({ packages, lockfileVersion }) => {\n const lockedVersions: Record<string, string> = {};\n for (const [entry, val] of Object.entries(packages)) {\n lockedVersions[entry] = val.version;\n }\n return { lockedVersions, lockfileVersion };\n});\n"],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Json } from "../../../util/schema-utils/index.js";
|
|
1
|
+
import { DeepNullish, Json } from "../../../util/schema-utils/index.js";
|
|
2
2
|
import { z } from "zod/v4";
|
|
3
3
|
//#region lib/modules/manager/swift/schema.ts
|
|
4
|
-
const PackageResolvedPin = z.object({
|
|
4
|
+
const PackageResolvedPin = DeepNullish(z.object({
|
|
5
5
|
identity: z.string(),
|
|
6
6
|
kind: z.string(),
|
|
7
7
|
location: z.string(),
|
|
8
8
|
state: z.object({
|
|
9
9
|
revision: z.string(),
|
|
10
|
-
version: z.string().
|
|
11
|
-
branch: z.string().
|
|
10
|
+
version: z.string().optional(),
|
|
11
|
+
branch: z.string().optional()
|
|
12
12
|
})
|
|
13
|
-
});
|
|
13
|
+
}));
|
|
14
14
|
const PackageResolvedJson = Json.pipe(z.object({
|
|
15
15
|
pins: z.array(PackageResolvedPin),
|
|
16
16
|
version: z.number().int().min(2),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/swift/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { Json } from '../../../util/schema-utils/index.ts';\n\nconst PackageResolvedPin = z.object({\n
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/swift/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { DeepNullish, Json } from '../../../util/schema-utils/index.ts';\n\nconst PackageResolvedPin = DeepNullish(\n z.object({\n identity: z.string(),\n kind: z.string(),\n location: z.string(),\n state: z.object({\n revision: z.string(),\n version: z.string().optional(),\n branch: z.string().optional(),\n }),\n }),\n);\n\nexport type PackageResolvedPin = z.infer<typeof PackageResolvedPin>;\n\nexport const PackageResolvedJson = Json.pipe(\n z.object({\n pins: z.array(PackageResolvedPin),\n version: z.number().int().min(2),\n originHash: z.string().optional(),\n }),\n);\n\nexport type PackageResolvedJson = z.infer<typeof PackageResolvedJson>;\n"],"mappings":";;;AAGA,MAAM,qBAAqB,YACzB,EAAE,OAAO;CACP,UAAU,EAAE,OAAO;CACnB,MAAM,EAAE,OAAO;CACf,UAAU,EAAE,OAAO;CACnB,OAAO,EAAE,OAAO;EACd,UAAU,EAAE,OAAO;EACnB,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;EAC7B,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,CAAC;AACH,CAAC,CACH;AAIA,MAAa,sBAAsB,KAAK,KACtC,EAAE,OAAO;CACP,MAAM,EAAE,MAAM,kBAAkB;CAChC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;CAC/B,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS;AAClC,CAAC,CACH"}
|