putitoutthere 0.2.22 → 0.2.23
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/CHANGELOG.md +1 -0
- package/MIGRATIONS.md +64 -0
- package/dist/handlers/crates.d.ts.map +1 -1
- package/dist/handlers/crates.js +75 -6
- package/dist/handlers/crates.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -13,6 +13,7 @@ are prefixed `**BREAKING**` and link to the matching section in
|
|
|
13
13
|
### Added
|
|
14
14
|
|
|
15
15
|
- **Reusable workflow `.github/workflows/check.yml` (`workflow_call`).** PR-time config-sanity gate. Wires into a consumer's `pull_request:` CI in one line: `uses: thekevinscott/putitoutthere/.github/workflows/check.yml@v0`. Drives the same `putitoutthere check` engine entry the publish path already uses (no parallel diagnostic code path — the operative rule from the [refreshed non-goal #8](./notes/design-commitments.md#non-goals)), so the consumer-observable check list is whatever `check` reports: `putitoutthere.toml` parse + schema + common-mistakes detector, unique package names, `depends_on` cycle / dangling-ref detection, `[[package]].path` directory exists, `globs` match a tracked file, `tag_format` collisions, npm `repository` field, crates `description` / `license`, pypi `pyproject.toml` + `bundle_cli` binary declaration, npm target triple mapping. Findings are aggregated into one round-trip rather than failing on the first. A few seconds per PR, no per-target build, no `setup-python` / `setup-rust`. Permissions: `contents: read` only — the workflow holds no publishable artifact and cannot mint a registry token. Complementary to `build.yml`: `check.yml` is the cheap config-sanity gate, `build.yml` is the heavier per-target build gate; wire both. See [README → check](./README.md#1b-recommended-drop-in-githubworkflowscheckyml) and [MIGRATIONS.md](./MIGRATIONS.md#new-checkyml-reusable-workflow-for-pr-time-config-sanity). #317 (workflow shell) + #319 (check list, shipped via #321).
|
|
16
|
+
- **Internal-only: `cargo-http-registry` alt-registry for e2e crates.io 429 fallback and first-publish coverage.** `e2e (polyglot-everything) / publish` reliably 429s on `cargo publish` for the polyglot rust fixture once a few PRs have burned crates.io's 24h-per-crate quota (the fixture publishes a fresh `0.0.<timestamp>` version on every run; the per-crate quota gets exhausted faster than it resets). `e2e-fixture-job.yml`'s publish job now installs and runs [`cargo-http-registry`](https://github.com/d-e-s-o/cargo-http-registry) (an off-the-shelf, auth-free cargo alt-registry — the "Verdaccio for cargo" the workflow has needed) as a background process on every crates-bearing matrix row. Two engine seams in `src/handlers/crates.ts` consume it: `PIOT_CRATES_REGISTRY_FALLBACK` retries `cargo publish --index <url>` against the alt-registry on a 429-rate-limit-shaped failure from real crates.io and emits a `::warning::` workflow command naming the URL so reviewers see the path was taken; `PIOT_CRATES_REGISTRY_PRIMARY` routes the publish *only* at the alt-registry (no real-crates.io attempt, no fallback) — reserved for any future `*-first-publish` crates fixture, symmetric with #304's npm/Verdaccio shape. Non-429 failures (auth, network, validation) surface verbatim — the fallback predicate is scoped narrowly to rate-limit prose. The handler now passes `--token <placeholder>` alongside `--index <url>` because cargo's CLI parser refuses to invoke publish with `--index` unless a token is explicitly named (a wart of the cargo CLI surface; cargo-http-registry accepts any token value). **Why `cargo-http-registry` and not a hand-rolled mock or another off-the-shelf registry**: an earlier iteration on this PR wired Kellnr; three CI rounds all 403'd because Kellnr (and alexandrie, ktra, cratery) are multi-tenant-shaped and reject fixture-style unrecognized identities. `cargo-http-registry`'s README explicitly disclaims auth ("if being asked to cargo login to the registry, any string may be used") and has a lightweight dep tree (tokio rt-only + warp + git2, no openssl-sys / sqlite-sys / aws-lc-sys), making `cargo install --locked` a ~70s cold cost — well inside the e2e job's existing budget. **No consumer surface changes**: both env vars are read only by the engine; the dogfood `release-rust.yml` continues to publish to real crates.io, and consumer `release.yml` flows that don't set either env var keep the publish path they have today byte-identical. See [MIGRATIONS.md](./MIGRATIONS.md#internal-cargo-http-registry-alt-registry-for-crates-e2e). #331.
|
|
16
17
|
- **Internal-only: first-publish e2e coverage via Verdaccio.** A new `js-vanilla-first-publish` fixture and matrix row in `.github/workflows/e2e-fixture.yml` exercises the empty-packument path (`npm view <name>` returns 404 before publish) that consumer-reported bugs cluster around. `e2e-fixture-job.yml`'s publish job now runs an in-job Verdaccio service container (`verdaccio/verdaccio:5`); per-fixture job isolation gives per-scenario wipe implicitly. The new fixture carries a `-placeholder` suffix on its package name that the workflow rewrites to `-${run_id}-${run_attempt}` at materialize time, so each scenario publishes against a packument that's truly empty. The post-publish tarball-verification step is now registry-agnostic — `REGISTRY_URL` env steers `npm view` at either real npm or Verdaccio with adapted retry/backoff. **No consumer surface changes**: `PIOT_NPM_REGISTRY` is an internal e2e seam read by `src/handlers/npm.ts` and `src/handlers/npm-platform.ts`; setting it bypasses provenance and the bootstrap-hint path. Steady-state e2e fixtures and consumer `release.yml` flows are untouched. See [MIGRATIONS.md](./MIGRATIONS.md#internal-verdaccio-e2e-coverage). #304 (parent #293).
|
|
17
18
|
- **`[package.bundle_cli]` accepts `features` and `no_default_features` for crates that gate the CLI behind a Cargo feature.** The lib-with-optional-CLI pattern — `[[bin]] required-features = ["cli"]` so `cargo add <name>` doesn't drag the CLI's deps onto library consumers — is the standard shape for crates that fit `bundle_cli`'s use case (ruff, uv, pydantic-core, biome, swc, dirsql). v0.2.0's wiring shipped `cargo build --release --target $TARGET --bin $BIN` with no `--features` path, which made the recipe inert for exactly the consumers it targets. The reusable workflow's cargo build step now appends `--features <comma-list>` when the schema's new `features: list[string]` is non-empty and `--no-default-features` when the new `no_default_features: bool` is true. Defaults are `[]` and `false`, so existing `[package.bundle_cli]` blocks keep building byte-identically. Empty-string entries inside `features` are rejected at config load. The "crates that gate the CLI behind a Cargo feature are not currently supported" caveat in the v0.2.0 MIGRATIONS note has been corrected. See [README → Recipes → Rust CLI inside a PyPI wheel](./README.md#rust-cli-inside-a-pypi-wheel) and [MIGRATIONS.md](./MIGRATIONS.md#bundle_cli-features-and-no_default_features). #300.
|
|
18
19
|
- **Reusable workflow accepts a caller-provided `NPM_TOKEN` via `secrets:`.** OIDC trusted publishers remain the default and recommended path, but Trusted Publishing on npm binds to an *already-published* package — so the first publish of a brand-new npm package has no OIDC path available, and consumers were forced into a manual 6+ package `0.0.0-bootstrap` stub bootstrap (documented nowhere, only discoverable by reading commit history of dirsql or by hitting the failure). The `workflow_call` surface now declares an optional `NPM_TOKEN` secret; when set AND the planned matrix contains an npm row, the secret is exported to `$GITHUB_ENV` as `NODE_AUTH_TOKEN` and the npm CLI prefers the long-lived token over the OIDC path. Callers without a token keep the OIDC path unchanged. For bundled-cli / napi families the same secret authenticates publishes of all per-platform sub-packages on first publish; once those exist, each one needs its own Trusted Publisher registration (the bypass is a one-time bootstrap, not a permanent path). Mirrors the #283 crates fallback in shape. Hit in the wild on the maintainer's own dirsql project (first version of `@dirsql/cli-linux-x64-gnu` on npm is `0.0.0-bootstrap`, 2026-04-30; real `0.2.8` lands the next day) and on `darkfactory`'s first publish. See [README → Trusted publishers → npm](./README.md#npm) and [MIGRATIONS.md](./MIGRATIONS.md#npm-token-fallback). #302.
|
package/MIGRATIONS.md
CHANGED
|
@@ -73,6 +73,70 @@ in a red `plan` step. With `check.yml` wired, the PR fails red at
|
|
|
73
73
|
review time with the same diagnosable error message, before the
|
|
74
74
|
merge.
|
|
75
75
|
|
|
76
|
+
### Internal cargo-http-registry alt-registry for crates e2e
|
|
77
|
+
|
|
78
|
+
**Summary.** Internal change with no consumer-observable impact. Adds
|
|
79
|
+
[`cargo-http-registry`](https://github.com/d-e-s-o/cargo-http-registry)
|
|
80
|
+
— an off-the-shelf, auth-free cargo alt-registry, the lone
|
|
81
|
+
"Verdaccio for cargo" the survey of the cargo-registry ecosystem
|
|
82
|
+
turned up — to `e2e-fixture-job.yml`'s publish job, installed via
|
|
83
|
+
`cargo install --locked` and started as a background process on
|
|
84
|
+
every crates-bearing matrix row. Two internal engine seams in
|
|
85
|
+
`src/handlers/crates.ts` consume it: `PIOT_CRATES_REGISTRY_FALLBACK`
|
|
86
|
+
retries `cargo publish` against the alt-registry on a 429-rate-limit
|
|
87
|
+
shape from real crates.io ("You have published too many versions of
|
|
88
|
+
this crate in the last 24 hours") and emits a `::warning::` workflow
|
|
89
|
+
command so reviewers see the fallback engaged. A symmetric
|
|
90
|
+
`PIOT_CRATES_REGISTRY_PRIMARY` seam routes the publish *only* at the
|
|
91
|
+
override URL (no real-crates.io attempt, no fallback); reserved for
|
|
92
|
+
any future `*-first-publish` crates fixture. A first attempt on
|
|
93
|
+
this issue wired Kellnr; three CI rounds all 403'd because every
|
|
94
|
+
*production* cargo alt-registry (Kellnr / alexandrie / ktra /
|
|
95
|
+
cratery) is multi-tenant-shaped and deliberately rejects
|
|
96
|
+
fixture-style unrecognized identities. The cargo ecosystem has no
|
|
97
|
+
analog of npm's per-user self-registration convention, so picking
|
|
98
|
+
the one off-the-shelf "no-auth" registry is the only path that
|
|
99
|
+
works without auth gymnastics. The reusable consumer workflow
|
|
100
|
+
(`release.yml`), `putitoutthere.toml` schema, trailer grammar, the
|
|
101
|
+
dogfood `release-rust.yml`, and consumer-facing docs are
|
|
102
|
+
untouched. #331.
|
|
103
|
+
|
|
104
|
+
**Required changes.** None.
|
|
105
|
+
|
|
106
|
+
**Deprecations removed.** None.
|
|
107
|
+
|
|
108
|
+
**Behavior changes without code changes.** None for consumers. For
|
|
109
|
+
contributors running e2e locally: the publish job in
|
|
110
|
+
`e2e-fixture-job.yml` now `cargo install`s
|
|
111
|
+
`cargo-http-registry@0.1.8` on crates-bearing rows (~70s cold; the
|
|
112
|
+
crate has a lightweight dep tree — tokio rt-only + warp + git2, no
|
|
113
|
+
openssl-sys / sqlite-sys / aws-lc-sys) and starts it as a
|
|
114
|
+
background process bound at `127.0.0.1:35503`. Cargo's
|
|
115
|
+
`net.git-fetch-with-cli = true` is written to `~/.cargo/config.toml`
|
|
116
|
+
on the same path because libgit2 enforces strict `application/x-git-*`
|
|
117
|
+
content-type checking that `cargo-http-registry` doesn't satisfy;
|
|
118
|
+
the system `git` binary is more lenient and works fine. The handler
|
|
119
|
+
in `src/handlers/crates.ts` now passes `--token <placeholder>`
|
|
120
|
+
alongside `--index <url>` on alt-registry invocations because
|
|
121
|
+
cargo's CLI refuses to dispatch publish without an explicit
|
|
122
|
+
`--token` once `--index` is set — a CLI quirk; the value is never
|
|
123
|
+
validated by `cargo-http-registry`. Steady-state crates fixtures
|
|
124
|
+
keep their real-crates.io OIDC-TP path unchanged on the happy path;
|
|
125
|
+
the fallback only fires when real crates.io returns a 429.
|
|
126
|
+
|
|
127
|
+
**Verification.** A successful CI run on a PR that hits the
|
|
128
|
+
crates.io 24h-per-crate quota (the polyglot fixture's
|
|
129
|
+
`piot-fixture-zzz-poly-rust` row) goes green via the alt-registry
|
|
130
|
+
fallback with a `::warning::` in the run log naming the fallback URL,
|
|
131
|
+
instead of failing red on the 429. When the quota is fresh, the
|
|
132
|
+
`e2e (polyglot-everything)` row continues to publish to real
|
|
133
|
+
crates.io and the warning does not fire — visible diagnostic
|
|
134
|
+
distinction between the two paths. The diagnostic dump step at the
|
|
135
|
+
end of every crates-bearing publish job emits the
|
|
136
|
+
cargo-http-registry process log, the readiness-endpoint probe, and
|
|
137
|
+
the rendered cargo `config.toml` so any future failure has the wire
|
|
138
|
+
trace inline in the run log.
|
|
139
|
+
|
|
76
140
|
### Internal Verdaccio e2e coverage
|
|
77
141
|
|
|
78
142
|
**Summary.** Internal change with no consumer-observable impact. Adds a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crates.d.ts","sourceRoot":"","sources":["../../src/handlers/crates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAO,OAAO,EAAiB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"crates.d.ts","sourceRoot":"","sources":["../../src/handlers/crates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAO,OAAO,EAAiB,MAAM,aAAa,CAAC;AAiN/D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAa3E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,GACtC,MAAM,EAAE,GAAG,IAAI,CA6FjB;AAQD,eAAO,MAAM,MAAM,EAAE,OAKpB,CAAC"}
|
package/dist/handlers/crates.js
CHANGED
|
@@ -30,7 +30,7 @@ import { execFileSync } from 'node:child_process';
|
|
|
30
30
|
import { readFileSync, writeFileSync } from 'node:fs';
|
|
31
31
|
import { join, relative } from 'node:path';
|
|
32
32
|
import { TransientError } from '../types.js';
|
|
33
|
-
import { buildSubprocessEnv } from '../env.js';
|
|
33
|
+
import { buildSubprocessEnv, nonEmpty } from '../env.js';
|
|
34
34
|
import { USER_AGENT } from '../version.js';
|
|
35
35
|
const REGISTRY = 'https://crates.io';
|
|
36
36
|
async function isPublishedImpl(pkg, version, _ctx) {
|
|
@@ -102,14 +102,39 @@ async function publishImpl(pkg, version, ctx) {
|
|
|
102
102
|
// #169: thread configured features through so cargo's publish-time
|
|
103
103
|
// verification build exercises the same gates users will pull in.
|
|
104
104
|
// Without this, a crate with a broken `cli` feature ships regardless.
|
|
105
|
-
const
|
|
105
|
+
const baseArgs = ['publish', '--allow-dirty', '--verbose', '--manifest-path', join(pkg.path, 'Cargo.toml')];
|
|
106
106
|
if (pkg.features && pkg.features.length > 0) {
|
|
107
|
-
|
|
107
|
+
baseArgs.push('--features', pkg.features.join(','));
|
|
108
108
|
}
|
|
109
109
|
if (pkg.no_default_features === true) {
|
|
110
|
-
|
|
110
|
+
baseArgs.push('--no-default-features');
|
|
111
111
|
}
|
|
112
|
-
|
|
112
|
+
// #331: internal e2e seams. `PIOT_CRATES_REGISTRY_PRIMARY` forces all
|
|
113
|
+
// publish traffic at an alt-registry (the symmetric counterpart of
|
|
114
|
+
// npm's `PIOT_NPM_REGISTRY`, for any future `*-first-publish` crates
|
|
115
|
+
// fixture). `PIOT_CRATES_REGISTRY_FALLBACK` is a 429-only retry seam:
|
|
116
|
+
// when real crates.io rate-limits routine PR-cadence e2e traffic
|
|
117
|
+
// ("You have published too many versions of this crate in the last 24
|
|
118
|
+
// hours"), retry once against the alt-registry so the run goes green.
|
|
119
|
+
// Both are workflow-only — consumer production releases set neither
|
|
120
|
+
// env var, so the publish path through this handler is byte-identical
|
|
121
|
+
// to today's real-crates.io-only behavior in that case.
|
|
122
|
+
const primaryOverride = nonEmpty(ctx.env.PIOT_CRATES_REGISTRY_PRIMARY);
|
|
123
|
+
const fallbackUrl = nonEmpty(ctx.env.PIOT_CRATES_REGISTRY_FALLBACK);
|
|
124
|
+
const runPublish = (registryUrl) => {
|
|
125
|
+
// cargo refuses to invoke `publish --index <url>` without an
|
|
126
|
+
// explicit `--token` argument at the CLI parser level — neither
|
|
127
|
+
// CARGO_REGISTRY_TOKEN nor credentials.toml entries unblock it.
|
|
128
|
+
// The alt-registry this workflow ships with (cargo-http-registry,
|
|
129
|
+
// see e2e-fixture-job.yml) is configured `--no-auth` so any token
|
|
130
|
+
// string is accepted; the value here is a placeholder for the CLI
|
|
131
|
+
// to be willing to dispatch, not a secret. The primary path
|
|
132
|
+
// (registryUrl undefined) leaves CARGO_REGISTRY_TOKEN handling
|
|
133
|
+
// alone — that's the real-crates.io OIDC token exported by the
|
|
134
|
+
// `rust-lang/crates-io-auth-action` workflow step.
|
|
135
|
+
const args = registryUrl
|
|
136
|
+
? [...baseArgs, '--index', registryUrl, '--token', 'piot-alt-registry-placeholder']
|
|
137
|
+
: baseArgs;
|
|
113
138
|
execFileSync('cargo', args, {
|
|
114
139
|
cwd: ctx.cwd,
|
|
115
140
|
// #138: minimal env. The parent process.env leaks unrelated
|
|
@@ -119,17 +144,61 @@ async function publishImpl(pkg, version, ctx) {
|
|
|
119
144
|
env: buildSubprocessEnv(ctx.env, { CARGO_TERM_VERBOSE: 'true' }),
|
|
120
145
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
121
146
|
});
|
|
147
|
+
};
|
|
148
|
+
try {
|
|
149
|
+
runPublish(primaryOverride);
|
|
122
150
|
}
|
|
123
151
|
catch (err) {
|
|
124
152
|
const stderr = err.stderr?.toString('utf8').trim();
|
|
153
|
+
// 429-only fallback. Predicate scoped narrowly to rate-limit prose
|
|
154
|
+
// so non-rate-limit failures (auth, network, validation) surface
|
|
155
|
+
// verbatim. Only fires when the workflow provisioned a fallback AND
|
|
156
|
+
// a primary override isn't already in effect (primary is
|
|
157
|
+
// authoritative for first-publish fixtures).
|
|
158
|
+
if (primaryOverride === undefined &&
|
|
159
|
+
fallbackUrl !== undefined &&
|
|
160
|
+
isRateLimited(stderr)) {
|
|
161
|
+
// Surface the fallback engaging as a GH annotation so a reviewer
|
|
162
|
+
// sees the real crates.io path was NOT exercised on this run and
|
|
163
|
+
// isn't misled by the green check.
|
|
164
|
+
process.stdout.write(`::warning::crates.io returned 429; falling back to ${fallbackUrl} (real OIDC-TP path not exercised this run)\n`);
|
|
165
|
+
try {
|
|
166
|
+
runPublish(fallbackUrl);
|
|
167
|
+
}
|
|
168
|
+
catch (retryErr) {
|
|
169
|
+
const retryStderr = retryErr.stderr?.toString('utf8').trim();
|
|
170
|
+
const retryBase = retryErr instanceof Error ? retryErr.message : String(retryErr);
|
|
171
|
+
throw new Error(`cargo publish (fallback ${fallbackUrl}) failed${retryStderr ? `:\n${retryStderr}` : `: ${retryBase}`}`, { cause: retryErr });
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
status: 'published',
|
|
175
|
+
url: `${fallbackUrl.replace(/\/$/, '')}/api/v1/crates/${crateNameFor(pkg)}/${version}`,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
125
178
|
const base = err instanceof Error ? err.message : String(err);
|
|
126
179
|
throw new Error(`cargo publish failed${stderr ? `:\n${stderr}` : `: ${base}`}`, { cause: err });
|
|
127
180
|
}
|
|
128
181
|
return {
|
|
129
182
|
status: 'published',
|
|
130
|
-
url:
|
|
183
|
+
url: primaryOverride
|
|
184
|
+
? `${primaryOverride.replace(/\/$/, '')}/api/v1/crates/${crateNameFor(pkg)}/${version}`
|
|
185
|
+
: `${REGISTRY}/crates/${crateNameFor(pkg)}/${version}`,
|
|
131
186
|
};
|
|
132
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Match cargo's 429 stderr shape. crates.io renders this verbatim under
|
|
190
|
+
* a `Caused by:` block:
|
|
191
|
+
* the remote server responded with an error (status 429 Too Many Requests):
|
|
192
|
+
* You have published too many versions of this crate in the last 24 hours
|
|
193
|
+
* The two-anchor match (status + 429) keeps false positives out: an
|
|
194
|
+
* unrelated "429 in 10 minutes" string in some other failure mode
|
|
195
|
+
* wouldn't trigger the fallback.
|
|
196
|
+
*/
|
|
197
|
+
function isRateLimited(stderr) {
|
|
198
|
+
if (!stderr)
|
|
199
|
+
return false;
|
|
200
|
+
return /status\s+429\b/i.test(stderr) || /429\s+Too\s+Many\s+Requests/i.test(stderr);
|
|
201
|
+
}
|
|
133
202
|
/* ------------------------------ internals ------------------------------ */
|
|
134
203
|
/** The published name. Falls back to the pilot package name if no
|
|
135
204
|
* explicit `crate` field is set. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crates.js","sourceRoot":"","sources":["../../src/handlers/crates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"crates.js","sourceRoot":"","sources":["../../src/handlers/crates.ts"],"names":[],"mappings":"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"}
|