UNPKG

@sebbo2002/semantic-release-jsr

Version:

Small `semantic-release` plugin, which adjusts the version in the `jsr.json` file and executes `jsr publish` to publish the module on jsr.io as well.

2 lines 2.6 kB
import{publish as R}from"jsr";import{tmpdir as v}from"node:os";import{join as u}from"node:path";import{existsSync as m,mkdtempSync as J}from"node:fs";import{readFile as C,rm as j,writeFile as $}from"node:fs/promises";async function a(e){let o=e.cwd||process.cwd(),n=e.pkgJsonPath||u(o,"package.json");!e.pkgJsonPath&&!m(n)&&(n=null);let s,r=[],l=u(o,"jsr.json"),t=u(o,"deno.json");m(l)&&r.push(l),m(t)&&r.push(t),n&&r.push(n);for(let w of r){let x=await C(w,"utf8"),y=JSON.parse(x);!s&&y.name&&(s=y.name)}if(!s)throw new Error("No name found in jsr.json or deno.json");let p=e.publishArgs?.slice(0)||[];return(e.allowDirty===void 0||e.allowDirty)&&!p.includes("--allow-dirty")&&p.push("--allow-dirty"),{cwd:o,name:s,prepare:{versionJsonPaths:r},publish:{binFolder:b(),canary:!1,pkgJsonPath:n,publishArgs:p}}}var i;function b(){if(i)return i;let e=J(u(v(),"semantic-release-jsr-"));return i=e,e}async function g(){i&&(await j(i,{recursive:!0,force:!0}),i=void 0)}async function d(e,o){if(!o.nextRelease)return;o.logger.log(`Updating version in ${e}`);let n=o.nextRelease.version,s=await C(e,"utf8");if(JSON.parse(s).version===n){o.logger.log(`Skipped, ${e} is already up to date`);return}let l=/^([\s\S]*"version"\s*:\s*")([^"]+)("[\s\S]*$)/,t=s.replace(l,`$1${n}$3`);if(JSON.parse(t).version!==n)throw new Error(`Failed to replace version in ${e}`);await $(e,t,"utf8"),o.logger.log(`Wrote new version to ${e}`)}async function f(e,o){o.logger.log(`Run jsr publish in ${e.cwd} with ${JSON.stringify(e.publish)}`);let n=Date.now();try{await R(e.cwd,e.publish),o.logger.log(`jsr publish run successfully (took ${Date.now()-n} ms)`)}catch(s){throw o.logger.log(`jsr publish failed after ${Date.now()-n} ms:`),o.logger.error(s instanceof Error?s.stack:s),s}}function P(e,o){let n=`https://jsr.io/${e.name}/versions`;return o.nextRelease&&(n=`https://jsr.io/${e.name}@${o.nextRelease.version}`),{name:"JSR.io",url:n}}async function N(e,o){let n=await a(e);await f({...n,publish:{...n.publish,publishArgs:[...n.publish.publishArgs,"--dry-run"]}},o)}async function F(e,o){let n=await a(e);for(let s of n.prepare.versionJsonPaths)await d(s,o)}async function S(e,o){let n=await a(e);return await f(n,o),P(n,o)}async function k(e,o){o.logger.log("Removing temporary folder"),await g()}async function V(e,o){o.logger.log("Removing temporary folder"),await g()}export{V as fail,P as generatePublishResponse,b as getTemporaryBinFolder,f as jsrPublish,a as parseConfig,F as prepare,S as publish,g as removeTemporaryBinFolder,k as success,d as updateVersionJson,N as verifyConditions}; //# sourceMappingURL=index.js.map