{"version":3,"file":"update-check.mjs","names":[],"sources":["../../src/extension/update-check.ts"],"sourcesContent":["import { thenMaybe } from '#src/core/results.ts';\nimport { defineInterceptor } from '../core/interceptors.ts';\nimport type { UpdateCheckConfig } from '../feature/update-check.ts';\nimport type { AnyPadroneBuilder, CommandTypesBase } from '../types/index.ts';\nimport { getVersion } from '../util/utils.ts';\n\n// ── Interceptor ─────────────────────────────────────────────────────────\n\nfunction createUpdateCheckInterceptor(config: UpdateCheckConfig) {\n  return defineInterceptor({ id: 'padrone:update-check', name: 'padrone:update-check', order: 1000 }, () => {\n    let checkPromise: Promise<(() => void) | undefined> | undefined;\n    let suppressed = false;\n\n    return {\n      start(ctx, next) {\n        const rootCommand = ctx.command;\n        const runtime = ctx.runtime;\n\n        checkPromise = Promise.resolve(getVersion(rootCommand.version)).then((currentVersion) =>\n          import('../feature/update-check.ts').then(({ createUpdateChecker }) =>\n            createUpdateChecker(rootCommand.name, currentVersion, config, runtime),\n          ),\n        );\n\n        return next();\n      },\n      parse(_ctx, next) {\n        return thenMaybe(next(), (res) => {\n          if ('update-check' in res.rawArgs) {\n            if (res.rawArgs['update-check'] === false) suppressed = true;\n            delete res.rawArgs['update-check'];\n          }\n          return res;\n        });\n      },\n      shutdown(_ctx, next) {\n        const result = next();\n        if (suppressed || !checkPromise) return result;\n\n        // Try to show notification synchronously if the check already resolved\n        let resolved: (() => void) | undefined | null = null;\n        checkPromise.then(\n          (fn) => {\n            resolved = fn;\n          },\n          () => {\n            resolved = undefined;\n          },\n        );\n\n        if (resolved !== null) {\n          (resolved as (() => void) | undefined)?.();\n        }\n\n        return result;\n      },\n    };\n  });\n}\n\n// ── Extension ────────────────────────────────────────────────────────────\n\n/**\n * Extension that adds background update checking:\n * - Checks for newer versions on npm (or custom registry) in the background\n * - Shows an update notification after command execution\n * - Respects `--no-update-check` flag to suppress\n *\n * Usage:\n * ```ts\n * createPadrone('my-cli')\n *   .extend(padroneUpdateCheck({ packageName: 'my-cli' }))\n * ```\n */\nexport function padroneUpdateCheck(config: UpdateCheckConfig = {}): <T extends CommandTypesBase>(builder: T) => T {\n  return ((builder: AnyPadroneBuilder) => builder.intercept(createUpdateCheckInterceptor(config))) as any;\n}\n"],"mappings":";;;;AAQA,SAAS,6BAA6B,QAA2B;CAC/D,OAAO,kBAAkB;EAAE,IAAI;EAAwB,MAAM;EAAwB,OAAO;CAAK,SAAS;EACxG,IAAI;EACJ,IAAI,aAAa;EAEjB,OAAO;GACL,MAAM,KAAK,MAAM;IACf,MAAM,cAAc,IAAI;IACxB,MAAM,UAAU,IAAI;IAEpB,eAAe,QAAQ,QAAQ,WAAW,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,mBACpE,OAAO,8BAA6B,CAAC,MAAM,EAAE,0BAC3C,oBAAoB,YAAY,MAAM,gBAAgB,QAAQ,OAAO,CACvE,CACF;IAEA,OAAO,KAAK;GACd;GACA,MAAM,MAAM,MAAM;IAChB,OAAO,UAAU,KAAK,IAAI,QAAQ;KAChC,IAAI,kBAAkB,IAAI,SAAS;MACjC,IAAI,IAAI,QAAQ,oBAAoB,OAAO,aAAa;MACxD,OAAO,IAAI,QAAQ;KACrB;KACA,OAAO;IACT,CAAC;GACH;GACA,SAAS,MAAM,MAAM;IACnB,MAAM,SAAS,KAAK;IACpB,IAAI,cAAc,CAAC,cAAc,OAAO;IAGxC,IAAI,WAA4C;IAChD,aAAa,MACV,OAAO;KACN,WAAW;IACb,SACM;KACJ,WAAW,KAAA;IACb,CACF;IAEA,IAAI,aAAa,MACf,WAAyC;IAG3C,OAAO;GACT;EACF;CACF,CAAC;AACH;;;;;;;;;;;;;AAgBA,SAAgB,mBAAmB,SAA4B,CAAC,GAAkD;CAChH,SAAS,YAA+B,QAAQ,UAAU,6BAA6B,MAAM,CAAC;AAChG"}