{"version":3,"file":"develop.mjs","sources":["../../../src/node/develop.ts"],"sourcesContent":["import * as tsUtils from '@strapi/typescript-utils';\nimport { strings } from '@strapi/utils';\nimport chokidar from 'chokidar';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport cluster from 'node:cluster';\nimport { createStrapi } from '@strapi/core';\n\nimport type { CLIContext } from '../cli/types';\nimport { checkRequiredDependencies } from './core/dependencies';\nimport { getTimer, prettyTime, type TimeMeasurer } from './core/timer';\nimport { createBuildContext } from './create-build-context';\nimport type { WebpackWatcher } from './webpack/watch';\nimport type { ViteWatcher } from './vite/watch';\n\nimport { writeStaticClientFiles } from './staticFiles';\n\ninterface DevelopOptions extends CLIContext {\n  /**\n   * Which bundler to use for building.\n   *\n   * @default webpack\n   */\n  bundler?: 'webpack' | 'vite';\n  polling?: boolean;\n  open?: boolean;\n  watchAdmin?: boolean;\n  buildAdmin?: boolean;\n}\n\n// This method removes all non-admin build files from the dist directory\nconst cleanupDistDirectory = async ({\n  tsconfig,\n  logger,\n  timer,\n}: Pick<DevelopOptions, 'tsconfig' | 'logger'> & { timer: TimeMeasurer }) => {\n  const distDir = tsconfig?.config?.options?.outDir;\n\n  if (\n    !distDir || // we don't have a dist dir\n    (await fs\n      .access(distDir)\n      .then(() => false)\n      .catch(() => true)) // it doesn't exist -- if it does but no access, that will be caught later\n  ) {\n    return;\n  }\n\n  const timerName = `cleaningDist${Date.now()}`;\n  timer.start(timerName);\n  const cleaningSpinner = logger.spinner(`Cleaning dist dir ${distDir}`).start();\n\n  try {\n    const dirContent = await fs.readdir(distDir);\n    const validFilenames = dirContent\n      // Ignore the admin build folder\n      .filter((filename) => filename !== 'build');\n    for (const filename of validFilenames) {\n      await fs.rm(path.resolve(distDir, filename), { recursive: true });\n    }\n  } catch (err: unknown) {\n    const generatingDuration = timer.end(timerName);\n    cleaningSpinner.text = `Error cleaning dist dir: ${err} (${prettyTime(generatingDuration)})`;\n    cleaningSpinner?.fail();\n    return;\n  }\n\n  const generatingDuration = timer.end(timerName);\n  cleaningSpinner.text = `Cleaning dist dir (${prettyTime(generatingDuration)})`;\n  cleaningSpinner?.succeed();\n};\n\nconst develop = async ({\n  cwd,\n  polling,\n  logger,\n  tsconfig,\n  watchAdmin,\n  buildAdmin,\n  ...options\n}: DevelopOptions) => {\n  const timer = getTimer();\n\n  if (cluster.isPrimary) {\n    const { didInstall } = await checkRequiredDependencies({ cwd, logger }).catch((err) => {\n      logger.error(err.message);\n      process.exit(1);\n    });\n\n    if (didInstall) {\n      return;\n    }\n\n    if (tsconfig?.config) {\n      // Build without diagnostics in case schemas have changed\n      await cleanupDistDirectory({ tsconfig, logger, timer });\n      await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: true } });\n    }\n\n    /**\n     * IF we're not watching the admin we're going to build it, this makes\n     * sure that at least the admin is built for users & they can interact\n     * with the application.\n     */\n    if (!watchAdmin && buildAdmin) {\n      timer.start('createBuildContext');\n      const contextSpinner = logger.spinner(`Building build context`).start();\n      console.log('');\n\n      const ctx = await createBuildContext({\n        cwd,\n        logger,\n        tsconfig,\n        options,\n      });\n      const contextDuration = timer.end('createBuildContext');\n      contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n      contextSpinner.succeed();\n\n      timer.start('creatingAdmin');\n      const adminSpinner = logger.spinner(`Creating admin`).start();\n\n      await writeStaticClientFiles(ctx);\n\n      if (ctx.bundler === 'webpack') {\n        const { build: buildWebpack } = await import('./webpack/build');\n        await buildWebpack(ctx);\n      } else if (ctx.bundler === 'vite') {\n        const { build: buildVite } = await import('./vite/build');\n        await buildVite(ctx);\n      }\n\n      const adminDuration = timer.end('creatingAdmin');\n      adminSpinner.text = `Creating admin (${prettyTime(adminDuration)})`;\n      adminSpinner.succeed();\n    }\n\n    cluster.on('message', async (worker, message) => {\n      switch (message) {\n        case 'reload': {\n          if (tsconfig?.config) {\n            // Build without diagnostics in case schemas have changed\n            await cleanupDistDirectory({ tsconfig, logger, timer });\n            await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: true } });\n          }\n          logger.debug('cluster has the reload message, sending the worker kill message');\n          worker.send('kill');\n          break;\n        }\n        case 'killed': {\n          logger.debug('cluster has the killed message, forking the cluster');\n          cluster.fork();\n          break;\n        }\n        case 'stop': {\n          process.exit(1);\n          break;\n        }\n        default:\n          break;\n      }\n    });\n\n    cluster.fork();\n  }\n\n  if (cluster.isWorker) {\n    timer.start('loadStrapi');\n    const loadStrapiSpinner = logger.spinner(`Loading Strapi`).start();\n\n    const strapi = createStrapi({\n      appDir: cwd,\n      distDir: tsconfig?.config.options.outDir ?? '',\n      autoReload: true,\n      serveAdminPanel: !watchAdmin,\n    });\n\n    /**\n     * If we're watching the admin panel then we're going to attach the watcher\n     * as a strapi middleware.\n     */\n    let bundleWatcher: WebpackWatcher | ViteWatcher | undefined;\n\n    const strapiInstance = await strapi.load();\n\n    if (watchAdmin) {\n      timer.start('createBuildContext');\n      const contextSpinner = logger.spinner(`Building build context`).start();\n      console.log('');\n\n      const ctx = await createBuildContext({\n        cwd,\n        logger,\n        strapi,\n        tsconfig,\n        options,\n      });\n      const contextDuration = timer.end('createBuildContext');\n      contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n      contextSpinner.succeed();\n\n      timer.start('creatingAdmin');\n      const adminSpinner = logger.spinner(`Creating admin`).start();\n\n      await writeStaticClientFiles(ctx);\n\n      if (ctx.bundler === 'webpack') {\n        const { watch: watchWebpack } = await import('./webpack/watch');\n        bundleWatcher = await watchWebpack(ctx);\n      } else if (ctx.bundler === 'vite') {\n        const { watch: watchVite } = await import('./vite/watch');\n        bundleWatcher = await watchVite(ctx);\n      }\n\n      const adminDuration = timer.end('creatingAdmin');\n      adminSpinner.text = `Creating admin (${prettyTime(adminDuration)})`;\n      adminSpinner.succeed();\n    }\n\n    const loadStrapiDuration = timer.end('loadStrapi');\n    loadStrapiSpinner.text = `Loading Strapi (${prettyTime(loadStrapiDuration)})`;\n    loadStrapiSpinner.succeed();\n\n    // For TS projects, type generation is a requirement for the develop command so that the server can restart\n    // For JS projects, we respect the experimental autogenerate setting\n    if (tsconfig?.config || strapi.config.get('typescript.autogenerate') !== false) {\n      timer.start('generatingTS');\n      const generatingTsSpinner = logger.spinner(`Generating types`).start();\n\n      await tsUtils.generators.generate({\n        strapi: strapiInstance,\n        pwd: cwd,\n        rootDir: undefined,\n        logger: { silent: true, debug: false },\n        artifacts: { contentTypes: true, components: true },\n      });\n\n      const generatingDuration = timer.end('generatingTS');\n      generatingTsSpinner.text = `Generating types (${prettyTime(generatingDuration)})`;\n      generatingTsSpinner.succeed();\n    }\n\n    if (tsconfig?.config) {\n      timer.start('compilingTS');\n      const compilingTsSpinner = logger.spinner(`Compiling TS`).start();\n\n      await cleanupDistDirectory({ tsconfig, logger, timer });\n      await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n      const compilingDuration = timer.end('compilingTS');\n      compilingTsSpinner.text = `Compiling TS (${prettyTime(compilingDuration)})`;\n      compilingTsSpinner.succeed();\n    }\n\n    const restart = async () => {\n      if (strapiInstance.reload.isWatching && !strapiInstance.reload.isReloading) {\n        strapiInstance.reload.isReloading = true;\n        strapiInstance.reload();\n      }\n    };\n\n    const watcher = chokidar\n      .watch(cwd, {\n        ignoreInitial: true,\n        usePolling: polling,\n        ignored: [\n          /(^|[/\\\\])\\../, // dot files\n          /tmp/,\n          '**/src/admin/**',\n          '**/src/plugins/**/admin/**',\n          '**/dist/src/plugins/test/admin/**',\n          '**/documentation',\n          '**/documentation/**',\n          '**/node_modules',\n          '**/node_modules/**',\n          '**/plugins.json',\n          '**/build',\n          '**/build/**',\n          '**/log',\n          '**/log/**',\n          '**/logs',\n          '**/logs/**',\n          '**/*.log',\n          '**/index.html',\n          '**/public',\n          '**/public/**',\n          strapiInstance.dirs.static.public,\n          strings.joinBy('/', strapiInstance.dirs.static.public, '**'),\n          '**/*.db*',\n          '**/exports/**',\n          '**/dist/**',\n          '**/*.d.ts',\n          '**/.yalc/**',\n          '**/yalc.lock',\n          // TODO v6: watch only src folder by default, and flip this to watchIncludeFiles\n          ...strapiInstance.config.get('admin.watchIgnoreFiles', []),\n        ],\n      })\n      .on('add', (path) => {\n        strapiInstance.log.info(`File created: ${path}`);\n        restart();\n      })\n      .on('change', (path) => {\n        strapiInstance.log.info(`File changed: ${path}`);\n        restart();\n      })\n      .on('unlink', (path) => {\n        strapiInstance.log.info(`File deleted: ${path}`);\n        restart();\n      });\n\n    process.on('message', async (message) => {\n      switch (message) {\n        case 'kill': {\n          logger.debug(\n            'child process has the kill message, destroying the strapi instance and sending the killed process message'\n          );\n          await watcher.close();\n\n          await strapiInstance.destroy();\n\n          if (bundleWatcher) {\n            bundleWatcher.close();\n          }\n          process.send?.('killed');\n          break;\n        }\n        default:\n          break;\n      }\n    });\n\n    strapiInstance.start();\n  }\n};\n\nexport { develop };\nexport type { DevelopOptions };\n"],"names":["cleanupDistDirectory","tsconfig","logger","timer","distDir","config","options","outDir","fs","access","then","catch","timerName","Date","now","start","cleaningSpinner","spinner","dirContent","readdir","validFilenames","filter","filename","rm","path","resolve","recursive","err","generatingDuration","end","text","prettyTime","fail","succeed","develop","cwd","polling","watchAdmin","buildAdmin","getTimer","cluster","isPrimary","didInstall","checkRequiredDependencies","error","message","process","exit","tsUtils","compile","configOptions","ignoreDiagnostics","contextSpinner","console","log","ctx","createBuildContext","contextDuration","adminSpinner","writeStaticClientFiles","bundler","build","buildWebpack","buildVite","adminDuration","on","worker","debug","send","fork","isWorker","loadStrapiSpinner","strapi","createStrapi","appDir","autoReload","serveAdminPanel","bundleWatcher","strapiInstance","load","watch","watchWebpack","watchVite","loadStrapiDuration","get","generatingTsSpinner","generators","generate","pwd","rootDir","undefined","silent","artifacts","contentTypes","components","compilingTsSpinner","compilingDuration","restart","reload","isWatching","isReloading","watcher","chokidar","ignoreInitial","usePolling","ignored","dirs","static","public","strings","joinBy","info","close","destroy"],"mappings":"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"}