{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { join, resolve, basename } from 'node:path';\nimport { readFileSync } from 'node:fs';\nimport os from 'node:os';\nimport readline from 'node:readline';\nimport crypto from 'crypto';\nimport * as sentry from '@sentry/node';\nimport hasYarn from './utils/has-yarn';\nimport checkRequirements from './utils/check-requirements';\nimport { trackError, captureException } from './utils/usage';\nimport parseDatabaseArguments from './utils/parse-db-arguments';\nimport generateNew from './generate-new';\nimport machineID from './utils/machine-id';\nimport type { Scope, NewOptions } from './types';\n\nexport { default as checkInstallPath } from './utils/check-install-path';\n\nexport type { NewOptions } from './types';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nexport const generateNewApp = (projectDirectory: string, options: Partial<NewOptions>) => {\n  sentry.init({\n    dsn: 'https://841d2b2c9b4d4b43a4cde92794cb705a@sentry.io/1762059',\n  });\n\n  checkRequirements();\n\n  const rootPath = resolve(projectDirectory);\n\n  const tmpPath = join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);\n\n  const useNpm = options.useNpm !== undefined;\n\n  const scope: Scope = {\n    rootPath,\n    name: basename(rootPath),\n    // disable quickstart run app after creation\n    runQuickstartApp: options.run !== false,\n    // use pacakge version as strapiVersion (all packages have the same version);\n    strapiVersion: packageJson.version,\n    debug: options.debug !== undefined,\n    quick: options.quickstart,\n    template: options.template,\n    packageJsonStrapi: {\n      template: options.template,\n      starter: options.starter,\n    },\n    uuid: (process.env.STRAPI_UUID_PREFIX || '') + crypto.randomUUID(),\n    docker: process.env.DOCKER === 'true',\n    deviceId: machineID(),\n    tmpPath,\n    // use yarn if available and --use-npm isn't true\n    useYarn: !useNpm && hasYarn(),\n    installDependencies: true,\n    strapiDependencies: [\n      '@strapi/strapi',\n      '@strapi/plugin-users-permissions',\n      '@strapi/plugin-i18n',\n      '@strapi/plugin-cloud',\n    ],\n    additionalsDependencies: {\n      react: '^18.0.0',\n      'react-dom': '^18.0.0',\n      'react-router-dom': '5.3.4',\n      'styled-components': '5.3.3',\n    },\n    useTypescript: Boolean(options.typescript),\n  };\n\n  sentry.configureScope(function configureScope(sentryScope) {\n    const tags = {\n      os: os.type(),\n      osPlatform: os.platform(),\n      osArch: os.arch(),\n      osRelease: os.release(),\n      version: scope.strapiVersion,\n      nodeVersion: process.versions.node,\n      docker: scope.docker,\n    };\n\n    (Object.keys(tags) as Array<keyof typeof tags>).forEach((tag) => {\n      sentryScope.setTag(tag, tags[tag]);\n    });\n  });\n\n  parseDatabaseArguments({ scope, args: options });\n  initCancelCatcher();\n\n  return generateNew(scope).catch((error) => {\n    console.error(error);\n    return captureException(error).then(() => {\n      return trackError({ scope, error }).then(() => {\n        process.exit(1);\n      });\n    });\n  });\n};\n\nfunction initCancelCatcher() {\n  // Create interface for windows user to let them quit the program.\n  if (process.platform === 'win32') {\n    const rl = readline.createInterface({\n      input: process.stdin,\n      output: process.stdout,\n    });\n\n    rl.on('SIGINT', function sigint() {\n      process.emit('SIGINT');\n    });\n  }\n\n  process.on('SIGINT', () => {\n    process.exit(1);\n  });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAkBA,MAAM,cAAc,KAAK,MAAM,aAAa,QAAQ,WAAW,iBAAiB,GAAG,MAAM,CAAC;AAE7E,MAAA,iBAAiB,CAAC,kBAA0B,YAAiC;AACxF,SAAO,KAAK;AAAA,IACV,KAAK;AAAA,EAAA,CACN;AAEiB;AAEZ,QAAA,WAAW,QAAQ,gBAAgB;AAEzC,QAAM,UAAU,KAAK,GAAG,OAAA,GAAU,SAAS,OAAO,YAAY,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE;AAE5E,QAAA,SAAS,QAAQ,WAAW;AAElC,QAAM,QAAe;AAAA,IACnB;AAAA,IACA,MAAM,SAAS,QAAQ;AAAA;AAAA,IAEvB,kBAAkB,QAAQ,QAAQ;AAAA;AAAA,IAElC,eAAe,YAAY;AAAA,IAC3B,OAAO,QAAQ,UAAU;AAAA,IACzB,OAAO,QAAQ;AAAA,IACf,UAAU,QAAQ;AAAA,IAClB,mBAAmB;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,SAAS,QAAQ;AAAA,IACnB;AAAA,IACA,OAAO,QAAQ,IAAI,sBAAsB,MAAM,OAAO,WAAW;AAAA,IACjE,QAAQ,QAAQ,IAAI,WAAW;AAAA,IAC/B,UAAU,UAAU;AAAA,IACpB;AAAA;AAAA,IAEA,SAAS,CAAC,UAAU,QAAQ;AAAA,IAC5B,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,yBAAyB;AAAA,MACvB,OAAO;AAAA,MACP,aAAa;AAAA,MACb,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,IACvB;AAAA,IACA,eAAe,QAAQ,QAAQ,UAAU;AAAA,EAAA;AAGpC,SAAA,eAAe,SAAS,eAAe,aAAa;AACzD,UAAM,OAAO;AAAA,MACX,IAAI,GAAG,KAAK;AAAA,MACZ,YAAY,GAAG,SAAS;AAAA,MACxB,QAAQ,GAAG,KAAK;AAAA,MAChB,WAAW,GAAG,QAAQ;AAAA,MACtB,SAAS,MAAM;AAAA,MACf,aAAa,QAAQ,SAAS;AAAA,MAC9B,QAAQ,MAAM;AAAA,IAAA;AAGf,WAAO,KAAK,IAAI,EAA+B,QAAQ,CAAC,QAAQ;AAC/D,kBAAY,OAAO,KAAK,KAAK,GAAG,CAAC;AAAA,IAAA,CAClC;AAAA,EAAA,CACF;AAED,yBAAuB,EAAE,OAAO,MAAM,QAAS,CAAA;AAC7B;AAElB,SAAO,YAAY,KAAK,EAAE,MAAM,CAAC,UAAU;AACzC,YAAQ,MAAM,KAAK;AACnB,WAAO,iBAAiB,KAAK,EAAE,KAAK,MAAM;AACxC,aAAO,WAAW,EAAE,OAAO,OAAO,EAAE,KAAK,MAAM;AAC7C,gBAAQ,KAAK,CAAC;AAAA,MAAA,CACf;AAAA,IAAA,CACF;AAAA,EAAA,CACF;AACH;AAEA,SAAS,oBAAoB;AAEvB,MAAA,QAAQ,aAAa,SAAS;AAC1B,UAAA,KAAK,SAAS,gBAAgB;AAAA,MAClC,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,IAAA,CACjB;AAEE,OAAA,GAAG,UAAU,SAAS,SAAS;AAChC,cAAQ,KAAK,QAAQ;AAAA,IAAA,CACtB;AAAA,EACH;AAEQ,UAAA,GAAG,UAAU,MAAM;AACzB,YAAQ,KAAK,CAAC;AAAA,EAAA,CACf;AACH;"}