auklet 0.0.27 → 0.0.29

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/cli/main.js CHANGED
@@ -90,6 +90,7 @@ export async function runAukletCli(argv = process.argv) {
90
90
  catch (error) {
91
91
  const logger = createAukletLogger({ scope: 'cli' });
92
92
  logger.error(error);
93
+ logger.newline();
93
94
  process.exit(1);
94
95
  }
95
96
  }
@@ -1,5 +1,6 @@
1
1
  import type { WorkspacePackage } from '#auklet/publish/types';
2
2
  export declare class NpmPublishAuthenticationError extends Error {
3
+ readonly packageRoot: string;
3
4
  constructor(packageRoot: string);
4
5
  }
5
6
  export declare class NpmPackageVersionExistsError extends Error {
@@ -4,9 +4,10 @@ import semver from 'semver';
4
4
  import { readPnpmWorkspacePackageInfo } from '#auklet/workspace/packages';
5
5
  const supportedPnpmRange = '>=10.0.0';
6
6
  export class NpmPublishAuthenticationError extends Error {
7
+ packageRoot;
7
8
  constructor(packageRoot) {
8
- super(`[publish] pnpm publish failed at ${packageRoot}: ` +
9
- `npm publish requires additional authentication.`);
9
+ super('npm publish requires additional authentication.');
10
+ this.packageRoot = packageRoot;
10
11
  }
11
12
  }
12
13
  export class NpmPackageVersionExistsError extends Error {
@@ -61,16 +62,18 @@ export async function runPnpmBuild(packageRoot) {
61
62
  }
62
63
  }
63
64
  export async function runPnpmPublish(packageRoot, args) {
65
+ const isDryRun = args.includes('--dry-run');
64
66
  const result = await runPnpm(['publish', ...args], {
65
67
  cwd: packageRoot,
66
- stdio: 'pipe',
68
+ stdio: isDryRun ? 'pipe' : 'inherit',
67
69
  });
68
- writeProcessOutput(result);
70
+ if (isDryRun)
71
+ writeProcessOutput(result);
69
72
  if (result.exitCode) {
70
73
  if (hasNpmAuthChallenge(result)) {
71
74
  throw new NpmPublishAuthenticationError(packageRoot);
72
75
  }
73
- throw new Error(`[publish] pnpm publish failed at ${packageRoot}.`);
76
+ throw new Error('pnpm publish failed.');
74
77
  }
75
78
  }
76
79
  export async function runPnpmWhoami(packageRoot, options = {}) {
@@ -139,9 +142,12 @@ const writeProcessOutput = (result) => {
139
142
  const stdout = String(result.stdout ?? '');
140
143
  const stderr = String(result.stderr ?? '');
141
144
  if (stdout)
142
- process.stdout.write(stdout);
145
+ process.stdout.write(withTrailingLineBreak(stdout));
143
146
  if (stderr)
144
- process.stderr.write(stderr);
147
+ process.stderr.write(withTrailingLineBreak(stderr));
148
+ };
149
+ const withTrailingLineBreak = (value) => {
150
+ return value.endsWith('\n') ? value : `${value}\n`;
145
151
  };
146
152
  const isNpmAuthChallenge = (output) => {
147
153
  return [
@@ -36,8 +36,8 @@ export async function runPublishCli(args) {
36
36
  dryRun: argv['dry-run'] === true,
37
37
  format: argv.format !== false,
38
38
  otp: stringOption(argv.otp),
39
- ignoreScripts: argv['ignore-scripts'] === true,
40
39
  allowDirty: argv['allow-dirty'] === true,
40
+ ignoreScripts: argv['ignore-scripts'] === true,
41
41
  }).run();
42
42
  }
43
43
  export async function runOwnerCli(args) {
@@ -60,7 +60,6 @@ export class PublishRunner {
60
60
  await this.preflight.run(plan);
61
61
  return;
62
62
  }
63
- await this.preflight.run(plan);
64
63
  await this.git.commitAndTag(plan);
65
64
  await this.publisher.run(plan);
66
65
  }
@@ -79,7 +78,7 @@ export class PublishRunner {
79
78
  this.logger.error?.(hookError);
80
79
  }
81
80
  if (error instanceof PublishTargetError) {
82
- reportPublishFailure(error, plan.version, this.logger);
81
+ reportPublishFailure(error, plan.version);
83
82
  }
84
83
  reportPublishSummary({
85
84
  plan,
@@ -27,6 +27,6 @@ export function logAuthenticationError(logger, error) {
27
27
  if (!(error instanceof NpmPublishAuthenticationError))
28
28
  return;
29
29
  logger.error('npm publish requires additional authentication.');
30
- logger.error('If publish 2FA is enabled, retry with `auk publish --otp <code>`.');
30
+ logger.error('If publish 2FA is enabled, retry with `--otp <code>`.');
31
31
  logger.error('For CI, use an npm automation token.');
32
32
  }
@@ -1,3 +1,2 @@
1
1
  import { PublishTargetError } from '#auklet/publish/runner/publishTargetError';
2
- import type { AukletLogger } from '#auklet/logger';
3
- export declare function reportPublishFailure(error: PublishTargetError, version: string, logger: AukletLogger): void;
2
+ export declare function reportPublishFailure(error: PublishTargetError, version: string): void;
@@ -1,14 +1,18 @@
1
- export function reportPublishFailure(error, version, logger) {
2
- if (error.phase === 'publish' && error.publishedTargets.length) {
3
- logger.error('partial publish detected');
4
- logger.error('published packages:');
5
- for (const target of error.publishedTargets) {
6
- logger.error(formatPublishedTarget(logger, target.packageName, version));
7
- }
8
- }
9
- logger.error('failed package:');
10
- logger.error(formatPublishedTarget(logger, error.target.packageName, version));
1
+ import { createAukletLogger } from '#auklet/logger';
2
+ export function reportPublishFailure(error, version) {
3
+ if (!error.publishedTargets.length)
4
+ return;
5
+ const logger = createAukletLogger();
6
+ const noteBody = logger.colors.rgb(184, 140, 40);
7
+ const body = [
8
+ noteBody(' Some packages were already published before the failure.'),
9
+ '',
10
+ ...error.publishedTargets.map((target) => noteBody(` published ${target.packageName}@${version}`)),
11
+ noteBody(` failed ${error.target.packageName}@${version}`),
12
+ ];
13
+ logger.newline();
14
+ logger.note({
15
+ title: logger.colors.yellow(logger.colors.bold('Partial publish detected')),
16
+ body,
17
+ });
11
18
  }
12
- const formatPublishedTarget = (logger, packageName, version) => {
13
- return ['- ', logger.package(packageName), '@', logger.version(version)];
14
- };
@@ -5,7 +5,7 @@ export class PublishTargetError extends Error {
5
5
  originalError;
6
6
  publishedTargets;
7
7
  constructor(target, phase, originalError, publishedTargets) {
8
- super(`[publish] ${phase} failed for ${target.packageName} at ${path.relative(process.cwd(), target.packageRoot) || target.packageRoot}.`);
8
+ super(`${phase} failed for ${target.packageName} at ${path.relative(process.cwd(), target.packageRoot) || target.packageRoot}.`);
9
9
  this.target = target;
10
10
  this.phase = phase;
11
11
  this.originalError = originalError;
@@ -1,4 +1,5 @@
1
1
  import { readPackageJson, writePackageJson, } from '#auklet/publish/api/packageJsonApi';
2
+ import { createAukletLogger } from '#auklet/logger';
2
3
  export class VersionWriter {
3
4
  options;
4
5
  logger;
@@ -48,7 +49,19 @@ export class VersionWriter {
48
49
  }
49
50
  logWrittenVersionFailure(plan) {
50
51
  if (!plan.dryRun && this.options.version) {
51
- this.logger.error('package.json versions may have been written. Auklet will not roll them back; check publish output before retrying.');
52
+ const logger = createAukletLogger();
53
+ const noteBody = logger.colors.rgb(184, 140, 40);
54
+ logger.newline();
55
+ logger.note({
56
+ title: logger.colors.yellow(logger.colors.bold('Version files may have changed')),
57
+ body: [
58
+ [noteBody(' package.json versions may have been written.')],
59
+ [
60
+ noteBody(' Auklet will not roll them back; check publish output before retrying.'),
61
+ ],
62
+ ],
63
+ });
64
+ logger.newline();
52
65
  }
53
66
  }
54
67
  writeVersions(plan) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auklet",
3
- "version": "0.0.27",
3
+ "version": "0.0.29",
4
4
  "type": "module",
5
5
  "author": "chentao.arthur",
6
6
  "description": "Build utilities for TypeScript packages and module CSS output.",