{"version":3,"sources":["../../src/bin/index.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { Cron } from 'croner'\nimport minimist from 'minimist'\nimport { pathToFileURL } from 'node:url'\nimport path from 'path'\n\nimport { findConfig } from '../config/find.js'\nimport { getPayload, type Payload } from '../index.js'\nimport { generateImportMap } from './generateImportMap/index.js'\nimport { generateTypes } from './generateTypes.js'\nimport { info } from './info.js'\nimport { loadEnv } from './loadEnv.js'\nimport { migrate, availableCommands as migrateCommands } from './migrate.js'\n\n// Note: this does not account for any user bin scripts\nconst availableScripts = [\n  'generate:db-schema',\n  'generate:importmap',\n  'generate:types',\n  'info',\n  'jobs:run',\n  'jobs:handle-schedules',\n  'run',\n  ...migrateCommands,\n] as const\n\nexport const bin = async () => {\n  loadEnv()\n  process.env.DISABLE_PAYLOAD_HMR = 'true'\n\n  const args = minimist(process.argv.slice(2))\n  const script = (typeof args._[0] === 'string' ? args._[0] : '').toLowerCase()\n\n  if (args.cron) {\n    new Cron(\n      args.cron,\n      async () => {\n        // If the bin script initializes payload (getPayload), this will only happen once, as getPayload\n        // caches the payload instance on the module scope => no need to manually cache and manage getPayload initialization\n        // outside the Cron here.\n        await runBinScript({ args, script })\n      },\n      {\n        // Do not run consecutive crons if previous crons still ongoing\n        protect: true,\n        // TODO: Remove this compatibility option in 4.0. This only exists to ensure backwards-compatibility between Croner v9 and Croner v10 cron syntax\n        sloppyRanges: true,\n      },\n    )\n\n    process.stdin.resume() // Keep the process alive\n\n    return\n  } else {\n    const { payload } = await runBinScript({ args, script })\n    if (payload) {\n      await payload.destroy() // close database connections after running jobs so process can exit cleanly\n    }\n    process.exit(0)\n  }\n}\n\nasync function runBinScript({\n  args,\n  script,\n}: {\n  args: minimist.ParsedArgs\n  script: string\n}): Promise<{\n  /**\n   * Scripts can return a payload instance if it exists. The bin script runner can then safely\n   * shut off the instance, depending on if it's running in a cron job or not.\n   */\n  payload?: Payload\n}> {\n  if (script === 'info') {\n    await info()\n    return {}\n  }\n\n  if (script === 'run') {\n    const scriptPath = args._[1]\n    if (!scriptPath) {\n      console.error('Please provide a script path to run.')\n      process.exit(1)\n    }\n\n    const absoluteScriptPath = path.resolve(process.cwd(), scriptPath)\n\n    // Modify process.argv to remove 'run' and the script path\n    const originalArgv = process.argv\n    process.argv = [process.argv[0]!, process.argv[1]!, ...args._.slice(2)]\n\n    try {\n      await import(pathToFileURL(absoluteScriptPath).toString())\n    } catch (error) {\n      console.error(`Error running script: ${absoluteScriptPath}`)\n      console.error(error)\n      process.exit(1)\n    } finally {\n      // Restore original process.argv\n      process.argv = originalArgv\n    }\n    return {}\n  }\n\n  const configPath = findConfig()\n  const configPromise = await import(pathToFileURL(configPath).toString())\n  let config = await configPromise\n  if (config.default) {\n    config = await config.default\n  }\n\n  const userBinScript = Array.isArray(config.bin)\n    ? config.bin.find(({ key }: { key: string }) => key === script)\n    : false\n\n  if (userBinScript) {\n    try {\n      const module = await import(pathToFileURL(userBinScript.scriptPath).toString())\n\n      if (!module.script || typeof module.script !== 'function') {\n        console.error(\n          `Could not find \"script\" function export for script ${userBinScript.key} in ${userBinScript.scriptPath}`,\n        )\n      } else {\n        await module.script(config).catch((err: unknown) => {\n          console.log(`Script ${userBinScript.key} failed, details:`)\n          console.error(err)\n        })\n      }\n    } catch (err) {\n      console.log(`Could not find associated bin script for the ${userBinScript.key} command`)\n      console.error(err)\n    }\n\n    return {}\n  }\n\n  if (script.startsWith('migrate')) {\n    await migrate({ config, parsedArgs: args })\n    return {}\n  }\n\n  if (script === 'generate:types') {\n    await generateTypes(config)\n    return {}\n  }\n\n  if (script === 'generate:importmap') {\n    await generateImportMap(config)\n    return {}\n  }\n\n  if (script === 'jobs:run') {\n    const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n    const limit = args.limit ? parseInt(args.limit, 10) : undefined\n    const queue = args.queue ? args.queue : undefined\n    const allQueues = !!args['all-queues']\n    const handleSchedules = !!args['handle-schedules']\n\n    if (handleSchedules) {\n      await payload.jobs.handleSchedules({\n        allQueues,\n        queue,\n      })\n    }\n\n    await payload.jobs.run({\n      allQueues,\n      limit,\n      queue,\n    })\n\n    return { payload }\n  }\n\n  if (script === 'jobs:handle-schedules') {\n    const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n    const queue = args.queue ? args.queue : undefined\n    const allQueues = !!args['all-queues']\n\n    await payload.jobs.handleSchedules({\n      allQueues,\n      queue,\n    })\n\n    return { payload }\n  }\n\n  if (script === 'generate:db-schema') {\n    // Barebones instance to access database adapter, without connecting to the DB\n    const payload = await getPayload({ config, disableDBConnect: true, disableOnInit: true }) // Do not setup crons here\n\n    if (typeof payload.db.generateSchema !== 'function') {\n      payload.logger.error({\n        msg: `${payload.db.packageName} does not support database schema generation`,\n      })\n\n      await payload.destroy()\n      process.exit(1)\n    }\n\n    await payload.db.generateSchema({\n      log: args.log === 'false' ? false : true,\n      prettify: args.prettify === 'false' ? false : true,\n    })\n\n    return { payload }\n  }\n\n  console.error(script ? `Unknown command: \"${script}\"` : 'Please provide a command to run')\n  console.log(`\\nAvailable commands:\\n${availableScripts.map((c) => `  - ${c}`).join('\\n')}`)\n\n  process.exit(1)\n}\n"],"names":["Cron","minimist","pathToFileURL","path","findConfig","getPayload","generateImportMap","generateTypes","info","loadEnv","migrate","availableCommands","migrateCommands","availableScripts","bin","process","env","DISABLE_PAYLOAD_HMR","args","argv","slice","script","_","toLowerCase","cron","runBinScript","protect","sloppyRanges","stdin","resume","payload","destroy","exit","scriptPath","console","error","absoluteScriptPath","resolve","cwd","originalArgv","toString","configPath","configPromise","config","default","userBinScript","Array","isArray","find","key","module","catch","err","log","startsWith","parsedArgs","limit","parseInt","undefined","queue","allQueues","handleSchedules","jobs","run","disableDBConnect","disableOnInit","db","generateSchema","logger","msg","packageName","prettify","map","c","join"],"mappings":"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"}