{"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    parseConfig,\n    publish as jsrPublish,\n    removeTemporaryBinFolder,\n    updateVersionJson\n} from './utils.ts';\n","import type {\n    NormalizedPluginConfig,\n    PluginConfig,\n    PublishResponse,\n    PublishResponseContext\n} from './types.ts';\nimport { publish as jsrPublish } from 'jsr';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { existsSync, mkdtempSync } from 'node:fs';\nimport { readFile, rm, writeFile } from 'node:fs/promises';\nimport type {\n    VerifyReleaseContext,\n    VerifyConditionsContext\n} from 'semantic-release';\n\nexport async function parseConfig (config: PluginConfig): Promise<NormalizedPluginConfig> {\n    const cwd = config.cwd || process.cwd();\n\n    let pkgJsonPath: string | null = 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 ((config.allowDirty === undefined || config.allowDirty) && !publishArgs.includes('--allow-dirty')) {\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 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 removeTemporaryBinFolder () {\n    if (temporaryBinFolder) {\n        await rm(temporaryBinFolder, { recursive: true, force: true });\n        temporaryBinFolder = undefined;\n    }\n}\n\nexport async function updateVersionJson (file: string, context: VerifyReleaseContext) {\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\nexport async function publish (config: NormalizedPluginConfig, context: VerifyConditionsContext): Promise<void> {\n    context.logger.log(`Run jsr publish in ${config.cwd} with ${JSON.stringify(config.publish)}`);\n\n    const ms = Date.now();\n    try {\n        await jsrPublish(config.cwd, config.publish);\n        context.logger.log(`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 function generatePublishResponse (config: NormalizedPluginConfig, context: PublishResponseContext): 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","import type {\n    PluginConfig,\n    PublishResponse\n} from './types.ts';\nimport type {\n    FailContext,\n    PrepareContext,\n    PublishContext,\n    SuccessContext,\n    VerifyConditionsContext\n} from 'semantic-release';\nimport {\n    generatePublishResponse,\n    parseConfig,\n    publish as publishUtil,\n    removeTemporaryBinFolder,\n    updateVersionJson\n} from './utils.ts';\n\nexport async function verifyConditions(pluginConfig: PluginConfig, context: VerifyConditionsContext): Promise<void> {\n    const config = await parseConfig(pluginConfig);\n    await publishUtil({\n        ...config,\n        publish: {\n            ...config.publish,\n            publishArgs: [\n                ...config.publish.publishArgs,\n                '--dry-run'\n            ]\n        }\n    }, context);\n}\n\nexport async function prepare(pluginConfig: PluginConfig, context: PrepareContext): 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(pluginConfig: PluginConfig, context: PublishContext): 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 (pluginConfig: PluginConfig, context: SuccessContext) {\n    context.logger.log('Removing temporary folder');\n    await removeTemporaryBinFolder();\n}\n\nexport async function fail (pluginConfig: PluginConfig, context: FailContext) {\n    context.logger.log('Removing temporary folder');\n    await removeTemporaryBinFolder();\n}\n"],"mappings":"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","names":["src_exports","__export","fail","generatePublishResponse","getTemporaryBinFolder","publish","parseConfig","prepare","removeTemporaryBinFolder","success","updateVersionJson","verifyConditions","__toCommonJS","import_jsr","import_node_os","import_node_path","import_node_fs","import_promises","parseConfig","config","cwd","pkgJsonPath","name","versionJsonPaths","jsrJsonPath","denoJsonPath","path","content","json","publishArgs","getTemporaryBinFolder","temporaryBinFolder","removeTemporaryBinFolder","updateVersionJson","file","context","nextVersion","versionRegex","updatedContent","publish","ms","jsrPublish","error","generatePublishResponse","url","verifyConditions","pluginConfig","context","config","parseConfig","publish","prepare","file","updateVersionJson","generatePublishResponse","success","removeTemporaryBinFolder","fail"]}