@jsdevtools/npm-publish 3.1.0 → 4.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 (67) hide show
  1. package/README.md +39 -25
  2. package/bin/npm-publish.js +17 -7
  3. package/lib/action/core.d.ts +1 -1
  4. package/lib/action/core.js +16 -25
  5. package/lib/action/core.js.map +1 -1
  6. package/lib/action/main.js +5 -32
  7. package/lib/action/main.js.map +1 -1
  8. package/lib/cli/index.js +7 -11
  9. package/lib/cli/index.js.map +1 -1
  10. package/lib/cli/parse-cli-arguments.js +3 -10
  11. package/lib/cli/parse-cli-arguments.js.map +1 -1
  12. package/lib/compare-and-publish/compare-and-publish.d.ts +1 -1
  13. package/lib/compare-and-publish/compare-and-publish.js +16 -18
  14. package/lib/compare-and-publish/compare-and-publish.js.map +1 -1
  15. package/lib/compare-and-publish/compare-versions.d.ts +1 -1
  16. package/lib/compare-and-publish/compare-versions.js +12 -19
  17. package/lib/compare-and-publish/compare-versions.js.map +1 -1
  18. package/lib/compare-and-publish/get-arguments.js +6 -8
  19. package/lib/compare-and-publish/get-arguments.js.map +1 -1
  20. package/lib/compare-and-publish/index.js +1 -17
  21. package/lib/compare-and-publish/index.js.map +1 -1
  22. package/lib/errors.js +22 -41
  23. package/lib/errors.js.map +1 -1
  24. package/lib/format-publish-result.d.ts +1 -1
  25. package/lib/format-publish-result.js +3 -10
  26. package/lib/format-publish-result.js.map +1 -1
  27. package/lib/index.d.ts +1 -1
  28. package/lib/index.js +4 -22
  29. package/lib/index.js.map +1 -1
  30. package/lib/normalize-options.d.ts +1 -1
  31. package/lib/normalize-options.js +18 -44
  32. package/lib/normalize-options.js.map +1 -1
  33. package/lib/npm/call-npm-cli.d.ts +1 -0
  34. package/lib/npm/call-npm-cli.js +15 -42
  35. package/lib/npm/call-npm-cli.js.map +1 -1
  36. package/lib/npm/index.js +2 -18
  37. package/lib/npm/index.js.map +1 -1
  38. package/lib/npm/use-npm-environment.d.ts +1 -1
  39. package/lib/npm/use-npm-environment.js +14 -22
  40. package/lib/npm/use-npm-environment.js.map +1 -1
  41. package/lib/npm-publish.js +10 -14
  42. package/lib/npm-publish.js.map +1 -1
  43. package/lib/options.js +4 -7
  44. package/lib/options.js.map +1 -1
  45. package/lib/read-manifest.js +27 -53
  46. package/lib/read-manifest.js.map +1 -1
  47. package/lib/results.d.ts +1 -1
  48. package/lib/results.js +2 -5
  49. package/lib/results.js.map +1 -1
  50. package/package.json +39 -42
  51. package/src/action/core.ts +7 -8
  52. package/src/action/main.ts +4 -4
  53. package/src/cli/index.ts +1 -1
  54. package/src/cli/parse-cli-arguments.ts +1 -0
  55. package/src/compare-and-publish/compare-and-publish.ts +12 -7
  56. package/src/compare-and-publish/compare-versions.ts +2 -2
  57. package/src/compare-and-publish/get-arguments.ts +4 -1
  58. package/src/errors.ts +1 -1
  59. package/src/format-publish-result.ts +1 -1
  60. package/src/index.ts +1 -1
  61. package/src/normalize-options.ts +13 -8
  62. package/src/npm/call-npm-cli.ts +14 -12
  63. package/src/npm/use-npm-environment.ts +11 -12
  64. package/src/npm-publish.ts +3 -3
  65. package/src/read-manifest.ts +16 -9
  66. package/src/results.ts +2 -1
  67. package/src/tar.d.ts +0 -3
@@ -1,12 +1,6 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useNpmEnvironment = void 0;
7
- const promises_1 = __importDefault(require("node:fs/promises"));
8
- const node_os_1 = __importDefault(require("node:os"));
9
- const node_path_1 = __importDefault(require("node:path"));
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
10
4
  /**
11
5
  * Create a temporary .npmrc file with the given auth token, and call a task
12
6
  * with env vars set to use that .npmrc.
@@ -17,28 +11,26 @@ const node_path_1 = __importDefault(require("node:path"));
17
11
  * function resolves, the temporary .npmrc file will be removed.
18
12
  * @returns The resolved value of `task`
19
13
  */
20
- async function useNpmEnvironment(manifest, options, task) {
14
+ export async function useNpmEnvironment(manifest, options, task) {
21
15
  const { registry, token, logger, temporaryDirectory } = options;
22
- const npmrcDirectory = await promises_1.default.mkdtemp(node_path_1.default.join(temporaryDirectory, "npm-publish-"));
23
- const npmrc = node_path_1.default.join(npmrcDirectory, ".npmrc");
24
- const environment = {
25
- NODE_AUTH_TOKEN: token,
26
- npm_config_userconfig: npmrc,
27
- };
16
+ const { host, origin, pathname } = registry;
17
+ const pathnameWithSlash = pathname.endsWith("/") ? pathname : `${pathname}/`;
28
18
  const config = [
29
19
  "; created by jsdevtools/npm-publish",
30
- `//${registry.host}/:_authToken=\${NODE_AUTH_TOKEN}`,
31
- `registry=${registry.href}`,
20
+ `//${host}${pathnameWithSlash}:_authToken=\${NODE_AUTH_TOKEN}`,
21
+ `registry=${origin}${pathnameWithSlash}`,
32
22
  "",
33
- ].join(node_os_1.default.EOL);
34
- await promises_1.default.writeFile(npmrc, config, "utf8");
23
+ ].join(os.EOL);
24
+ const npmrcDirectory = await fs.mkdtemp(path.join(temporaryDirectory, "npm-publish-"));
25
+ const npmrc = path.join(npmrcDirectory, ".npmrc");
26
+ const environment = { NODE_AUTH_TOKEN: token, npm_config_userconfig: npmrc };
27
+ await fs.writeFile(npmrc, config, "utf8");
35
28
  logger?.debug?.(`Temporary .npmrc created at ${npmrc}\n${config}`);
36
29
  try {
37
30
  return await task(manifest, options, environment);
38
31
  }
39
32
  finally {
40
- await promises_1.default.rm(npmrcDirectory, { force: true, recursive: true });
33
+ await fs.rm(npmrcDirectory, { force: true, recursive: true });
41
34
  }
42
35
  }
43
- exports.useNpmEnvironment = useNpmEnvironment;
44
36
  //# sourceMappingURL=use-npm-environment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-npm-environment.js","sourceRoot":"","sources":["../../src/npm/use-npm-environment.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAkC;AAClC,sDAAyB;AACzB,0DAA6B;AAa7B;;;;;;;;;GASG;AACI,KAAK,UAAU,iBAAiB,CACrC,QAAyB,EACzB,OAA0B,EAC1B,IAAyB;IAEzB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC;IAChE,MAAM,cAAc,GAAG,MAAM,kBAAE,CAAC,OAAO,CACrC,mBAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAC9C,CAAC;IACF,MAAM,KAAK,GAAG,mBAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG;QAClB,eAAe,EAAE,KAAK;QACtB,qBAAqB,EAAE,KAAK;KAC7B,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,qCAAqC;QACrC,KAAK,QAAQ,CAAC,IAAI,kCAAkC;QACpD,YAAY,QAAQ,CAAC,IAAI,EAAE;QAC3B,EAAE;KACH,CAAC,IAAI,CAAC,iBAAE,CAAC,GAAG,CAAC,CAAC;IAEf,MAAM,kBAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1C,MAAM,EAAE,KAAK,EAAE,CAAC,+BAA+B,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;IAEnE,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;YAAS,CAAC;QACT,MAAM,kBAAE,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AA/BD,8CA+BC"}
1
+ {"version":3,"file":"use-npm-environment.js","sourceRoot":"","sources":["../../src/npm/use-npm-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAyB,EACzB,OAA0B,EAC1B,IAAyB;IAEzB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC;IAChE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;IAC5C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;IAC7E,MAAM,MAAM,GAAG;QACb,qCAAqC;QACrC,KAAK,IAAI,GAAG,iBAAiB,iCAAiC;QAC9D,YAAY,MAAM,GAAG,iBAAiB,EAAE;QACxC,EAAE;KACH,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEf,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,OAAO,CACrC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAC9C,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;IAE7E,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1C,MAAM,EAAE,KAAK,EAAE,CAAC,+BAA+B,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;IAEnE,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
@@ -1,22 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.npmPublish = void 0;
4
- const read_manifest_js_1 = require("./read-manifest.js");
5
- const normalize_options_js_1 = require("./normalize-options.js");
6
- const index_js_1 = require("./npm/index.js");
7
- const index_js_2 = require("./compare-and-publish/index.js");
8
- const format_publish_result_js_1 = require("./format-publish-result.js");
1
+ import { compareAndPublish } from "./compare-and-publish/index.js";
2
+ import { formatPublishResult } from "./format-publish-result.js";
3
+ import { normalizeOptions } from "./normalize-options.js";
4
+ import { useNpmEnvironment } from "./npm/index.js";
5
+ import { readManifest } from "./read-manifest.js";
9
6
  /**
10
7
  * Publishes a package to NPM, if its version has changed.
11
8
  *
12
9
  * @param options Publish options.
13
10
  * @returns Release metadata.
14
11
  */
15
- async function npmPublish(options) {
16
- const manifest = await (0, read_manifest_js_1.readManifest)(options.package);
17
- const normalizedOptions = (0, normalize_options_js_1.normalizeOptions)(manifest, options);
18
- const publishResult = await (0, index_js_1.useNpmEnvironment)(manifest, normalizedOptions, index_js_2.compareAndPublish);
19
- normalizedOptions.logger?.info?.((0, format_publish_result_js_1.formatPublishResult)(manifest, normalizedOptions, publishResult));
12
+ export async function npmPublish(options) {
13
+ const manifest = await readManifest(options.package);
14
+ const normalizedOptions = normalizeOptions(manifest, options);
15
+ const publishResult = await useNpmEnvironment(manifest, normalizedOptions, compareAndPublish);
16
+ normalizedOptions.logger?.info?.(formatPublishResult(manifest, normalizedOptions, publishResult));
20
17
  return {
21
18
  id: publishResult.id,
22
19
  type: publishResult.type,
@@ -30,5 +27,4 @@ async function npmPublish(options) {
30
27
  dryRun: normalizedOptions.dryRun.value,
31
28
  };
32
29
  }
33
- exports.npmPublish = npmPublish;
34
30
  //# sourceMappingURL=npm-publish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"npm-publish.js","sourceRoot":"","sources":["../src/npm-publish.ts"],"names":[],"mappings":";;;AAAA,yDAAkD;AAClD,iEAA0D;AAC1D,6CAAmD;AACnD,6DAAmE;AACnE,yEAAiE;AAIjE;;;;;GAKG;AACI,KAAK,UAAU,UAAU,CAAC,OAAgB;IAC/C,MAAM,QAAQ,GAAG,MAAM,IAAA,+BAAY,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAG,IAAA,uCAAgB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,MAAM,IAAA,4BAAiB,EAC3C,QAAQ,EACR,iBAAiB,EACjB,4BAAiB,CAClB,CAAC;IAEF,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,CAC9B,IAAA,8CAAmB,EAAC,QAAQ,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAChE,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;QACpC,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK;QAChC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK;QACtC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK;QAC1C,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK;KACvC,CAAC;AACJ,CAAC;AAzBD,gCAyBC"}
1
+ {"version":3,"file":"npm-publish.js","sourceRoot":"","sources":["../src/npm-publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAgB;IAC/C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;IAEF,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,CAC9B,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAChE,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;QACpC,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK;QAChC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK;QACtC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK;QAC1C,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK;KACvC,CAAC;AACJ,CAAC"}
package/lib/options.js CHANGED
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.STRATEGY_ALL = exports.STRATEGY_UPGRADE = exports.ACCESS_RESTRICTED = exports.ACCESS_PUBLIC = void 0;
4
- exports.ACCESS_PUBLIC = "public";
5
- exports.ACCESS_RESTRICTED = "restricted";
6
- exports.STRATEGY_UPGRADE = "upgrade";
7
- exports.STRATEGY_ALL = "all";
1
+ export const ACCESS_PUBLIC = "public";
2
+ export const ACCESS_RESTRICTED = "restricted";
3
+ export const STRATEGY_UPGRADE = "upgrade";
4
+ export const STRATEGY_ALL = "all";
8
5
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAG,QAAQ,CAAC;AACzB,QAAA,iBAAiB,GAAG,YAAY,CAAC;AAWjC,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAC7B,QAAA,YAAY,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAW9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC"}
@@ -1,56 +1,31 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.readManifest = void 0;
30
- const promises_1 = __importDefault(require("node:fs/promises"));
31
- const node_path_1 = __importDefault(require("node:path"));
32
- const valid_js_1 = __importDefault(require("semver/functions/valid.js"));
33
- const list_js_1 = __importDefault(require("tar/lib/list.js"));
34
- const errors = __importStar(require("./errors.js"));
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import semverValid from "semver/functions/valid.js";
4
+ import { list as tarList } from "tar/list";
5
+ import validatePackageName from "validate-npm-package-name";
6
+ import * as errors from "./errors.js";
35
7
  const SCOPE_RE = /^(@.+)\/.+$/u;
36
8
  const MANIFEST_BASENAME = "package.json";
37
9
  const TARBALL_EXTNAME = ".tgz";
38
10
  const isManifest = (file) => {
39
- return typeof file === "string" && node_path_1.default.basename(file) === MANIFEST_BASENAME;
11
+ return typeof file === "string" && path.basename(file) === MANIFEST_BASENAME;
40
12
  };
41
13
  const isDirectory = (file) => {
42
- return typeof file === "string" && node_path_1.default.extname(file) === "";
14
+ return typeof file === "string" && path.extname(file) === "";
43
15
  };
44
16
  const isTarball = (file) => {
45
- return typeof file === "string" && node_path_1.default.extname(file) === TARBALL_EXTNAME;
17
+ return typeof file === "string" && path.extname(file) === TARBALL_EXTNAME;
18
+ };
19
+ const normalizeVersion = (version) => {
20
+ return semverValid(version) ?? undefined;
46
21
  };
47
- const validateVersion = (version) => {
48
- return (0, valid_js_1.default)(version) ?? undefined;
22
+ const validateName = (name) => {
23
+ return validatePackageName(name).validForNewPackages;
49
24
  };
50
25
  const readPackageJson = async (...pathSegments) => {
51
- const file = node_path_1.default.resolve(...pathSegments);
26
+ const file = path.resolve(...pathSegments);
52
27
  try {
53
- return await promises_1.default.readFile(file, "utf8");
28
+ return await fs.readFile(file, "utf8");
54
29
  }
55
30
  catch (error) {
56
31
  throw new errors.PackageJsonReadError(file, error);
@@ -58,13 +33,13 @@ const readPackageJson = async (...pathSegments) => {
58
33
  };
59
34
  const readTarballPackageJson = async (file) => {
60
35
  const data = [];
61
- const onentry = (entry) => {
36
+ const onReadEntry = (entry) => {
62
37
  if (entry.path === "package/package.json") {
63
38
  entry.on("data", (chunk) => data.push(chunk));
64
39
  }
65
40
  };
66
41
  try {
67
- await (0, list_js_1.default)({ file, onentry });
42
+ await tarList({ file, onReadEntry });
68
43
  if (data.length === 0) {
69
44
  throw new Error("package.json not found inside archive");
70
45
  }
@@ -80,7 +55,7 @@ const readTarballPackageJson = async (file) => {
80
55
  * @param packagePath The path to the package being published.
81
56
  * @returns The parsed package metadata.
82
57
  */
83
- async function readManifest(packagePath) {
58
+ export async function readManifest(packagePath) {
84
59
  let packageSpec;
85
60
  let manifestContents;
86
61
  if (!packagePath) {
@@ -88,15 +63,15 @@ async function readManifest(packagePath) {
88
63
  manifestContents = await readPackageJson(MANIFEST_BASENAME);
89
64
  }
90
65
  else if (isManifest(packagePath)) {
91
- packageSpec = node_path_1.default.resolve(node_path_1.default.dirname(packagePath));
66
+ packageSpec = path.resolve(path.dirname(packagePath));
92
67
  manifestContents = await readPackageJson(packagePath);
93
68
  }
94
69
  else if (isDirectory(packagePath)) {
95
- packageSpec = node_path_1.default.resolve(packagePath);
70
+ packageSpec = path.resolve(packagePath);
96
71
  manifestContents = await readPackageJson(packagePath, MANIFEST_BASENAME);
97
72
  }
98
73
  else if (isTarball(packagePath)) {
99
- packageSpec = node_path_1.default.resolve(packagePath);
74
+ packageSpec = path.resolve(packagePath);
100
75
  manifestContents = await readTarballPackageJson(packageSpec);
101
76
  }
102
77
  else {
@@ -108,18 +83,18 @@ async function readManifest(packagePath) {
108
83
  let publishConfig;
109
84
  try {
110
85
  manifestJson = JSON.parse(manifestContents);
111
- name = manifestJson["name"];
112
- version = validateVersion(manifestJson["version"]);
113
- publishConfig = manifestJson["publishConfig"] ?? {};
86
+ name = manifestJson.name;
87
+ version = normalizeVersion(manifestJson.version);
88
+ publishConfig = manifestJson.publishConfig ?? {};
114
89
  }
115
90
  catch (error) {
116
91
  throw new errors.PackageJsonParseError(packageSpec, error);
117
92
  }
118
- if (typeof name !== "string" || name.length === 0) {
93
+ if (!validateName(name)) {
119
94
  throw new errors.InvalidPackageNameError(name);
120
95
  }
121
96
  if (typeof version !== "string") {
122
- throw new errors.InvalidPackageVersionError(manifestJson["version"]);
97
+ throw new errors.InvalidPackageVersionError(manifestJson.version);
123
98
  }
124
99
  if (typeof publishConfig !== "object" ||
125
100
  Array.isArray(publishConfig) ||
@@ -134,5 +109,4 @@ async function readManifest(packagePath) {
134
109
  scope: SCOPE_RE.exec(name)?.[1],
135
110
  };
136
111
  }
137
- exports.readManifest = readManifest;
138
112
  //# sourceMappingURL=read-manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-manifest.js","sourceRoot":"","sources":["../src/read-manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAkC;AAClC,0DAA6B;AAC7B,yEAAoD;AACpD,8DAAsC;AAEtC,oDAAsC;AAmBtC,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEhC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AACzC,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,MAAM,UAAU,GAAG,CAAC,IAAa,EAAkB,EAAE;IACnD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,mBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAa,EAAkB,EAAE;IACpD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAa,EAAkB,EAAE;IAClD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAsB,EAAE;IAC/D,OAAO,IAAA,kBAAW,EAAC,OAAiB,CAAC,IAAI,SAAS,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAAE,GAAG,YAAsB,EAAmB,EAAE;IAC3E,MAAM,IAAI,GAAG,mBAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,OAAO,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;IACrE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,EAAE;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC1C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,IAAA,iBAAO,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;GAKG;AACI,KAAK,UAAU,YAAY,CAChC,WAAoB;IAEpB,IAAI,WAA+B,CAAC;IACpC,IAAI,gBAAwB,CAAC;IAE7B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,EAAE,CAAC;QACjB,gBAAgB,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACtD,gBAAgB,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,gBAAgB,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC3E,CAAC;SAAM,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,gBAAgB,GAAG,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,YAAqC,CAAC;IAC1C,IAAI,IAAa,CAAC;IAClB,IAAI,OAAgB,CAAC;IACrB,IAAI,aAAsB,CAAC;IAE3B,IAAI,CAAC;QACH,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAA4B,CAAC;QACvE,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QACnD,aAAa,GAAG,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,MAAM,CAAC,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,MAAM,CAAC,0BAA0B,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IACE,OAAO,aAAa,KAAK,QAAQ;QACjC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5B,CAAC,aAAa,EACd,CAAC;QACD,MAAM,IAAI,MAAM,CAAC,gCAAgC,CAAC,aAAa,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,WAAW;QACX,IAAI;QACJ,OAAO;QACP,aAAa;QACb,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;KAChC,CAAC;AACJ,CAAC;AA3DD,oCA2DC"}
1
+ {"version":3,"file":"read-manifest.js","sourceRoot":"","sources":["../src/read-manifest.ts"],"names":[],"mappings":"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"}
package/lib/results.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { Access, Strategy } from "./options.js";
2
1
  import type { ReleaseType as SemverReleaseType } from "semver";
2
+ import type { Access, Strategy } from "./options.js";
3
3
  /** Release type */
4
4
  export type ReleaseType = SemverReleaseType | typeof INITIAL | typeof DIFFERENT;
5
5
  export declare const INITIAL = "initial";
package/lib/results.js CHANGED
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DIFFERENT = exports.INITIAL = void 0;
4
- exports.INITIAL = "initial";
5
- exports.DIFFERENT = "different";
1
+ export const INITIAL = "initial";
2
+ export const DIFFERENT = "different";
6
3
  //# sourceMappingURL=results.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"results.js","sourceRoot":"","sources":["../src/results.ts"],"names":[],"mappings":";;;AAMa,QAAA,OAAO,GAAG,SAAS,CAAC;AACpB,QAAA,SAAS,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"results.js","sourceRoot":"","sources":["../src/results.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC;AACjC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jsdevtools/npm-publish",
3
3
  "description": "Fast, easy publishing to NPM",
4
- "version": "3.1.0",
4
+ "version": "4.0.0",
5
5
  "keywords": [
6
6
  "github-action",
7
7
  "npm",
@@ -19,9 +19,11 @@
19
19
  "type": "git",
20
20
  "url": "https://github.com/JS-DevTools/npm-publish.git"
21
21
  },
22
- "type": "commonjs",
23
- "main": "lib/index.js",
24
- "types": "lib/index.d.ts",
22
+ "type": "module",
23
+ "exports": {
24
+ "types": "./lib/index.d.ts",
25
+ "default": "./lib/index.js"
26
+ },
25
27
  "bin": {
26
28
  "npm-publish": "bin/npm-publish.js"
27
29
  },
@@ -32,55 +34,50 @@
32
34
  "!__tests__"
33
35
  ],
34
36
  "scripts": {
35
- "all": "npm run clean && npm run build && npm run format && npm run coverage",
37
+ "all": "pnpm clean && pnpm build && pnpm format && pnpm coverage",
36
38
  "clean": "rimraf coverage lib dist e2e/fixture *.tgz",
37
- "lint": "npm run _eslint && npm run _prettier -- --check",
38
- "format": "npm run _eslint -- --fix && npm run _prettier -- --write",
39
- "build": "concurrently -g npm:build:*",
40
- "build:dist": "esbuild src/action/main.ts --bundle --sourcemap --outdir=dist --platform=node --target=node16",
39
+ "lint": "eslint . && prettier . --check",
40
+ "format": "eslint . --fix && prettier . --write",
41
+ "build": "concurrently -g pnpm:build:*",
42
+ "build:dist": "rolldown src/action/main.ts --dir=dist --platform=node --treeshake --sourcemap",
41
43
  "build:lib": "tsc",
42
44
  "test": "vitest",
43
- "coverage": "vitest run --coverage",
44
- "_eslint": "eslint \"**/*.@(js|ts)\"",
45
- "_prettier": "prettier \"**/*.@(js|ts|json|md|yaml)\""
45
+ "coverage": "vitest run --coverage"
46
46
  },
47
47
  "engines": {
48
- "node": ">=16"
48
+ "node": ">=20"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public",
52
52
  "provenance": true
53
53
  },
54
54
  "devDependencies": {
55
- "@actions/core": "^1.10.1",
56
- "@types/command-line-args": "^5.2.1",
57
- "@types/node": "^20.10.3",
58
- "@types/tar": "^6.1.6",
59
- "@typescript-eslint/eslint-plugin": "^7.2.0",
60
- "@typescript-eslint/parser": "^7.2.0",
61
- "@vitest/coverage-istanbul": "^1.0.1",
62
- "concurrently": "^8.2.1",
63
- "esbuild": "^0.20.0",
64
- "eslint": "^8.55.0",
65
- "eslint-config-prettier": "^9.1.0",
66
- "eslint-import-resolver-typescript": "^3.6.1",
67
- "eslint-plugin-import": "npm:eslint-plugin-i@^2.29.0",
68
- "eslint-plugin-jsdoc": "^48.0.4",
69
- "eslint-plugin-n": "^16.2.0",
70
- "eslint-plugin-promise": "^6.1.1",
71
- "eslint-plugin-sonarjs": "^0.24.0",
72
- "eslint-plugin-unicorn": "^51.0.1",
73
- "prettier": "^3.0.3",
74
- "prettier-plugin-jsdoc": "^1.1.1",
75
- "rimraf": "^5.0.5",
76
- "typescript": "^5.2.2",
77
- "vitest": "^1.0.1",
78
- "vitest-when": "^0.3.0"
55
+ "@actions/core": "^1.11.1",
56
+ "@mcous/eslint-config": "^0.7.0",
57
+ "@mcous/prettier-config": "^0.4.0",
58
+ "@mcous/typescript-config": "^0.3.0",
59
+ "@types/command-line-args": "^5.2.3",
60
+ "@types/node": "^24.4.0",
61
+ "@types/validate-npm-package-name": "^4.0.2",
62
+ "@vitest/coverage-v8": "^3.2.4",
63
+ "concurrently": "^9.2.1",
64
+ "eslint": "^9.35.0",
65
+ "eslint-plugin-jsdoc": "^57.0.8",
66
+ "globals": "^16.4.0",
67
+ "prettier": "^3.6.2",
68
+ "prettier-plugin-jsdoc": "^1.3.3",
69
+ "rimraf": "^6.0.1",
70
+ "rolldown": "1.0.0-beta.37",
71
+ "typescript": "^5.9.2",
72
+ "vitest": "^3.2.4",
73
+ "vitest-when": "^0.8.0"
79
74
  },
80
75
  "dependencies": {
81
- "@types/semver": "^7.5.2",
82
- "command-line-args": "5.2.1",
83
- "semver": "7.6.0",
84
- "tar": "6.2.0"
85
- }
76
+ "@types/semver": "^7.7.1",
77
+ "command-line-args": "6.0.1",
78
+ "semver": "7.7.2",
79
+ "tar": "7.4.3",
80
+ "validate-npm-package-name": "^6.0.2"
81
+ },
82
+ "packageManager": "pnpm@10.16.1+sha256.b77e92ba0d59a6372b6c5041bbb3f866fb85e927df333827f0c7f577c5e1a713"
86
83
  }
@@ -1,12 +1,12 @@
1
1
  /** Wrapper module for @actions/core */
2
2
  import {
3
+ debug as ghLogDebug,
4
+ error as ghLogError,
3
5
  getInput as ghGetInput,
6
+ info as ghLogInfo,
7
+ setFailed as ghSetFailed,
4
8
  setOutput as ghSetOutput,
5
9
  setSecret as ghSetSecret,
6
- setFailed as ghSetFailed,
7
- debug as ghLogDebug,
8
- info as ghLogInfo,
9
- error as ghLogError,
10
10
  } from "@actions/core";
11
11
 
12
12
  import type { Logger } from "../options.js";
@@ -24,9 +24,9 @@ export const logger: Logger = {
24
24
  * @param name Input name
25
25
  * @returns The input string value, or undefined if not set
26
26
  */
27
- export function getInput<T extends string>(name: string): T | undefined {
27
+ export function getInput(name: string): string | undefined {
28
28
  const inputString = ghGetInput(name);
29
- return inputString.length > 0 ? (inputString as T) : undefined;
29
+ return inputString.length > 0 ? inputString : undefined;
30
30
  }
31
31
 
32
32
  /**
@@ -85,11 +85,10 @@ export function setOutput(
85
85
  defaultValue: string | boolean
86
86
  ): void;
87
87
 
88
- // eslint-disable-next-line jsdoc/require-jsdoc
89
88
  export function setOutput(
90
89
  name: string,
91
90
  value: string | boolean | undefined,
92
- defaultValue?: string | boolean | undefined
91
+ defaultValue?: string | boolean
93
92
  ): void {
94
93
  ghSetOutput(name, value ?? defaultValue);
95
94
  }
@@ -1,5 +1,5 @@
1
1
  /** Action entry point */
2
- import { npmPublish } from "../index.js";
2
+ import { type Access, npmPublish, type Strategy } from "../index.js";
3
3
  import * as core from "./core.js";
4
4
 
5
5
  /** Run the action. */
@@ -9,13 +9,13 @@ async function run(): Promise<void> {
9
9
  registry: core.getInput("registry"),
10
10
  package: core.getInput("package"),
11
11
  tag: core.getInput("tag"),
12
- access: core.getInput("access"),
12
+ access: core.getInput("access") as Access | undefined,
13
13
  provenance: core.getBooleanInput("provenance"),
14
- strategy: core.getInput("strategy"),
14
+ strategy: core.getInput("strategy") as Strategy | undefined,
15
15
  ignoreScripts: core.getBooleanInput("ignore-scripts"),
16
16
  dryRun: core.getBooleanInput("dry-run"),
17
17
  logger: core.logger,
18
- temporaryDirectory: process.env["RUNNER_TEMP"],
18
+ temporaryDirectory: process.env.RUNNER_TEMP,
19
19
  });
20
20
 
21
21
  core.setOutput("id", results.id, "");
package/src/cli/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { npmPublish, type Logger } from "../index.js";
1
+ import { type Logger, npmPublish } from "../index.js";
2
2
  import { parseCliArguments } from "./parse-cli-arguments.js";
3
3
 
4
4
  export const USAGE = `
@@ -1,6 +1,7 @@
1
1
  /** Wrapper module for command-line-args */
2
2
 
3
3
  import commandLineArgs from "command-line-args";
4
+
4
5
  import type { Options } from "../options.js";
5
6
 
6
7
  const ARGUMENTS_OPTIONS = [
@@ -1,15 +1,16 @@
1
- import type { PackageManifest } from "../read-manifest.js";
2
1
  import type { NormalizedOptions } from "../normalize-options.js";
3
2
  import {
4
- VIEW,
5
- PUBLISH,
3
+ callNpmCli,
6
4
  E404,
5
+ E409,
7
6
  EPUBLISHCONFLICT,
8
- callNpmCli,
9
7
  type NpmCliEnvironment,
8
+ PUBLISH,
9
+ VIEW,
10
10
  } from "../npm/index.js";
11
+ import type { PackageManifest } from "../read-manifest.js";
11
12
  import { compareVersions, type VersionComparison } from "./compare-versions.js";
12
- import { getViewArguments, getPublishArguments } from "./get-arguments.js";
13
+ import { getPublishArguments, getViewArguments } from "./get-arguments.js";
13
14
 
14
15
  export interface PublishResult extends VersionComparison {
15
16
  id: string | undefined;
@@ -62,11 +63,15 @@ export async function compareAndPublish(
62
63
  const isDryRun = options.dryRun.value;
63
64
  const comparison = compareVersions(version, viewCall.successData, options);
64
65
  const publishCall =
65
- comparison.type ?? isDryRun
66
+ (comparison.type ?? isDryRun)
66
67
  ? await callNpmCli(PUBLISH, publishArguments, cliOptions)
67
68
  : { successData: undefined, errorCode: undefined, error: undefined };
68
69
 
69
- if (publishCall.error && publishCall.errorCode !== EPUBLISHCONFLICT) {
70
+ if (
71
+ publishCall.error &&
72
+ publishCall.errorCode !== EPUBLISHCONFLICT &&
73
+ publishCall.errorCode !== E409
74
+ ) {
70
75
  throw publishCall.error;
71
76
  }
72
77
 
@@ -2,10 +2,10 @@ import semverDifference from "semver/functions/diff.js";
2
2
  import semverGreaterThan from "semver/functions/gt.js";
3
3
  import semverValid from "semver/functions/valid.js";
4
4
 
5
- import { STRATEGY_ALL } from "../options.js";
6
5
  import type { NormalizedOptions } from "../normalize-options.js";
7
- import { INITIAL, DIFFERENT, type ReleaseType } from "../results.js";
8
6
  import type { NpmViewData } from "../npm/index.js";
7
+ import { STRATEGY_ALL } from "../options.js";
8
+ import { DIFFERENT, INITIAL, type ReleaseType } from "../results.js";
9
9
 
10
10
  export interface VersionComparison {
11
11
  type: ReleaseType | undefined;
@@ -54,7 +54,10 @@ export function getPublishArguments(
54
54
  }
55
55
 
56
56
  if (!dryRun.isDefault && dryRun.value) {
57
- publishArguments.push("--dry-run");
57
+ // NOTE: `--force` does not override `--dry-run`,
58
+ // but does bypass package existence check in npm >=11
59
+ // because we do our own existence checks separately
60
+ publishArguments.push("--dry-run", "--force");
58
61
  }
59
62
 
60
63
  return publishArguments;
package/src/errors.ts CHANGED
@@ -62,7 +62,7 @@ export class PackageJsonParseError extends SyntaxError {
62
62
 
63
63
  export class InvalidPackageNameError extends TypeError {
64
64
  public constructor(value: unknown) {
65
- super(`Package name must be a string, got "${String(value)}"`);
65
+ super(`Package name is not valid, got "${String(value)}"`);
66
66
  this.name = "InvalidPackageNameError";
67
67
  }
68
68
  }
@@ -1,8 +1,8 @@
1
1
  import os from "node:os";
2
2
 
3
3
  import type { PublishResult } from "./compare-and-publish/index.js";
4
- import type { PackageManifest } from "./read-manifest.js";
5
4
  import type { NormalizedOptions } from "./normalize-options.js";
5
+ import type { PackageManifest } from "./read-manifest.js";
6
6
 
7
7
  const DRY_RUN_BANNER =
8
8
  "=== DRY RUN === DRY RUN === DRY RUN === DRY RUN === DRY RUN ===";
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  // Export the external type definitions as named exports
2
+ export * from "./errors.js";
2
3
  export * from "./options.js";
3
4
  export * from "./results.js";
4
- export * from "./errors.js";
5
5
 
6
6
  // Export `npmPublish` as a named export
7
7
  export { npmPublish } from "./npm-publish.js";