@git.zone/cli 4.0.0 → 6.0.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.
Files changed (35) hide show
  1. package/.smartconfig.json +0 -1
  2. package/assets/templates/ci_default/.gitea/workflows/default_tags.yaml +0 -21
  3. package/assets/templates/ci_default_gitlab/.gitlab-ci.yml +0 -13
  4. package/assets/templates/ci_default_private/.gitea/workflows/default_tags.yaml +0 -21
  5. package/assets/templates/ci_default_private_gitlab/.gitlab-ci.yml +0 -13
  6. package/dist_ts/00_commitinfo_data.js +1 -1
  7. package/dist_ts/helpers.climode.js +31 -2
  8. package/dist_ts/helpers.workflow.d.ts +10 -2
  9. package/dist_ts/helpers.workflow.js +102 -19
  10. package/dist_ts/mod_commit/mod.helpers.d.ts +3 -3
  11. package/dist_ts/mod_commit/mod.helpers.js +10 -10
  12. package/dist_ts/mod_config/index.js +22 -23
  13. package/dist_ts/mod_release/classes.releasejournal.d.ts +78 -0
  14. package/dist_ts/mod_release/classes.releasejournal.js +511 -0
  15. package/dist_ts/mod_release/helpers.npmartifact.d.ts +32 -0
  16. package/dist_ts/mod_release/helpers.npmartifact.js +358 -0
  17. package/dist_ts/mod_release/helpers.releasebranch.d.ts +47 -0
  18. package/dist_ts/mod_release/helpers.releasebranch.js +627 -0
  19. package/dist_ts/mod_release/helpers.releasepublication.d.ts +24 -0
  20. package/dist_ts/mod_release/helpers.releasepublication.js +293 -0
  21. package/dist_ts/mod_release/index.d.ts +1 -1
  22. package/dist_ts/mod_release/index.js +539 -209
  23. package/package.json +1 -1
  24. package/readme.hints.md +47 -1
  25. package/readme.md +81 -38
  26. package/ts/00_commitinfo_data.ts +1 -1
  27. package/ts/helpers.climode.ts +34 -1
  28. package/ts/helpers.workflow.ts +155 -19
  29. package/ts/mod_commit/mod.helpers.ts +12 -8
  30. package/ts/mod_config/index.ts +21 -22
  31. package/ts/mod_release/classes.releasejournal.ts +740 -0
  32. package/ts/mod_release/helpers.npmartifact.ts +553 -0
  33. package/ts/mod_release/helpers.releasebranch.ts +1344 -0
  34. package/ts/mod_release/helpers.releasepublication.ts +641 -0
  35. package/ts/mod_release/index.ts +906 -262
@@ -3,16 +3,40 @@ import * as paths from "../paths.js";
3
3
  import { logger } from "../gitzone.logging.js";
4
4
  import { getCliMode, printJson } from "../helpers.climode.js";
5
5
  import { inferVersionTypeFromPending, movePendingToVersion, readPendingChangelog, } from "../helpers.changelog.js";
6
- import { formatTsdockerMinimumVersion, getDeclaredTsdockerRange, getTsdockerMinimumVersion, resolveReleaseWorkflow, supportsTsdockerMinimumVersion, } from "../helpers.workflow.js";
6
+ import { resolveReleaseWorkflow, resolveReleaseResumeConfiguration, } from "../helpers.workflow.js";
7
7
  import * as commitHelpers from "../mod_commit/mod.helpers.js";
8
- import { hasInstalledProjectTsdockerBinary } from "../helpers.tsdocker.js";
8
+ import { inspectReleaseBranch, integrateReleaseBranch, prepareReleaseIntegration, revalidatePreparedReleaseBranch, revalidateReleasePublicationState, releaseGitEnv, resolveReleaseMergeFlag, } from "./helpers.releasebranch.js";
9
+ import { ReleaseJournalStore, createInitialTargetStatus, finalizeJournalCompletion, normalizeReleaseGitRemoteName, normalizeReleaseVersion, resolveGitCommonDirectory, } from "./classes.releasejournal.js";
10
+ import { assertNoLegacyNpmPublisher, assertPnpmReleaseCapability, hashReleaseDestination, normalizeNpmRegistryUrl, packNpmArtifact, verifyStoredNpmArtifact, } from "./helpers.npmartifact.js";
11
+ import { executeReleasePublication } from "./helpers.releasepublication.js";
12
+ export { buildReleaseGitPushArgs } from "./helpers.releasepublication.js";
9
13
  export const run = async (argvArg) => {
14
+ try {
15
+ await runInternal(argvArg);
16
+ }
17
+ catch (error) {
18
+ logger.log("error", error instanceof Error ? error.message : String(error));
19
+ process.exitCode = 1;
20
+ }
21
+ };
22
+ const runInternal = async (argvArg) => {
10
23
  const mode = await getCliMode(argvArg);
11
24
  const subcommand = argvArg._?.[1];
12
25
  if (mode.help || subcommand === "help") {
13
26
  showHelp(mode);
14
27
  return;
15
28
  }
29
+ if (subcommand === "inspect") {
30
+ await runReleaseInspect(argvArg, mode);
31
+ return;
32
+ }
33
+ if (subcommand === "resume") {
34
+ await runReleaseResume(argvArg, mode);
35
+ return;
36
+ }
37
+ if (subcommand !== undefined) {
38
+ throw new Error(`Unknown release subcommand: ${subcommand}`);
39
+ }
16
40
  if (mode.json) {
17
41
  printJson({
18
42
  ok: false,
@@ -20,23 +44,35 @@ export const run = async (argvArg) => {
20
44
  });
21
45
  return;
22
46
  }
23
- const workflow = await resolveReleaseWorkflow(argvArg);
24
- printReleasePlan(workflow);
25
- if (workflow.confirmation === "plan") {
26
- return;
27
- }
28
47
  const smartshellInstance = new plugins.smartshell.Smartshell({
29
48
  executor: "bash",
30
49
  sourceFilePaths: [],
31
50
  });
32
- const pending = await readPendingChangelog(plugins.path.join(paths.cwd, workflow.changelogFile), workflow.changelogPendingSection);
51
+ const mergeRequested = resolveReleaseMergeFlag(argvArg);
52
+ const workflow = await resolveReleaseWorkflow(argvArg);
53
+ assertReleaseConfiguration(workflow);
54
+ let branchContext = await inspectReleaseBranch({
55
+ smartshell: smartshellInstance,
56
+ cwd: paths.cwd,
57
+ gitRemote: workflow.gitRemote,
58
+ gitTargetActive: workflow.targets.includes("git"),
59
+ pushBranch: workflow.pushBranch,
60
+ pushTags: workflow.pushTags,
61
+ mergeRequested,
62
+ planMode: workflow.confirmation === "plan",
63
+ });
64
+ printReleasePlan(workflow, branchContext);
65
+ if (workflow.confirmation === "plan") {
66
+ return;
67
+ }
68
+ await assertFreshReleaseCapabilities(smartshellInstance, workflow, branchContext.sourceCwd, branchContext.pushUrl);
69
+ const pending = await readPendingChangelog(plugins.path.join(branchContext.sourceCwd, workflow.changelogFile), workflow.changelogPendingSection);
33
70
  if (pending.isEmpty && !argvArg["allow-empty"] && !argvArg.allowEmpty) {
34
- logger.log("error", "No pending changelog entries. Nothing to release.");
35
- process.exit(1);
71
+ throw new Error("No pending changelog entries. Nothing to release.");
36
72
  }
37
73
  const versionType = resolveVersionType(argvArg, pending.block);
38
- const projectType = await commitHelpers.detectProjectType();
39
- const currentVersion = await commitHelpers.readCurrentVersion(projectType);
74
+ const projectType = await commitHelpers.detectProjectType(branchContext.sourceCwd);
75
+ const currentVersion = await commitHelpers.readCurrentVersion(projectType, branchContext.sourceCwd);
40
76
  const plannedVersion = commitHelpers.calculateNewVersion(currentVersion, versionType);
41
77
  if (workflow.confirmation === "prompt") {
42
78
  if (!mode.interactive) {
@@ -49,37 +85,340 @@ export const run = async (argvArg) => {
49
85
  }
50
86
  }
51
87
  let newVersion = plannedVersion;
52
- const gitResults = [];
53
- const npmResults = [];
54
- const dockerResults = [];
55
- if (workflow.requireCleanTree) {
56
- await verifyCleanTree(smartshellInstance, "Working tree is not clean. Commit or stash changes before releasing.");
57
- }
88
+ branchContext = await prepareReleaseIntegration(smartshellInstance, branchContext);
58
89
  if (workflow.runTests) {
59
- await runCommandStep(smartshellInstance, "Running tests", workflow.testCommand);
60
- }
61
- newVersion = await runVersionStep(projectType, versionType);
62
- await runChangelogStep(workflow, newVersion);
63
- await runReleaseCommitStep(smartshellInstance, newVersion);
64
- await runTagStep(smartshellInstance, newVersion);
90
+ await runCommandStep(smartshellInstance, branchContext.sourceCwd, "Running tests", workflow.testCommand);
91
+ }
92
+ let releaseCwd = branchContext.sourceCwd;
93
+ let releasePushUrl = branchContext.pushUrl;
94
+ let expectedRemoteMainOid = branchContext.remoteMainOid;
95
+ if (branchContext.sourceBranch === "main") {
96
+ await revalidatePreparedReleaseBranch(smartshellInstance, branchContext);
97
+ }
98
+ else {
99
+ const integration = await integrateReleaseBranch(smartshellInstance, branchContext);
100
+ releaseCwd = integration.releaseCwd;
101
+ releasePushUrl = integration.pushUrl;
102
+ expectedRemoteMainOid = integration.expectedRemoteMainOid;
103
+ }
104
+ newVersion = await runVersionStep(projectType, versionType, releaseCwd);
105
+ await runChangelogStep(workflow, newVersion, releaseCwd);
106
+ const releaseCommitOid = await runReleaseCommitStep(smartshellInstance, newVersion, releaseCwd);
107
+ await runTagStep(smartshellInstance, newVersion, releaseCommitOid, releaseCwd);
108
+ const releaseRefs = await captureReleaseRefs(smartshellInstance, releaseCwd, newVersion, releaseCommitOid);
65
109
  if (workflow.runBuild) {
66
- await runCommandStep(smartshellInstance, "Running release build", workflow.buildCommand);
67
- await verifyCleanTree(smartshellInstance, "Build produced uncommitted changes. Aborting release.");
110
+ await runCommandStep(smartshellInstance, releaseCwd, "Running release build", workflow.buildCommand);
111
+ await verifyCleanTree(smartshellInstance, releaseCwd, "Build produced uncommitted changes. Aborting release.");
112
+ }
113
+ const ensurePublicationState = async (expectedRemoteMainOidArg = expectedRemoteMainOid) => {
114
+ await verifyReleaseRefs(smartshellInstance, releaseCwd, newVersion, releaseRefs);
115
+ await revalidateReleasePublicationState(smartshellInstance, branchContext, releaseRefs.mainOid, expectedRemoteMainOidArg);
116
+ };
117
+ await ensurePublicationState();
118
+ const journalContext = await createReleaseJournal({
119
+ smartshell: smartshellInstance,
120
+ workflow,
121
+ releaseCwd,
122
+ releasePushUrl,
123
+ expectedRemoteMainOid,
124
+ version: newVersion,
125
+ refs: releaseRefs,
126
+ ensurePublicationState,
127
+ });
128
+ const finalJournal = await executeReleasePublication({
129
+ smartshell: smartshellInstance,
130
+ cwd: releaseCwd,
131
+ store: journalContext.store,
132
+ journal: journalContext.journal,
133
+ pushUrl: releasePushUrl,
134
+ ensurePublicationState,
135
+ });
136
+ printReleaseJournalSummary(finalJournal);
137
+ };
138
+ const assertFreshReleaseCapabilities = async (smartshellArg, workflowArg, cwdArg, pushUrlArg) => {
139
+ if (workflowArg.targets.includes("docker")) {
140
+ throw new Error("Journaled Docker publication requires the planned structured tSDocker digest capability. Disable the Docker target until that upstream release is installed.");
68
141
  }
69
- if (workflow.targets.includes("git")) {
70
- gitResults.push(...(await runGitTarget(smartshellInstance, workflow)));
142
+ if (workflowArg.targets.includes("git") && !pushUrlArg) {
143
+ throw new Error("The Git release target requires one resolved push destination.");
71
144
  }
72
- if (workflow.targets.includes("npm")) {
73
- npmResults.push(...(await runNpmTarget(smartshellInstance, workflow)));
145
+ if (workflowArg.targets.includes("git") ||
146
+ workflowArg.targets.includes("npm")) {
147
+ await assertNoLegacyNpmPublisher(cwdArg);
74
148
  }
75
- if (workflow.targets.includes("docker")) {
76
- dockerResults.push(...(await runDockerTarget(smartshellInstance, workflow)));
149
+ if (workflowArg.targets.includes("npm")) {
150
+ await assertPnpmReleaseCapability(smartshellArg, cwdArg);
151
+ }
152
+ };
153
+ const assertReleaseConfiguration = (workflowArg) => {
154
+ if (workflowArg.targets.includes("git")) {
155
+ normalizeReleaseGitRemoteName(workflowArg.gitRemote);
156
+ }
157
+ if (!workflowArg.targets.includes("npm")) {
158
+ return;
159
+ }
160
+ if (workflowArg.npmRegistries.length === 0) {
161
+ throw new Error("The npm release target requires at least one registry.");
162
+ }
163
+ if (workflowArg.npmAccessLevel !== "public") {
164
+ throw new Error("Journaled npm publication currently requires public access so every destination can be verified anonymously.");
165
+ }
166
+ if (workflowArg.npmAlreadyPublished !== "success" &&
167
+ workflowArg.npmAlreadyPublished !== "error") {
168
+ throw new Error("release.targets.npm.alreadyPublished must be success or error.");
169
+ }
170
+ const canonicalRegistries = workflowArg.npmRegistries.map(normalizeNpmRegistryUrl);
171
+ if (new Set(canonicalRegistries).size !== canonicalRegistries.length ||
172
+ canonicalRegistries.some((registryArg, indexArg) => registryArg !== workflowArg.npmRegistries[indexArg])) {
173
+ throw new Error("npm release registries must be unique canonical credential-free http(s) URLs.");
174
+ }
175
+ };
176
+ const createReleaseJournal = async (optionsArg) => {
177
+ const gitCommonDirectory = await resolveGitCommonDirectory(optionsArg.smartshell, optionsArg.releaseCwd);
178
+ const store = new ReleaseJournalStore(gitCommonDirectory);
179
+ const releaseDirectory = store.getReleaseDirectory(optionsArg.version);
180
+ const releaseDirectoryExists = await plugins.fs
181
+ .lstat(releaseDirectory)
182
+ .then(() => true)
183
+ .catch((error) => {
184
+ if (error.code === "ENOENT")
185
+ return false;
186
+ throw error;
187
+ });
188
+ if (releaseDirectoryExists) {
189
+ throw new Error(`Release journal v${optionsArg.version} already exists. Inspect or resume it instead of regenerating artifacts.`);
190
+ }
191
+ let temporaryDirectory = await store.createTemporaryDirectory(optionsArg.version);
192
+ try {
193
+ let artifact = null;
194
+ if (optionsArg.workflow.targets.includes("npm")) {
195
+ artifact = await packNpmArtifact(optionsArg.smartshell, optionsArg.releaseCwd, temporaryDirectory, optionsArg.version);
196
+ await verifyCleanTree(optionsArg.smartshell, optionsArg.releaseCwd, "npm pack lifecycle scripts changed the release worktree. Aborting release.");
197
+ await optionsArg.ensurePublicationState();
198
+ }
199
+ const gitEnabled = optionsArg.workflow.targets.includes("git");
200
+ if (gitEnabled &&
201
+ (!optionsArg.releasePushUrl || !optionsArg.expectedRemoteMainOid)) {
202
+ throw new Error("Git release destination state is incomplete.");
203
+ }
204
+ const now = new Date().toISOString();
205
+ const gitStatus = createInitialTargetStatus(gitEnabled);
206
+ const journal = finalizeJournalCompletion({
207
+ kind: "gitzone-release-journal",
208
+ schemaVersion: 1,
209
+ revision: 1,
210
+ release: {
211
+ version: optionsArg.version,
212
+ tag: `v${optionsArg.version}`,
213
+ mainOid: optionsArg.refs.mainOid,
214
+ tagOid: optionsArg.refs.tagOid,
215
+ },
216
+ artifact,
217
+ git: {
218
+ state: gitStatus.state,
219
+ attempts: gitStatus.attempts,
220
+ attempt: gitStatus.attempt,
221
+ error: gitStatus.error,
222
+ remote: gitEnabled ? optionsArg.workflow.gitRemote : null,
223
+ destinationHash: gitEnabled
224
+ ? hashReleaseDestination(optionsArg.releasePushUrl)
225
+ : null,
226
+ expectedRemoteMainOid: gitEnabled
227
+ ? optionsArg.expectedRemoteMainOid
228
+ : null,
229
+ },
230
+ npm: {
231
+ access: "public",
232
+ tag: "latest",
233
+ alreadyPublished: optionsArg.workflow.targets.includes("npm")
234
+ ? optionsArg.workflow.npmAlreadyPublished
235
+ : "success",
236
+ registries: optionsArg.workflow.targets.includes("npm")
237
+ ? optionsArg.workflow.npmRegistries.map((registryArg) => {
238
+ const status = createInitialTargetStatus(true);
239
+ return {
240
+ state: status.state,
241
+ attempts: status.attempts,
242
+ attempt: status.attempt,
243
+ error: status.error,
244
+ registry: registryArg,
245
+ };
246
+ })
247
+ : [],
248
+ },
249
+ createdAt: now,
250
+ updatedAt: now,
251
+ completedAt: null,
252
+ }, now);
253
+ const installed = await store.installPrepared(temporaryDirectory, journal);
254
+ temporaryDirectory = "";
255
+ return { store, journal: installed };
256
+ }
257
+ finally {
258
+ if (temporaryDirectory) {
259
+ await plugins.fs.rm(temporaryDirectory, { recursive: true, force: true });
260
+ }
261
+ }
262
+ };
263
+ const runReleaseInspect = async (argvArg, modeArg) => {
264
+ if (argvArg._?.length > 3) {
265
+ throw new Error("Usage: gitzone release inspect [version] [--json]");
266
+ }
267
+ const smartshellInstance = new plugins.smartshell.Smartshell({
268
+ executor: "bash",
269
+ sourceFilePaths: [],
270
+ });
271
+ const store = new ReleaseJournalStore(await resolveGitCommonDirectory(smartshellInstance, paths.cwd));
272
+ const requestedVersion = argvArg._?.[2];
273
+ const journals = requestedVersion
274
+ ? [await store.read(normalizeReleaseVersion(requestedVersion))]
275
+ : await store.list();
276
+ if (modeArg.json) {
277
+ printJson({ ok: true, journals });
278
+ return;
77
279
  }
78
- printReleaseSummary(newVersion, gitResults, npmResults, dockerResults);
79
- if ([...gitResults, ...npmResults, ...dockerResults].some((result) => result.status === "failed")) {
80
- process.exit(1);
280
+ if (journals.length === 0) {
281
+ console.log("No release journals found.");
282
+ return;
283
+ }
284
+ for (const journal of journals) {
285
+ printReleaseJournalSummary(journal);
286
+ }
287
+ };
288
+ const assertResumeArguments = (argvArg) => {
289
+ const forbiddenKeys = [
290
+ "allow-empty",
291
+ "allowEmpty",
292
+ "b",
293
+ "build",
294
+ "docker",
295
+ "git",
296
+ "major",
297
+ "merge",
298
+ "minor",
299
+ "npm",
300
+ "p",
301
+ "patch",
302
+ "plan",
303
+ "publish",
304
+ "push",
305
+ "t",
306
+ "target",
307
+ "targets",
308
+ "test",
309
+ ];
310
+ if (forbiddenKeys.some((keyArg) => Object.prototype.hasOwnProperty.call(argvArg, keyArg))) {
311
+ throw new Error("release resume rejects fresh-release target, integration, build, test, and version overrides.");
312
+ }
313
+ if (argvArg._?.length !== 3) {
314
+ throw new Error("Usage: gitzone release resume <version> [-y] [--recover-attempt=<id>]");
81
315
  }
82
316
  };
317
+ const runReleaseResume = async (argvArg, modeArg) => {
318
+ assertResumeArguments(argvArg);
319
+ if (modeArg.json) {
320
+ throw new Error("JSON output is read-only. Use release inspect --json.");
321
+ }
322
+ const recoveryAttemptId = argvArg["recover-attempt"] || argvArg.recoverAttempt;
323
+ if (recoveryAttemptId !== undefined &&
324
+ (typeof recoveryAttemptId !== "string" ||
325
+ !/^[0-9a-f]{32}$/.test(recoveryAttemptId))) {
326
+ throw new Error("--recover-attempt requires one exact 32-character owner ID.");
327
+ }
328
+ const version = normalizeReleaseVersion(argvArg._[2]);
329
+ const smartshellInstance = new plugins.smartshell.Smartshell({
330
+ executor: "bash",
331
+ sourceFilePaths: [],
332
+ });
333
+ const store = new ReleaseJournalStore(await resolveGitCommonDirectory(smartshellInstance, paths.cwd));
334
+ const journal = await store.read(version);
335
+ const gitEnabled = journal.git.state !== "skipped";
336
+ const resumeConfiguration = await resolveReleaseResumeConfiguration({
337
+ git: gitEnabled,
338
+ npm: journal.npm.registries.length > 0,
339
+ });
340
+ await assertResumeConfiguration(resumeConfiguration, journal, paths.cwd);
341
+ if (journal.artifact) {
342
+ await assertPnpmReleaseCapability(smartshellInstance, paths.cwd);
343
+ await assertNoLegacyNpmPublisher(paths.cwd);
344
+ await verifyStoredNpmArtifact(store.getArtifactPath(version), journal.artifact);
345
+ }
346
+ const branchContext = await inspectReleaseBranch({
347
+ smartshell: smartshellInstance,
348
+ cwd: paths.cwd,
349
+ gitRemote: journal.git.remote || resumeConfiguration.gitRemote,
350
+ gitTargetActive: gitEnabled,
351
+ pushBranch: true,
352
+ pushTags: true,
353
+ mergeRequested: false,
354
+ planMode: false,
355
+ });
356
+ if (branchContext.sourceOid !== journal.release.mainOid) {
357
+ throw new Error("Resume must run from the journaled release commit on main.");
358
+ }
359
+ const refs = await captureReleaseRefs(smartshellInstance, paths.cwd, version, journal.release.mainOid);
360
+ if (refs.tagOid !== journal.release.tagOid) {
361
+ throw new Error("The local release tag no longer matches the journal.");
362
+ }
363
+ const pushUrl = gitEnabled ? branchContext.pushUrl : undefined;
364
+ if (gitEnabled &&
365
+ (!pushUrl || hashReleaseDestination(pushUrl) !== journal.git.destinationHash)) {
366
+ throw new Error("The Git push destination changed after journal creation.");
367
+ }
368
+ if (!modeArg.yes) {
369
+ if (!modeArg.interactive) {
370
+ throw new Error("Release resume requires an interactive terminal or -y.");
371
+ }
372
+ const confirmed = await plugins.smartinteract.SmartInteract.getCliConfirmation(`Resume release v${version} now?`, true);
373
+ if (!confirmed) {
374
+ logger.log("info", "Release resume cancelled.");
375
+ return;
376
+ }
377
+ }
378
+ const ensurePublicationState = async (expectedRemoteMainOidArg) => {
379
+ await verifyReleaseRefs(smartshellInstance, paths.cwd, version, refs);
380
+ await revalidateReleasePublicationState(smartshellInstance, branchContext, journal.release.mainOid, expectedRemoteMainOidArg);
381
+ };
382
+ const finalJournal = await executeReleasePublication({
383
+ smartshell: smartshellInstance,
384
+ cwd: paths.cwd,
385
+ store,
386
+ journal,
387
+ pushUrl,
388
+ recoveryAttemptId,
389
+ ensurePublicationState,
390
+ });
391
+ printReleaseJournalSummary(finalJournal);
392
+ };
393
+ const assertResumeConfiguration = async (workflowArg, journalArg, cwdArg) => {
394
+ if (journalArg.git.state !== "skipped" &&
395
+ workflowArg.gitRemote !== journalArg.git.remote) {
396
+ throw new Error("Current Git release remote does not match the journal.");
397
+ }
398
+ const currentRegistries = workflowArg.npmRegistries.map(normalizeNpmRegistryUrl);
399
+ if (journalArg.npm.registries.length > 0 &&
400
+ (JSON.stringify(currentRegistries) !==
401
+ JSON.stringify(journalArg.npm.registries.map((registryArg) => registryArg.registry)) ||
402
+ workflowArg.npmAccessLevel !== journalArg.npm.access ||
403
+ workflowArg.npmAlreadyPublished !== journalArg.npm.alreadyPublished)) {
404
+ throw new Error("Current npm release configuration does not match the journal.");
405
+ }
406
+ if (journalArg.git.state !== "skipped" || journalArg.artifact) {
407
+ await assertNoLegacyNpmPublisher(cwdArg);
408
+ }
409
+ };
410
+ const printReleaseJournalSummary = (journalArg) => {
411
+ console.log("");
412
+ console.log(`Release v${journalArg.release.version}`);
413
+ console.log(`journal revision: ${journalArg.revision}`);
414
+ console.log(`artifact: ${journalArg.artifact ? `${journalArg.artifact.integrity} (${journalArg.artifact.sha256})` : "none"}`);
415
+ console.log(`git: ${journalArg.git.state}`);
416
+ for (const registry of journalArg.npm.registries) {
417
+ console.log(`npm ${registry.registry}: ${registry.state}`);
418
+ }
419
+ console.log(`completed: ${journalArg.completedAt || "no"}`);
420
+ console.log("");
421
+ };
83
422
  function resolveVersionType(argvArg, pendingBlock) {
84
423
  if (argvArg.major)
85
424
  return "major";
@@ -89,151 +428,124 @@ function resolveVersionType(argvArg, pendingBlock) {
89
428
  return "patch";
90
429
  return inferVersionTypeFromPending(pendingBlock);
91
430
  }
92
- async function runCommandStep(smartshellInstance, label, command) {
431
+ async function runCommandStep(smartshellInstance, cwdArg, label, command) {
93
432
  console.log(`\n${label}`);
94
- const result = await smartshellInstance.exec(command);
433
+ const result = await smartshellInstance.exec(command, { cwd: cwdArg });
95
434
  if (result.exitCode !== 0) {
96
- logger.log("error", `${label} failed. Aborting release.`);
97
- process.exit(1);
435
+ throw new Error(`${label} failed. Aborting release.`);
98
436
  }
99
437
  logger.log("success", `${label} passed.`);
100
438
  }
101
- async function verifyCleanTree(smartshellInstance, errorMessage) {
102
- const statusResult = await smartshellInstance.exec("git status --porcelain");
439
+ async function verifyCleanTree(smartshellInstance, cwdArg, errorMessage) {
440
+ const statusResult = await smartshellInstance.execSpawn("git", ["status", "--porcelain"], {
441
+ cwd: cwdArg,
442
+ env: releaseGitEnv,
443
+ timeout: 60_000,
444
+ timeoutKillGraceMs: 5_000,
445
+ });
103
446
  if (statusResult.stdout.trim() !== "") {
104
- logger.log("error", errorMessage);
105
- console.log(statusResult.stdout);
106
- process.exit(1);
447
+ throw new Error(errorMessage);
107
448
  }
108
449
  }
109
- async function runVersionStep(projectType, versionType) {
110
- const currentVersion = await commitHelpers.readCurrentVersion(projectType);
450
+ async function runVersionStep(projectType, versionType, cwdArg) {
451
+ const currentVersion = await commitHelpers.readCurrentVersion(projectType, cwdArg);
111
452
  const newVersion = commitHelpers.calculateNewVersion(currentVersion, versionType);
112
453
  logger.log("info", `Bumping version: ${currentVersion} -> ${newVersion}`);
113
- const commitInfo = new plugins.commitinfo.CommitInfo(paths.cwd, versionType);
454
+ const commitInfo = new plugins.commitinfo.CommitInfo(cwdArg, versionType);
114
455
  await commitInfo.writeIntoPotentialDirs();
115
- await commitHelpers.updateProjectVersionFiles(projectType, newVersion);
456
+ await commitHelpers.updateProjectVersionFiles(projectType, newVersion, cwdArg);
116
457
  return newVersion;
117
458
  }
118
- async function runChangelogStep(workflow, newVersion) {
459
+ async function runChangelogStep(workflow, newVersion, cwdArg) {
119
460
  const dateString = new Date().toISOString().slice(0, 10);
120
- await movePendingToVersion(plugins.path.join(paths.cwd, workflow.changelogFile), workflow.changelogPendingSection, workflow.changelogVersionHeading, newVersion, dateString);
121
- }
122
- async function runReleaseCommitStep(smartshellInstance, newVersion) {
123
- await smartshellInstance.exec("git add -A");
124
- const result = await smartshellInstance.exec(`git commit -m ${shellQuote(`v${newVersion}`)}`);
125
- if (result.exitCode !== 0) {
126
- logger.log("error", "Release commit failed.");
127
- process.exit(1);
128
- }
461
+ await movePendingToVersion(plugins.path.join(cwdArg, workflow.changelogFile), workflow.changelogPendingSection, workflow.changelogVersionHeading, newVersion, dateString);
129
462
  }
130
- async function runTagStep(smartshellInstance, newVersion) {
131
- const result = await smartshellInstance.exec(`git tag v${newVersion} -m ${shellQuote(`v${newVersion}`)}`);
463
+ async function runReleaseCommitStep(smartshellInstance, newVersion, cwdArg) {
464
+ const addResult = await smartshellInstance.execSpawn("git", ["add", "-A"], {
465
+ cwd: cwdArg,
466
+ env: releaseGitEnv,
467
+ timeout: 60_000,
468
+ timeoutKillGraceMs: 5_000,
469
+ });
470
+ if (addResult.exitCode !== 0) {
471
+ throw new Error("Staging release metadata failed.");
472
+ }
473
+ const result = await smartshellInstance.execSpawn("git", ["commit", "-m", `v${newVersion}`], {
474
+ cwd: cwdArg,
475
+ env: releaseGitEnv,
476
+ timeout: 60_000,
477
+ timeoutKillGraceMs: 5_000,
478
+ });
132
479
  if (result.exitCode !== 0) {
133
- logger.log("error", "Release tag failed.");
134
- process.exit(1);
135
- }
136
- }
137
- async function runGitTarget(smartshellInstance, workflow) {
138
- const currentBranchResult = await smartshellInstance.exec("git branch --show-current");
139
- const currentBranch = currentBranchResult.stdout.trim() || "master";
140
- const commands = [];
141
- if (workflow.pushBranch) {
142
- commands.push({
143
- target: `${workflow.gitRemote}/${currentBranch}`,
144
- command: `git push ${workflow.gitRemote} ${currentBranch}`,
145
- });
146
- }
147
- if (workflow.pushTags) {
148
- commands.push({
149
- target: `${workflow.gitRemote}/tags`,
150
- command: `git push ${workflow.gitRemote} --tags`,
151
- });
480
+ throw new Error("Release commit failed.");
481
+ }
482
+ const branchResult = await smartshellInstance.execSpawn("git", ["symbolic-ref", "--quiet", "HEAD"], {
483
+ cwd: cwdArg,
484
+ env: releaseGitEnv,
485
+ silent: true,
486
+ timeout: 60_000,
487
+ timeoutKillGraceMs: 5_000,
488
+ });
489
+ if (branchResult.exitCode !== 0 ||
490
+ branchResult.stdout.trim() !== "refs/heads/main") {
491
+ throw new Error("The release commit was not created on main.");
152
492
  }
153
- const results = [];
154
- for (const { target, command } of commands) {
155
- const result = await smartshellInstance.exec(command);
156
- results.push({
157
- target,
158
- status: result.exitCode === 0 ? "success" : "failed",
159
- message: result.exitCode === 0 ? undefined : "push failed",
160
- });
493
+ const headOid = await resolveGitObjectOid(smartshellInstance, cwdArg, "HEAD^{commit}");
494
+ const mainOid = await resolveGitObjectOid(smartshellInstance, cwdArg, "refs/heads/main^{commit}");
495
+ if (headOid !== mainOid) {
496
+ throw new Error("HEAD and main diverged after creating the release commit.");
161
497
  }
162
- return results;
498
+ return mainOid;
163
499
  }
164
- async function runNpmTarget(smartshellInstance, workflow) {
165
- if (!workflow.npmEnabled) {
166
- return [{ target: "npm", status: "skipped", message: "disabled" }];
167
- }
168
- if (workflow.npmRegistries.length === 0) {
169
- return [{ target: "npm", status: "failed", message: "no registries configured" }];
170
- }
171
- const results = [];
172
- for (const registry of workflow.npmRegistries) {
173
- const command = `pnpm publish --registry=${registry} --access=${workflow.npmAccessLevel}`;
174
- const result = await smartshellInstance.exec(command);
175
- const output = result.combinedOutput;
176
- if (result.exitCode === 0) {
177
- results.push({ target: registry, status: "success" });
178
- }
179
- else if (isAlreadyPublishedOutput(output) && workflow.npmAlreadyPublished === "success") {
180
- results.push({ target: registry, status: "already-published" });
181
- }
182
- else {
183
- results.push({ target: registry, status: "failed", message: firstMeaningfulLine(output) });
184
- }
500
+ async function runTagStep(smartshellInstance, newVersion, releaseCommitOidArg, cwdArg) {
501
+ const result = await smartshellInstance.execSpawn("git", [
502
+ "tag",
503
+ "-a",
504
+ `v${newVersion}`,
505
+ "-m",
506
+ `v${newVersion}`,
507
+ releaseCommitOidArg,
508
+ ], {
509
+ cwd: cwdArg,
510
+ env: releaseGitEnv,
511
+ timeout: 60_000,
512
+ timeoutKillGraceMs: 5_000,
513
+ });
514
+ if (result.exitCode !== 0) {
515
+ throw new Error("Release tag failed.");
185
516
  }
186
- return results;
187
517
  }
188
- async function runDockerTarget(smartshellInstance, workflow) {
189
- if (!workflow.dockerEnabled) {
190
- return [{ target: "docker", status: "skipped", message: "disabled" }];
518
+ const resolveGitObjectOid = async (smartshellInstanceArg, cwdArg, revisionArg) => {
519
+ const result = await smartshellInstanceArg.execSpawn("git", ["rev-parse", "--verify", revisionArg], {
520
+ cwd: cwdArg,
521
+ env: releaseGitEnv,
522
+ silent: true,
523
+ timeout: 60_000,
524
+ timeoutKillGraceMs: 5_000,
525
+ });
526
+ const oid = result.stdout.trim();
527
+ if (result.exitCode !== 0 || !/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i.test(oid)) {
528
+ throw new Error(`Unable to resolve release Git object ${revisionArg}.`);
191
529
  }
192
- let packageJson;
193
- try {
194
- packageJson = JSON.parse(await plugins.fs.readFile(plugins.path.join(paths.cwd, "package.json"), "utf8"));
195
- }
196
- catch {
197
- packageJson = undefined;
198
- }
199
- if (!getDeclaredTsdockerRange(packageJson)) {
200
- return [{
201
- target: "tsdocker",
202
- status: "failed",
203
- message: "Docker releases require @git.zone/tsdocker as a project dependency",
204
- }];
205
- }
206
- if (!(await hasInstalledProjectTsdockerBinary(paths.cwd))) {
207
- return [{
208
- target: "tsdocker",
209
- status: "failed",
210
- message: "Docker releases require the installed project-local tSDocker binary",
211
- }];
212
- }
213
- const minimumTsdockerVersion = getTsdockerMinimumVersion(workflow.dockerBuildRegistries.length > 0, workflow.dockerTest);
214
- if (minimumTsdockerVersion) {
215
- const versionResult = await smartshellInstance.exec("pnpm exec tsdocker --version");
216
- if (versionResult.exitCode !== 0
217
- || !supportsTsdockerMinimumVersion(versionResult.combinedOutput, minimumTsdockerVersion)) {
218
- const minimumVersion = formatTsdockerMinimumVersion(minimumTsdockerVersion);
219
- return [{
220
- target: "tsdocker",
221
- status: "failed",
222
- message: `Docker release options require project-local @git.zone/tsdocker >= ${minimumVersion}`,
223
- }];
224
- }
530
+ return oid;
531
+ };
532
+ const captureReleaseRefs = async (smartshellInstanceArg, cwdArg, newVersionArg, expectedMainOidArg) => {
533
+ const mainOid = await resolveGitObjectOid(smartshellInstanceArg, cwdArg, "refs/heads/main^{commit}");
534
+ const tagOid = await resolveGitObjectOid(smartshellInstanceArg, cwdArg, `refs/tags/v${newVersionArg}^{tag}`);
535
+ const tagCommitOid = await resolveGitObjectOid(smartshellInstanceArg, cwdArg, `refs/tags/v${newVersionArg}^{commit}`);
536
+ if ((expectedMainOidArg && mainOid !== expectedMainOidArg) ||
537
+ tagCommitOid !== mainOid) {
538
+ throw new Error("The release tag is not bound to the captured main release commit.");
539
+ }
540
+ return { mainOid, tagOid };
541
+ };
542
+ const verifyReleaseRefs = async (smartshellInstanceArg, cwdArg, newVersionArg, expectedRefsArg) => {
543
+ const currentRefs = await captureReleaseRefs(smartshellInstanceArg, cwdArg, newVersionArg, expectedRefsArg.mainOid);
544
+ if (currentRefs.mainOid !== expectedRefsArg.mainOid ||
545
+ currentRefs.tagOid !== expectedRefsArg.tagOid) {
546
+ throw new Error("Local release refs changed before publication. Inspect main and the release tag before retrying.");
225
547
  }
226
- const command = buildTsdockerPushCommand(workflow);
227
- const result = await smartshellInstance.exec(command);
228
- const output = result.combinedOutput;
229
- return [{
230
- target: workflow.dockerPatterns.length > 0
231
- ? `tsdocker:${workflow.dockerPatterns.join(",")}`
232
- : "tsdocker",
233
- status: result.exitCode === 0 ? "success" : "failed",
234
- message: result.exitCode === 0 ? undefined : firstMeaningfulLine(output),
235
- }];
236
- }
548
+ };
237
549
  export function buildTsdockerPushCommand(workflow) {
238
550
  const commandParts = ["pnpm", "exec", "tsdocker", "push"];
239
551
  for (const pattern of workflow.dockerPatterns) {
@@ -257,7 +569,9 @@ export function buildTsdockerPushCommand(workflow) {
257
569
  if (workflow.dockerParallel === true) {
258
570
  commandParts.push("--parallel");
259
571
  }
260
- else if (typeof workflow.dockerParallel === "number" && Number.isFinite(workflow.dockerParallel) && workflow.dockerParallel > 0) {
572
+ else if (typeof workflow.dockerParallel === "number" &&
573
+ Number.isFinite(workflow.dockerParallel) &&
574
+ workflow.dockerParallel > 0) {
261
575
  commandParts.push(`--parallel=${Math.floor(workflow.dockerParallel)}`);
262
576
  }
263
577
  if (workflow.dockerContext) {
@@ -265,23 +579,19 @@ export function buildTsdockerPushCommand(workflow) {
265
579
  }
266
580
  return commandParts.join(" ");
267
581
  }
268
- function isAlreadyPublishedOutput(output) {
269
- return /previously published versions|cannot publish over|already exists/i.test(output);
270
- }
271
- function firstMeaningfulLine(output) {
272
- return output
273
- .split("\n")
274
- .map((line) => line.trim())
275
- .find((line) => line.length > 0) || "command failed";
276
- }
277
582
  function shellQuote(value) {
278
583
  return `'${value.replaceAll("'", "'\\''")}'`;
279
584
  }
280
- function printReleasePlan(workflow) {
585
+ function printReleasePlan(workflow, branchContextArg) {
281
586
  console.log("");
282
587
  console.log("gitzone release - resolved workflow");
283
588
  console.log(`confirmation: ${workflow.confirmation}`);
284
589
  console.log(`plan: ${workflow.plan.join(" -> ")}`);
590
+ console.log(`source branch: ${branchContextArg.sourceBranch}`);
591
+ if (branchContextArg.sourceBranch !== "main") {
592
+ console.log("release branch: main (fast-forward integration requested)");
593
+ console.log(`remote main ancestry: ${branchContextArg.planAncestryVerified ? "verified" : "deferred until execution"}`);
594
+ }
285
595
  console.log(`targets: ${workflow.targets.length > 0 ? workflow.targets.join(", ") : "none"}`);
286
596
  console.log(`changelog: ${workflow.changelogFile}#${workflow.changelogPendingSection}`);
287
597
  if (workflow.targets.includes("npm")) {
@@ -316,65 +626,85 @@ function formatDockerOptions(workflow) {
316
626
  options.push(`context=${workflow.dockerContext}`);
317
627
  return options.length > 0 ? options.join(", ") : "default";
318
628
  }
319
- function printReleaseSummary(newVersion, gitResults, npmResults, dockerResults) {
320
- console.log("");
321
- console.log(`Release v${newVersion}`);
322
- console.log("");
323
- if (gitResults.length > 0) {
324
- console.log("git:");
325
- for (const result of gitResults) {
326
- console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
327
- }
328
- }
329
- if (npmResults.length > 0) {
330
- console.log("npm:");
331
- for (const result of npmResults) {
332
- console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
333
- }
334
- }
335
- if (dockerResults.length > 0) {
336
- console.log("docker:");
337
- for (const result of dockerResults) {
338
- console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
339
- }
340
- }
341
- }
342
629
  export function showHelp(mode) {
343
630
  if (mode?.json) {
344
631
  printJson({
345
632
  command: "release",
346
- usage: "gitzone release [options]",
633
+ usage: "gitzone release [inspect [version]|resume <version>] [options]",
347
634
  description: "Creates a versioned release from pending changelog entries and publishes configured artifacts.",
348
635
  flags: [
349
- { flag: "-y, --yes", description: "Run without interactive confirmation" },
636
+ {
637
+ flag: "-y, --yes",
638
+ description: "Run without interactive confirmation",
639
+ },
350
640
  { flag: "-t, --test", description: "Enable release preflight tests" },
351
- { flag: "-b, --build", description: "Enable release preflight build" },
352
- { flag: "-p, --push", description: "Enable the git release target" },
353
- { flag: "--target <names>", description: "Release only selected targets: git,npm,docker" },
354
- { flag: "--npm", description: "Enable the npm release target" },
355
- { flag: "--docker", description: "Enable the tsdocker release target" },
356
- { flag: "--no-publish", description: "Run release core and git target only" },
357
- { flag: "--plan", description: "Show resolved workflow without mutating files" },
641
+ {
642
+ flag: "-b, --build",
643
+ description: "Enable the build after local release metadata is created",
644
+ },
645
+ {
646
+ flag: "--no-build",
647
+ description: "Disable the post-metadata release build",
648
+ },
649
+ { flag: "-p, --push", description: "Explicitly select the git target" },
650
+ {
651
+ flag: "--target <names>",
652
+ description: "Replace configured targets with a non-empty subset of git,npm,docker",
653
+ },
654
+ { flag: "--npm", description: "Explicitly select the npm target" },
655
+ {
656
+ flag: "--docker",
657
+ description: "Select Docker and fail closed under journal schema v1",
658
+ },
659
+ {
660
+ flag: "--no-publish",
661
+ description: "Remove npm and Docker without implicitly enabling Git",
662
+ },
663
+ {
664
+ flag: "--merge",
665
+ description: "Fast-forward and lease-push a cleanly rebased feature branch before release metadata",
666
+ },
667
+ {
668
+ flag: "--plan",
669
+ description: "Show the workflow without fetching or mutating refs, files, the index, or worktrees",
670
+ },
671
+ {
672
+ flag: "inspect [version]",
673
+ description: "Read one or all durable release journals without mutation",
674
+ },
675
+ {
676
+ flag: "resume <version>",
677
+ description: "Resume exact Git/npm publication without rebuilding or repacking",
678
+ },
679
+ {
680
+ flag: "--recover-attempt <id>",
681
+ description: "Recover one exact 32-character hexadecimal attempt ID after proving it stopped",
682
+ },
358
683
  ],
359
684
  });
360
685
  return;
361
686
  }
362
687
  console.log("");
363
- console.log("Usage: gitzone release [options]");
688
+ console.log("Usage: gitzone release [inspect [version]|resume <version>] [options]");
364
689
  console.log("");
365
690
  console.log("Creates a versioned release from changelog Pending entries.");
366
691
  console.log("");
367
692
  console.log("Flags:");
368
693
  console.log(" -y, --yes Run without interactive confirmation");
369
694
  console.log(" -t, --test Enable release preflight tests");
370
- console.log(" -b, --build Enable release preflight build");
371
- console.log(" -p, --push Enable the git release target");
372
- console.log(" --target <names> Release only selected targets: git,npm,docker");
373
- console.log(" --npm Enable the npm release target");
374
- console.log(" --docker Enable the tsdocker release target");
375
- console.log(" --no-publish Run release core and git target only");
695
+ console.log(" -b, --build Build after creating local release metadata");
696
+ console.log(" --no-build Disable the post-metadata release build");
697
+ console.log(" -p, --push Explicitly select the git target");
698
+ console.log(" --target <names> Replace configured targets with a non-empty subset of git,npm,docker");
699
+ console.log(" --npm Explicitly select the npm target");
700
+ console.log(" --docker Select Docker (fails closed under journal schema v1)");
701
+ console.log(" --no-publish Remove npm and Docker without implicitly enabling Git");
702
+ console.log(" --merge Fast-forward and lease-push a cleanly rebased feature branch before release metadata");
376
703
  console.log(" --major|--minor|--patch Override inferred semver level");
377
- console.log(" --plan Show resolved workflow without mutating files");
704
+ console.log(" --plan Show workflow without fetching or mutating refs, files, index, or worktrees");
705
+ console.log(" inspect [version] Read one or all durable release journals without mutation");
706
+ console.log(" resume <version> Resume exact Git/npm publication without rebuilding or repacking");
707
+ console.log(" --recover-attempt Recover one exact 32-character hexadecimal attempt ID after proving its publisher stopped");
378
708
  console.log("");
379
709
  }
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb2RfcmVsZWFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsOEJBQThCLEdBRS9CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxLQUFLLGFBQWEsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVUzRSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLE9BQVksRUFBRSxFQUFFO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxTQUFTLENBQUM7WUFDUixFQUFFLEVBQUUsS0FBSztZQUNULEtBQUssRUFBRSww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
710
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb2RfcmVsZWFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUNBQWlDLEdBR2xDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxLQUFLLGFBQWEsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyxhQUFhLEVBQ2IsdUJBQXVCLEdBRXhCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIseUJBQXlCLEdBRzFCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0Isc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsdUJBQXVCLEdBQ3hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFMUUsTUFBTSxDQUFD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