semantic-release-next-version 0.1.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.
- package/LICENSE +21 -0
- package/README.md +178 -0
- package/bin/cli.cjs +16 -0
- package/dist/cli.js +38 -0
- package/dist/cli.js.map +7 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/package.json +97 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var g=Object.create;var E=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var D=(e,r)=>{for(var s in r)E(e,s,{get:r[s],enumerable:!0})},R=(e,r,s,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of b(r))!x.call(e,t)&&t!==s&&E(e,t,{get:()=>r[t],enumerable:!(a=y(r,t))||a.enumerable});return e};var f=(e,r,s)=>(s=e!=null?g(w(e)):{},R(r||!e||!e.__esModule?E(s,"default",{value:e,enumerable:!0}):s,e)),N=e=>R(E({},"__esModule",{value:!0}),e);var z={};D(z,{api:()=>B,default:()=>j,getNextVersion:()=>H});module.exports=N(z);var I=f(require("debug"),1),A=f(require("semantic-release"),1),G=f(require("semver"),1),d=require("tinyexec"),$="main",n=(0,I.default)("semantic-release-next-version");function C(e){return{repositoryUrl:".",branches:[e,{name:"*",prerelease:!0}],tagFormat:"${version}",plugins:["@semantic-release/commit-analyzer"]}}async function v(e,r){let s=await(0,d.exec)("git",r,{nodeOptions:{cwd:e},throwOnError:!0});if(s.exitCode)throw new Error(`git ${r.join(" ")} failed with code ${s.exitCode}`);return s.stdout.trim()}async function O(e){if(process.env.GITHUB_HEAD_REF)return process.env.GITHUB_HEAD_REF;if(process.env.GITHUB_REF_NAME)return process.env.GITHUB_REF_NAME;try{return await v(e,["rev-parse","--abbrev-ref","HEAD"])}catch{return""}}async function M(e){try{return await v(e,["config","--get","remote.origin.url"])}catch{return""}}function S(e,r){return e.some(s=>typeof s=="string"?s===r:s?.name===r)}function T(e){return e.replace(/[^0-9A-Za-z-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"prerelease"}async function V(e,r){if(process.env.GITHUB_SHA)return process.env.GITHUB_SHA.slice(0,7);try{return await v(e,["rev-parse","--short","HEAD"])}catch{return r}}async function H({cwd:e=process.cwd(),config:r={},repositoryUrl:s,branches:a,tagFormat:t,plugins:m,release:U=!1,mainBranch:p=$}={}){n("start getNextVersion"),n("cwd=%s mainBranch=%s release=%s",e,p,U),n("env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s",process.env.GITHUB_HEAD_REF,process.env.GITHUB_REF,process.env.GITHUB_REF_NAME),process.env.GITHUB_HEAD_REF&&process.env.GITHUB_REF?.startsWith("refs/pull/")&&(process.env.GITHUB_REF=`refs/heads/${process.env.GITHUB_HEAD_REF}`,process.env.GITHUB_REF_NAME=process.env.GITHUB_HEAD_REF);let i={...C(p),...r,repositoryUrl:s||r.repositoryUrl||await M(e)||".",...t?{tagFormat:t}:{},...m?{plugins:m}:{}};n("loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s",i.branches,a,i.repositoryUrl);let o=await O(e)||p;n("currentBranch=%s",o);let u=a??i.branches,c=Array.isArray(u)?[...u]:u?[u]:[];n("branches before ensure current=%o",c),S(c,o)||c.push({name:o,prerelease:o!==p?T(o):!1}),n("final branches=%o",c);let _=await(0,A.default)({...i,branches:c,dryRun:!0,ci:!1,repositoryUrl:i.repositoryUrl},{cwd:e,env:{...process.env,GIT_NOTE_REF:"semantic-release-next-version-empty",GIT_NOTES_REF:"",GIT_NOTES_DISPLAY_REF:""},stdout:process.stderr,stderr:process.stderr});if(!_)throw new Error("semantic-release did not return a next version.");let l=G.default.parse(_.nextRelease.version);if(!l)throw new Error(`Unable to parse semantic-release version: ${_.nextRelease.version}`);let h=`${l.major}.${l.minor}.${l.patch}`;if(U)return h;let F=await V(e,T(o||"preview"));return`${h}-preview-${F}`}var B={getNextVersion:H};var j=B;0&&(module.exports={api,getNextVersion});
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.js", "../src/next-version.js"],
|
|
4
|
+
"sourcesContent": ["// @ts-check\n\nimport { getNextVersion } from './next-version.js'\n\nconst api = { getNextVersion }\n\nexport { getNextVersion }\nexport { api }\n\nexport default api\n", "// @ts-check\n\nimport createDebug from 'debug'\nimport semanticRelease from 'semantic-release'\nimport semver from 'semver'\nimport { exec } from 'tinyexec'\n\nconst DEFAULT_MAIN_BRANCH = 'main'\nconst debug = createDebug('semantic-release-next-version')\n/** @param {string} mainBranch */\nfunction buildDefaultOptions(mainBranch) {\n /** @type {import('semantic-release').Options} */\n return {\n repositoryUrl: '.',\n branches: [mainBranch, { name: '*', prerelease: true }],\n // eslint-disable-next-line no-template-curly-in-string\n tagFormat: '${version}',\n plugins: ['@semantic-release/commit-analyzer'],\n }\n}\n\n/**\n * @param {string} cwd\n * @param {string[]} args\n */\nasync function runGit(cwd, args) {\n const result = await exec('git', args, {\n nodeOptions: { cwd },\n throwOnError: true,\n })\n if (result.exitCode) {\n throw new Error(`git ${args.join(' ')} failed with code ${result.exitCode}`)\n }\n return result.stdout.trim()\n}\n\n/** @param {string} cwd */\nasync function getCurrentBranch(cwd) {\n if (process.env.GITHUB_HEAD_REF) return process.env.GITHUB_HEAD_REF\n if (process.env.GITHUB_REF_NAME) return process.env.GITHUB_REF_NAME\n try {\n return await runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} cwd */\nasync function getRemoteOriginUrl(cwd) {\n try {\n return await runGit(cwd, ['config', '--get', 'remote.origin.url'])\n } catch {\n return ''\n }\n}\n\n/**\n * @param {import('semantic-release').BranchSpec[]} branches\n * @param {string} branchName\n */\nfunction branchExists(branches, branchName) {\n return branches.some((entry) => {\n if (typeof entry === 'string') return entry === branchName\n return entry?.name === branchName\n })\n}\n\n/** @param {string} branchName */\nfunction toPrereleaseId(branchName) {\n const slug = branchName\n .replace(/[^0-9A-Za-z-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n return slug || 'prerelease'\n}\n\n/** @param {string} cwd @param {string} fallback */\nasync function resolveCommitHash(cwd, fallback) {\n if (process.env.GITHUB_SHA) return process.env.GITHUB_SHA.slice(0, 7)\n try {\n return await runGit(cwd, ['rev-parse', '--short', 'HEAD'])\n } catch {\n return fallback\n }\n}\n\n/**\n * Calculate the next semantic-release version without pushing tags or\n * publishing.\n *\n * @param {import('./index.js').GetNextVersionOptions} [options]\n * @returns {Promise<string>} Next release version.\n */\nexport async function getNextVersion({\n cwd = process.cwd(),\n config = {},\n repositoryUrl,\n branches: overrideBranches,\n tagFormat,\n plugins,\n release = false,\n mainBranch = DEFAULT_MAIN_BRANCH,\n} = {}) {\n debug('start getNextVersion')\n debug('cwd=%s mainBranch=%s release=%s', cwd, mainBranch, release)\n debug(\n 'env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s',\n process.env.GITHUB_HEAD_REF,\n process.env.GITHUB_REF,\n process.env.GITHUB_REF_NAME\n )\n if (\n process.env.GITHUB_HEAD_REF &&\n process.env.GITHUB_REF?.startsWith('refs/pull/')\n ) {\n // Force env-ci to treat the source branch as the release branch on PRs.\n process.env.GITHUB_REF = `refs/heads/${process.env.GITHUB_HEAD_REF}`\n process.env.GITHUB_REF_NAME = process.env.GITHUB_HEAD_REF\n }\n\n const loadedConfig = {\n ...buildDefaultOptions(mainBranch),\n ...config,\n repositoryUrl:\n repositoryUrl ||\n config.repositoryUrl ||\n (await getRemoteOriginUrl(cwd)) ||\n '.',\n ...(tagFormat ? { tagFormat } : {}),\n ...(plugins ? { plugins } : {}),\n }\n debug(\n 'loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s',\n loadedConfig.branches,\n overrideBranches,\n loadedConfig.repositoryUrl\n )\n const currentBranch = (await getCurrentBranch(cwd)) || mainBranch\n debug('currentBranch=%s', currentBranch)\n const baseBranches = overrideBranches ?? loadedConfig.branches\n const branches = Array.isArray(baseBranches)\n ? [...baseBranches]\n : baseBranches\n ? [baseBranches]\n : []\n debug('branches before ensure current=%o', branches)\n\n if (!branchExists(branches, currentBranch)) {\n branches.push({\n name: currentBranch,\n prerelease:\n currentBranch !== mainBranch ? toPrereleaseId(currentBranch) : false,\n })\n }\n debug('final branches=%o', branches)\n\n const result = await semanticRelease(\n {\n ...loadedConfig,\n branches,\n dryRun: true,\n ci: false,\n repositoryUrl: loadedConfig.repositoryUrl,\n },\n {\n cwd,\n // Clear notes refs so stray git notes cannot break tag parsing.\n env: {\n ...process.env,\n GIT_NOTE_REF: 'semantic-release-next-version-empty',\n GIT_NOTES_REF: '',\n GIT_NOTES_DISPLAY_REF: '',\n },\n // Route semantic-release logs to stderr so CLI consumers can safely\n // capture stdout for the version string.\n stdout: process.stderr,\n stderr: process.stderr,\n }\n )\n\n if (!result) {\n throw new Error('semantic-release did not return a next version.')\n }\n\n const parsed = semver.parse(result.nextRelease.version)\n if (!parsed) {\n throw new Error(\n `Unable to parse semantic-release version: ${result.nextRelease.version}`\n )\n }\n\n const baseVersion = `${parsed.major}.${parsed.minor}.${parsed.patch}`\n if (release) return baseVersion\n\n const commitHash = await resolveCommitHash(\n cwd,\n toPrereleaseId(currentBranch || 'preview')\n )\n\n return `${baseVersion}-preview-${commitHash}`\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["index_exports", "__export", "api", "index_default", "getNextVersion", "__toCommonJS", "import_debug", "import_semantic_release", "import_semver", "import_tinyexec", "DEFAULT_MAIN_BRANCH", "debug", "createDebug", "buildDefaultOptions", "mainBranch", "runGit", "cwd", "args", "result", "getCurrentBranch", "getRemoteOriginUrl", "branchExists", "branches", "branchName", "entry", "toPrereleaseId", "resolveCommitHash", "fallback", "getNextVersion", "config", "repositoryUrl", "overrideBranches", "tagFormat", "plugins", "release", "loadedConfig", "currentBranch", "baseBranches", "semanticRelease", "parsed", "semver", "baseVersion", "commitHash", "api", "getNextVersion", "index_default", "api"]
|
|
7
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import R from"debug";import T from"semantic-release";import I from"semver";import{exec as A}from"tinyexec";var G="main",t=R("semantic-release-next-version");function d(e){return{repositoryUrl:".",branches:[e,{name:"*",prerelease:!0}],tagFormat:"${version}",plugins:["@semantic-release/commit-analyzer"]}}async function l(e,r){let s=await A("git",r,{nodeOptions:{cwd:e},throwOnError:!0});if(s.exitCode)throw new Error(`git ${r.join(" ")} failed with code ${s.exitCode}`);return s.stdout.trim()}async function B(e){if(process.env.GITHUB_HEAD_REF)return process.env.GITHUB_HEAD_REF;if(process.env.GITHUB_REF_NAME)return process.env.GITHUB_REF_NAME;try{return await l(e,["rev-parse","--abbrev-ref","HEAD"])}catch{return""}}async function F(e){try{return await l(e,["config","--get","remote.origin.url"])}catch{return""}}function g(e,r){return e.some(s=>typeof s=="string"?s===r:s?.name===r)}function m(e){return e.replace(/[^0-9A-Za-z-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"prerelease"}async function y(e,r){if(process.env.GITHUB_SHA)return process.env.GITHUB_SHA.slice(0,7);try{return await l(e,["rev-parse","--short","HEAD"])}catch{return r}}async function U({cwd:e=process.cwd(),config:r={},repositoryUrl:s,branches:E,tagFormat:_,plugins:f,release:v=!1,mainBranch:i=G}={}){t("start getNextVersion"),t("cwd=%s mainBranch=%s release=%s",e,i,v),t("env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s",process.env.GITHUB_HEAD_REF,process.env.GITHUB_REF,process.env.GITHUB_REF_NAME),process.env.GITHUB_HEAD_REF&&process.env.GITHUB_REF?.startsWith("refs/pull/")&&(process.env.GITHUB_REF=`refs/heads/${process.env.GITHUB_HEAD_REF}`,process.env.GITHUB_REF_NAME=process.env.GITHUB_HEAD_REF);let o={...d(i),...r,repositoryUrl:s||r.repositoryUrl||await F(e)||".",..._?{tagFormat:_}:{},...f?{plugins:f}:{}};t("loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s",o.branches,E,o.repositoryUrl);let n=await B(e)||i;t("currentBranch=%s",n);let c=E??o.branches,a=Array.isArray(c)?[...c]:c?[c]:[];t("branches before ensure current=%o",a),g(a,n)||a.push({name:n,prerelease:n!==i?m(n):!1}),t("final branches=%o",a);let u=await T({...o,branches:a,dryRun:!0,ci:!1,repositoryUrl:o.repositoryUrl},{cwd:e,env:{...process.env,GIT_NOTE_REF:"semantic-release-next-version-empty",GIT_NOTES_REF:"",GIT_NOTES_DISPLAY_REF:""},stdout:process.stderr,stderr:process.stderr});if(!u)throw new Error("semantic-release did not return a next version.");let p=I.parse(u.nextRelease.version);if(!p)throw new Error(`Unable to parse semantic-release version: ${u.nextRelease.version}`);let H=`${p.major}.${p.minor}.${p.patch}`;if(v)return H;let h=await y(e,m(n||"preview"));return`${H}-preview-${h}`}var b={getNextVersion:U};var O=b;export{b as api,O as default,U as getNextVersion};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/next-version.js", "../src/index.js"],
|
|
4
|
+
"sourcesContent": ["// @ts-check\n\nimport createDebug from 'debug'\nimport semanticRelease from 'semantic-release'\nimport semver from 'semver'\nimport { exec } from 'tinyexec'\n\nconst DEFAULT_MAIN_BRANCH = 'main'\nconst debug = createDebug('semantic-release-next-version')\n/** @param {string} mainBranch */\nfunction buildDefaultOptions(mainBranch) {\n /** @type {import('semantic-release').Options} */\n return {\n repositoryUrl: '.',\n branches: [mainBranch, { name: '*', prerelease: true }],\n // eslint-disable-next-line no-template-curly-in-string\n tagFormat: '${version}',\n plugins: ['@semantic-release/commit-analyzer'],\n }\n}\n\n/**\n * @param {string} cwd\n * @param {string[]} args\n */\nasync function runGit(cwd, args) {\n const result = await exec('git', args, {\n nodeOptions: { cwd },\n throwOnError: true,\n })\n if (result.exitCode) {\n throw new Error(`git ${args.join(' ')} failed with code ${result.exitCode}`)\n }\n return result.stdout.trim()\n}\n\n/** @param {string} cwd */\nasync function getCurrentBranch(cwd) {\n if (process.env.GITHUB_HEAD_REF) return process.env.GITHUB_HEAD_REF\n if (process.env.GITHUB_REF_NAME) return process.env.GITHUB_REF_NAME\n try {\n return await runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} cwd */\nasync function getRemoteOriginUrl(cwd) {\n try {\n return await runGit(cwd, ['config', '--get', 'remote.origin.url'])\n } catch {\n return ''\n }\n}\n\n/**\n * @param {import('semantic-release').BranchSpec[]} branches\n * @param {string} branchName\n */\nfunction branchExists(branches, branchName) {\n return branches.some((entry) => {\n if (typeof entry === 'string') return entry === branchName\n return entry?.name === branchName\n })\n}\n\n/** @param {string} branchName */\nfunction toPrereleaseId(branchName) {\n const slug = branchName\n .replace(/[^0-9A-Za-z-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n return slug || 'prerelease'\n}\n\n/** @param {string} cwd @param {string} fallback */\nasync function resolveCommitHash(cwd, fallback) {\n if (process.env.GITHUB_SHA) return process.env.GITHUB_SHA.slice(0, 7)\n try {\n return await runGit(cwd, ['rev-parse', '--short', 'HEAD'])\n } catch {\n return fallback\n }\n}\n\n/**\n * Calculate the next semantic-release version without pushing tags or\n * publishing.\n *\n * @param {import('./index.js').GetNextVersionOptions} [options]\n * @returns {Promise<string>} Next release version.\n */\nexport async function getNextVersion({\n cwd = process.cwd(),\n config = {},\n repositoryUrl,\n branches: overrideBranches,\n tagFormat,\n plugins,\n release = false,\n mainBranch = DEFAULT_MAIN_BRANCH,\n} = {}) {\n debug('start getNextVersion')\n debug('cwd=%s mainBranch=%s release=%s', cwd, mainBranch, release)\n debug(\n 'env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s',\n process.env.GITHUB_HEAD_REF,\n process.env.GITHUB_REF,\n process.env.GITHUB_REF_NAME\n )\n if (\n process.env.GITHUB_HEAD_REF &&\n process.env.GITHUB_REF?.startsWith('refs/pull/')\n ) {\n // Force env-ci to treat the source branch as the release branch on PRs.\n process.env.GITHUB_REF = `refs/heads/${process.env.GITHUB_HEAD_REF}`\n process.env.GITHUB_REF_NAME = process.env.GITHUB_HEAD_REF\n }\n\n const loadedConfig = {\n ...buildDefaultOptions(mainBranch),\n ...config,\n repositoryUrl:\n repositoryUrl ||\n config.repositoryUrl ||\n (await getRemoteOriginUrl(cwd)) ||\n '.',\n ...(tagFormat ? { tagFormat } : {}),\n ...(plugins ? { plugins } : {}),\n }\n debug(\n 'loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s',\n loadedConfig.branches,\n overrideBranches,\n loadedConfig.repositoryUrl\n )\n const currentBranch = (await getCurrentBranch(cwd)) || mainBranch\n debug('currentBranch=%s', currentBranch)\n const baseBranches = overrideBranches ?? loadedConfig.branches\n const branches = Array.isArray(baseBranches)\n ? [...baseBranches]\n : baseBranches\n ? [baseBranches]\n : []\n debug('branches before ensure current=%o', branches)\n\n if (!branchExists(branches, currentBranch)) {\n branches.push({\n name: currentBranch,\n prerelease:\n currentBranch !== mainBranch ? toPrereleaseId(currentBranch) : false,\n })\n }\n debug('final branches=%o', branches)\n\n const result = await semanticRelease(\n {\n ...loadedConfig,\n branches,\n dryRun: true,\n ci: false,\n repositoryUrl: loadedConfig.repositoryUrl,\n },\n {\n cwd,\n // Clear notes refs so stray git notes cannot break tag parsing.\n env: {\n ...process.env,\n GIT_NOTE_REF: 'semantic-release-next-version-empty',\n GIT_NOTES_REF: '',\n GIT_NOTES_DISPLAY_REF: '',\n },\n // Route semantic-release logs to stderr so CLI consumers can safely\n // capture stdout for the version string.\n stdout: process.stderr,\n stderr: process.stderr,\n }\n )\n\n if (!result) {\n throw new Error('semantic-release did not return a next version.')\n }\n\n const parsed = semver.parse(result.nextRelease.version)\n if (!parsed) {\n throw new Error(\n `Unable to parse semantic-release version: ${result.nextRelease.version}`\n )\n }\n\n const baseVersion = `${parsed.major}.${parsed.minor}.${parsed.patch}`\n if (release) return baseVersion\n\n const commitHash = await resolveCommitHash(\n cwd,\n toPrereleaseId(currentBranch || 'preview')\n )\n\n return `${baseVersion}-preview-${commitHash}`\n}\n", "// @ts-check\n\nimport { getNextVersion } from './next-version.js'\n\nconst api = { getNextVersion }\n\nexport { getNextVersion }\nexport { api }\n\nexport default api\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["createDebug", "semanticRelease", "semver", "exec", "DEFAULT_MAIN_BRANCH", "debug", "buildDefaultOptions", "mainBranch", "runGit", "cwd", "args", "result", "getCurrentBranch", "getRemoteOriginUrl", "branchExists", "branches", "branchName", "entry", "toPrereleaseId", "resolveCommitHash", "fallback", "getNextVersion", "config", "repositoryUrl", "overrideBranches", "tagFormat", "plugins", "release", "loadedConfig", "currentBranch", "baseBranches", "parsed", "baseVersion", "commitHash", "api", "getNextVersion", "index_default", "api"]
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "semantic-release-next-version",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Compute the next semantic-release version in dry-run mode for CI and local packaging, without pushing tags or needing tokens",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"actions",
|
|
7
|
+
"semver",
|
|
8
|
+
"version",
|
|
9
|
+
"semantic-release",
|
|
10
|
+
"release",
|
|
11
|
+
"ci"
|
|
12
|
+
],
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "git+https://github.com/dankeboy36/semantic-release-next-version/issues"
|
|
15
|
+
},
|
|
16
|
+
"repository": {
|
|
17
|
+
"url": "git+https://github.com/dankeboy36/semantic-release-next-version.git"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"author": "dankeboy36",
|
|
21
|
+
"type": "module",
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"import": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"default": "./dist/index.js"
|
|
27
|
+
},
|
|
28
|
+
"require": {
|
|
29
|
+
"types": "./dist/index.d.cts",
|
|
30
|
+
"default": "./dist/index.cjs"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"main": "dist/index.cjs",
|
|
35
|
+
"module": "dist/index.js",
|
|
36
|
+
"types": "dist/index.d.ts",
|
|
37
|
+
"bin": {
|
|
38
|
+
"next-version-helper": "bin/cli.cjs"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"bin",
|
|
42
|
+
"dist"
|
|
43
|
+
],
|
|
44
|
+
"scripts": {
|
|
45
|
+
"prebuild": "rimraf dist",
|
|
46
|
+
"build": "npm run build:lib && npm run build:cli && npm run build:types",
|
|
47
|
+
"build:cli": "esbuild src/cli.js --bundle --platform=node --target=node22 --format=esm --minify --sourcemap --external:semantic-release --banner:js=\"import { createRequire as __createRequire } from 'module'; const require = __createRequire(import.meta.url);\" --outfile=dist/cli.js",
|
|
48
|
+
"build:lib": "npm run build:lib:cjs && npm run build:lib:esm",
|
|
49
|
+
"build:lib:cjs": "esbuild src/index.js --bundle --packages=external --platform=node --target=node22 --format=cjs --minify --sourcemap --outfile=dist/index.cjs",
|
|
50
|
+
"build:lib:esm": "esbuild src/index.js --bundle --packages=external --platform=node --target=node22 --format=esm --minify --sourcemap --outfile=dist/index.js",
|
|
51
|
+
"build:types": "cpy index.d.ts ../dist --cwd=src && cpy index.d.ts ../dist --cwd=src --rename=index.d.cts",
|
|
52
|
+
"format": "prettier --write .",
|
|
53
|
+
"lint": "eslint src",
|
|
54
|
+
"release": "semantic-release",
|
|
55
|
+
"test": "vitest run --coverage --reporter verbose"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"debug": "^4.4.3",
|
|
59
|
+
"meow": "^14.0.0",
|
|
60
|
+
"semver": "^7.7.3",
|
|
61
|
+
"tinyexec": "^1.0.2"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@babel/core": "^7.28.6",
|
|
65
|
+
"@babel/eslint-parser": "^7.28.6",
|
|
66
|
+
"@babel/preset-env": "^7.28.6",
|
|
67
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
68
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
69
|
+
"@semantic-release/exec": "^7.1.0",
|
|
70
|
+
"@semantic-release/git": "^10.0.1",
|
|
71
|
+
"@semantic-release/github": "^12.0.2",
|
|
72
|
+
"@semantic-release/npm": "^13.1.3",
|
|
73
|
+
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
74
|
+
"@types/node": "22.x",
|
|
75
|
+
"@types/semver": "^7.7.1",
|
|
76
|
+
"@vitest/coverage-v8": "^4.0.17",
|
|
77
|
+
"@vitest/eslint-plugin": "^1.6.6",
|
|
78
|
+
"cpy-cli": "^6.0.0",
|
|
79
|
+
"esbuild": "^0.27.2",
|
|
80
|
+
"eslint": "^9.39.2",
|
|
81
|
+
"eslint-config-prettier": "^10.1.8",
|
|
82
|
+
"eslint-plugin-import-x": "^4.16.1",
|
|
83
|
+
"neostandard": "^0.12.2",
|
|
84
|
+
"prettier": "^3.8.0",
|
|
85
|
+
"prettier-plugin-jsdoc": "^1.8.0",
|
|
86
|
+
"prettier-plugin-organize-imports": "^4.3.0",
|
|
87
|
+
"prettier-plugin-packagejson": "^2.5.22",
|
|
88
|
+
"rimraf": "^6.1.2",
|
|
89
|
+
"semantic-release": "^25.0.2",
|
|
90
|
+
"vitest": "^4.0.17",
|
|
91
|
+
"wait-for-expect": "^4.0.0"
|
|
92
|
+
},
|
|
93
|
+
"peerDependencies": {
|
|
94
|
+
"@semantic-release/commit-analyzer": ">=13 <14",
|
|
95
|
+
"semantic-release": ">=25 <26"
|
|
96
|
+
}
|
|
97
|
+
}
|