create-arkos 0.0.26-beta → 0.0.27-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"project-config-inquirer.js","sourceRoot":"","sources":["../../src/utils/project-config-inquirer.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport inquirer from \"inquirer\";\nimport chalk from \"chalk\";\n\nexport interface ProjectConfig {\n projectName: string;\n typescript: boolean;\n validation: {\n type?: \"zod\" | \"class-validator\";\n };\n authentication: {\n type?: \"static\" | \"dynamic\" | \"define later\";\n usernameField?: \"username\" | \"email\" | \"custom\";\n multipleRoles: boolean;\n };\n prisma: {\n provider:\n | \"postgresql\"\n | \"mysql\"\n | \"sqlite\"\n | \"sqlserver\"\n | \"cockroachdb\"\n | \"mongodb\";\n idDatabaseType: string;\n defaultDBurl: string;\n };\n projectPath: string;\n}\n\nclass ProjectConfigInquirer {\n private config: ProjectConfig;\n\n constructor() {\n this.config = {} as ProjectConfig;\n }\n\n async run() {\n await this.promptProjectName();\n await this.promptTypescript();\n await this.promptPrismaProvider();\n await this.promptValidation();\n await this.promptAuthentication();\n\n const projectPath = path.resolve(process.cwd(), this.config.projectName);\n this.config.projectPath = projectPath;\n\n return this.config;\n }\n\n private async promptProjectName() {\n let projectName = process.argv[2];\n\n // If user passed \".\", use current directory name\n if (projectName === \".\") {\n projectName = path.basename(process.cwd());\n }\n\n if (!projectName) {\n const result = await inquirer.prompt([\n {\n type: \"input\",\n name: \"projectName\",\n message: \"What is the name of your project?\",\n default: \"my-arkos-project\",\n validate: this.validateProjectName,\n },\n ]);\n projectName = result.projectName;\n } else {\n // Validate the project name from command line args\n const validation = this.validateProjectName(projectName);\n if (validation !== true) {\n console.error(chalk.red(`Error: ${validation}`));\n process.exit(1);\n }\n }\n\n this.config.projectName = projectName;\n }\n\n private validateProjectName(input: string): boolean | string {\n if (!input || input.length === 0) {\n return \"Project name cannot be empty\";\n }\n\n // Check for valid characters (letters, numbers, hyphens, underscores)\n if (!/^[a-zA-Z0-9_-]+$/.test(input)) {\n return \"Project name can only contain letters, numbers, hyphens, and underscores\";\n }\n\n // Check if it starts with a letter or number (not hyphen or underscore)\n if (!/^[a-zA-Z0-9]/.test(input)) {\n return \"Project name must start with a letter or number\";\n }\n\n // Check if it ends with a letter or number (not hyphen or underscore)\n if (!/[a-zA-Z0-9]$/.test(input)) {\n return \"Project name must end with a letter or number\";\n }\n\n // Check length (reasonable limits)\n if (input.length > 50) {\n return \"Project name must be 50 characters or less\";\n }\n\n // Check for reserved names\n const reservedNames = [\"node_modules\"];\n if (reservedNames.includes(input.toLowerCase())) {\n return \"Project name cannot be a reserved name\";\n }\n\n return true;\n }\n\n private async promptTypescript() {\n const { typescript } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"typescript\",\n message: `Would you like to use ${chalk.blue(\"TypeScript\")}?`,\n default: false,\n },\n ]);\n this.config.typescript = typescript;\n }\n\n private async promptPrismaProvider() {\n const { prismaProvider } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"prismaProvider\",\n message: `What db provider will be used for ${chalk.blue(\"Prisma\")}?`,\n choices: [\n \"postgresql\",\n \"mongodb\",\n \"mysql\",\n \"sqlite\",\n \"sqlserver\",\n \"cockroachdb\",\n ],\n },\n ]);\n\n // Set the correct idDatabaseType based on provider\n let idDatabaseType: string;\n let defaultDBurl: string;\n\n switch (prismaProvider) {\n case \"mongodb\":\n idDatabaseType = '@id @default(auto()) @map(\"_id\") @db.ObjectId';\n defaultDBurl = `mongodb://localhost:27017/${this.config.projectName}`;\n break;\n case \"sqlite\":\n idDatabaseType = \"@id @default(cuid())\";\n defaultDBurl = \"file:../../file.db\";\n break;\n case \"mysql\":\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `mysql://username:password@localhost:3306/${this.config.projectName}`;\n break;\n case \"postgresql\":\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `postgresql://username:password@localhost:5432/${this.config.projectName}`;\n break;\n case \"sqlserver\":\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `sqlserver://localhost:1433;database=${this.config.projectName};username=sa;password=password;encrypt=DANGER_PLAINTEXT`;\n break;\n case \"cockroachdb\":\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `postgresql://username:password@localhost:26257/${this.config.projectName}?sslmode=require`;\n break;\n default:\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `postgresql://username:password@localhost:5432/${this.config.projectName}`;\n }\n\n this.config.prisma = {\n provider: prismaProvider,\n idDatabaseType: idDatabaseType,\n defaultDBurl: defaultDBurl,\n };\n }\n\n private async promptValidation() {\n const { useValidation } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"useValidation\",\n message: `Would you like to set up ${chalk.blue(\"Validation\")}?`,\n default: true,\n },\n ]);\n\n if (useValidation) {\n const { validationType } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"validationType\",\n message: \"Choose validation library:\",\n choices: [\"zod\", \"class-validator\"],\n },\n ]);\n this.config.validation = {\n type: validationType,\n };\n }\n }\n\n private async promptAuthentication() {\n const { useAuthentication } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"useAuthentication\",\n message: `Would you like to set up ${chalk.blue(\"Authentication\")}?`,\n default: true,\n },\n ]);\n\n if (useAuthentication) {\n const { authenticationType } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"authenticationType\",\n message: \"Choose authentication type:\",\n choices: [\"static\", \"dynamic\", \"define later\"],\n },\n ]);\n\n const { usernameField } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"usernameField\",\n message: \"Choose default username field for login:\",\n choices: [\"email\", \"username\", \"define later\"],\n },\n ]);\n\n this.config.authentication = {\n type: authenticationType,\n usernameField:\n usernameField === \"define later\" ? \"custom\" : usernameField,\n multipleRoles: false,\n };\n\n if (\n authenticationType !== \"define later\" ||\n (this.config.prisma.provider !== \"sqlite\" &&\n authenticationType !== \"static\")\n ) {\n const { multipleRoles } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"multipleRoles\",\n default: true,\n message: `Would you like to use authentication with ${chalk.blue(\"Multiple Roles\")}?`,\n },\n ]);\n\n this.config.authentication = {\n ...this.config.authentication,\n multipleRoles,\n };\n } else if (this.config.prisma.provider === \"sqlite\") {\n console.info(\n `\\nSkipping multiple roles option because it is not supported with sqlite prisma provider and static authentication...`\n );\n }\n }\n }\n}\n\nconst projectConfigInquirer = new ProjectConfigInquirer();\n\nexport default projectConfigInquirer;\n"]}
1
+ {"version":3,"file":"project-config-inquirer.js","sourceRoot":"","sources":["../../src/utils/project-config-inquirer.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,wDAAgC;AAChC,kDAA0B;AA2B1B,MAAM,qBAAqB;IAGzB;QACE,IAAI,CAAC,MAAM,GAAG,EAAmB,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAGlC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,GAAG,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;SACvD;;YACC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,cAAI,CAAC,OAAO,CACpC,OAAO,CAAC,GAAG,EAAE,EACb,IAAI,CAAC,MAAM,CAAC,WAAW,CACxB,CAAC;QAEJ,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElC,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACnC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,mCAAmC;oBAC5C,OAAO,EAAE,kBAAkB;oBAC3B,QAAQ,EAAE,IAAI,CAAC,mBAAmB;iBACnC;aACF,CAAC,CAAC;YACH,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;SAClC;aAAM;YAEL,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACzD,IAAI,UAAU,KAAK,IAAI,EAAE;gBACvB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;SACF;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,CAAC;IAEO,mBAAmB,CAAC,KAAa;QACvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,OAAO,8BAA8B,CAAC;SACvC;QAGD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO,0EAA0E,CAAC;SACnF;QAGD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/B,OAAO,iDAAiD,CAAC;SAC1D;QAGD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/B,OAAO,+CAA+C,CAAC;SACxD;QAGD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;YACrB,OAAO,4CAA4C,CAAC;SACrD;QAGD,MAAM,aAAa,GAAG,CAAC,cAAc,CAAC,CAAC;QACvC,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE;YAC/C,OAAO,wCAAwC,CAAC;SACjD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAC3C;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,yBAAyB,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG;gBAC7D,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAC/C;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,qCAAqC,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;gBACrE,OAAO,EAAE;oBACP,YAAY;oBACZ,SAAS;oBACT,OAAO;oBACP,QAAQ;oBACR,WAAW;oBACX,aAAa;iBACd;aACF;SACF,CAAC,CAAC;QAGH,IAAI,cAAsB,CAAC;QAC3B,IAAI,YAAoB,CAAC;QAEzB,QAAQ,cAAc,EAAE;YACtB,KAAK,SAAS;gBACZ,cAAc,GAAG,+CAA+C,CAAC;gBACjE,YAAY,GAAG,6BAA6B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACtE,MAAM;YACR,KAAK,QAAQ;gBACX,cAAc,GAAG,sBAAsB,CAAC;gBACxC,YAAY,GAAG,oBAAoB,CAAC;gBACpC,MAAM;YACR,KAAK,OAAO;gBACV,cAAc,GAAG,sBAAsB,CAAC;gBACxC,YAAY,GAAG,4CAA4C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrF,MAAM;YACR,KAAK,YAAY;gBACf,cAAc,GAAG,sBAAsB,CAAC;gBACxC,YAAY,GAAG,iDAAiD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC1F,MAAM;YACR,KAAK,WAAW;gBACd,cAAc,GAAG,sBAAsB,CAAC;gBACxC,YAAY,GAAG,uCAAuC,IAAI,CAAC,MAAM,CAAC,WAAW,yDAAyD,CAAC;gBACvI,MAAM;YACR,KAAK,aAAa;gBAChB,cAAc,GAAG,sBAAsB,CAAC;gBACxC,YAAY,GAAG,kDAAkD,IAAI,CAAC,MAAM,CAAC,WAAW,kBAAkB,CAAC;gBAC3G,MAAM;YACR;gBACE,cAAc,GAAG,sBAAsB,CAAC;gBACxC,YAAY,GAAG,iDAAiD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;SAC7F;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG;YACnB,QAAQ,EAAE,cAAc;YACxB,cAAc,EAAE,cAAc;YAC9B,YAAY,EAAE,YAAY;SAC3B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAC9C;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,4BAA4B,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG;gBAChE,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,IAAI,aAAa,EAAE;YACjB,IAAI,sBAAsB,GAEtB,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;YAE9B,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;gBACxB,sBAAsB,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;oBAC7C;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,4BAA4B;wBACrC,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC;qBACpC;iBACF,CAAC,CAAC;iBACA;gBACH,OAAO,CAAC,IAAI,CACV,6BAA6B,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,qDAAqD,CACpG,CAAC;aACH;YACD,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG;gBACvB,IAAI,EAAE,sBAAsB,CAAC,cAAc;aAC5C,CAAC;SACH;aAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;SACnC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAClD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,4BAA4B,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG;gBACpE,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,IAAI,iBAAiB,EAAE;YACrB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACnD;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,6BAA6B;oBACtC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC;iBAC/C;aACF,CAAC,CAAC;YAEH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBAC9C;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,0CAA0C;oBACnD,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC;iBAC/C;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG;gBAC3B,IAAI,EAAE,kBAAkB;gBACxB,aAAa,EACX,aAAa,KAAK,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa;gBAC7D,aAAa,EAAE,KAAK;aACrB,CAAC;YAEF,IACE,kBAAkB,KAAK,cAAc;gBACrC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;oBACvC,kBAAkB,KAAK,QAAQ,CAAC,EAClC;gBACA,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;oBAC9C;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,6CAA6C,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG;qBACtF;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG;oBAC3B,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;oBAC7B,aAAa;iBACd,CAAC;aACH;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBACnD,OAAO,CAAC,IAAI,CACV,0HAA0H,CAC3H,CAAC;aACH;SACF;IACH,CAAC;CACF;AAED,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAE1D,kBAAe,qBAAqB,CAAC","sourcesContent":["import path from \"path\";\nimport inquirer from \"inquirer\";\nimport chalk from \"chalk\";\n\nexport interface ProjectConfig {\n projectName: string;\n typescript: boolean;\n validation: {\n type?: \"zod\" | \"class-validator\";\n };\n authentication: {\n type?: \"static\" | \"dynamic\" | \"define later\";\n usernameField?: \"username\" | \"email\" | \"custom\";\n multipleRoles: boolean;\n };\n prisma: {\n provider:\n | \"postgresql\"\n | \"mysql\"\n | \"sqlite\"\n | \"sqlserver\"\n | \"cockroachdb\"\n | \"mongodb\";\n idDatabaseType: string;\n defaultDBurl: string;\n };\n projectPath: string;\n}\n\nclass ProjectConfigInquirer {\n private config: ProjectConfig;\n\n constructor() {\n this.config = {} as ProjectConfig;\n }\n\n async run() {\n await this.promptProjectName();\n await this.promptTypescript();\n await this.promptPrismaProvider();\n await this.promptValidation();\n await this.promptAuthentication();\n\n // If user passed \".\", use current directory name\n if (this.config.projectName === \".\") {\n this.config.projectName = path.basename(process.cwd());\n this.config.projectPath = path.resolve(process.cwd());\n } else\n this.config.projectPath = path.resolve(\n process.cwd(),\n this.config.projectName\n );\n\n return this.config;\n }\n\n private async promptProjectName() {\n let projectName = process.argv[2];\n\n if (!projectName) {\n const result = await inquirer.prompt([\n {\n type: \"input\",\n name: \"projectName\",\n message: \"What is the name of your project?\",\n default: \"my-arkos-project\",\n validate: this.validateProjectName,\n },\n ]);\n projectName = result.projectName;\n } else {\n // Validate the project name from command line args\n const validation = this.validateProjectName(projectName);\n if (validation !== true) {\n console.error(chalk.red(`Error: ${validation}`));\n process.exit(1);\n }\n }\n\n this.config.projectName = projectName;\n }\n\n private validateProjectName(input: string): boolean | string {\n if (!input || input.length === 0) {\n return \"Project name cannot be empty\";\n }\n\n // Check for valid characters (letters, numbers, hyphens, underscores)\n if (!/^[a-zA-Z0-9_-]+$/.test(input)) {\n return \"Project name can only contain letters, numbers, hyphens, and underscores\";\n }\n\n // Check if it starts with a letter or number (not hyphen or underscore)\n if (!/^[a-zA-Z0-9]/.test(input)) {\n return \"Project name must start with a letter or number\";\n }\n\n // Check if it ends with a letter or number (not hyphen or underscore)\n if (!/[a-zA-Z0-9]$/.test(input)) {\n return \"Project name must end with a letter or number\";\n }\n\n // Check length (reasonable limits)\n if (input.length > 50) {\n return \"Project name must be 50 characters or less\";\n }\n\n // Check for reserved names\n const reservedNames = [\"node_modules\"];\n if (reservedNames.includes(input.toLowerCase())) {\n return \"Project name cannot be a reserved name\";\n }\n\n return true;\n }\n\n private async promptTypescript() {\n const { typescript } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"typescript\",\n message: `Would you like to use ${chalk.blue(\"TypeScript\")}?`,\n default: false,\n },\n ]);\n this.config.typescript = typescript;\n }\n\n private async promptPrismaProvider() {\n const { prismaProvider } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"prismaProvider\",\n message: `What db provider will be used for ${chalk.blue(\"Prisma\")}?`,\n choices: [\n \"postgresql\",\n \"mongodb\",\n \"mysql\",\n \"sqlite\",\n \"sqlserver\",\n \"cockroachdb\",\n ],\n },\n ]);\n\n // Set the correct idDatabaseType based on provider\n let idDatabaseType: string;\n let defaultDBurl: string;\n\n switch (prismaProvider) {\n case \"mongodb\":\n idDatabaseType = '@id @default(auto()) @map(\"_id\") @db.ObjectId';\n defaultDBurl = `mongodb://localhost:27017/${this.config.projectName}`;\n break;\n case \"sqlite\":\n idDatabaseType = \"@id @default(cuid())\";\n defaultDBurl = \"file:../../file.db\";\n break;\n case \"mysql\":\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `mysql://username:password@localhost:3306/${this.config.projectName}`;\n break;\n case \"postgresql\":\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `postgresql://username:password@localhost:5432/${this.config.projectName}`;\n break;\n case \"sqlserver\":\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `sqlserver://localhost:1433;database=${this.config.projectName};username=sa;password=password;encrypt=DANGER_PLAINTEXT`;\n break;\n case \"cockroachdb\":\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `postgresql://username:password@localhost:26257/${this.config.projectName}?sslmode=require`;\n break;\n default:\n idDatabaseType = \"@id @default(uuid())\";\n defaultDBurl = `postgresql://username:password@localhost:5432/${this.config.projectName}`;\n }\n\n this.config.prisma = {\n provider: prismaProvider,\n idDatabaseType: idDatabaseType,\n defaultDBurl: defaultDBurl,\n };\n }\n\n private async promptValidation() {\n const { useValidation } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"useValidation\",\n message: `Would you like to set up ${chalk.blue(\"Validation\")}?`,\n default: true,\n },\n ]);\n\n if (useValidation) {\n let validationTypeResponse: {\n validationType: \"zod\" | \"class-validator\";\n } = { validationType: \"zod\" };\n\n if (this.config.typescript)\n validationTypeResponse = await inquirer.prompt([\n {\n type: \"list\",\n name: \"validationType\",\n message: \"Choose validation library:\",\n choices: [\"zod\", \"class-validator\"],\n },\n ]);\n else {\n console.info(\n `Validation library set as ${chalk.cyan(\"zod\")}, (class-validator is not supported on JavaScript).`\n );\n }\n this.config.validation = {\n type: validationTypeResponse.validationType,\n };\n } else if (!this.config.typescript) {\n }\n }\n\n private async promptAuthentication() {\n const { useAuthentication } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"useAuthentication\",\n message: `Would you like to set up ${chalk.blue(\"Authentication\")}?`,\n default: true,\n },\n ]);\n\n if (useAuthentication) {\n const { authenticationType } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"authenticationType\",\n message: \"Choose authentication type:\",\n choices: [\"static\", \"dynamic\", \"define later\"],\n },\n ]);\n\n const { usernameField } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"usernameField\",\n message: \"Choose default username field for login:\",\n choices: [\"email\", \"username\", \"define later\"],\n },\n ]);\n\n this.config.authentication = {\n type: authenticationType,\n usernameField:\n usernameField === \"define later\" ? \"custom\" : usernameField,\n multipleRoles: false,\n };\n\n if (\n authenticationType !== \"define later\" ||\n (this.config.prisma.provider !== \"sqlite\" &&\n authenticationType !== \"static\")\n ) {\n const { multipleRoles } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"multipleRoles\",\n default: true,\n message: `Would you like to use authentication with ${chalk.blue(\"Multiple Roles\")}?`,\n },\n ]);\n\n this.config.authentication = {\n ...this.config.authentication,\n multipleRoles,\n };\n } else if (this.config.prisma.provider === \"sqlite\") {\n console.info(\n `\\nSkipping multiple roles option because it is not supported with sqlite prisma provider and static authentication mode.`\n );\n }\n }\n }\n}\n\nconst projectConfigInquirer = new ProjectConfigInquirer();\n\nexport default projectConfigInquirer;\n"]}
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -15,106 +6,112 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
6
  const path_1 = __importDefault(require("path"));
16
7
  const fs_1 = __importDefault(require("fs"));
17
8
  const handlebars_1 = __importDefault(require("handlebars"));
18
- const npm_helpers_1 = require("./helpers/npm.helpers");
19
9
  class TemplateCompiler {
20
- canCompileAuthenticationTemplates(config) {
21
- return __awaiter(this, void 0, void 0, function* () {
22
- return !!config.authentication;
23
- });
10
+ async canCompileAuthenticationTemplates(config) {
11
+ return !!config.authentication;
24
12
  }
25
13
  filesToBeSkipped(config) {
26
- var _a, _b, _c;
27
14
  const files = [];
28
- const zodAuthSchemaFiles = [
15
+ const authSharedPrismaFiles = ["user.prisma.hbs"];
16
+ const dynamicAuthPrismaFiles = [
17
+ "auth-permission.prisma.hbs",
18
+ "auth-role.prisma.hbs",
19
+ "user-role.prisma.hbs",
20
+ ];
21
+ const sharedAuthZodSchemaFiles = [
29
22
  "login.schema.ts.hbs",
30
23
  "signup.schema.ts.hbs",
31
24
  "update-password.schema.ts.hbs",
32
25
  "update-me.schema.ts.hbs",
26
+ ];
27
+ const dynamicAuthZodSchemaFiles = [
33
28
  "create-auth-permission.schema.ts.hbs",
34
29
  "update-auth-permission.schema.ts.hbs",
35
30
  "create-auth-role.schema.ts.hbs",
36
31
  "update-auth-role.schema.ts.hbs",
37
32
  ];
38
- const classValidatorAuthDtoFiles = [
33
+ const userZodSchemaFiles = [
34
+ "create-user.schema.ts.hbs",
35
+ "update-user.schema.ts.hbs",
36
+ ];
37
+ const userClassValidatorDtoFiles = [
38
+ "create-user.dto.ts.hbs",
39
+ "update-user.dto.ts.hbs",
40
+ ];
41
+ const sharedAuthClassValidatorDtoFiles = [
39
42
  "login.dto.ts.hbs",
40
43
  "signup.dto.ts.hbs",
41
44
  "update-password.dto.ts.hbs",
42
45
  "update-me.dto.ts.hbs",
46
+ ];
47
+ const dynamicAuthClassValidatorDtoFiles = [
43
48
  "create-auth-permission.dto.ts.hbs",
44
49
  "update-auth-permission.dto.ts.hbs",
45
50
  "create-auth-role.dto.ts.hbs",
46
51
  "update-auth-role.dto.ts.hbs",
47
52
  ];
48
- const zodUserSchemaFiles = [
49
- "create-user.schema.ts.hbs",
50
- "update-user.schema.ts.hbs",
53
+ const authModuleComponents = [
54
+ "auth.middlewares.ts.hbs",
55
+ "auth.query.ts.hbs",
51
56
  ];
52
- const classValidatorUserSchemaFiles = [
53
- "create-user.dto.ts.hbs",
54
- "update-user.dto.ts.hbs",
57
+ const authPermissionModuleComponents = [
58
+ "auth-permission.auth.ts.hbs",
59
+ "auth-permission.query.ts.hbs",
60
+ "auth-permission.service.ts.hbs",
61
+ ];
62
+ const authRoleModuleComponents = [
63
+ "auth-role.auth.ts.hbs",
64
+ "auth-role.query.ts.hbs",
65
+ "auth-role.service.ts.hbs",
55
66
  ];
56
- const userComponents = [
67
+ const userModuleComponents = [
57
68
  "user.middlewares.ts.hbs",
58
69
  "user.query.ts.hbs",
59
70
  "user.service.ts.hbs",
60
- "user.prisma.hbs",
61
- ];
62
- const authComponents = [
63
- "auth.middlewares.ts.hbs",
64
- "auth.query.ts.hbs",
65
- "auth-role.prisma.hbs",
66
- "auth-permission.prisma.hbs",
67
- "user-role.prisma.hbs",
71
+ "user.auth.ts.hbs",
68
72
  ];
69
- if (((_a = config.authentication) === null || _a === void 0 ? void 0 : _a.type) === "define later")
70
- files.push(...userComponents, ...authComponents, ...zodAuthSchemaFiles, ...classValidatorAuthDtoFiles, ...zodUserSchemaFiles, ...classValidatorUserSchemaFiles);
71
- if (((_b = config.authentication) === null || _b === void 0 ? void 0 : _b.type) === "static" ||
72
- ((_c = config.authentication) === null || _c === void 0 ? void 0 : _c.type) === "define later")
73
- files.push(...[
74
- "auth-role.prisma.hbs",
75
- "auth-permission.prisma.hbs",
76
- "user-role.prisma.hbs",
77
- ]);
73
+ if (config.authentication?.type === "define later")
74
+ files.push(...authSharedPrismaFiles, ...dynamicAuthPrismaFiles, ...sharedAuthZodSchemaFiles, ...dynamicAuthZodSchemaFiles, ...sharedAuthClassValidatorDtoFiles, ...dynamicAuthClassValidatorDtoFiles, ...userModuleComponents, ...authModuleComponents, ...authPermissionModuleComponents, ...authRoleModuleComponents);
75
+ if (config.authentication?.type === "static")
76
+ files.push(...dynamicAuthPrismaFiles, ...dynamicAuthZodSchemaFiles, ...dynamicAuthClassValidatorDtoFiles, ...authPermissionModuleComponents, ...authRoleModuleComponents);
78
77
  if (config.validation.type !== "zod")
79
- files.push(...zodUserSchemaFiles, ...zodAuthSchemaFiles);
78
+ files.push(...sharedAuthZodSchemaFiles, ...dynamicAuthZodSchemaFiles, ...userZodSchemaFiles);
80
79
  if (config.validation.type !== "class-validator")
81
- files.push(...classValidatorUserSchemaFiles, ...classValidatorAuthDtoFiles);
80
+ files.push(...sharedAuthClassValidatorDtoFiles, ...dynamicAuthClassValidatorDtoFiles, ...userClassValidatorDtoFiles);
82
81
  if (!config.typescript)
83
82
  files.push(...["tsconfig.json.hbs"]);
84
- if (config === null || config === void 0 ? void 0 : config.typescript)
83
+ if (config?.typescript)
85
84
  files.push(...["jsconfig.json.hbs"]);
86
85
  return files;
87
86
  }
88
- compile(templatesDir, config) {
89
- return __awaiter(this, void 0, void 0, function* () {
90
- const outputDir = config.projectPath;
91
- const isTypescript = config.typescript;
92
- const filesToBeSkipped = this.filesToBeSkipped(config);
93
- function processTemplates(dir, relativeDir = "") {
94
- fs_1.default.readdirSync(dir, { withFileTypes: true }).forEach((dirent) => __awaiter(this, void 0, void 0, function* () {
95
- if (filesToBeSkipped.includes(dirent.name))
96
- return;
97
- const fullPath = path_1.default.join(dir, dirent.name);
98
- const relativePath = path_1.default.join(relativeDir, dirent.name);
99
- if (dirent.isDirectory()) {
100
- processTemplates(fullPath, relativePath);
101
- }
102
- else if (dirent.name.endsWith(".hbs")) {
103
- const templatePath = fullPath;
104
- const template = handlebars_1.default.compile(fs_1.default.readFileSync(templatePath, "utf8"));
105
- let arkosCurrentVersion = (0, npm_helpers_1.getNpmPackageVersion)("arkos");
106
- const content = template(Object.assign(Object.assign({}, config), { arkosCurrentVersion }));
107
- const ext = isTypescript ? ".ts" : ".js";
108
- let outputPath = path_1.default.join(outputDir, relativePath.replace(".hbs", ""));
109
- if (dirent.name.endsWith(".ts.hbs"))
110
- outputPath = path_1.default.join(outputDir, relativePath.replace(".ts.hbs", ext));
111
- fs_1.default.mkdirSync(path_1.default.dirname(outputPath), { recursive: true });
112
- fs_1.default.writeFileSync(outputPath, content);
113
- }
114
- }));
115
- }
116
- processTemplates(templatesDir);
117
- });
87
+ async compile(templatesDir, config) {
88
+ const outputDir = config.projectPath;
89
+ const isTypescript = config.typescript;
90
+ const filesToBeSkipped = this.filesToBeSkipped(config);
91
+ function processTemplates(dir, relativeDir = "") {
92
+ fs_1.default.readdirSync(dir, { withFileTypes: true }).forEach(async (dirent) => {
93
+ if (filesToBeSkipped.includes(dirent.name))
94
+ return;
95
+ const fullPath = path_1.default.join(dir, dirent.name);
96
+ const relativePath = path_1.default.join(relativeDir, dirent.name);
97
+ if (dirent.isDirectory()) {
98
+ processTemplates(fullPath, relativePath);
99
+ }
100
+ else if (dirent.name.endsWith(".hbs")) {
101
+ const templatePath = fullPath;
102
+ const template = handlebars_1.default.compile(fs_1.default.readFileSync(templatePath, "utf8"));
103
+ let arkosCurrentVersion = "1.2.13-beta";
104
+ const content = template({ ...config, arkosCurrentVersion });
105
+ const ext = isTypescript ? ".ts" : ".js";
106
+ let outputPath = path_1.default.join(outputDir, relativePath.replace(".hbs", ""));
107
+ if (dirent.name.endsWith(".ts.hbs"))
108
+ outputPath = path_1.default.join(outputDir, relativePath.replace(".ts.hbs", ext));
109
+ fs_1.default.mkdirSync(path_1.default.dirname(outputPath), { recursive: true });
110
+ fs_1.default.writeFileSync(outputPath, content);
111
+ }
112
+ });
113
+ }
114
+ processTemplates(templatesDir);
118
115
  }
119
116
  }
120
117
  const templateCompiler = new TemplateCompiler();
@@ -1 +1 @@
1
- {"version":3,"file":"template-compiler.js","sourceRoot":"","sources":["../../src/utils/template-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["// import { ProjectConfig } from \"./project-config-inquirer\";\n// import path from \"path\";\n// import fs from \"fs\";\n// import handlebars from \"handlebars\";\n// import { getNpmPackageVersion } from \"./helpers/npm.helpers\";\n\n// class TemplateCompiler {\n// async canCompileAuthenticationTemplates(config: ProjectConfig) {\n// return !!config.authentication;\n// }\n\n// filesToBeSkipped(config: ProjectConfig) {\n// const files: string[] = [];\n// const zodAuthSchemaFiles = [\n// \"login.schema.ts.hbs\",\n// \"signup.schema.ts.hbs\",\n// \"update-password.schema.ts.hbs\",\n// \"update-me.schema.ts.hbs\",\n// ];\n\n// const classValidatorAuthDtoFiles = [\n// \"login.dto.ts.hbs\",\n// \"signup.dto.ts.hbs\",\n// \"update-password.dto.ts.hbs\",\n// \"update-me.dto.ts.hbs\",\n// ];\n\n// const zodUserSchemaFiles = [\n// \"create-user.schema.ts.hbs\",\n// \"update-user.schema.ts.hbs\",\n// ];\n\n// const classValidatorUserSchemaFiles = [\n// \"create-user.dto.ts.hbs\",\n// \"update-user.dto.ts.hbs\",\n// ];\n\n// const userComponents = [\n// \"user.middlewares.ts.hbs\",\n// \"user.query.ts.hbs\",\n// \"user.service.ts.hbs\",\n// \"user.prisma.hbs\",\n// ];\n\n// const authComponents = [\n// \"auth.middlewares.ts.hbs\",\n// \"auth.query.ts.hbs\",\n// \"auth-role.prisma.hbs\",\n// \"auth-permission.prisma.hbs\",\n// \"user-role.prisma.hbs\",\n// ];\n\n// // Ignoring auth relation files when auth is set to define later\n// if (config.authentication?.type === \"define later\")\n// files.push(\n// ...userComponents,\n// ...authComponents,\n// ...zodAuthSchemaFiles,\n// ...classValidatorAuthDtoFiles,\n// ...zodUserSchemaFiles,\n// ...classValidatorUserSchemaFiles\n// );\n\n// // Ignoring prisma models required only on dynamic authentication\n// if (\n// config.authentication?.type === \"static\" ||\n// config.authentication?.type === \"define later\"\n// )\n// files.push(\n// ...[\n// \"auth-role.prisma.hbs\",\n// \"auth-permission.prisma.hbs\",\n// \"user-role.prisma.hbs\",\n// ]\n// );\n\n// // Ignore zod related files when validation is class-validator\n// if (config.validation.type !== \"zod\")\n// files.push(...zodUserSchemaFiles, ...zodAuthSchemaFiles);\n\n// // Ignore class-validator related files when validation is zod\n// if (config.validation.type !== \"class-validator\")\n// files.push(\n// ...classValidatorUserSchemaFiles,\n// ...classValidatorAuthDtoFiles\n// );\n\n// // Ignoring typescript related files when typescript false\n// if (!config.typescript) files.push(...[\"tsconfig.json.hbs\"]);\n\n// // Ignoring javascript related files when typescript true\n// if (config?.typescript) files.push(...[\"jsconfig.json.hbs\"]);\n\n// return files;\n// }\n// /**\n// * Compiles the Arkos.js project with handlebars templates\n// *\n// * @param templatesDir {string} templates location\n// * @param config {ProjectConfig} the project configuration\n// * @returns void\n// * */\n// async compile(templatesDir: string, config: ProjectConfig) {\n// const outputDir = config.projectPath;\n// const isTypescript = config.typescript;\n// const filesToBeSkipped = this.filesToBeSkipped(config);\n\n// function processTemplates(dir: string, relativeDir = \"\") {\n// fs.readdirSync(dir, { withFileTypes: true }).forEach(async (dirent) => {\n// if (filesToBeSkipped.includes(dirent.name)) return;\n\n// const fullPath = path.join(dir, dirent.name);\n// const relativePath = path.join(relativeDir, dirent.name);\n\n// if (dirent.isDirectory()) {\n// processTemplates(fullPath, relativePath);\n// } else if (dirent.name.endsWith(\".hbs\")) {\n// const templatePath = fullPath;\n// const template = handlebars.compile(\n// fs.readFileSync(templatePath, \"utf8\")\n// );\n\n// let arkosCurrentVersion = getNpmPackageVersion(\"arkos\");\n\n// const content = template({ ...config, arkosCurrentVersion });\n// const ext = isTypescript ? \".ts\" : \".js\";\n\n// let outputPath = path.join(\n// outputDir,\n// relativePath.replace(\".hbs\", \"\")\n// );\n// if (dirent.name.endsWith(\".ts.hbs\"))\n// outputPath = path.join(\n// outputDir,\n// relativePath.replace(\".ts.hbs\", ext)\n// );\n\n// fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n// fs.writeFileSync(outputPath, content);\n// }\n// });\n// }\n\n// processTemplates(templatesDir);\n// }\n// }\n\n// const templateCompiler = new TemplateCompiler();\n\n// export default templateCompiler;\nimport { ProjectConfig } from \"./project-config-inquirer\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport handlebars from \"handlebars\";\nimport { getNpmPackageVersion } from \"./helpers/npm.helpers\";\n\nclass TemplateCompiler {\n async canCompileAuthenticationTemplates(config: ProjectConfig) {\n return !!config.authentication;\n }\n\n filesToBeSkipped(config: ProjectConfig) {\n const files: string[] = [];\n const zodAuthSchemaFiles = [\n \"login.schema.ts.hbs\",\n \"signup.schema.ts.hbs\",\n \"update-password.schema.ts.hbs\",\n \"update-me.schema.ts.hbs\",\n \"create-auth-permission.schema.ts.hbs\",\n \"update-auth-permission.schema.ts.hbs\",\n \"create-auth-role.schema.ts.hbs\",\n \"update-auth-role.schema.ts.hbs\",\n ];\n\n const classValidatorAuthDtoFiles = [\n \"login.dto.ts.hbs\",\n \"signup.dto.ts.hbs\",\n \"update-password.dto.ts.hbs\",\n \"update-me.dto.ts.hbs\",\n \"create-auth-permission.dto.ts.hbs\",\n \"update-auth-permission.dto.ts.hbs\",\n \"create-auth-role.dto.ts.hbs\",\n \"update-auth-role.dto.ts.hbs\",\n ];\n\n const zodUserSchemaFiles = [\n \"create-user.schema.ts.hbs\",\n \"update-user.schema.ts.hbs\",\n ];\n\n const classValidatorUserSchemaFiles = [\n \"create-user.dto.ts.hbs\",\n \"update-user.dto.ts.hbs\",\n ];\n\n const userComponents = [\n \"user.middlewares.ts.hbs\",\n \"user.query.ts.hbs\",\n \"user.service.ts.hbs\",\n \"user.prisma.hbs\",\n ];\n\n const authComponents = [\n \"auth.middlewares.ts.hbs\",\n \"auth.query.ts.hbs\",\n \"auth-role.prisma.hbs\",\n \"auth-permission.prisma.hbs\",\n \"user-role.prisma.hbs\",\n ];\n\n // Ignoring auth relation files when auth is set to define later\n if (config.authentication?.type === \"define later\")\n files.push(\n ...userComponents,\n ...authComponents,\n ...zodAuthSchemaFiles,\n ...classValidatorAuthDtoFiles,\n ...zodUserSchemaFiles,\n ...classValidatorUserSchemaFiles\n );\n\n // Ignoring prisma models required only on dynamic authentication\n if (\n config.authentication?.type === \"static\" ||\n config.authentication?.type === \"define later\"\n )\n files.push(\n ...[\n \"auth-role.prisma.hbs\",\n \"auth-permission.prisma.hbs\",\n \"user-role.prisma.hbs\",\n ]\n );\n\n // Ignore zod related files when validation is class-validator\n if (config.validation.type !== \"zod\")\n files.push(...zodUserSchemaFiles, ...zodAuthSchemaFiles);\n\n // Ignore class-validator related files when validation is zod\n if (config.validation.type !== \"class-validator\")\n files.push(\n ...classValidatorUserSchemaFiles,\n ...classValidatorAuthDtoFiles\n );\n\n // Ignoring typescript related files when typescript false\n if (!config.typescript) files.push(...[\"tsconfig.json.hbs\"]);\n\n // Ignoring javascript related files when typescript true\n if (config?.typescript) files.push(...[\"jsconfig.json.hbs\"]);\n\n return files;\n }\n /**\n * Compiles the Arkos.js project with handlebars templates\n *\n * @param templatesDir {string} templates location\n * @param config {ProjectConfig} the project configuration\n * @returns void\n * */\n async compile(templatesDir: string, config: ProjectConfig) {\n const outputDir = config.projectPath;\n const isTypescript = config.typescript;\n const filesToBeSkipped = this.filesToBeSkipped(config);\n\n function processTemplates(dir: string, relativeDir = \"\") {\n fs.readdirSync(dir, { withFileTypes: true }).forEach(async (dirent) => {\n if (filesToBeSkipped.includes(dirent.name)) return;\n\n const fullPath = path.join(dir, dirent.name);\n const relativePath = path.join(relativeDir, dirent.name);\n\n if (dirent.isDirectory()) {\n processTemplates(fullPath, relativePath);\n } else if (dirent.name.endsWith(\".hbs\")) {\n const templatePath = fullPath;\n const template = handlebars.compile(\n fs.readFileSync(templatePath, \"utf8\")\n );\n\n let arkosCurrentVersion = getNpmPackageVersion(\"arkos\");\n\n const content = template({ ...config, arkosCurrentVersion });\n const ext = isTypescript ? \".ts\" : \".js\";\n\n let outputPath = path.join(\n outputDir,\n relativePath.replace(\".hbs\", \"\")\n );\n if (dirent.name.endsWith(\".ts.hbs\"))\n outputPath = path.join(\n outputDir,\n relativePath.replace(\".ts.hbs\", ext)\n );\n\n fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n fs.writeFileSync(outputPath, content);\n }\n });\n }\n\n processTemplates(templatesDir);\n }\n}\n\nconst templateCompiler = new TemplateCompiler();\n\nexport default templateCompiler;\n"]}
1
+ {"version":3,"file":"template-compiler.js","sourceRoot":"","sources":["../../src/utils/template-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProjectConfig } from \"./project-config-inquirer\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport handlebars from \"handlebars\";\nimport { getNpmPackageVersion } from \"./helpers/npm.helpers\";\n\nclass TemplateCompiler {\n async canCompileAuthenticationTemplates(config: ProjectConfig) {\n return !!config.authentication;\n }\n\n filesToBeSkipped(config: ProjectConfig) {\n const files: string[] = [];\n const authSharedPrismaFiles = [\"user.prisma.hbs\"];\n\n const dynamicAuthPrismaFiles = [\n \"auth-permission.prisma.hbs\",\n \"auth-role.prisma.hbs\",\n \"user-role.prisma.hbs\",\n ];\n\n const sharedAuthZodSchemaFiles = [\n \"login.schema.ts.hbs\",\n \"signup.schema.ts.hbs\",\n \"update-password.schema.ts.hbs\",\n \"update-me.schema.ts.hbs\",\n ];\n\n const dynamicAuthZodSchemaFiles = [\n \"create-auth-permission.schema.ts.hbs\",\n \"update-auth-permission.schema.ts.hbs\",\n \"create-auth-role.schema.ts.hbs\",\n \"update-auth-role.schema.ts.hbs\",\n ];\n\n const userZodSchemaFiles = [\n \"create-user.schema.ts.hbs\",\n \"update-user.schema.ts.hbs\",\n ];\n\n const userClassValidatorDtoFiles = [\n \"create-user.dto.ts.hbs\",\n \"update-user.dto.ts.hbs\",\n ];\n const sharedAuthClassValidatorDtoFiles = [\n \"login.dto.ts.hbs\",\n \"signup.dto.ts.hbs\",\n \"update-password.dto.ts.hbs\",\n \"update-me.dto.ts.hbs\",\n ];\n\n const dynamicAuthClassValidatorDtoFiles = [\n \"create-auth-permission.dto.ts.hbs\",\n \"update-auth-permission.dto.ts.hbs\",\n \"create-auth-role.dto.ts.hbs\",\n \"update-auth-role.dto.ts.hbs\",\n ];\n\n const authModuleComponents = [\n \"auth.middlewares.ts.hbs\",\n \"auth.query.ts.hbs\",\n ];\n\n const authPermissionModuleComponents = [\n \"auth-permission.auth.ts.hbs\",\n \"auth-permission.query.ts.hbs\",\n \"auth-permission.service.ts.hbs\",\n ];\n\n const authRoleModuleComponents = [\n \"auth-role.auth.ts.hbs\",\n \"auth-role.query.ts.hbs\",\n \"auth-role.service.ts.hbs\",\n ];\n\n const userModuleComponents = [\n \"user.middlewares.ts.hbs\",\n \"user.query.ts.hbs\",\n \"user.service.ts.hbs\",\n \"user.auth.ts.hbs\",\n ];\n\n // Ignoring auth relation files when auth is set to define later\n if (config.authentication?.type === \"define later\")\n files.push(\n ...authSharedPrismaFiles,\n ...dynamicAuthPrismaFiles,\n ...sharedAuthZodSchemaFiles,\n ...dynamicAuthZodSchemaFiles,\n ...sharedAuthClassValidatorDtoFiles,\n ...dynamicAuthClassValidatorDtoFiles,\n ...userModuleComponents,\n ...authModuleComponents,\n ...authPermissionModuleComponents,\n ...authRoleModuleComponents\n );\n\n // Ignoring files that are not required on static authentication\n if (config.authentication?.type === \"static\")\n files.push(\n ...dynamicAuthPrismaFiles,\n ...dynamicAuthZodSchemaFiles,\n ...dynamicAuthClassValidatorDtoFiles,\n ...authPermissionModuleComponents,\n ...authRoleModuleComponents\n );\n\n // Ignore zod related files when validation is class-validator\n if (config.validation.type !== \"zod\")\n files.push(\n ...sharedAuthZodSchemaFiles,\n ...dynamicAuthZodSchemaFiles,\n ...userZodSchemaFiles\n );\n\n // Ignore class-validator related files when validation is zod\n if (config.validation.type !== \"class-validator\")\n files.push(\n ...sharedAuthClassValidatorDtoFiles,\n ...dynamicAuthClassValidatorDtoFiles,\n ...userClassValidatorDtoFiles\n );\n\n // Ignoring typescript related files when typescript false\n if (!config.typescript) files.push(...[\"tsconfig.json.hbs\"]);\n\n // Ignoring javascript related files when typescript true\n if (config?.typescript) files.push(...[\"jsconfig.json.hbs\"]);\n\n return files;\n }\n /**\n * Compiles the Arkos.js project with handlebars templates\n *\n * @param templatesDir {string} templates location\n * @param config {ProjectConfig} the project configuration\n * @returns void\n * */\n async compile(templatesDir: string, config: ProjectConfig) {\n const outputDir = config.projectPath;\n const isTypescript = config.typescript;\n const filesToBeSkipped = this.filesToBeSkipped(config);\n\n function processTemplates(dir: string, relativeDir = \"\") {\n fs.readdirSync(dir, { withFileTypes: true }).forEach(async (dirent) => {\n if (filesToBeSkipped.includes(dirent.name)) return;\n\n const fullPath = path.join(dir, dirent.name);\n const relativePath = path.join(relativeDir, dirent.name);\n\n if (dirent.isDirectory()) {\n processTemplates(fullPath, relativePath);\n } else if (dirent.name.endsWith(\".hbs\")) {\n const templatePath = fullPath;\n const template = handlebars.compile(\n fs.readFileSync(templatePath, \"utf8\")\n );\n\n let arkosCurrentVersion = \"{{arkosCurrentVersion}}\";\n\n const content = template({ ...config, arkosCurrentVersion });\n const ext = isTypescript ? \".ts\" : \".js\";\n\n let outputPath = path.join(\n outputDir,\n relativePath.replace(\".hbs\", \"\")\n );\n if (dirent.name.endsWith(\".ts.hbs\"))\n outputPath = path.join(\n outputDir,\n relativePath.replace(\".ts.hbs\", ext)\n );\n\n fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n fs.writeFileSync(outputPath, content);\n }\n });\n }\n\n processTemplates(templatesDir);\n }\n}\n\nconst templateCompiler = new TemplateCompiler();\n\nexport default templateCompiler;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-arkos",
3
- "version": "0.0.26-beta",
3
+ "version": "0.0.27-beta",
4
4
  "description": "CLI for creating Arkos.js projects, see docs at www.arkosjs.com",
5
5
  "bin": {
6
6
  "create-arkos": "./dist/index.js"
@@ -8,6 +8,8 @@
8
8
  "scripts": {
9
9
  "build": "rimraf dist && tsc",
10
10
  "dev": "ts-node src/index.ts",
11
+ "postbuild": "ts-node scripts/postbuild/index.ts",
12
+ "postpublish": "ts-node scripts/postpublish/index.ts",
11
13
  "test:hbs": "ts-node src/utils/helpers/hbs-tester.helpers.ts",
12
14
  "prepublishOnly": "pnpm build"
13
15
  },
@@ -1,3 +1,4 @@
1
+ {{#if (neq authentication.type "define later")}}
1
2
  model User {
2
3
  id String {{prisma.idDatabaseType}}
3
4
  {{authentication.usernameField}} String @unique
@@ -42,4 +43,5 @@ enum UserRole {
42
43
  }
43
44
  {{/if}}
44
45
  {{/if}}
46
+ {{/if}}
45
47
 
@@ -10,11 +10,38 @@ const authQueryOptions: AuthPrismaQueryOptions<typeof prisma.user> = {
10
10
  const authQueryOptions = {
11
11
  {{/if}}
12
12
  getMe: {
13
+ include: {
14
+ password: false,
15
+ {{#if (eq authentication.type "dynamic")}}
16
+ {{#if authentication.multipleRoles}}
17
+ roles: {
18
+ include: {
19
+ role: {
20
+ include: {
21
+ permissions: true
22
+ }
23
+ }
24
+ }
25
+ },
26
+ {{else}}
27
+ role: {
28
+ include: {
29
+ role: {
30
+ include: {
31
+ permissions: true
32
+ }
33
+ }
34
+ }
35
+ },
36
+ {{/if}}
37
+ {{/if}}
38
+ },
39
+ },
40
+ updateMe: {
13
41
  include: {
14
42
  password: false,
15
43
  },
16
44
  },
17
- updateMe: {},
18
45
  deleteMe: {},
19
46
  login: {},
20
47
  signup: {},
@@ -0,0 +1,25 @@
1
+ {{#if typescript}}
2
+ import { AuthConfigs } from "arkos/auth"
3
+
4
+ const authPermissionAuthConfigs: AuthConfigs = {
5
+ {{else}}
6
+ /** @type {import('arkos/auth').AuthConfigs} */
7
+ const authPermissionAuthConfigs = {
8
+ {{/if}}
9
+ authenticationControl: {
10
+ Create: true,
11
+ Update: true,
12
+ Delete: true,
13
+ View: true,
14
+ },
15
+ {{#if (eq authentication.type "static")}}
16
+ accessControl: {
17
+ // Create: ["Admin"],
18
+ // Update: ["Admin", "Manager"],
19
+ // Delete: ["Admin"],
20
+ // View: ["User", "Admin", "Guest"],
21
+ },
22
+ {{/if}}
23
+ };
24
+
25
+ export default authPermissionAuthConfigs;
@@ -0,0 +1,30 @@
1
+ {{#if typescript}}
2
+ import prisma from "../../utils/prisma";
3
+ import { PrismaQueryOptions } from 'arkos/prisma';
4
+
5
+ const authPermissionQueryOptions: PrismaQueryOptions<typeof prisma.authPermission> = {
6
+ {{else}}
7
+ /**
8
+ * @type {import("arkos/prisma").PrismaQueryOptions<typeof import('../../utils/prisma').prisma.authPermission>}
9
+ */
10
+ const authPermissionQueryOptions = {
11
+ {{/if}}
12
+ global: {},
13
+ find: {},
14
+ findOne: {},
15
+ findMany: {},
16
+ udpate: {},
17
+ updateMany: {},
18
+ updateOne: {},
19
+ create: {},
20
+ createMany: {},
21
+ createOne: {},
22
+ save: {},
23
+ saveMany: {},
24
+ saveOne: {},
25
+ delete: {},
26
+ deleteMany: {},
27
+ deleteOne: {},
28
+ }
29
+
30
+ export default authPermissionQueryOptions;
@@ -0,0 +1,12 @@
1
+ import { BaseService } from "arkos/services";
2
+
3
+ class AuthPermissionService extends BaseService {
4
+ constructor() {
5
+ super("auth-permission");
6
+ }
7
+ // Add your custom service methods here
8
+ }
9
+
10
+ const authPermissionService = new AuthPermissionService();
11
+
12
+ export default authPermissionService;
@@ -0,0 +1,25 @@
1
+ {{#if typescript}}
2
+ import { AuthConfigs } from "arkos/auth"
3
+
4
+ const authRoleAuthConfigs: AuthConfigs = {
5
+ {{else}}
6
+ /** @type {import('arkos/auth').AuthConfigs} */
7
+ const authRoleAuthConfigs = {
8
+ {{/if}}
9
+ authenticationControl: {
10
+ Create: true,
11
+ Update: true,
12
+ Delete: true,
13
+ View: true,
14
+ },
15
+ {{#if (eq authentication.type "static")}}
16
+ accessControl: {
17
+ // Create: ["Admin"],
18
+ // Update: ["Admin", "Manager"],
19
+ // Delete: ["Admin"],
20
+ // View: ["User", "Admin", "Guest"],
21
+ },
22
+ {{/if}}
23
+ };
24
+
25
+ export default authRoleAuthConfigs;
@@ -0,0 +1,30 @@
1
+ {{#if typescript}}
2
+ import prisma from "../../utils/prisma";
3
+ import { PrismaQueryOptions } from 'arkos/prisma';
4
+
5
+ const authRoleQueryOptions: PrismaQueryOptions<typeof prisma.authRole> = {
6
+ {{else}}
7
+ /**
8
+ * @type {import("arkos/prisma").PrismaQueryOptions<typeof import('../../utils/prisma').prisma.authRole>}
9
+ */
10
+ const authRoleQueryOptions = {
11
+ {{/if}}
12
+ global: {},
13
+ find: {},
14
+ findOne: {},
15
+ findMany: {},
16
+ udpate: {},
17
+ updateMany: {},
18
+ updateOne: {},
19
+ create: {},
20
+ createMany: {},
21
+ createOne: {},
22
+ save: {},
23
+ saveMany: {},
24
+ saveOne: {},
25
+ delete: {},
26
+ deleteMany: {},
27
+ deleteOne: {},
28
+ }
29
+
30
+ export default authRoleQueryOptions;
@@ -0,0 +1,12 @@
1
+ import { BaseService } from "arkos/services";
2
+
3
+ class AuthRoleService extends BaseService {
4
+ constructor() {
5
+ super("auth-role");
6
+ }
7
+ // Add your custom service methods here
8
+ }
9
+
10
+ const authRoleService = new AuthRoleService();
11
+
12
+ export default authRoleService;
@@ -0,0 +1,25 @@
1
+ {{#if typescript}}
2
+ import { AuthConfigs } from "arkos/auth"
3
+
4
+ const fileUplaodAuthConfigs: AuthConfigs = {
5
+ {{else}}
6
+ /** @type {import('arkos/auth').AuthConfigs} */
7
+ const fileUplaodAuthConfigs = {
8
+ {{/if}}
9
+ authenticationControl: {
10
+ Create: true,
11
+ Update: true,
12
+ Delete: true,
13
+ View: true,
14
+ },
15
+ {{#if (eq authentication.type "static")}}
16
+ accessControl: {
17
+ // Create: ["Admin"],
18
+ // Update: ["Admin", "Manager"],
19
+ // Delete: ["Admin"],
20
+ // View: ["User", "Admin", "Guest"],
21
+ },
22
+ {{/if}}
23
+ };
24
+
25
+ export default fileUplaodAuthConfigs;
@@ -0,0 +1,25 @@
1
+ {{#if typescript}}
2
+ import { AuthConfigs } from "arkos/auth"
3
+
4
+ const userAuthConfigs: AuthConfigs = {
5
+ {{else}}
6
+ /** @type {import('arkos/auth').AuthConfigs} */
7
+ const userAuthConfigs = {
8
+ {{/if}}
9
+ authenticationControl: {
10
+ Create: true,
11
+ Update: true,
12
+ Delete: true,
13
+ View: true,
14
+ },
15
+ {{#if (eq authentication.type "static")}}
16
+ accessControl: {
17
+ // Create: ["Admin"],
18
+ // Update: ["Admin", "Manager"],
19
+ // Delete: ["Admin"],
20
+ // View: ["User", "Admin", "Guest"],
21
+ },
22
+ {{/if}}
23
+ };
24
+
25
+ export default userAuthConfigs;
@@ -13,9 +13,50 @@ const userQueryOptions = {
13
13
  find: {
14
14
  include: {
15
15
  password: false,
16
+ {{#if (eq authentication.type "dynamic")}}
17
+ {{#if authentication.multipleRoles}}
18
+ roles: {
19
+ include: {
20
+ role: true,
21
+ }
22
+ },
23
+ {{else}}
24
+ role: {
25
+ include: {
26
+ role: true,
27
+ }
28
+ },
29
+ {{/if}}
30
+ {{/if}}
31
+ },
32
+ },
33
+ findOne: {
34
+ include: {
35
+ {{#if (eq authentication.type "dynamic")}}
36
+ {{#if authentication.multipleRoles}}
37
+ roles: {
38
+ include: {
39
+ role: {
40
+ include: {
41
+ permissions: true
42
+ }
43
+ }
44
+ }
45
+ },
46
+ {{else}}
47
+ role: {
48
+ include: {
49
+ role: {
50
+ include: {
51
+ permissions: true
52
+ }
53
+ }
54
+ }
55
+ },
56
+ {{/if}}
57
+ {{/if}}
16
58
  },
17
59
  },
18
- findOne: {},
19
60
  findMany: {},
20
61
  udpate: {},
21
62
  updateMany: {},