@ploaness/governance 1.0.0 → 1.2.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/a11y-hit-target.d.ts +35 -0
- package/dist/a11y-hit-target.d.ts.map +1 -0
- package/dist/a11y-hit-target.js +82 -0
- package/dist/a11y-hit-target.js.map +1 -0
- package/dist/a11y-incomplete.d.ts +18 -0
- package/dist/a11y-incomplete.d.ts.map +1 -0
- package/dist/a11y-incomplete.js +65 -0
- package/dist/a11y-incomplete.js.map +1 -0
- package/dist/access-boundary.d.ts +62 -6
- package/dist/access-boundary.d.ts.map +1 -1
- package/dist/access-boundary.js +201 -6
- package/dist/access-boundary.js.map +1 -1
- package/dist/admin-view-coverage.d.ts +25 -0
- package/dist/admin-view-coverage.d.ts.map +1 -0
- package/dist/admin-view-coverage.js +74 -0
- package/dist/admin-view-coverage.js.map +1 -0
- package/dist/asset-policy.d.ts.map +1 -1
- package/dist/asset-policy.js +1 -23
- package/dist/asset-policy.js.map +1 -1
- package/dist/axe-coverage.d.ts +40 -0
- package/dist/axe-coverage.d.ts.map +1 -0
- package/dist/axe-coverage.js +62 -0
- package/dist/axe-coverage.js.map +1 -0
- package/dist/banned-typography.d.ts.map +1 -1
- package/dist/banned-typography.js +26 -0
- package/dist/banned-typography.js.map +1 -1
- package/dist/blocklist-entries.d.ts +36 -0
- package/dist/blocklist-entries.d.ts.map +1 -0
- package/dist/blocklist-entries.js +338 -0
- package/dist/blocklist-entries.js.map +1 -0
- package/dist/blocklist.d.ts +91 -0
- package/dist/blocklist.d.ts.map +1 -0
- package/dist/blocklist.js +187 -0
- package/dist/blocklist.js.map +1 -0
- package/dist/build-diagnosis.d.ts +10 -0
- package/dist/build-diagnosis.d.ts.map +1 -0
- package/dist/build-diagnosis.js +38 -0
- package/dist/build-diagnosis.js.map +1 -0
- package/dist/container-failure.d.ts.map +1 -1
- package/dist/container-failure.js +1 -18
- package/dist/container-failure.js.map +1 -1
- package/dist/container-files.d.ts +16 -0
- package/dist/container-files.d.ts.map +1 -1
- package/dist/container-files.js +23 -8
- package/dist/container-files.js.map +1 -1
- package/dist/container-images.d.ts +43 -0
- package/dist/container-images.d.ts.map +1 -0
- package/dist/container-images.js +157 -0
- package/dist/container-images.js.map +1 -0
- package/dist/dependency-freshness.d.ts +8 -0
- package/dist/dependency-freshness.d.ts.map +1 -1
- package/dist/dependency-freshness.js +2 -18
- package/dist/dependency-freshness.js.map +1 -1
- package/dist/doc-blocks.d.ts.map +1 -1
- package/dist/doc-blocks.js +1 -13
- package/dist/doc-blocks.js.map +1 -1
- package/dist/document-references.d.ts.map +1 -1
- package/dist/document-references.js +7 -1
- package/dist/document-references.js.map +1 -1
- package/dist/editorconfig-policy.d.ts +7 -0
- package/dist/editorconfig-policy.d.ts.map +1 -1
- package/dist/editorconfig-policy.js +19 -12
- package/dist/editorconfig-policy.js.map +1 -1
- package/dist/environment-coherence.d.ts +87 -0
- package/dist/environment-coherence.d.ts.map +1 -0
- package/dist/environment-coherence.js +128 -0
- package/dist/environment-coherence.js.map +1 -0
- package/dist/environment-files.d.ts.map +1 -1
- package/dist/environment-files.js +1 -19
- package/dist/environment-files.js.map +1 -1
- package/dist/file-roles.d.ts +7 -2
- package/dist/file-roles.d.ts.map +1 -1
- package/dist/file-roles.js +10 -9
- package/dist/file-roles.js.map +1 -1
- package/dist/freshness-repair.d.ts +82 -0
- package/dist/freshness-repair.d.ts.map +1 -0
- package/dist/freshness-repair.js +91 -0
- package/dist/freshness-repair.js.map +1 -0
- package/dist/generated-denial.d.ts.map +1 -1
- package/dist/generated-denial.js +1 -9
- package/dist/generated-denial.js.map +1 -1
- package/dist/generated-drift.d.ts +18 -0
- package/dist/generated-drift.d.ts.map +1 -0
- package/dist/generated-drift.js +24 -0
- package/dist/generated-drift.js.map +1 -0
- package/dist/harness-package.d.ts +13 -0
- package/dist/harness-package.d.ts.map +1 -0
- package/dist/harness-package.js +20 -0
- package/dist/harness-package.js.map +1 -0
- package/dist/history-policy.d.ts.map +1 -1
- package/dist/history-policy.js +1 -7
- package/dist/history-policy.js.map +1 -1
- package/dist/image-assets.d.ts.map +1 -1
- package/dist/image-assets.js +1 -10
- package/dist/image-assets.js.map +1 -1
- package/dist/index.d.ts +22 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/install-policy.d.ts +21 -0
- package/dist/install-policy.d.ts.map +1 -1
- package/dist/install-policy.js +53 -1
- package/dist/install-policy.js.map +1 -1
- package/dist/jsx-accessibility-scope.d.ts +17 -0
- package/dist/jsx-accessibility-scope.d.ts.map +1 -0
- package/dist/jsx-accessibility-scope.js +36 -0
- package/dist/jsx-accessibility-scope.js.map +1 -0
- package/dist/jsx-accessibility.d.ts +13 -0
- package/dist/jsx-accessibility.d.ts.map +1 -0
- package/dist/jsx-accessibility.js +188 -0
- package/dist/jsx-accessibility.js.map +1 -0
- package/dist/network-policy.d.ts.map +1 -1
- package/dist/network-policy.js +1 -12
- package/dist/network-policy.js.map +1 -1
- package/dist/oxlint-policy.d.ts +16 -0
- package/dist/oxlint-policy.d.ts.map +1 -0
- package/dist/oxlint-policy.js +28 -0
- package/dist/oxlint-policy.js.map +1 -0
- package/dist/oxlint-report.d.ts +29 -0
- package/dist/oxlint-report.d.ts.map +1 -0
- package/dist/oxlint-report.js +84 -0
- package/dist/oxlint-report.js.map +1 -0
- package/dist/oxlint-scope.d.ts +13 -0
- package/dist/oxlint-scope.d.ts.map +1 -0
- package/dist/oxlint-scope.js +46 -0
- package/dist/oxlint-scope.js.map +1 -0
- package/dist/oxlint-suppressions.d.ts +17 -0
- package/dist/oxlint-suppressions.d.ts.map +1 -0
- package/dist/oxlint-suppressions.js +72 -0
- package/dist/oxlint-suppressions.js.map +1 -0
- package/dist/paired-assets.d.ts.map +1 -1
- package/dist/paired-assets.js.map +1 -1
- package/dist/payload-access.d.ts +6 -0
- package/dist/payload-access.d.ts.map +1 -1
- package/dist/payload-access.js +188 -57
- package/dist/payload-access.js.map +1 -1
- package/dist/payload-configs.d.ts +23 -0
- package/dist/payload-configs.d.ts.map +1 -0
- package/dist/payload-configs.js +96 -0
- package/dist/payload-configs.js.map +1 -0
- package/dist/payload-defaults.d.ts +128 -0
- package/dist/payload-defaults.d.ts.map +1 -0
- package/dist/payload-defaults.js +295 -0
- package/dist/payload-defaults.js.map +1 -0
- package/dist/payload-field-access.d.ts +4 -0
- package/dist/payload-field-access.d.ts.map +1 -0
- package/dist/payload-field-access.js +51 -0
- package/dist/payload-field-access.js.map +1 -0
- package/dist/payload-policy.d.ts +13 -0
- package/dist/payload-policy.d.ts.map +1 -1
- package/dist/payload-policy.js +171 -32
- package/dist/payload-policy.js.map +1 -1
- package/dist/payload-source.js +2 -2
- package/dist/payload-source.js.map +1 -1
- package/dist/relationship-cleanup.d.ts +18 -0
- package/dist/relationship-cleanup.d.ts.map +1 -0
- package/dist/relationship-cleanup.js +96 -0
- package/dist/relationship-cleanup.js.map +1 -0
- package/dist/release-age.d.ts.map +1 -1
- package/dist/release-age.js +1 -16
- package/dist/release-age.js.map +1 -1
- package/dist/request-limits.d.ts.map +1 -1
- package/dist/request-limits.js +1 -11
- package/dist/request-limits.js.map +1 -1
- package/dist/route-coverage.d.ts +27 -0
- package/dist/route-coverage.d.ts.map +1 -0
- package/dist/route-coverage.js +57 -0
- package/dist/route-coverage.js.map +1 -0
- package/dist/route-map.d.ts +65 -0
- package/dist/route-map.d.ts.map +1 -0
- package/dist/route-map.js +168 -0
- package/dist/route-map.js.map +1 -0
- package/dist/run-plan.d.ts.map +1 -1
- package/dist/run-plan.js +1 -19
- package/dist/run-plan.js.map +1 -1
- package/dist/secret-policy.d.ts.map +1 -1
- package/dist/secret-policy.js +5 -15
- package/dist/secret-policy.js.map +1 -1
- package/dist/settings-layering.d.ts +8 -30
- package/dist/settings-layering.d.ts.map +1 -1
- package/dist/settings-layering.js +19 -48
- package/dist/settings-layering.js.map +1 -1
- package/dist/settings.d.ts +19 -2
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +5 -1
- package/dist/settings.js.map +1 -1
- package/dist/source-security.d.ts +4 -0
- package/dist/source-security.d.ts.map +1 -0
- package/dist/source-security.js +56 -0
- package/dist/source-security.js.map +1 -0
- package/dist/source-text.d.ts +16 -0
- package/dist/source-text.d.ts.map +1 -1
- package/dist/source-text.js +46 -16
- package/dist/source-text.js.map +1 -1
- package/dist/toolchain-pins.d.ts.map +1 -1
- package/dist/toolchain-pins.js +2 -19
- package/dist/toolchain-pins.js.map +1 -1
- package/dist/version-policy.d.ts +7 -8
- package/dist/version-policy.d.ts.map +1 -1
- package/dist/version-policy.js +46 -26
- package/dist/version-policy.js.map +1 -1
- package/dist/vulnerability-policy.d.ts.map +1 -1
- package/dist/vulnerability-policy.js +1 -11
- package/dist/vulnerability-policy.js.map +1 -1
- package/dist/wiring-policy.d.ts.map +1 -1
- package/dist/wiring-policy.js +4 -1
- package/dist/wiring-policy.js.map +1 -1
- package/dist/wiring-violation.d.ts.map +1 -1
- package/dist/wiring-violation.js +1 -6
- package/dist/wiring-violation.js.map +1 -1
- package/dist/workspace-policy.d.ts.map +1 -1
- package/dist/workspace-policy.js +3 -9
- package/dist/workspace-policy.js.map +1 -1
- package/dist/yaml-blocks.d.ts +10 -0
- package/dist/yaml-blocks.d.ts.map +1 -1
- package/dist/yaml-blocks.js +20 -0
- package/dist/yaml-blocks.js.map +1 -1
- package/package.json +2 -2
- package/dist/url-safety.d.ts +0 -12
- package/dist/url-safety.d.ts.map +0 -1
- package/dist/url-safety.js +0 -58
- package/dist/url-safety.js.map +0 -1
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
// What ploaness refuses by name, whatever a manifest declares as its licence.
|
|
2
|
+
//
|
|
3
|
+
// The licence allowlist judges an npm package by the identifier its own manifest carries, and that is
|
|
4
|
+
// the wrong question for three families. A driver is permissively licensed while the only server it can
|
|
5
|
+
// reach is not (the MongoDB driver is Apache 2.0; the MongoDB server is SSPL). A package downloads a
|
|
6
|
+
// binary at install or first run under terms its manifest never mentions (puppeteer fetches Chrome for
|
|
7
|
+
// Testing). And a container image has no manifest at all, so nothing judged it: a compose file could pull
|
|
8
|
+
// MinIO or Redis 8 through a harness that refuses an AGPL npm package. Retired analyzers are also
|
|
9
|
+
// refused when the harness already owns their checks.
|
|
10
|
+
//
|
|
11
|
+
// Every entry names the reason and the replacement, because a refusal that stops a build without saying
|
|
12
|
+
// what to use instead sends the reader to the same search this table already did. Where a project turned
|
|
13
|
+
// non-permissive at a known release, the entry carries that floor and earlier releases are left to the
|
|
14
|
+
// licence gate. No project setting widens or narrows the list: a rule a project can edit is not a rule.
|
|
15
|
+
const MONGODB_REASON = 'the MongoDB server is SSPL, which is not an open-source licence, and this exists only to reach it';
|
|
16
|
+
const MONGODB_REPLACEMENT = 'the postgres image with @payloadcms/db-postgres';
|
|
17
|
+
const REDIS_REASON = 'Redis 7.4 onward is RSALv2, SSPLv1 or AGPLv3, none of which is a permissive open-source licence';
|
|
18
|
+
const REDIS_REPLACEMENT = 'valkey/valkey, which the redis and ioredis clients speak to unchanged';
|
|
19
|
+
const ELASTIC_REASON = 'Elastic binaries are Elastic License 2.0 from 7.11, and this exists only to reach them';
|
|
20
|
+
const ELASTIC_REPLACEMENT = 'opensearchproject/opensearch and opensearchproject/opensearch-dashboards with @opensearch-project/opensearch';
|
|
21
|
+
const MINIO_REASON = 'MinIO is AGPL and its community edition is archived, with no images and no security fixes';
|
|
22
|
+
const OBJECT_STORAGE_REPLACEMENT = 'rustfs/rustfs or chrislusf/seaweedfs';
|
|
23
|
+
const HASHICORP_REASON = 'HashiCorp relicensed to the Business Source License, which is not open source';
|
|
24
|
+
const HASHICORP_REPLACEMENT = 'openbao/openbao for Vault, ghcr.io/opentofu/opentofu for Terraform';
|
|
25
|
+
const PROPRIETARY_DATABASE_REASON = 'a proprietary database server, for which Payload has no adapter';
|
|
26
|
+
const POSTGRES_REPLACEMENT = 'the postgres image';
|
|
27
|
+
const GHOSTSCRIPT_REASON = 'Ghostscript is AGPL, and this is a thin wrapper around it';
|
|
28
|
+
const PDF_REPLACEMENT = 'pdfjs-dist with @napi-rs/canvas';
|
|
29
|
+
const NOTHING_REPLACEMENT = 'nothing; a Payload project has no place for it';
|
|
30
|
+
/** The image repositories ploaness refuses, in the order the report lists them. */
|
|
31
|
+
export const BLOCKED_IMAGES = [
|
|
32
|
+
{ repository: 'mongo', reason: MONGODB_REASON, replacement: MONGODB_REPLACEMENT },
|
|
33
|
+
{ repository: 'mongodb/*', reason: MONGODB_REASON, replacement: MONGODB_REPLACEMENT },
|
|
34
|
+
{ repository: 'redis', from: '7.4', reason: REDIS_REASON, replacement: REDIS_REPLACEMENT },
|
|
35
|
+
{ repository: 'redis/*', reason: REDIS_REASON, replacement: REDIS_REPLACEMENT },
|
|
36
|
+
{ repository: 'redislabs/*', reason: REDIS_REASON, replacement: REDIS_REPLACEMENT },
|
|
37
|
+
{
|
|
38
|
+
repository: 'elasticsearch',
|
|
39
|
+
from: '7.11',
|
|
40
|
+
reason: ELASTIC_REASON,
|
|
41
|
+
replacement: ELASTIC_REPLACEMENT,
|
|
42
|
+
},
|
|
43
|
+
{ repository: 'kibana', from: '7.11', reason: ELASTIC_REASON, replacement: ELASTIC_REPLACEMENT },
|
|
44
|
+
{
|
|
45
|
+
repository: 'logstash',
|
|
46
|
+
from: '7.11',
|
|
47
|
+
reason: ELASTIC_REASON,
|
|
48
|
+
replacement: ELASTIC_REPLACEMENT,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
repository: 'docker.elastic.co/*',
|
|
52
|
+
from: '7.11',
|
|
53
|
+
reason: ELASTIC_REASON,
|
|
54
|
+
replacement: ELASTIC_REPLACEMENT,
|
|
55
|
+
},
|
|
56
|
+
{ repository: 'minio/*', reason: MINIO_REASON, replacement: OBJECT_STORAGE_REPLACEMENT },
|
|
57
|
+
{ repository: 'quay.io/minio/*', reason: MINIO_REASON, replacement: OBJECT_STORAGE_REPLACEMENT },
|
|
58
|
+
{ repository: 'pgsty/minio', reason: MINIO_REASON, replacement: OBJECT_STORAGE_REPLACEMENT },
|
|
59
|
+
{
|
|
60
|
+
repository: 'localstack/*',
|
|
61
|
+
reason: 'the LocalStack community edition is archived, and the unified image needs an account token and is free ' +
|
|
62
|
+
'only for non-commercial use',
|
|
63
|
+
replacement: 'rustfs/rustfs for S3 and motoserver/moto for other AWS APIs',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
repository: 'gresau/localstack-persist',
|
|
67
|
+
reason: 'a repackaging of the archived LocalStack community edition',
|
|
68
|
+
replacement: 'rustfs/rustfs for S3 and motoserver/moto for other AWS APIs',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
repository: 'cockroachdb/cockroach',
|
|
72
|
+
from: '24.3',
|
|
73
|
+
reason: 'CockroachDB 24.3 onward is under a proprietary licence with mandatory telemetry',
|
|
74
|
+
replacement: POSTGRES_REPLACEMENT,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
repository: 'hashicorp/vault',
|
|
78
|
+
from: '1.15',
|
|
79
|
+
reason: HASHICORP_REASON,
|
|
80
|
+
replacement: HASHICORP_REPLACEMENT,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
repository: 'hashicorp/consul',
|
|
84
|
+
from: '1.16',
|
|
85
|
+
reason: HASHICORP_REASON,
|
|
86
|
+
replacement: HASHICORP_REPLACEMENT,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
repository: 'hashicorp/nomad',
|
|
90
|
+
from: '1.6',
|
|
91
|
+
reason: HASHICORP_REASON,
|
|
92
|
+
replacement: HASHICORP_REPLACEMENT,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
repository: 'hashicorp/terraform',
|
|
96
|
+
from: '1.6',
|
|
97
|
+
reason: HASHICORP_REASON,
|
|
98
|
+
replacement: HASHICORP_REPLACEMENT,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
repository: 'hashicorp/packer',
|
|
102
|
+
from: '1.10',
|
|
103
|
+
reason: HASHICORP_REASON,
|
|
104
|
+
replacement: HASHICORP_REPLACEMENT,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
repository: 'redpandadata/*',
|
|
108
|
+
reason: 'Redpanda is under the Business Source License, which is not open source',
|
|
109
|
+
replacement: 'apache/kafka or nats',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
repository: 'vectorized/*',
|
|
113
|
+
reason: 'Redpanda is under the Business Source License, which is not open source',
|
|
114
|
+
replacement: 'apache/kafka or nats',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
repository: 'timescale/timescaledb',
|
|
118
|
+
allowedTag: /-oss(?:-|$)/,
|
|
119
|
+
reason: 'the default Timescale images carry Timescale License code, which is not open source',
|
|
120
|
+
replacement: 'a tag ending in -oss, or the postgres image',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
repository: 'timescale/timescaledb-ha',
|
|
124
|
+
allowedTag: /-oss(?:-|$)/,
|
|
125
|
+
reason: 'the default Timescale images carry Timescale License code, which is not open source',
|
|
126
|
+
replacement: 'a tag ending in -oss, or the postgres image',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
repository: 'getsentry/*',
|
|
130
|
+
from: '23.11',
|
|
131
|
+
reason: 'self-hosted Sentry is under the Functional Source License, which is not open source',
|
|
132
|
+
replacement: 'glitchtip/glitchtip, or Sentry as a service through the MIT @sentry SDKs',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
repository: 'n8nio/*',
|
|
136
|
+
reason: 'n8n is under the Sustainable Use License, which is not open source',
|
|
137
|
+
replacement: NOTHING_REPLACEMENT,
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
repository: 'directus/directus',
|
|
141
|
+
reason: 'Directus is under the Business Source License, which is not open source',
|
|
142
|
+
replacement: 'Payload',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
repository: 'mcr.microsoft.com/mssql/*',
|
|
146
|
+
reason: PROPRIETARY_DATABASE_REASON,
|
|
147
|
+
replacement: POSTGRES_REPLACEMENT,
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
repository: 'container-registry.oracle.com/database/*',
|
|
151
|
+
reason: PROPRIETARY_DATABASE_REASON,
|
|
152
|
+
replacement: POSTGRES_REPLACEMENT,
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
repository: 'gvenzl/oracle-*',
|
|
156
|
+
reason: PROPRIETARY_DATABASE_REASON,
|
|
157
|
+
replacement: POSTGRES_REPLACEMENT,
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
repository: 'ibmcom/db2',
|
|
161
|
+
reason: PROPRIETARY_DATABASE_REASON,
|
|
162
|
+
replacement: POSTGRES_REPLACEMENT,
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
repository: 'icr.io/db2_community/*',
|
|
166
|
+
reason: PROPRIETARY_DATABASE_REASON,
|
|
167
|
+
replacement: POSTGRES_REPLACEMENT,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
repository: 'ghcr.io/apollographql/router',
|
|
171
|
+
reason: 'the Apollo Router is Elastic License 2.0, which is not open source',
|
|
172
|
+
replacement: '@graphql-hive/gateway or @graphql-mesh',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
repository: 'bitnami/*',
|
|
176
|
+
reason: 'the Bitnami catalogue was deleted in 2025, so a tag here cannot be pulled reproducibly',
|
|
177
|
+
replacement: 'the upstream official image of the same service',
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
repository: 'bitnamilegacy/*',
|
|
181
|
+
reason: 'the Bitnami legacy images are frozen with unfixed vulnerabilities',
|
|
182
|
+
replacement: 'the upstream official image of the same service',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
repository: 'bitnamisecure/*',
|
|
186
|
+
reason: 'the Bitnami secure images publish only a latest tag, so a pull cannot be pinned',
|
|
187
|
+
replacement: 'the upstream official image of the same service',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
repository: 'dxflrs/garage',
|
|
191
|
+
reason: 'Garage is AGPL, and a permissively licensed object store exists',
|
|
192
|
+
replacement: OBJECT_STORAGE_REPLACEMENT,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
repository: 'citusdata/citus',
|
|
196
|
+
reason: 'Citus is AGPL, and plain PostgreSQL serves a Payload project',
|
|
197
|
+
replacement: POSTGRES_REPLACEMENT,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
repository: 'grafana/grafana',
|
|
201
|
+
reason: 'Grafana is AGPL, and a permissively licensed dashboard exists',
|
|
202
|
+
replacement: 'persesdev/perses',
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
repository: 'grafana/loki',
|
|
206
|
+
reason: 'Loki is AGPL, and a permissively licensed log store exists',
|
|
207
|
+
replacement: 'victoriametrics/victoria-logs',
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
repository: 'grafana/tempo',
|
|
211
|
+
reason: 'Tempo is AGPL, and a permissively licensed trace store exists',
|
|
212
|
+
replacement: 'jaegertracing/jaeger',
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
repository: 'grafana/mimir',
|
|
216
|
+
reason: 'Mimir is AGPL, and a permissively licensed metrics store exists',
|
|
217
|
+
replacement: 'prom/prometheus or victoriametrics/victoria-metrics',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
repository: 'plausible/*',
|
|
221
|
+
reason: 'Plausible is AGPL, and a permissively licensed analytics service exists',
|
|
222
|
+
replacement: 'ghcr.io/umami-software/umami',
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
repository: 'metabase/metabase',
|
|
226
|
+
reason: 'Metabase is AGPL',
|
|
227
|
+
replacement: NOTHING_REPLACEMENT,
|
|
228
|
+
},
|
|
229
|
+
];
|
|
230
|
+
/** The npm packages ploaness refuses, in the order the report lists them. */
|
|
231
|
+
export const BLOCKED_PACKAGES = [
|
|
232
|
+
{
|
|
233
|
+
name: 'eslint-plugin-jsx-a11y',
|
|
234
|
+
reason: 'the retired JSX accessibility analyzer duplicates checks owned by the ploaness Oxlint gate',
|
|
235
|
+
replacement: 'the harness-owned oxlint gate; remove the legacy plugin dependency',
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
name: '@payloadcms/db-mongodb',
|
|
239
|
+
reason: MONGODB_REASON,
|
|
240
|
+
replacement: '@payloadcms/db-postgres',
|
|
241
|
+
},
|
|
242
|
+
{ name: 'mongodb', reason: MONGODB_REASON, replacement: '@payloadcms/db-postgres' },
|
|
243
|
+
{ name: 'mongoose', reason: MONGODB_REASON, replacement: '@payloadcms/db-postgres' },
|
|
244
|
+
{
|
|
245
|
+
name: 'mongodb-memory-server*',
|
|
246
|
+
reason: 'downloads the SSPL MongoDB server binary at install time',
|
|
247
|
+
replacement: '@payloadcms/db-postgres against the compose database',
|
|
248
|
+
},
|
|
249
|
+
{ name: '@mongodb-js/*', reason: MONGODB_REASON, replacement: '@payloadcms/db-postgres' },
|
|
250
|
+
{
|
|
251
|
+
name: 'mongodb-client-encryption',
|
|
252
|
+
reason: MONGODB_REASON,
|
|
253
|
+
replacement: '@payloadcms/db-postgres',
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: '@elastic/elasticsearch',
|
|
257
|
+
reason: ELASTIC_REASON,
|
|
258
|
+
replacement: '@opensearch-project/opensearch',
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
name: '@elastic/eui',
|
|
262
|
+
reason: 'Elastic UI is dual-licensed SSPL and Elastic License 2.0, neither of which is permissive',
|
|
263
|
+
replacement: '@payloadcms/ui',
|
|
264
|
+
},
|
|
265
|
+
{ name: 'elastic-apm-node', reason: ELASTIC_REASON, replacement: '@opentelemetry/sdk-node' },
|
|
266
|
+
{
|
|
267
|
+
name: 'puppeteer',
|
|
268
|
+
reason: 'downloads Chrome for Testing under Google terms, which are not open source',
|
|
269
|
+
replacement: 'playwright, or puppeteer-core pointed at the Chromium Playwright installs',
|
|
270
|
+
},
|
|
271
|
+
{ name: 'pdf2pic', reason: GHOSTSCRIPT_REASON, replacement: PDF_REPLACEMENT },
|
|
272
|
+
{ name: 'node-gs', reason: GHOSTSCRIPT_REASON, replacement: PDF_REPLACEMENT },
|
|
273
|
+
{ name: 'ghostscript4js', reason: GHOSTSCRIPT_REASON, replacement: PDF_REPLACEMENT },
|
|
274
|
+
{ name: 'mupdf', reason: 'MuPDF is AGPL', replacement: PDF_REPLACEMENT },
|
|
275
|
+
{
|
|
276
|
+
name: 'n8n',
|
|
277
|
+
reason: 'n8n is under the Sustainable Use License, which is not open source',
|
|
278
|
+
replacement: NOTHING_REPLACEMENT,
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
name: 'n8n-*',
|
|
282
|
+
reason: 'an n8n extension serves only the Sustainable Use License host',
|
|
283
|
+
replacement: NOTHING_REPLACEMENT,
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
name: 'directus',
|
|
287
|
+
reason: 'Directus is under the Business Source License, which is not open source',
|
|
288
|
+
replacement: 'payload',
|
|
289
|
+
},
|
|
290
|
+
{ name: 'mssql', reason: PROPRIETARY_DATABASE_REASON, replacement: 'pg' },
|
|
291
|
+
{ name: 'tedious', reason: PROPRIETARY_DATABASE_REASON, replacement: 'pg' },
|
|
292
|
+
{ name: 'oracledb', reason: PROPRIETARY_DATABASE_REASON, replacement: 'pg' },
|
|
293
|
+
{ name: 'ibm_db', reason: PROPRIETARY_DATABASE_REASON, replacement: 'pg' },
|
|
294
|
+
{
|
|
295
|
+
name: 'ua-parser-js',
|
|
296
|
+
from: '2.0.0',
|
|
297
|
+
reason: 'ua-parser-js 2 is AGPL with a paid exemption',
|
|
298
|
+
replacement: 'ua-parser-js 1, or bowser',
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
name: 'mapbox-gl',
|
|
302
|
+
from: '2.0.0',
|
|
303
|
+
reason: 'Mapbox GL JS 2 onward is under proprietary Mapbox terms',
|
|
304
|
+
replacement: 'maplibre-gl',
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
name: 'tinymce',
|
|
308
|
+
from: '7.0.0',
|
|
309
|
+
reason: 'TinyMCE 7 onward is GPL or commercial',
|
|
310
|
+
replacement: '@payloadcms/richtext-lexical',
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
name: '@ckeditor/*',
|
|
314
|
+
reason: 'CKEditor 5 is GPL or commercial',
|
|
315
|
+
replacement: '@payloadcms/richtext-lexical',
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
name: 'highcharts',
|
|
319
|
+
reason: 'Highcharts is under a proprietary licence',
|
|
320
|
+
replacement: 'chart.js or echarts',
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: '@apollo/gateway',
|
|
324
|
+
from: '2.0.0',
|
|
325
|
+
reason: 'Apollo Gateway 2 onward is Elastic License 2.0, which is not open source',
|
|
326
|
+
replacement: '@graphql-hive/gateway',
|
|
327
|
+
},
|
|
328
|
+
];
|
|
329
|
+
/** The system packages a Dockerfile may not install. */
|
|
330
|
+
export const BLOCKED_SYSTEM_PACKAGES = [
|
|
331
|
+
{ name: 'ghostscript', reason: 'Ghostscript is AGPL', replacement: PDF_REPLACEMENT },
|
|
332
|
+
{ name: 'mupdf', reason: 'MuPDF is AGPL', replacement: PDF_REPLACEMENT },
|
|
333
|
+
{ name: 'mupdf-tools', reason: 'MuPDF is AGPL', replacement: PDF_REPLACEMENT },
|
|
334
|
+
{ name: 'mongodb-org', reason: MONGODB_REASON, replacement: MONGODB_REPLACEMENT },
|
|
335
|
+
{ name: 'mongodb-org-server', reason: MONGODB_REASON, replacement: MONGODB_REPLACEMENT },
|
|
336
|
+
{ name: 'mongodb-mongosh', reason: MONGODB_REASON, replacement: MONGODB_REPLACEMENT },
|
|
337
|
+
];
|
|
338
|
+
//# sourceMappingURL=blocklist-entries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocklist-entries.js","sourceRoot":"","sources":["../src/blocklist-entries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type DependencyStatus } from './dependency-freshness.js';
|
|
2
|
+
/** One refusal, ready to be printed beside the file that carries the subject. */
|
|
3
|
+
export interface Refusal {
|
|
4
|
+
/** The reference, the `name@version`, or the system package as written. */
|
|
5
|
+
readonly subject: string;
|
|
6
|
+
readonly reason: string;
|
|
7
|
+
readonly replacement: string;
|
|
8
|
+
}
|
|
9
|
+
/** An image reference split into the parts the rule reads. */
|
|
10
|
+
export interface ImageReference {
|
|
11
|
+
readonly raw: string;
|
|
12
|
+
/** The repository in the normalised form `blocklist-entries.ts` uses. */
|
|
13
|
+
readonly repository: string;
|
|
14
|
+
readonly tag: string | undefined;
|
|
15
|
+
readonly digest: string | undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Split an image reference as a Dockerfile, a workflow, or a compose model writes it.
|
|
19
|
+
* @param raw the reference, such as `docker.io/library/redis:7.4.1@sha256:...`.
|
|
20
|
+
* @returns the normalised repository, and the tag and digest when present.
|
|
21
|
+
*/
|
|
22
|
+
export declare const parseImageReference: (raw: string) => ImageReference;
|
|
23
|
+
/**
|
|
24
|
+
* Whether a reference may resolve to a different image tomorrow: no digest, and no tag or `latest`.
|
|
25
|
+
* @param raw the reference as written.
|
|
26
|
+
* @returns true when nothing in the reference pins what is pulled.
|
|
27
|
+
*/
|
|
28
|
+
export declare const isMutableImageReference: (raw: string) => boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Whether an image reference names a refused repository at a refused tag.
|
|
31
|
+
* @param raw the reference as written.
|
|
32
|
+
* @returns the refusal, or undefined when the image is not one ploaness refuses.
|
|
33
|
+
*/
|
|
34
|
+
export declare const refuseImage: (raw: string) => Refusal | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Whether an installed package at a version is one ploaness refuses.
|
|
37
|
+
* @param name the package name.
|
|
38
|
+
* @param version the resolved version.
|
|
39
|
+
* @returns the refusal, or undefined when the package is not one ploaness refuses at that version.
|
|
40
|
+
*/
|
|
41
|
+
export declare const refusePackage: (name: string, version: string) => Refusal | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* The refused system packages a Dockerfile installs.
|
|
44
|
+
* @param text the Dockerfile body.
|
|
45
|
+
* @returns one refusal per refused package, in file order.
|
|
46
|
+
*/
|
|
47
|
+
export declare const refuseSystemPackages: (text: string) => readonly Refusal[];
|
|
48
|
+
/** One package of the resolved set, at every version the install carries. */
|
|
49
|
+
export interface InstalledPackage {
|
|
50
|
+
readonly name: string;
|
|
51
|
+
readonly versions: readonly string[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The resolved set as `pnpm licenses list --json` reports it: grouped by licence, each entry carrying
|
|
55
|
+
* the name and the versions installed.
|
|
56
|
+
* @param json the command's stdout.
|
|
57
|
+
* @returns every installed package, or undefined when the text is not that inventory.
|
|
58
|
+
*/
|
|
59
|
+
export declare const packagesInLicenseInventory: (json: string) => readonly InstalledPackage[] | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* The refusals across an installed set.
|
|
62
|
+
* @param packages the resolved set.
|
|
63
|
+
* @returns one refusal per refused name and version, in inventory order.
|
|
64
|
+
*/
|
|
65
|
+
export declare const refuseInstalledPackages: (packages: readonly InstalledPackage[]) => readonly Refusal[];
|
|
66
|
+
/** A declared coordinate whose newest release the freshness bound may not demand. */
|
|
67
|
+
export interface RefusedLatest {
|
|
68
|
+
readonly status: DependencyStatus;
|
|
69
|
+
/** Why the newest release is out of reach, in the words the report prints. */
|
|
70
|
+
readonly note: string;
|
|
71
|
+
}
|
|
72
|
+
/** The statuses freshness measures, and the ones whose newest release it may not point at. */
|
|
73
|
+
export interface FreshnessScope {
|
|
74
|
+
readonly measurable: readonly DependencyStatus[];
|
|
75
|
+
readonly refused: readonly RefusedLatest[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Split the declared coordinates into those freshness may measure and those whose newest release is
|
|
79
|
+
* refused, which freshness must not demand.
|
|
80
|
+
* @param statuses every declared coordinate with what the registry answered for it.
|
|
81
|
+
* @returns the measurable statuses, and the refused ones with the note the report prints.
|
|
82
|
+
*/
|
|
83
|
+
export declare const scopeFreshness: (statuses: readonly DependencyStatus[]) => FreshnessScope;
|
|
84
|
+
/**
|
|
85
|
+
* The refusals of a repository's own JSON summary, kept exported so the CLI prints the same words.
|
|
86
|
+
* @param refusal one refusal.
|
|
87
|
+
* @param location the file or inventory that carries the subject.
|
|
88
|
+
* @returns one finding line.
|
|
89
|
+
*/
|
|
90
|
+
export declare const describeRefusal: (refusal: Refusal, location: string) => string;
|
|
91
|
+
//# sourceMappingURL=blocklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocklist.d.ts","sourceRoot":"","sources":["../src/blocklist.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,gBAAgB,EAAoC,MAAM,2BAA2B,CAAA;AAInG,iFAAiF;AACjF,MAAM,WAAW,OAAO;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC;AAsCD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,cAWjD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,KAAK,MAAM,KAAG,OAKrD,CAAA;AAoCD;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,OAAO,GAAG,SAWnD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,GAAG,SAUvE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,SAAS,OAAO,EAMhE,CAAA;AAEJ,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACrC,MAAM,MAAM,KACX,SAAS,gBAAgB,EAAE,GAAG,SAchC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,SAAS,gBAAgB,EAAE,KACpC,SAAS,OAAO,EAMhB,CAAA;AAEH,qFAAqF;AACrF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,8FAA8F;AAC9F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAA;CAC3C;AAiBD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,gBAAgB,EAAE,KAAG,cASpE,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,OAAO,EAAE,UAAU,MAAM,KAAG,MACc,CAAA"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// The refusal rule: whether an image reference, an installed package, or a Dockerfile install line
|
|
2
|
+
// names something in `blocklist-entries.ts`, and the one place freshness has to defer to it.
|
|
3
|
+
//
|
|
4
|
+
// A reference is matched on its repository after normalisation, because the same image is written
|
|
5
|
+
// `mongo`, `docker.io/mongo`, `library/mongo`, and `docker.io/library/mongo`, and a list keyed on the
|
|
6
|
+
// spelling would refuse one of them and pull the other. The tag decides only where an entry carries a
|
|
7
|
+
// floor: a tag below the floor is the permissive release line and is left to the licence gate, and a
|
|
8
|
+
// tag that cannot be placed against the floor - `latest`, none, `7` against a floor of `7.4`, an
|
|
9
|
+
// `-alpine` suffix on a floating major - is refused, because a tag that may resolve past the floor
|
|
10
|
+
// tomorrow is not a proof that it sits below it today.
|
|
11
|
+
import { BLOCKED_IMAGES, BLOCKED_PACKAGES, BLOCKED_SYSTEM_PACKAGES, } from './blocklist-entries.js';
|
|
12
|
+
import { systemPackagesInDockerfile } from './container-images.js';
|
|
13
|
+
import { parseVersion } from './dependency-freshness.js';
|
|
14
|
+
import { asRecord, asText, isArray, isRecord, parseJsonc } from './json-shapes.js';
|
|
15
|
+
import { isLicenseAllowed } from './license-allowlist.js';
|
|
16
|
+
const DOCKER_HUB_HOSTS = new Set(['docker.io', 'index.docker.io']);
|
|
17
|
+
const OFFICIAL_NAMESPACE = 'library';
|
|
18
|
+
const LOCAL_HOST = 'localhost';
|
|
19
|
+
const MUTABLE_TAG = 'latest';
|
|
20
|
+
const WILDCARD = '*';
|
|
21
|
+
const NUMERIC_COMPONENTS = /^v?(?<components>\d+(?:\.\d+)*)/;
|
|
22
|
+
// A reference is a name-and-tag and at most one digest after the `@`.
|
|
23
|
+
const REFERENCE_PARTS = 2;
|
|
24
|
+
// A first path segment is a registry host when it carries a dot or a port, or is `localhost`; a Docker
|
|
25
|
+
// Hub namespace never does. The rule the docker CLI itself applies.
|
|
26
|
+
const isRegistryHost = (segment) => segment.includes('.') || segment.includes(':') || segment === LOCAL_HOST;
|
|
27
|
+
const splitHost = (segments) => {
|
|
28
|
+
const [first] = segments;
|
|
29
|
+
if (first === undefined || segments.length === 1 || !isRegistryHost(first)) {
|
|
30
|
+
return { host: undefined, path: segments };
|
|
31
|
+
}
|
|
32
|
+
return { host: DOCKER_HUB_HOSTS.has(first) ? undefined : first, path: segments.slice(1) };
|
|
33
|
+
};
|
|
34
|
+
const normaliseRepository = (name) => {
|
|
35
|
+
const { host, path } = splitHost(name.toLowerCase().split('/'));
|
|
36
|
+
if (host !== undefined) {
|
|
37
|
+
return [host, ...path].join('/');
|
|
38
|
+
}
|
|
39
|
+
return (path.length > 1 && path[0] === OFFICIAL_NAMESPACE ? path.slice(1) : path).join('/');
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Split an image reference as a Dockerfile, a workflow, or a compose model writes it.
|
|
43
|
+
* @param raw the reference, such as `docker.io/library/redis:7.4.1@sha256:...`.
|
|
44
|
+
* @returns the normalised repository, and the tag and digest when present.
|
|
45
|
+
*/
|
|
46
|
+
export const parseImageReference = (raw) => {
|
|
47
|
+
const [nameAndTag = '', digest] = raw.split('@', REFERENCE_PARTS);
|
|
48
|
+
const lastSlash = nameAndTag.lastIndexOf('/');
|
|
49
|
+
const colon = nameAndTag.lastIndexOf(':');
|
|
50
|
+
const hasTag = colon > lastSlash;
|
|
51
|
+
return {
|
|
52
|
+
raw,
|
|
53
|
+
repository: normaliseRepository(hasTag ? nameAndTag.slice(0, colon) : nameAndTag),
|
|
54
|
+
tag: hasTag ? nameAndTag.slice(colon + 1) : undefined,
|
|
55
|
+
digest,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Whether a reference may resolve to a different image tomorrow: no digest, and no tag or `latest`.
|
|
60
|
+
* @param raw the reference as written.
|
|
61
|
+
* @returns true when nothing in the reference pins what is pulled.
|
|
62
|
+
*/
|
|
63
|
+
export const isMutableImageReference = (raw) => {
|
|
64
|
+
const reference = parseImageReference(raw);
|
|
65
|
+
return (reference.digest === undefined && (reference.tag === undefined || reference.tag === MUTABLE_TAG));
|
|
66
|
+
};
|
|
67
|
+
const matchesPattern = (pattern, name) => pattern.endsWith(WILDCARD)
|
|
68
|
+
? name.startsWith(pattern.slice(0, -WILDCARD.length))
|
|
69
|
+
: name === pattern;
|
|
70
|
+
const compareCore = (one, other) => one.major - other.major || one.minor - other.minor || one.patch - other.patch;
|
|
71
|
+
const componentCount = (version) => (NUMERIC_COMPONENTS.exec(version)?.groups?.['components'] ?? '').split('.').filter(Boolean).length;
|
|
72
|
+
// Undecidable is refused: a version that cannot be placed against the floor is not below it.
|
|
73
|
+
const reachesFloor = (version, floor) => {
|
|
74
|
+
const parsed = version === undefined ? undefined : parseVersion(version);
|
|
75
|
+
const floorParsed = parseVersion(floor);
|
|
76
|
+
if (version === undefined || parsed === undefined || floorParsed === undefined) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
return componentCount(version) < componentCount(floor) || compareCore(parsed, floorParsed) >= 0;
|
|
80
|
+
};
|
|
81
|
+
const isAllowedTag = (entry, tag) => entry.allowedTag !== undefined && tag !== undefined && entry.allowedTag.test(tag);
|
|
82
|
+
const refusalOf = (subject, entry) => ({
|
|
83
|
+
subject,
|
|
84
|
+
reason: entry.reason,
|
|
85
|
+
replacement: entry.replacement,
|
|
86
|
+
});
|
|
87
|
+
/**
|
|
88
|
+
* Whether an image reference names a refused repository at a refused tag.
|
|
89
|
+
* @param raw the reference as written.
|
|
90
|
+
* @returns the refusal, or undefined when the image is not one ploaness refuses.
|
|
91
|
+
*/
|
|
92
|
+
export const refuseImage = (raw) => {
|
|
93
|
+
const reference = parseImageReference(raw);
|
|
94
|
+
const entry = BLOCKED_IMAGES.find((candidate) => matchesPattern(candidate.repository, reference.repository));
|
|
95
|
+
if (entry === undefined || isAllowedTag(entry, reference.tag)) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
return entry.from !== undefined && !reachesFloor(reference.tag, entry.from)
|
|
99
|
+
? undefined
|
|
100
|
+
: refusalOf(raw, entry);
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Whether an installed package at a version is one ploaness refuses.
|
|
104
|
+
* @param name the package name.
|
|
105
|
+
* @param version the resolved version.
|
|
106
|
+
* @returns the refusal, or undefined when the package is not one ploaness refuses at that version.
|
|
107
|
+
*/
|
|
108
|
+
export const refusePackage = (name, version) => {
|
|
109
|
+
const entry = BLOCKED_PACKAGES.find((candidate) => matchesPattern(candidate.name, name));
|
|
110
|
+
if (entry === undefined) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
return entry.from !== undefined && !reachesFloor(version, entry.from)
|
|
114
|
+
? undefined
|
|
115
|
+
: refusalOf(`${name}@${version}`, entry);
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* The refused system packages a Dockerfile installs.
|
|
119
|
+
* @param text the Dockerfile body.
|
|
120
|
+
* @returns one refusal per refused package, in file order.
|
|
121
|
+
*/
|
|
122
|
+
export const refuseSystemPackages = (text) => systemPackagesInDockerfile(text).flatMap((name) => {
|
|
123
|
+
const entry = BLOCKED_SYSTEM_PACKAGES.find((candidate) => candidate.name === name);
|
|
124
|
+
return entry === undefined ? [] : [refusalOf(name, entry)];
|
|
125
|
+
});
|
|
126
|
+
/**
|
|
127
|
+
* The resolved set as `pnpm licenses list --json` reports it: grouped by licence, each entry carrying
|
|
128
|
+
* the name and the versions installed.
|
|
129
|
+
* @param json the command's stdout.
|
|
130
|
+
* @returns every installed package, or undefined when the text is not that inventory.
|
|
131
|
+
*/
|
|
132
|
+
export const packagesInLicenseInventory = (json) => {
|
|
133
|
+
const inventory = parseJsonc(json).value;
|
|
134
|
+
if (!isRecord(inventory) || isArray(inventory)) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
return Object.values(inventory).flatMap((group) => (isArray(group) ? group : []).map((entry) => {
|
|
138
|
+
const versions = asRecord(entry)['versions'];
|
|
139
|
+
return {
|
|
140
|
+
name: asText(asRecord(entry)['name']),
|
|
141
|
+
versions: (isArray(versions) ? versions : []).map((raw) => asText(raw)),
|
|
142
|
+
};
|
|
143
|
+
}));
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* The refusals across an installed set.
|
|
147
|
+
* @param packages the resolved set.
|
|
148
|
+
* @returns one refusal per refused name and version, in inventory order.
|
|
149
|
+
*/
|
|
150
|
+
export const refuseInstalledPackages = (packages) => packages.flatMap((entry) => entry.versions.flatMap((version) => {
|
|
151
|
+
const refusal = refusePackage(entry.name, version);
|
|
152
|
+
return refusal === undefined ? [] : [refusal];
|
|
153
|
+
}));
|
|
154
|
+
// The one place the freshness bound defers to this rule. A package whose newest major is refused here,
|
|
155
|
+
// or is licensed outside the allowlist, would otherwise fall two majors behind and be failed for not
|
|
156
|
+
// upgrading into the very release the licence gate would then refuse.
|
|
157
|
+
const refusedLatestNote = (status) => {
|
|
158
|
+
const refusal = refusePackage(status.name, status.latest);
|
|
159
|
+
const newest = `${status.name}: the newest release ${status.latest}`;
|
|
160
|
+
if (refusal !== undefined) {
|
|
161
|
+
return `${newest} is refused (${refusal.reason}), so freshness stops short of it`;
|
|
162
|
+
}
|
|
163
|
+
const licence = status.latestLicense;
|
|
164
|
+
return licence === undefined || isLicenseAllowed(licence)
|
|
165
|
+
? undefined
|
|
166
|
+
: `${newest} is licensed ${licence}, outside the allowlist, so freshness stops short of it`;
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Split the declared coordinates into those freshness may measure and those whose newest release is
|
|
170
|
+
* refused, which freshness must not demand.
|
|
171
|
+
* @param statuses every declared coordinate with what the registry answered for it.
|
|
172
|
+
* @returns the measurable statuses, and the refused ones with the note the report prints.
|
|
173
|
+
*/
|
|
174
|
+
export const scopeFreshness = (statuses) => statuses.reduce((scope, status) => {
|
|
175
|
+
const note = refusedLatestNote(status);
|
|
176
|
+
return note === undefined
|
|
177
|
+
? { ...scope, measurable: [...scope.measurable, status] }
|
|
178
|
+
: { ...scope, refused: [...scope.refused, { status, note }] };
|
|
179
|
+
}, { measurable: [], refused: [] });
|
|
180
|
+
/**
|
|
181
|
+
* The refusals of a repository's own JSON summary, kept exported so the CLI prints the same words.
|
|
182
|
+
* @param refusal one refusal.
|
|
183
|
+
* @param location the file or inventory that carries the subject.
|
|
184
|
+
* @returns one finding line.
|
|
185
|
+
*/
|
|
186
|
+
export const describeRefusal = (refusal, location) => `${location}: ${refusal.subject} - ${refusal.reason}; use ${refusal.replacement}`;
|
|
187
|
+
//# sourceMappingURL=blocklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocklist.js","sourceRoot":"","sources":["../src/blocklist.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,6FAA6F;AAC7F,EAAE;AACF,kGAAkG;AAClG,sGAAsG;AACtG,sGAAsG;AACtG,qGAAqG;AACrG,iGAAiG;AACjG,mGAAmG;AACnG,uDAAuD;AAEvD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,uBAAuB,GAIxB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAA6C,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACnG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAmBzD,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAA;AACvF,MAAM,kBAAkB,GAAW,SAAS,CAAA;AAC5C,MAAM,UAAU,GAAW,WAAW,CAAA;AACtC,MAAM,WAAW,GAAW,QAAQ,CAAA;AACpC,MAAM,QAAQ,GAAW,GAAG,CAAA;AAC5B,MAAM,kBAAkB,GAAW,iCAAiC,CAAA;AACpE,sEAAsE;AACtE,MAAM,eAAe,GAAW,CAAC,CAAA;AAEjC,uGAAuG;AACvG,oEAAoE;AACpE,MAAM,cAAc,GAAG,CAAC,OAAe,EAAW,EAAE,CAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,UAAU,CAAA;AAQ1E,MAAM,SAAS,GAAG,CAAC,QAA2B,EAAkB,EAAE;IAChE,MAAM,CAAC,KAAK,CAAC,GAAoC,QAAQ,CAAA;IACzD,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC5C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3F,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAU,EAAE;IACnD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAmB,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7F,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAkB,EAAE;IACjE,MAAM,CAAC,UAAU,GAAG,EAAE,EAAE,MAAM,CAAC,GAAoC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;IAClG,MAAM,SAAS,GAAW,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACrD,MAAM,KAAK,GAAW,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACjD,MAAM,MAAM,GAAY,KAAK,GAAG,SAAS,CAAA;IACzC,OAAO;QACL,GAAG;QACH,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QACjF,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QACrD,MAAM;KACP,CAAA;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAW,EAAE;IAC9D,MAAM,SAAS,GAAmB,mBAAmB,CAAC,GAAG,CAAC,CAAA;IAC1D,OAAO,CACL,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,WAAW,CAAC,CACjG,CAAA;AACH,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,IAAY,EAAW,EAAE,CAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACxB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,IAAI,KAAK,OAAO,CAAA;AAEtB,MAAM,WAAW,GAAG,CAAC,GAAkB,EAAE,KAAoB,EAAU,EAAE,CACvE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;AAE/E,MAAM,cAAc,GAAG,CAAC,OAAe,EAAU,EAAE,CACjD,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;AAEpG,6FAA6F;AAC7F,MAAM,YAAY,GAAG,CAAC,OAA2B,EAAE,KAAa,EAAW,EAAE;IAC3E,MAAM,MAAM,GACV,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC3D,MAAM,WAAW,GAA8B,YAAY,CAAC,KAAK,CAAC,CAAA;IAClE,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;AACjG,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,GAAuB,EAAW,EAAE,CAC7E,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEnF,MAAM,SAAS,GAAG,CAChB,OAAe,EACf,KAA2D,EAClD,EAAE,CAAC,CAAC;IACb,OAAO;IACP,MAAM,EAAE,KAAK,CAAC,MAAM;IACpB,WAAW,EAAE,KAAK,CAAC,WAAW;CAC/B,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAuB,EAAE;IAC9D,MAAM,SAAS,GAAmB,mBAAmB,CAAC,GAAG,CAAC,CAAA;IAC1D,MAAM,KAAK,GAA6B,cAAc,CAAC,IAAI,CAAC,CAAC,SAAuB,EAAW,EAAE,CAC/F,cAAc,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAC3D,CAAA;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC;QACzE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AAC3B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,OAAe,EAAuB,EAAE;IAClF,MAAM,KAAK,GAA+B,gBAAgB,CAAC,IAAI,CAC7D,CAAC,SAAyB,EAAW,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAC7E,CAAA;IACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAsB,EAAE,CACvE,0BAA0B,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAsB,EAAE;IAC5E,MAAM,KAAK,GAAqC,uBAAuB,CAAC,IAAI,CAC1E,CAAC,SAA+B,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CACtE,CAAA;IACD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;AAC5D,CAAC,CAAC,CAAA;AAQJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,IAAY,EAC6B,EAAE;IAC3C,MAAM,SAAS,GAAY,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAA;IACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAc,EAA+B,EAAE,CACtF,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAc,EAAoB,EAAE;QACrE,MAAM,QAAQ,GAAY,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAA;QACrD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;YACrC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAY,EAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACzF,CAAA;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAAqC,EACjB,EAAE,CACtB,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAuB,EAAsB,EAAE,CAC/D,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAe,EAAsB,EAAE;IAC7D,MAAM,OAAO,GAAwB,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;AAC/C,CAAC,CAAC,CACH,CAAA;AAeH,uGAAuG;AACvG,qGAAqG;AACrG,sEAAsE;AACtE,MAAM,iBAAiB,GAAG,CAAC,MAAwB,EAAsB,EAAE;IACzE,MAAM,OAAO,GAAwB,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9E,MAAM,MAAM,GAAW,GAAG,MAAM,CAAC,IAAI,wBAAwB,MAAM,CAAC,MAAM,EAAE,CAAA;IAC5E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,MAAM,gBAAgB,OAAO,CAAC,MAAM,mCAAmC,CAAA;IACnF,CAAC;IACD,MAAM,OAAO,GAAuB,MAAM,CAAC,aAAa,CAAA;IACxD,OAAO,OAAO,KAAK,SAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC;QACvD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,GAAG,MAAM,gBAAgB,OAAO,yDAAyD,CAAA;AAC/F,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAqC,EAAkB,EAAE,CACtF,QAAQ,CAAC,MAAM,CACb,CAAC,KAAqB,EAAE,MAAwB,EAAkB,EAAE;IAClE,MAAM,IAAI,GAAuB,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC1D,OAAO,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;QACzD,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;AACjE,CAAC,EACD,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAChC,CAAA;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAE,QAAgB,EAAU,EAAE,CAC5E,GAAG,QAAQ,KAAK,OAAO,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,WAAW,EAAE,CAAA"}
|