{"version":3,"file":"cli-node12-dev.mjs","sources":["../src/createNodeWebpackConfig.ts","../src/index.ts","../src/cli.ts"],"sourcesContent":["// const fs = require('fs');\nimport fs from 'fs';\nimport path from 'path';\nimport type {\n  ConfigEntry,\n  Options,\n  FilledWebpackConfiguration,\n} from 'pobpack-types';\nimport {\n  webpack,\n  createModuleConfig,\n  createPluginsConfig,\n  createResolveConfig,\n} from 'pobpack-utils';\nimport type { ExternalsFunctionElement } from 'webpack';\nimport type { Options as NodeExternalsOptions } from 'webpack-node-externals';\nimport nodeExternals from 'webpack-node-externals';\n\nconst ExcludesFalsy = (Boolean as any) as <T>(\n  x: T | false | null | undefined,\n) => x is T;\n\nconst createExternals = (options: Options): ExternalsFunctionElement[] => {\n  const baseOptions: NodeExternalsOptions = {\n    importType: 'commonjs',\n    modulesFromFile: false,\n    allowlist: [\n      require.resolve('../hot'),\n      ...options.includeModules.map(\n        (module: string) => new RegExp(`^${module}(/|$)`),\n      ),\n    ].concat(\n      options.allowlistExternalExtensions\n        ? [new RegExp(`(${options.allowlistExternalExtensions.join('|')})$`)]\n        : [],\n    ),\n  };\n\n  const nodeModulesPaths = [];\n  let p = process.cwd();\n  do {\n    const nodeModulesCurrentPath = path.join(p, 'node_modules');\n    if (fs.existsSync(nodeModulesCurrentPath)) {\n      nodeModulesPaths.push(nodeModulesCurrentPath);\n    }\n    p = path.dirname(p);\n  } while (p !== '/');\n\n  return nodeModulesPaths.map((nodeModulesPath) =>\n    nodeExternals({ ...baseOptions, modulesDir: nodeModulesPath }),\n  );\n};\n\nexport default function createNodeWebpackConfig(\n  options: Options,\n): FilledWebpackConfiguration {\n  return {\n    // production or development\n    mode: options.env === 'production' ? 'production' : 'development',\n\n    // Don't attempt to continue if there are any errors.\n    bail: options.env === 'production',\n\n    // Target node\n    target: 'node',\n\n    // get right stack traces\n    devtool: 'source-map',\n\n    optimization: {\n      noEmitOnErrors: true,\n      minimize: false,\n      ...options.optimization,\n    },\n\n    // don't bundle node_modules dependencies\n    externals: createExternals(options),\n\n    // __dirname and __filename\n    node: {\n      __filename: true,\n      __dirname: true,\n    },\n\n    // use cache\n    cache: options.hmr,\n\n    // bundle size is not relevant for node\n    performance: {\n      hints: false,\n    },\n\n    resolveLoader: {\n      modules: options.resolveLoaderModules || ['node_modules'],\n    },\n\n    resolve: createResolveConfig(['node'], {\n      ...options,\n      babel: {\n        presets: [require.resolve('../babel')],\n        ...options.babel,\n      },\n    }),\n\n    entry: options.entries.reduce(\n      (entries: { [key: string]: string[] }, entry: ConfigEntry) => {\n        if (typeof entry === 'string') entry = { key: entry, path: entry };\n        entries[entry.key] = [\n          options.hmr ? require.resolve('../hot') : undefined,\n          path.join(path.resolve(options.paths.src as string), entry.path),\n        ].filter(ExcludesFalsy);\n        return entries;\n      },\n      {},\n    ),\n\n    output: {\n      path: path.resolve(options.paths.build as string),\n      libraryTarget: 'commonjs2',\n      devtoolModuleFilenameTemplate: '[absolute-resource-path]',\n    },\n\n    module: createModuleConfig(options),\n\n    plugins: createPluginsConfig({\n      ...options,\n      prependPlugins: [\n        options.hmr && new webpack.HotModuleReplacementPlugin(),\n        ...(options.prependPlugins || []),\n      ],\n\n      plugins: [\n        options.hmr &&\n          new webpack.BannerPlugin({\n            banner: `require(\"${require.resolve('../source-map-support')}\");`,\n            raw: true,\n            entryOnly: false,\n            include: /\\.js$/,\n          }),\n        ...options.plugins,\n      ],\n    }),\n  };\n}\n","import { join } from 'path';\nimport debounce from 'debounce';\nimport type {\n  CreateCompilerOptions,\n  Options,\n  PobpackCompiler,\n  WatchCallback,\n} from 'pobpack-types';\nimport { createPobpackCompiler, createAppWebpackConfig } from 'pobpack-utils';\nimport type { Daemon } from 'springbokjs-daemon';\nimport createDaemon from 'springbokjs-daemon';\nimport type { Stats, Watching } from 'webpack';\nimport createNodeWebpackConfig from './createNodeWebpackConfig';\n\nexport const createAppNodeCompiler = (\n  options: Partial<Options>,\n  compilerOptions?: CreateCompilerOptions,\n): PobpackCompiler =>\n  createPobpackCompiler(\n    'node',\n    createAppWebpackConfig(createNodeWebpackConfig)(options),\n    compilerOptions,\n  );\n\nexport const build = (options = {}): Promise<Stats | undefined> => {\n  if (!process.env.NODE_ENV) process.env.NODE_ENV = 'production';\n  const compiler = createAppNodeCompiler({ ...options, hmr: false });\n  compiler.clean();\n  return compiler.run();\n};\n\nexport const watch = (\n  options: Partial<Options>,\n  callback: WatchCallback,\n): PobpackCompiler => {\n  if (typeof options === 'function') {\n    callback = options;\n    options = {};\n  }\n  const compiler = createAppNodeCompiler({ ...options, hmr: true });\n  compiler.clean();\n  compiler.watch(callback);\n  return compiler;\n};\n\nexport interface RunOptions {\n  nodeArgs?: (string | number)[];\n  args?: (string | number)[];\n  cwd?: string;\n  displayName?: string;\n  key?: string;\n}\n\nexport const watchAndRunCompiler = (\n  compiler: PobpackCompiler,\n  options: RunOptions = {},\n): Watching => {\n  let daemon: Daemon;\n  let hadError = false;\n  const debounceRestart = debounce(() => {\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    daemon.restart();\n  }, 1000);\n  const daemonStop = (): void => {\n    debounceRestart.clear();\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    daemon.stop();\n  };\n  const watchingCompiler = compiler.watch((stats) => {\n    const hasErrors = stats ? stats.hasErrors() : false;\n\n    if (hasErrors) {\n      hadError = true;\n      return;\n    }\n\n    if (!daemon) {\n      daemon = createDaemon({\n        key: options.key || 'pobpack-node',\n        displayName: options.displayName,\n        cwd: options.cwd,\n        args: [\n          ...(options.nodeArgs || []),\n          join(\n            // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n            (compiler.webpackConfig.output &&\n              compiler.webpackConfig.output.path) ||\n              '',\n          ),\n          ...(options.args || []),\n        ],\n        // autoRestart: true,\n      });\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      daemon.start();\n      process.on('exit', daemonStop);\n    } else if (daemon.hasExited()) {\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      daemon.start();\n    } else if (hadError) {\n      debounceRestart();\n    } else {\n      // already started, send a signal to ask hot reload\n      try {\n        daemon.sendSIGUSR2();\n      } catch {\n        debounceRestart();\n      }\n    }\n    hadError = false;\n  });\n\n  return {\n    invalidate: () => {\n      watchingCompiler.invalidate();\n    },\n    close: (callback) => {\n      if (daemon) {\n        daemonStop();\n        process.off('exit', daemonStop);\n      }\n      watchingCompiler.close(callback);\n    },\n  };\n};\n\nexport const watchAndRun = (options?: Partial<Options>): PobpackCompiler => {\n  const compiler = createAppNodeCompiler({ ...options, hmr: true });\n  compiler.clean();\n  watchAndRunCompiler(compiler);\n  return compiler;\n};\n","/* eslint-disable unicorn/no-process-exit */\nimport { build, watchAndRun } from '.';\n\nconst cmd = process.argv[2];\n\nif (cmd === 'build') {\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  build();\n} else if (cmd === 'start' || !cmd) {\n  watchAndRun();\n} else {\n  console.log(`Invalid command: ${cmd}`);\n  process.exit(1);\n}\n"],"names":["ExcludesFalsy","Boolean","createExternals","options","baseOptions","importType","modulesFromFile","allowlist","require","resolve","includeModules","map","module","RegExp","concat","allowlistExternalExtensions","join","nodeModulesPaths","p","process","cwd","nodeModulesCurrentPath","path","fs","existsSync","push","dirname","nodeModulesPath","nodeExternals","modulesDir","createNodeWebpackConfig","mode","env","bail","target","devtool","optimization","noEmitOnErrors","minimize","externals","node","__filename","__dirname","cache","hmr","performance","hints","resolveLoader","modules","resolveLoaderModules","createResolveConfig","babel","presets","entry","entries","reduce","key","undefined","paths","src","filter","output","build","libraryTarget","devtoolModuleFilenameTemplate","createModuleConfig","plugins","createPluginsConfig","prependPlugins","webpack","HotModuleReplacementPlugin","BannerPlugin","banner","raw","entryOnly","include","createAppNodeCompiler","compilerOptions","createPobpackCompiler","createAppWebpackConfig","NODE_ENV","compiler","clean","run","watchAndRunCompiler","daemon","hadError","debounceRestart","debounce","restart","daemonStop","clear","stop","watchingCompiler","watch","stats","hasErrors","createDaemon","displayName","args","nodeArgs","webpackConfig","start","on","hasExited","sendSIGUSR2","invalidate","close","callback","off","watchAndRun","cmd","argv","console","log","exit"],"mappings":"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"}