@git.zone/cli 6.7.2 → 6.7.3

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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/cli',
6
- version: '6.7.2',
6
+ version: '6.7.3',
7
7
  description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxlQUFlO0lBQ3JCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSwrTEFBK0w7Q0FDN00sQ0FBQSJ9
@@ -33,7 +33,7 @@ const readMetadata = async (registry, packageName, fetchImplementation) => {
33
33
  method: "GET",
34
34
  redirect: "error",
35
35
  signal: AbortSignal.timeout(30_000),
36
- headers: { accept: "application/json" },
36
+ headers: { accept: "application/json", "cache-control": "no-cache" },
37
37
  });
38
38
  if (!response.ok)
39
39
  throw new Error(`Cannot verify ${packageName} on ${registry} (HTTP ${response.status}).`);
@@ -49,6 +49,7 @@ const readMetadata = async (registry, packageName, fetchImplementation) => {
49
49
  }
50
50
  return metadata;
51
51
  };
52
+ const isDeprecationComplete = (metadata, message) => Object.values(metadata.versions).every((version) => version.deprecated === message);
52
53
  /** Verify replacements everywhere before changing metadata for any old package. */
53
54
  export const executeDeprecation = async (planArg, shell, cwd, fetchImplementation = fetch) => {
54
55
  const plan = createDeprecationPlan(planArg);
@@ -63,6 +64,11 @@ export const executeDeprecation = async (planArg, shell, cwd, fetchImplementatio
63
64
  await readMetadata(registry, plan.packageName, fetchImplementation);
64
65
  }
65
66
  for (const registry of plan.registries) {
67
+ // Registry mutations may reject a redundant request even after accepting
68
+ // the original one. Reconcile observable state before issuing another write.
69
+ const existing = await readMetadata(registry, plan.packageName, fetchImplementation);
70
+ if (isDeprecationComplete(existing, plan.message))
71
+ continue;
66
72
  const result = await shell.execSpawn("pnpm", [
67
73
  "deprecate",
68
74
  `${plan.packageName}@*`,
@@ -74,14 +80,21 @@ export const executeDeprecation = async (planArg, shell, cwd, fetchImplementatio
74
80
  timeout: 120_000,
75
81
  timeoutKillGraceMs: 5_000,
76
82
  });
77
- if (result.exitCode !== 0)
78
- throw new Error(`Deprecation failed on ${registry}.`);
79
- const metadata = await readMetadata(registry, plan.packageName, fetchImplementation);
80
- const versions = Object.values(metadata.versions);
81
- if (!versions.length ||
82
- versions.some((version) => version.deprecated !== plan.message)) {
83
+ let verified = false;
84
+ for (let attempt = 0; attempt < 5; attempt++) {
85
+ const metadata = await readMetadata(registry, plan.packageName, fetchImplementation);
86
+ if (isDeprecationComplete(metadata, plan.message)) {
87
+ verified = true;
88
+ break;
89
+ }
90
+ if (attempt < 4)
91
+ await new Promise((resolve) => setTimeout(resolve, 1_000));
92
+ }
93
+ if (!verified) {
94
+ if (result.exitCode !== 0)
95
+ throw new Error(`Deprecation failed on ${registry}.`);
83
96
  throw new Error(`Deprecation is not yet verified for every version on ${registry}; rerunning the same deprecation is safe.`);
84
97
  }
85
98
  }
86
99
  };
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5kZXByZWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21vZF9kZXByZWNhdGUvaGVscGVycy5kZXByZWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBU2hGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQ25DLE9BQWlFLEVBQy9DLEVBQUU7SUFDcEIsTUFBTSxXQUFXLEdBQUcsb0RBQW9ELENBQUM7SUFDekUsSUFDRSxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUTtRQUN2QyxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUTtRQUN2QyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxPQUFPLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXO1FBRTNDLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0VBQW9FLENBQ3JFLENBQUM7SUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNyRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsTUFBTTtRQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsTUFBTSxPQUFPLEdB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
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5kZXByZWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21vZF9kZXByZWNhdGUvaGVscGVycy5kZXByZWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBU2hGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQ25DLE9BQWlFLEVBQy9DLEVBQUU7SUFDcEIsTUFBTSxXQUFXLEdBQUcsb0RBQW9ELENBQUM7SUFDekUsSUFDRSxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUTtRQUN2QyxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUTtRQUN2QyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxPQUFPLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXO1FBRTNDLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0VBQW9FLENBQ3JFLENBQUM7SUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNyRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsTUFBTTtRQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsTUFBTSxPQUFPLEdB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@git.zone/cli",
3
3
  "private": false,
4
- "version": "6.7.2",
4
+ "version": "6.7.3",
5
5
  "description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
6
6
  "main": "dist_ts/index.js",
7
7
  "typings": "dist_ts/index.d.ts",
package/readme.md CHANGED
@@ -973,7 +973,10 @@ operation. `--message` supplies migration instructions; otherwise the message
973
973
  names the replacement. Deprecation applies to every version. GitZone verifies
974
974
  an active replacement on all registries before issuing any change, invokes
975
975
  `pnpm deprecate` with literal arguments, and verifies the old versions' metadata
976
- after each registry operation. `--json` prints the plan without changing it.
976
+ after each registry operation. Verification uses up to five fresh metadata reads,
977
+ one second apart, to allow registry propagation. A rerun skips any registry where
978
+ every version already has the exact requested message, so accepted deprecations
979
+ are not submitted again. `--json` prints the plan without changing it.
977
980
 
978
981
  ## Troubleshooting
979
982
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/cli',
6
- version: '6.7.2',
6
+ version: '6.7.3',
7
7
  description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
8
8
  }
@@ -63,7 +63,7 @@ const readMetadata = async (
63
63
  method: "GET",
64
64
  redirect: "error",
65
65
  signal: AbortSignal.timeout(30_000),
66
- headers: { accept: "application/json" },
66
+ headers: { accept: "application/json", "cache-control": "no-cache" },
67
67
  },
68
68
  );
69
69
  if (!response.ok)
@@ -90,6 +90,14 @@ const readMetadata = async (
90
90
  return metadata;
91
91
  };
92
92
 
93
+ const isDeprecationComplete = (
94
+ metadata: IPackageMetadata,
95
+ message: string,
96
+ ): boolean =>
97
+ Object.values(metadata.versions).every(
98
+ (version) => version.deprecated === message,
99
+ );
100
+
93
101
  /** Verify replacements everywhere before changing metadata for any old package. */
94
102
  export const executeDeprecation = async (
95
103
  planArg: IDeprecationPlan,
@@ -116,6 +124,14 @@ export const executeDeprecation = async (
116
124
  await readMetadata(registry, plan.packageName, fetchImplementation);
117
125
  }
118
126
  for (const registry of plan.registries) {
127
+ // Registry mutations may reject a redundant request even after accepting
128
+ // the original one. Reconcile observable state before issuing another write.
129
+ const existing = await readMetadata(
130
+ registry,
131
+ plan.packageName,
132
+ fetchImplementation,
133
+ );
134
+ if (isDeprecationComplete(existing, plan.message)) continue;
119
135
  const result = await shell.execSpawn(
120
136
  "pnpm",
121
137
  [
@@ -131,18 +147,23 @@ export const executeDeprecation = async (
131
147
  timeoutKillGraceMs: 5_000,
132
148
  },
133
149
  );
134
- if (result.exitCode !== 0)
135
- throw new Error(`Deprecation failed on ${registry}.`);
136
- const metadata = await readMetadata(
137
- registry,
138
- plan.packageName,
139
- fetchImplementation,
140
- );
141
- const versions = Object.values(metadata.versions);
142
- if (
143
- !versions.length ||
144
- versions.some((version) => version.deprecated !== plan.message)
145
- ) {
150
+ let verified = false;
151
+ for (let attempt = 0; attempt < 5; attempt++) {
152
+ const metadata = await readMetadata(
153
+ registry,
154
+ plan.packageName,
155
+ fetchImplementation,
156
+ );
157
+ if (isDeprecationComplete(metadata, plan.message)) {
158
+ verified = true;
159
+ break;
160
+ }
161
+ if (attempt < 4)
162
+ await new Promise<void>((resolve) => setTimeout(resolve, 1_000));
163
+ }
164
+ if (!verified) {
165
+ if (result.exitCode !== 0)
166
+ throw new Error(`Deprecation failed on ${registry}.`);
146
167
  throw new Error(
147
168
  `Deprecation is not yet verified for every version on ${registry}; rerunning the same deprecation is safe.`,
148
169
  );