{"version":3,"file":"create-customized-project.mjs","sources":["../src/create-customized-project.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport { merge } from 'lodash';\n\nimport { trackUsage } from './utils/usage';\nimport defaultConfigs from './utils/db-configs';\nimport clientDependencies from './utils/db-client-dependencies';\nimport dbQuestions from './utils/db-questions';\nimport createProject from './create-project';\nimport type { Configuration, Scope } from './types';\n\nconst LANGUAGES = {\n  javascript: 'JavaScript',\n  typescript: 'TypeScript',\n};\n\nexport default async (scope: Scope) => {\n  if (!scope.useTypescript) {\n    const language = await askAboutLanguages();\n    scope.useTypescript = language === LANGUAGES.typescript;\n  }\n\n  await trackUsage({ event: 'didChooseCustomDatabase', scope });\n\n  const configuration = await askDbInfosAndTest(scope).catch((error) => {\n    return trackUsage({ event: 'didNotConnectDatabase', scope, error }).then(() => {\n      throw error;\n    });\n  });\n\n  console.log();\n  console.log('Creating a project with custom database options.');\n  await trackUsage({ event: 'didConnectDatabase', scope });\n  return createProject(scope, configuration);\n};\n\nasync function askDbInfosAndTest(scope: Scope) {\n  const { client, connection } = await askDatabaseInfos(scope);\n\n  return {\n    client,\n    connection,\n    dependencies: {\n      ...clientDependencies({ client }),\n      ...scope.additionalsDependencies,\n    },\n  } as Configuration;\n}\n\nasync function askDatabaseInfos(scope: Scope) {\n  const { client } = await inquirer.prompt<{ client: 'sqlite' | 'postgres' | 'mysql' }>([\n    {\n      type: 'list',\n      name: 'client',\n      message: 'Choose your default database client',\n      choices: ['sqlite', 'postgres', 'mysql'],\n      default: 'sqlite',\n    },\n  ]);\n\n  const questions = dbQuestions[client].map((q) => q({ scope, client }));\n\n  if (!questions) {\n    return { client };\n  }\n\n  const responses = await inquirer.prompt(questions);\n\n  const connection = merge({}, defaultConfigs[client] || {}, {\n    client,\n    connection: responses,\n  });\n\n  return {\n    client,\n    connection,\n  };\n}\n\nasync function askAboutLanguages() {\n  const { language } = await inquirer.prompt([\n    {\n      type: 'list',\n      name: 'language',\n      message: 'Choose your preferred language',\n      choices: Object.values(LANGUAGES),\n      default: LANGUAGES.javascript,\n    },\n  ]);\n\n  return language;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,MAAM,YAAY;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AACd;AAEA,MAAe,0BAAA,OAAO,UAAiB;AACjC,MAAA,CAAC,MAAM,eAAe;AAClB,UAAA,WAAW,MAAM;AACjB,UAAA,gBAAgB,aAAa,UAAU;AAAA,EAC/C;AAEA,QAAM,WAAW,EAAE,OAAO,2BAA2B,MAAO,CAAA;AAE5D,QAAM,gBAAgB,MAAM,kBAAkB,KAAK,EAAE,MAAM,CAAC,UAAU;AAC7D,WAAA,WAAW,EAAE,OAAO,yBAAyB,OAAO,MAAO,CAAA,EAAE,KAAK,MAAM;AACvE,YAAA;AAAA,IAAA,CACP;AAAA,EAAA,CACF;AAED,UAAQ,IAAI;AACZ,UAAQ,IAAI,kDAAkD;AAC9D,QAAM,WAAW,EAAE,OAAO,sBAAsB,MAAO,CAAA;AAChD,SAAA,cAAc,OAAO,aAAa;AAC3C;AAEA,eAAe,kBAAkB,OAAc;AAC7C,QAAM,EAAE,QAAQ,WAAA,IAAe,MAAM,iBAAiB,KAAK;AAEpD,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,cAAc;AAAA,MACZ,GAAG,mBAAmB,EAAE,QAAQ;AAAA,MAChC,GAAG,MAAM;AAAA,IACX;AAAA,EAAA;AAEJ;AAEA,eAAe,iBAAiB,OAAc;AAC5C,QAAM,EAAE,OAAA,IAAW,MAAM,SAAS,OAAoD;AAAA,IACpF;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,UAAU,YAAY,OAAO;AAAA,MACvC,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAED,QAAM,YAAY,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,OAAO,CAAC,CAAC;AAErE,MAAI,CAAC,WAAW;AACd,WAAO,EAAE,OAAO;AAAA,EAClB;AAEA,QAAM,YAAY,MAAM,SAAS,OAAO,SAAS;AAE3C,QAAA,aAAa,MAAM,CAAA,GAAI,eAAe,MAAM,KAAK,IAAI;AAAA,IACzD;AAAA,IACA,YAAY;AAAA,EAAA,CACb;AAEM,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAe,oBAAoB;AACjC,QAAM,EAAE,SAAA,IAAa,MAAM,SAAS,OAAO;AAAA,IACzC;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,OAAO,OAAO,SAAS;AAAA,MAChC,SAAS,UAAU;AAAA,IACrB;AAAA,EAAA,CACD;AAEM,SAAA;AACT;"}