{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/command.ts"],"sourcesContent":["export {\n    fail,\n    prepare,\n    publish,\n    success,\n    verifyConditions,\n} from './command.ts';\n\nexport {\n    type NormalizedPluginConfig,\n    type PluginConfig,\n    type PublishResponse,\n    type PublishResponseContext,\n} from './types.ts';\n\nexport {\n    generatePublishResponse,\n    getTemporaryBinFolder,\n    publish as jsrPublish,\n    parseConfig,\n    removeTemporaryBinFolder,\n    updateVersionJson,\n} from './utils.ts';\n","import type {\n    VerifyConditionsContext,\n    VerifyReleaseContext,\n} from 'semantic-release';\n\nimport { publish as jsrPublish } from 'jsr';\nimport { existsSync, mkdtempSync } from 'node:fs';\nimport { readFile, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\n\nimport type {\n    NormalizedPluginConfig,\n    PluginConfig,\n    PublishResponse,\n    PublishResponseContext,\n} from './types.ts';\n\nexport async function parseConfig(\n    config: PluginConfig,\n): Promise<NormalizedPluginConfig> {\n    const cwd = config.cwd || process.cwd();\n\n    let pkgJsonPath: null | string =\n        config.pkgJsonPath || join(cwd, 'package.json');\n    if (!config.pkgJsonPath && !existsSync(pkgJsonPath)) {\n        pkgJsonPath = null;\n    }\n\n    let name: string | undefined;\n    const versionJsonPaths: string[] = [];\n    const jsrJsonPath = join(cwd, 'jsr.json');\n    const denoJsonPath = join(cwd, 'deno.json');\n    if (existsSync(jsrJsonPath)) {\n        versionJsonPaths.push(jsrJsonPath);\n    }\n    if (existsSync(denoJsonPath)) {\n        versionJsonPaths.push(denoJsonPath);\n    }\n    if (pkgJsonPath) {\n        versionJsonPaths.push(pkgJsonPath);\n    }\n\n    for (const path of versionJsonPaths) {\n        const content = await readFile(path, 'utf8');\n        const json = JSON.parse(content);\n        if (!name && json.name) {\n            name = json.name;\n        }\n    }\n    if (!name) {\n        throw new Error('No name found in jsr.json or deno.json');\n    }\n\n    const publishArgs = config.publishArgs?.slice(0) || [];\n    if (\n        (config.allowDirty === undefined || config.allowDirty) &&\n        !publishArgs.includes('--allow-dirty')\n    ) {\n        publishArgs.push('--allow-dirty');\n    }\n\n    return {\n        cwd,\n        name,\n        prepare: {\n            versionJsonPaths,\n        },\n        publish: {\n            binFolder: getTemporaryBinFolder(),\n            canary: false,\n            pkgJsonPath: pkgJsonPath,\n            publishArgs,\n        },\n    };\n}\n\nlet temporaryBinFolder: string | undefined;\nexport function generatePublishResponse(\n    config: NormalizedPluginConfig,\n    context: PublishResponseContext,\n): PublishResponse {\n    let url = `https://jsr.io/${config.name}/versions`;\n    if (context.nextRelease) {\n        url = `https://jsr.io/${config.name}@${context.nextRelease.version}`;\n    }\n\n    return {\n        name: 'JSR.io',\n        url,\n    };\n}\n\nexport function getTemporaryBinFolder(): string {\n    if (temporaryBinFolder) {\n        return temporaryBinFolder;\n    }\n\n    const path = mkdtempSync(join(tmpdir(), 'semantic-release-jsr-'));\n    temporaryBinFolder = path;\n    return path;\n}\n\nexport async function publish(\n    config: NormalizedPluginConfig,\n    context: VerifyConditionsContext,\n): Promise<void> {\n    context.logger.log(\n        `Run jsr publish in ${config.cwd} with ${JSON.stringify(config.publish)}`,\n    );\n\n    const ms = Date.now();\n    try {\n        await jsrPublish(config.cwd, config.publish);\n        context.logger.log(\n            `jsr publish run successfully (took ${Date.now() - ms} ms)`,\n        );\n    } catch (error) {\n        context.logger.log(`jsr publish failed after ${Date.now() - ms} ms:`);\n        context.logger.error(error instanceof Error ? error.stack : error);\n        throw error;\n    }\n}\n\nexport async function removeTemporaryBinFolder() {\n    if (temporaryBinFolder) {\n        await rm(temporaryBinFolder, { force: true, recursive: true });\n        temporaryBinFolder = undefined;\n    }\n}\n\nexport async function updateVersionJson(\n    file: string,\n    context: VerifyReleaseContext,\n) {\n    if (!context.nextRelease) {\n        return;\n    }\n\n    context.logger.log(`Updating version in ${file}`);\n    const nextVersion = context.nextRelease.version;\n    const content = await readFile(file, 'utf8');\n    const oldJson = JSON.parse(content);\n    if (oldJson.version === nextVersion) {\n        context.logger.log(`Skipped, ${file} is already up to date`);\n        return;\n    }\n\n    const versionRegex = /^([\\s\\S]*\"version\"\\s*:\\s*\")([^\"]+)(\"[\\s\\S]*$)/;\n\n    const updatedContent = content.replace(versionRegex, `$1${nextVersion}$3`);\n    const newJson = JSON.parse(updatedContent);\n    if (newJson.version !== nextVersion) {\n        throw new Error(`Failed to replace version in ${file}`);\n    }\n\n    await writeFile(file, updatedContent, 'utf8');\n    context.logger.log(`Wrote new version to ${file}`);\n}\n","import type {\n    FailContext,\n    PrepareContext,\n    PublishContext,\n    SuccessContext,\n    VerifyConditionsContext,\n} from 'semantic-release';\n\nimport type { PluginConfig, PublishResponse } from './types.ts';\n\nimport {\n    generatePublishResponse,\n    parseConfig,\n    publish as publishUtil,\n    removeTemporaryBinFolder,\n    updateVersionJson,\n} from './utils.ts';\n\nexport async function fail(pluginConfig: PluginConfig, context: FailContext) {\n    context.logger.log('Removing temporary folder');\n    await removeTemporaryBinFolder();\n}\n\nexport async function prepare(\n    pluginConfig: PluginConfig,\n    context: PrepareContext,\n): Promise<void> {\n    const config = await parseConfig(pluginConfig);\n\n    for (const file of config.prepare.versionJsonPaths) {\n        await updateVersionJson(file, context);\n    }\n}\n\nexport async function publish(\n    pluginConfig: PluginConfig,\n    context: PublishContext,\n): Promise<boolean | PublishResponse> {\n    const config = await parseConfig(pluginConfig);\n    await publishUtil(config, context);\n    return generatePublishResponse(config, context);\n}\n\nexport async function success(\n    pluginConfig: PluginConfig,\n    context: SuccessContext,\n) {\n    context.logger.log('Removing temporary folder');\n    await removeTemporaryBinFolder();\n}\n\nexport async function verifyConditions(\n    pluginConfig: PluginConfig,\n    context: VerifyConditionsContext,\n): Promise<void> {\n    const config = await parseConfig(pluginConfig);\n    await publishUtil(\n        {\n            ...config,\n            publish: {\n                ...config.publish,\n                publishArgs: [...config.publish.publishArgs, '--dry-run'],\n            },\n        },\n        context,\n    );\n}\n"],"mappings":"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","names":["index_exports","__export","fail","generatePublishResponse","getTemporaryBinFolder","publish","parseConfig","prepare","removeTemporaryBinFolder","success","updateVersionJson","verifyConditions","__toCommonJS","import_jsr","import_node_fs","import_promises","import_node_os","import_node_path","parseConfig","config","cwd","pkgJsonPath","name","versionJsonPaths","jsrJsonPath","denoJsonPath","path","content","json","publishArgs","getTemporaryBinFolder","temporaryBinFolder","generatePublishResponse","context","url","publish","ms","jsrPublish","error","removeTemporaryBinFolder","updateVersionJson","file","nextVersion","versionRegex","updatedContent","fail","pluginConfig","context","removeTemporaryBinFolder","prepare","config","parseConfig","file","updateVersionJson","publish","generatePublishResponse","success","verifyConditions"]}