create-absolutejs 0.5.1 → 0.6.0

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.
Files changed (61) hide show
  1. package/dist/data.d.ts +1 -1
  2. package/dist/data.js +2 -2
  3. package/dist/generators/configurations/generatePackageJson.d.ts +2 -2
  4. package/dist/generators/configurations/generatePackageJson.js +6 -2
  5. package/dist/generators/configurations/initializeRoot.js +2 -2
  6. package/dist/generators/db/generateDatabaseTypes.d.ts +3 -3
  7. package/dist/generators/db/generateDatabaseTypes.js +6 -6
  8. package/dist/generators/db/generateDrizzleSchema.d.ts +3 -3
  9. package/dist/generators/db/generateDrizzleSchema.js +4 -6
  10. package/dist/generators/db/generateSqliteSchema.d.ts +2 -2
  11. package/dist/generators/db/generateSqliteSchema.js +1 -1
  12. package/dist/generators/db/handlerTemplates.d.ts +27 -27
  13. package/dist/generators/db/handlerTemplates.js +59 -92
  14. package/dist/generators/db/scaffoldDatabase.d.ts +2 -2
  15. package/dist/generators/db/scaffoldDatabase.js +6 -6
  16. package/dist/generators/db/scaffoldDocker.d.ts +3 -3
  17. package/dist/generators/db/scaffoldDocker.js +2 -2
  18. package/dist/generators/html/scaffoldHTML.js +2 -2
  19. package/dist/generators/project/collectDependencies.d.ts +2 -2
  20. package/dist/generators/project/collectDependencies.js +2 -2
  21. package/dist/generators/project/generateAbsoluteAuthConfig.d.ts +2 -0
  22. package/dist/generators/project/generateAbsoluteAuthConfig.js +128 -0
  23. package/dist/generators/project/generateDBBlock.js +8 -2
  24. package/dist/generators/project/generateImportsBlock.d.ts +2 -2
  25. package/dist/generators/project/generateImportsBlock.js +8 -15
  26. package/dist/generators/project/generateRoutesBlock.d.ts +3 -3
  27. package/dist/generators/project/generateRoutesBlock.js +57 -46
  28. package/dist/generators/project/generateServer.d.ts +2 -2
  29. package/dist/generators/project/generateServer.js +28 -12
  30. package/dist/generators/project/scaffoldBackend.d.ts +6 -0
  31. package/dist/generators/project/scaffoldBackend.js +23 -0
  32. package/dist/generators/project/scaffoldFrontends.d.ts +2 -2
  33. package/dist/generators/project/scaffoldFrontends.js +18 -3
  34. package/dist/generators/react/generateReactComponents.d.ts +5 -0
  35. package/dist/generators/react/generateReactComponents.js +126 -0
  36. package/dist/generators/react/scaffoldReact.d.ts +1 -1
  37. package/dist/generators/react/scaffoldReact.js +11 -2
  38. package/dist/index.js +1 -1
  39. package/dist/messages.d.ts +1 -1
  40. package/dist/messages.js +4 -3
  41. package/dist/prompt.js +4 -3
  42. package/dist/questions/authOption.d.ts +1 -0
  43. package/dist/questions/{authProvider.js → authOption.js} +5 -5
  44. package/dist/scaffold.d.ts +1 -1
  45. package/dist/scaffold.js +13 -9
  46. package/dist/templates/assets/svg/google-logo.svg +7 -0
  47. package/dist/templates/react/components/OAuthLink.tsx +39 -0
  48. package/dist/templates/react/components/ProfilePicture.tsx +56 -0
  49. package/dist/typeGuards.d.ts +2 -2
  50. package/dist/typeGuards.js +1 -1
  51. package/dist/types.d.ts +7 -2
  52. package/dist/utils/abort.js +1 -1
  53. package/dist/utils/parseCommandLineOptions.js +29 -8
  54. package/dist/utils/t3-utils.js +1 -1
  55. package/package.json +2 -1
  56. package/dist/generators/project/generateUseBlock.d.ts +0 -6
  57. package/dist/generators/project/generateUseBlock.js +0 -32
  58. package/dist/generators/react/generateReactPage.d.ts +0 -2
  59. package/dist/generators/react/generateReactPage.js +0 -23
  60. package/dist/questions/authProvider.d.ts +0 -1
  61. package/dist/templates/react/pages/ReactExample.tsx +0 -18
package/dist/data.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { FrontendLabels, AvailableDependency } from './types';
2
2
  export declare const availableFrontends: readonly ["react", "html", "svelte", "vue", "htmx"];
3
- export declare const availableAuthProviders: readonly ["absoluteAuth", "none"];
3
+ export declare const availableAuthProviders: readonly ["abs", "none"];
4
4
  export declare const availableDrizzleDialects: readonly ["gel", "mysql", "postgresql", "sqlite", "singlestore", "mariadb"];
5
5
  export declare const availablePrismaDialects: readonly ["mysql", "postgresql", "sqlite", "mongodb", "mariadb", "cockroachdb", "mssql"];
6
6
  export declare const availableDatabaseEngines: readonly ["postgresql", "mysql", "sqlite", "mongodb", "mariadb", "gel", "singlestore", "cockroachdb", "mssql", "none"];
package/dist/data.js CHANGED
@@ -7,7 +7,7 @@ export const availableFrontends = [
7
7
  'vue',
8
8
  'htmx'
9
9
  ];
10
- export const availableAuthProviders = ['absoluteAuth', 'none'];
10
+ export const availableAuthProviders = ['abs', 'none'];
11
11
  export const availableDrizzleDialects = [
12
12
  'gel',
13
13
  'mysql',
@@ -86,7 +86,7 @@ export const absoluteAuthPlugin = {
86
86
  packageName: 'absoluteAuth'
87
87
  }
88
88
  ],
89
- latestVersion: '0.20.3',
89
+ latestVersion: '0.21.1',
90
90
  value: '@absolutejs/auth'
91
91
  };
92
92
  export const scopedStatePlugin = {
@@ -1,7 +1,7 @@
1
1
  import type { CreateConfiguration } from '../../types';
2
- type CreatePackageJsonProps = Pick<CreateConfiguration, 'authProvider' | 'useTailwind' | 'databaseEngine' | 'databaseHost' | 'plugins' | 'orm' | 'frontendDirectories' | 'codeQualityTool'> & {
2
+ type CreatePackageJsonProps = Pick<CreateConfiguration, 'authOption' | 'useTailwind' | 'databaseEngine' | 'databaseHost' | 'plugins' | 'orm' | 'frontendDirectories' | 'codeQualityTool'> & {
3
3
  projectName: string;
4
4
  latest: boolean;
5
5
  };
6
- export declare const createPackageJson: ({ projectName, authProvider, plugins, databaseEngine, orm, databaseHost, useTailwind, latest, frontendDirectories, codeQualityTool }: CreatePackageJsonProps) => void;
6
+ export declare const createPackageJson: ({ projectName, authOption, plugins, databaseEngine, orm, databaseHost, useTailwind, latest, frontendDirectories, codeQualityTool }: CreatePackageJsonProps) => void;
7
7
  export {};
@@ -36,7 +36,7 @@ const dbScripts = {
36
36
  waitCmd: initTemplates.singlestore.wait
37
37
  }
38
38
  };
39
- export const createPackageJson = ({ projectName, authProvider, plugins, databaseEngine, orm, databaseHost, useTailwind, latest, frontendDirectories, codeQualityTool }) => {
39
+ export const createPackageJson = ({ projectName, authOption, plugins, databaseEngine, orm, databaseHost, useTailwind, latest, frontendDirectories, codeQualityTool }) => {
40
40
  const s = spinner();
41
41
  if (latest)
42
42
  s.start('Resolving package versions…');
@@ -51,7 +51,7 @@ export const createPackageJson = ({ projectName, authProvider, plugins, database
51
51
  for (const dep of defaultDependencies) {
52
52
  dependencies[dep.value] = resolveVersion(dep.value, dep.latestVersion);
53
53
  }
54
- if (authProvider === 'absoluteAuth') {
54
+ if (authOption === 'abs') {
55
55
  dependencies[absoluteAuthPlugin.value] = resolveVersion(absoluteAuthPlugin.value, absoluteAuthPlugin.latestVersion);
56
56
  }
57
57
  for (const pluginValue of plugins) {
@@ -158,6 +158,10 @@ export const createPackageJson = ({ projectName, authProvider, plugins, database
158
158
  scripts['db:sqlite'] = 'sqlite3 db/database.sqlite';
159
159
  scripts['db:init'] = 'sqlite3 db/database.sqlite < db/init.sql';
160
160
  }
161
+ if (orm === 'drizzle') {
162
+ scripts['db:studio'] = 'drizzle-kit studio';
163
+ scripts['db:push'] = 'drizzle-kit push';
164
+ }
161
165
  const packageJson = {
162
166
  dependencies,
163
167
  devDependencies,
@@ -1,5 +1,5 @@
1
- import { copyFileSync, existsSync, mkdirSync } from 'node:fs';
2
- import { join } from 'node:path';
1
+ import { copyFileSync, existsSync, mkdirSync } from 'fs';
2
+ import { join } from 'path';
3
3
  export const initalizeRoot = (projectName, templatesDirectory) => {
4
4
  if (existsSync(projectName)) {
5
5
  throw new Error(`Cannot create project "${projectName}": directory already exists.`);
@@ -1,8 +1,8 @@
1
- import { AuthProvider, DatabaseEngine, DatabaseHost } from '../../types';
1
+ import { AuthOption, DatabaseEngine, DatabaseHost } from '../../types';
2
2
  type GenerateTypesProps = {
3
3
  databaseEngine: DatabaseEngine;
4
4
  databaseHost: DatabaseHost;
5
- authProvider: AuthProvider;
5
+ authOption: AuthOption;
6
6
  };
7
- export declare const generateDatabaseTypes: ({ databaseEngine, databaseHost, authProvider }: GenerateTypesProps) => string;
7
+ export declare const generateDatabaseTypes: ({ databaseEngine, databaseHost, authOption }: GenerateTypesProps) => string;
8
8
  export {};
@@ -1,5 +1,5 @@
1
1
  import { isDrizzleDialect } from '../../typeGuards';
2
- export const generateDatabaseTypes = ({ databaseEngine, databaseHost, authProvider }) => {
2
+ export const generateDatabaseTypes = ({ databaseEngine, databaseHost, authOption }) => {
3
3
  let dbImport = '';
4
4
  let dbTypeLine = '';
5
5
  if (databaseHost === 'neon') {
@@ -51,10 +51,10 @@ export const generateDatabaseTypes = ({ databaseEngine, databaseHost, authProvid
51
51
  break;
52
52
  }
53
53
  }
54
- const schemaImport = authProvider === 'absoluteAuth'
55
- ? `import { users, SchemaType } from '../../db/schema';`
56
- : `import { countHistory, SchemaType } from '../../db/schema';`;
57
- const extraTypes = authProvider === 'absoluteAuth'
54
+ const schemaImport = authOption === 'abs'
55
+ ? `import { users, schema } from '../../db/schema';`
56
+ : `import { countHistory } from '../../db/schema';`;
57
+ const extraTypes = authOption === 'abs'
58
58
  ? `export type User = typeof users.$inferSelect;
59
59
  export type NewUser = typeof users.$inferInsert;`
60
60
  : `export type CountHistory = typeof countHistory.$inferSelect;
@@ -62,6 +62,6 @@ export type NewCountHistory = typeof countHistory.$inferInsert;`;
62
62
  return `${schemaImport}
63
63
  ${dbImport}
64
64
 
65
- ${dbTypeLine ? `${dbTypeLine}\n\n` : '\n'}${extraTypes}
65
+ ${`${dbTypeLine}\n`}export type SchemaType = typeof schema;\n\n${extraTypes}
66
66
  `;
67
67
  };
@@ -1,7 +1,7 @@
1
- import { AuthProvider, AvailableDrizzleDialect } from '../../types';
1
+ import { AuthOption, AvailableDrizzleDialect } from '../../types';
2
2
  type GenerateSchemaProps = {
3
3
  databaseEngine: AvailableDrizzleDialect;
4
- authProvider: AuthProvider;
4
+ authOption: AuthOption;
5
5
  };
6
- export declare const generateDrizzleSchema: ({ databaseEngine, authProvider }: GenerateSchemaProps) => string;
6
+ export declare const generateDrizzleSchema: ({ databaseEngine, authOption }: GenerateSchemaProps) => string;
7
7
  export {};
@@ -49,7 +49,7 @@ const DIALECTS = {
49
49
  }
50
50
  };
51
51
  const builder = (expr) => expr.split('(')[0];
52
- export const generateDrizzleSchema = ({ databaseEngine, authProvider }) => {
52
+ export const generateDrizzleSchema = ({ databaseEngine, authOption }) => {
53
53
  const cfg = DIALECTS[databaseEngine];
54
54
  const intBuilder = databaseEngine === 'mysql' ||
55
55
  databaseEngine === 'singlestore' ||
@@ -59,7 +59,7 @@ export const generateDrizzleSchema = ({ databaseEngine, authProvider }) => {
59
59
  const timeBuilder = builder(cfg.time);
60
60
  const jsonBuilder = builder(cfg.json);
61
61
  const stringBuilder = builder(cfg.string);
62
- const importBuilders = authProvider === 'absoluteAuth'
62
+ const importBuilders = authOption === 'abs'
63
63
  ? [cfg.table, stringBuilder, timeBuilder, jsonBuilder]
64
64
  : [cfg.table, intBuilder, timeBuilder];
65
65
  const uniqueBuilders = Array.from(new Set(importBuilders));
@@ -86,7 +86,7 @@ const MILLIS_PER_DAY = 86400000;\n\n`
86
86
  const timestampColumn = databaseEngine === 'sqlite'
87
87
  ? `${cfg.time}.notNull().default(sql\`(julianday('now') - \${JULIAN_DAY_UNIX_EPOCH_OFFSET}) * \${MILLIS_PER_DAY}\`)`
88
88
  : `${cfg.time}.notNull().defaultNow()`;
89
- const tableBlock = authProvider === 'absoluteAuth'
89
+ const tableBlock = authOption === 'abs'
90
90
  ? `export const users = ${cfg.table}('users', {
91
91
  auth_sub: ${cfg.string}.primaryKey(),
92
92
  created_at: ${timestampColumn},
@@ -97,7 +97,7 @@ const MILLIS_PER_DAY = 86400000;\n\n`
97
97
  count: ${intBuilder}('count').notNull(),
98
98
  created_at: ${timestampColumn}
99
99
  });`;
100
- const schemaKey = authProvider === 'absoluteAuth' ? 'users' : 'countHistory';
100
+ const schemaKey = authOption === 'abs' ? 'users' : 'countHistory';
101
101
  return `
102
102
  ${sqliteImports}${builderImport}
103
103
 
@@ -106,7 +106,5 @@ ${constsBlock}${tableBlock}
106
106
  export const schema = {
107
107
  ${schemaKey}
108
108
  };
109
-
110
- export type SchemaType = typeof schema;
111
109
  `;
112
110
  };
@@ -1,2 +1,2 @@
1
- import { AuthProvider } from '../../types';
2
- export declare const generateSqliteSchema: (authProvider: AuthProvider) => "CREATE TABLE IF NOT EXISTS users (\n auth_sub TEXT PRIMARY KEY,\n created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000),\n metadata TEXT DEFAULT '{}'\n);" | "CREATE TABLE IF NOT EXISTS count_history (\n uid INTEGER PRIMARY KEY AUTOINCREMENT,\n count INTEGER NOT NULL,\n created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000)\n);";
1
+ import { AuthOption } from '../../types';
2
+ export declare const generateSqliteSchema: (authOption: AuthOption) => "CREATE TABLE IF NOT EXISTS users (\n auth_sub TEXT PRIMARY KEY,\n created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000),\n metadata TEXT DEFAULT '{}'\n);" | "CREATE TABLE IF NOT EXISTS count_history (\n uid INTEGER PRIMARY KEY AUTOINCREMENT,\n count INTEGER NOT NULL,\n created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000)\n);";
@@ -1,4 +1,4 @@
1
- export const generateSqliteSchema = (authProvider) => authProvider && authProvider !== 'none'
1
+ export const generateSqliteSchema = (authOption) => authOption && authOption !== 'none'
2
2
  ? `CREATE TABLE IF NOT EXISTS users (
3
3
  auth_sub TEXT PRIMARY KEY,
4
4
  created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000),
@@ -7,117 +7,117 @@ type QueryOperations = {
7
7
  declare const driverConfigurations: {
8
8
  readonly 'cockroachdb:sql:local': {
9
9
  readonly dbType: "SQL";
10
- readonly importLines: "import { SQL } from 'bun'";
10
+ readonly importLines: "";
11
11
  readonly queries: QueryOperations;
12
12
  };
13
13
  readonly 'gel:drizzle:local': {
14
14
  readonly dbType: "GelJsDatabase<SchemaType>";
15
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { GelJsDatabase } from 'drizzle-orm/gel'\nimport { schema, type SchemaType } from '../../../db/schema'\n";
15
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'\n";
16
16
  readonly queries: QueryOperations;
17
17
  };
18
18
  readonly 'gel:sql:local': {
19
19
  readonly dbType: "Client";
20
- readonly importLines: "import { Client } from 'gel'";
20
+ readonly importLines: "";
21
21
  readonly queries: QueryOperations;
22
22
  };
23
23
  readonly 'mariadb:drizzle:local': {
24
24
  readonly dbType: "MySql2Database<SchemaType>";
25
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { MySql2Database } from 'drizzle-orm/mysql2'\nimport { schema, type SchemaType } from '../../../db/schema'";
25
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
26
26
  readonly queries: QueryOperations;
27
27
  };
28
28
  readonly 'mariadb:sql:local': {
29
29
  readonly dbType: "SQL";
30
- readonly importLines: "import { SQL } from 'bun'";
30
+ readonly importLines: "";
31
31
  readonly queries: QueryOperations;
32
32
  };
33
33
  readonly 'mongodb:native:local': {
34
34
  readonly dbType: "Db";
35
- readonly importLines: "import { Db } from 'mongodb'";
35
+ readonly importLines: "";
36
36
  readonly queries: QueryOperations;
37
37
  };
38
38
  readonly 'mssql:sql:local': {
39
39
  readonly dbType: "ConnectionPool";
40
- readonly importLines: "import { ConnectionPool } from 'mssql'";
40
+ readonly importLines: "";
41
41
  readonly queries: QueryOperations;
42
42
  };
43
43
  readonly 'mysql:drizzle:local': {
44
44
  readonly dbType: "MySql2Database<SchemaType>";
45
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { MySql2Database } from 'drizzle-orm/mysql2'\nimport { schema, type SchemaType } from '../../../db/schema'";
45
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
46
46
  readonly queries: QueryOperations;
47
47
  };
48
48
  readonly 'mysql:drizzle:planetscale': {
49
49
  readonly dbType: "PlanetScaleDatabase<SchemaType>";
50
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { PlanetScaleDatabase } from 'drizzle-orm/planetscale-serverless'\nimport { schema, type SchemaType } from '../../../db/schema'";
50
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
51
51
  readonly queries: QueryOperations;
52
52
  };
53
53
  readonly 'mysql:sql:local': {
54
54
  readonly dbType: "SQL";
55
- readonly importLines: "import { SQL } from 'bun'";
55
+ readonly importLines: "";
56
56
  readonly queries: QueryOperations;
57
57
  };
58
58
  readonly 'mysql:sql:planetscale': {
59
59
  readonly dbType: "Client";
60
- readonly importLines: "import { Client } from '@planetscale/database'";
60
+ readonly importLines: "";
61
61
  readonly queries: QueryOperations;
62
62
  };
63
63
  readonly 'postgresql:drizzle:local': {
64
64
  readonly dbType: "BunSQLDatabase<SchemaType>";
65
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { BunSQLDatabase } from 'drizzle-orm/bun-sql'\nimport { schema, type SchemaType } from '../../../db/schema'";
65
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
66
66
  readonly queries: QueryOperations;
67
67
  };
68
68
  readonly 'postgresql:drizzle:neon': {
69
69
  readonly dbType: "NeonDatabase<SchemaType>";
70
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { NeonDatabase } from 'drizzle-orm/neon-serverless'\nimport { schema, type SchemaType } from '../../../db/schema'";
70
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
71
71
  readonly queries: QueryOperations;
72
72
  };
73
73
  readonly 'postgresql:drizzle:planetscale': {
74
74
  readonly dbType: "NodePgDatabase<SchemaType>";
75
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { NodePgDatabase } from 'drizzle-orm/node-postgres'\nimport { schema, type SchemaType } from '../../../db/schema'";
75
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
76
76
  readonly queries: QueryOperations;
77
77
  };
78
78
  readonly 'postgresql:sql:local': {
79
79
  readonly dbType: "SQL";
80
- readonly importLines: "import { SQL } from 'bun'";
80
+ readonly importLines: "";
81
81
  readonly queries: QueryOperations;
82
82
  };
83
83
  readonly 'postgresql:sql:neon': {
84
84
  readonly dbType: "Pool";
85
- readonly importLines: "import { Pool } from '@neondatabase/serverless'";
85
+ readonly importLines: "";
86
86
  readonly queries: QueryOperations;
87
87
  };
88
88
  readonly 'postgresql:sql:planetscale': {
89
89
  readonly dbType: "Pool";
90
- readonly importLines: "import { Pool } from 'pg'";
91
- readonly queries: QueryOperations;
92
- };
93
- readonly 'singlestore:sql:local': {
94
- readonly dbType: "Pool";
95
- readonly importLines: "import { Pool, RowDataPacket } from 'mysql2/promise'";
90
+ readonly importLines: "";
96
91
  readonly queries: QueryOperations;
97
92
  };
98
93
  readonly 'singlestore:drizzle:local': {
99
94
  readonly dbType: "SingleStoreDriverDatabase<SchemaType>";
100
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { SingleStoreDriverDatabase } from 'drizzle-orm/singlestore'\nimport { schema, type SchemaType } from '../../../db/schema'";
95
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
96
+ readonly queries: QueryOperations;
97
+ };
98
+ readonly 'singlestore:sql:local': {
99
+ readonly dbType: "Pool";
100
+ readonly importLines: "import { RowDataPacket } from 'mysql2/promise'\n";
101
101
  readonly queries: QueryOperations;
102
102
  };
103
103
  readonly 'sqlite:drizzle:local': {
104
104
  readonly dbType: "BunSQLiteDatabase<SchemaType>";
105
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { BunSQLiteDatabase } from 'drizzle-orm/bun-sqlite'\nimport { schema, type SchemaType } from '../../../db/schema'";
105
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
106
106
  readonly queries: QueryOperations;
107
107
  };
108
108
  readonly 'sqlite:drizzle:turso': {
109
109
  readonly dbType: "LibSQLDatabase<SchemaType>";
110
- readonly importLines: "\nimport { eq } from 'drizzle-orm'\nimport { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport { schema, type SchemaType } from '../../../db/schema'";
110
+ readonly importLines: "import { eq } from 'drizzle-orm'\nimport { schema } from '../../../db/schema'";
111
111
  readonly queries: QueryOperations;
112
112
  };
113
113
  readonly 'sqlite:sql:local': {
114
114
  readonly dbType: "Database";
115
- readonly importLines: "import { Database } from 'bun:sqlite'";
115
+ readonly importLines: "";
116
116
  readonly queries: QueryOperations;
117
117
  };
118
118
  readonly 'sqlite:sql:turso': {
119
119
  readonly dbType: "Client";
120
- readonly importLines: "import { Client } from '@libsql/client'";
120
+ readonly importLines: "";
121
121
  readonly queries: QueryOperations;
122
122
  };
123
123
  };
@@ -1,36 +1,14 @@
1
- const buildSqlAuthTemplate = ({ importLines, dbType, queries }) => `
2
- import { isValidProviderOption, providers, extractPropFromIdentity } from 'citra'
1
+ const buildSqlAuthTemplate = ({ importLines, queries }) => `
2
+ import { DatabaseType, NewUser } from '../../types/databaseTypes';
3
3
  ${importLines}
4
- type UserHandlerProps = {
5
- authProvider: string
6
- db: ${dbType}
7
- userIdentity: Record<string, unknown>
8
- }
9
-
10
- export const getUser = async ({ authProvider, db, userIdentity }: UserHandlerProps) => {
11
- const providerConfiguration = providers[authProvider]
12
4
 
13
- const subject = extractPropFromIdentity(
14
- userIdentity,
15
- providerConfiguration.subject,
16
- providerConfiguration.subjectType
17
- )
18
- const authSub = \`\${authProvider.toUpperCase()}|\${subject}\`;
19
- ${queries.selectUser}
20
- }
21
-
22
- export const createUser = async ({ authProvider, db, userIdentity }: UserHandlerProps) => {
23
- const providerConfiguration = providers[authProvider]
5
+ export const getUser = async (db: DatabaseType, authSub: string) => {
6
+ ${queries.selectUser}
7
+ };
24
8
 
25
- const subject = extractPropFromIdentity(
26
- userIdentity,
27
- providerConfiguration.subject,
28
- providerConfiguration.subjectType
29
- )
30
- const authSub = \`\${authProvider.toUpperCase()}|\${subject}\`;
31
- ${queries.insertUser}
32
- }
33
- `;
9
+ export const createUser = async (db: DatabaseType, newUserData: NewUser) => {
10
+ ${queries.insertUser}
11
+ }`;
34
12
  const buildSqlCountTemplate = ({ importLines, dbType, queries }) => `
35
13
  ${importLines}
36
14
  export const getCountHistory = async (db: ${dbType}, uid: number) => {
@@ -44,13 +22,21 @@ export const createCountHistory = async (db: ${dbType}, count: number) => {
44
22
  const drizzleQueryOperations = {
45
23
  insertHistory: `const [newHistory] = await db.insert(schema.countHistory).values({ count }).returning()
46
24
  return newHistory`,
47
- insertUser: `const [newUser] = await db.insert(schema.users).values({ auth_sub: authSub, metadata: userIdentity }).returning()
48
- if (!newUser) throw new Error('Failed to create user')
49
- return newUser`,
25
+ insertUser: `const [newUser] = await db
26
+ .insert(schema.users)
27
+ .values(newUserData)
28
+ .returning();
29
+ if (!newUser) throw new Error('Failed to create user');
30
+ return newUser;
31
+ `,
50
32
  selectHistory: `const [history] = await db.select().from(schema.countHistory).where(eq(schema.countHistory.uid, uid)).execute()
51
33
  return history`,
52
- selectUser: `const [user] = await db.select().from(schema.users).where(eq(schema.users.auth_sub, authSub)).execute()
53
- return user`
34
+ selectUser: `const [user] = await db
35
+ .select()
36
+ .from(schema.users)
37
+ .where(eq(schema.users.auth_sub, authSub))
38
+ .execute();
39
+ return user;`
54
40
  };
55
41
  const libsqlQueryOperations = {
56
42
  insertHistory: `const { rows } = await db.execute({ sql: 'INSERT INTO count_history (count) VALUES (?) RETURNING *', args: [count] })
@@ -336,148 +322,129 @@ const mysqlPlanetScaleQueryOperations = {
336
322
  const driverConfigurations = {
337
323
  'cockroachdb:sql:local': {
338
324
  dbType: 'SQL',
339
- importLines: `import { SQL } from 'bun'`,
325
+ importLines: ``,
340
326
  queries: postgresSqlQueryOperations
341
327
  },
342
328
  'gel:drizzle:local': {
343
329
  dbType: 'GelJsDatabase<SchemaType>',
344
- importLines: `
345
- import { eq } from 'drizzle-orm'
346
- import { GelJsDatabase } from 'drizzle-orm/gel'
347
- import { schema, type SchemaType } from '../../../db/schema'
330
+ importLines: `import { eq } from 'drizzle-orm'
331
+ import { schema } from '../../../db/schema'
348
332
  `,
349
333
  queries: drizzleQueryOperations
350
334
  },
351
335
  'gel:sql:local': {
352
336
  dbType: 'Client',
353
- importLines: `import { Client } from 'gel'`,
337
+ importLines: ``,
354
338
  queries: gelClientQueryOperations
355
339
  },
356
340
  'mariadb:drizzle:local': {
357
341
  dbType: 'MySql2Database<SchemaType>',
358
- importLines: `
359
- import { eq } from 'drizzle-orm'
360
- import { MySql2Database } from 'drizzle-orm/mysql2'
361
- import { schema, type SchemaType } from '../../../db/schema'`,
342
+ importLines: `import { eq } from 'drizzle-orm'
343
+ import { schema } from '../../../db/schema'`,
362
344
  queries: mysqlDrizzleQueryOperations
363
345
  },
364
346
  'mariadb:sql:local': {
365
347
  dbType: 'SQL',
366
- importLines: `import { SQL } from 'bun'`,
348
+ importLines: ``,
367
349
  queries: mysqlSqlQueryOperations
368
350
  },
369
351
  'mongodb:native:local': {
370
352
  dbType: 'Db',
371
- importLines: `import { Db } from 'mongodb'`,
353
+ importLines: ``,
372
354
  queries: mongodbQueryOperations
373
355
  },
374
356
  'mssql:sql:local': {
375
357
  dbType: 'ConnectionPool',
376
- importLines: `import { ConnectionPool } from 'mssql'`,
358
+ importLines: ``,
377
359
  queries: mssqlSqlQueryOperations
378
360
  },
379
361
  'mysql:drizzle:local': {
380
362
  dbType: 'MySql2Database<SchemaType>',
381
- importLines: `
382
- import { eq } from 'drizzle-orm'
383
- import { MySql2Database } from 'drizzle-orm/mysql2'
384
- import { schema, type SchemaType } from '../../../db/schema'`,
363
+ importLines: `import { eq } from 'drizzle-orm'
364
+ import { schema } from '../../../db/schema'`,
385
365
  queries: mysqlDrizzleQueryOperations
386
366
  },
387
367
  'mysql:drizzle:planetscale': {
388
368
  dbType: 'PlanetScaleDatabase<SchemaType>',
389
- importLines: `
390
- import { eq } from 'drizzle-orm'
391
- import { PlanetScaleDatabase } from 'drizzle-orm/planetscale-serverless'
392
- import { schema, type SchemaType } from '../../../db/schema'`,
369
+ importLines: `import { eq } from 'drizzle-orm'
370
+ import { schema } from '../../../db/schema'`,
393
371
  queries: mysqlDrizzleQueryOperations
394
372
  },
395
373
  'mysql:sql:local': {
396
374
  dbType: 'SQL',
397
- importLines: `import { SQL } from 'bun'`,
375
+ importLines: ``,
398
376
  queries: mysqlSqlQueryOperations
399
377
  },
400
378
  'mysql:sql:planetscale': {
401
379
  dbType: 'Client',
402
- importLines: `import { Client } from '@planetscale/database'`,
380
+ importLines: ``,
403
381
  queries: mysqlPlanetScaleQueryOperations
404
382
  },
405
383
  'postgresql:drizzle:local': {
406
384
  dbType: 'BunSQLDatabase<SchemaType>',
407
- importLines: `
408
- import { eq } from 'drizzle-orm'
409
- import { BunSQLDatabase } from 'drizzle-orm/bun-sql'
410
- import { schema, type SchemaType } from '../../../db/schema'`,
385
+ importLines: `import { eq } from 'drizzle-orm'
386
+ import { schema } from '../../../db/schema'`,
411
387
  queries: drizzleQueryOperations
412
388
  },
413
389
  'postgresql:drizzle:neon': {
414
390
  dbType: 'NeonDatabase<SchemaType>',
415
- importLines: `
416
- import { eq } from 'drizzle-orm'
417
- import { NeonDatabase } from 'drizzle-orm/neon-serverless'
418
- import { schema, type SchemaType } from '../../../db/schema'`,
391
+ importLines: `import { eq } from 'drizzle-orm'
392
+ import { schema } from '../../../db/schema'`,
419
393
  queries: drizzleQueryOperations
420
394
  },
421
395
  'postgresql:drizzle:planetscale': {
422
396
  dbType: 'NodePgDatabase<SchemaType>',
423
- importLines: `
424
- import { eq } from 'drizzle-orm'
425
- import { NodePgDatabase } from 'drizzle-orm/node-postgres'
426
- import { schema, type SchemaType } from '../../../db/schema'`,
397
+ importLines: `import { eq } from 'drizzle-orm'
398
+ import { schema } from '../../../db/schema'`,
427
399
  queries: drizzleQueryOperations
428
400
  },
429
401
  'postgresql:sql:local': {
430
402
  dbType: 'SQL',
431
- importLines: `import { SQL } from 'bun'`,
403
+ importLines: ``,
432
404
  queries: postgresSqlQueryOperations
433
405
  },
434
406
  'postgresql:sql:neon': {
435
407
  dbType: 'Pool',
436
- importLines: `import { Pool } from '@neondatabase/serverless'`,
408
+ importLines: ``,
437
409
  queries: postgresQueryOperations
438
410
  },
439
411
  'postgresql:sql:planetscale': {
440
412
  dbType: 'Pool',
441
- importLines: `import { Pool } from 'pg'`,
413
+ importLines: ``,
442
414
  queries: postgresQueryOperations
443
415
  },
444
- 'singlestore:sql:local': {
445
- dbType: 'Pool',
446
- importLines: `import { Pool, RowDataPacket } from 'mysql2/promise'`,
447
- queries: singlestoreSqlQueryOperations
448
- },
449
416
  'singlestore:drizzle:local': {
450
417
  dbType: 'SingleStoreDriverDatabase<SchemaType>',
451
- importLines: `
452
- import { eq } from 'drizzle-orm'
453
- import { SingleStoreDriverDatabase } from 'drizzle-orm/singlestore'
454
- import { schema, type SchemaType } from '../../../db/schema'`,
418
+ importLines: `import { eq } from 'drizzle-orm'
419
+ import { schema } from '../../../db/schema'`,
455
420
  queries: mysqlDrizzleQueryOperations
456
421
  },
422
+ 'singlestore:sql:local': {
423
+ dbType: 'Pool',
424
+ importLines: `import { RowDataPacket } from 'mysql2/promise'
425
+ `,
426
+ queries: singlestoreSqlQueryOperations
427
+ },
457
428
  'sqlite:drizzle:local': {
458
429
  dbType: 'BunSQLiteDatabase<SchemaType>',
459
- importLines: `
460
- import { eq } from 'drizzle-orm'
461
- import { BunSQLiteDatabase } from 'drizzle-orm/bun-sqlite'
462
- import { schema, type SchemaType } from '../../../db/schema'`,
430
+ importLines: `import { eq } from 'drizzle-orm'
431
+ import { schema } from '../../../db/schema'`,
463
432
  queries: drizzleQueryOperations
464
433
  },
465
434
  'sqlite:drizzle:turso': {
466
435
  dbType: 'LibSQLDatabase<SchemaType>',
467
- importLines: `
468
- import { eq } from 'drizzle-orm'
469
- import { LibSQLDatabase } from 'drizzle-orm/libsql'
470
- import { schema, type SchemaType } from '../../../db/schema'`,
436
+ importLines: `import { eq } from 'drizzle-orm'
437
+ import { schema } from '../../../db/schema'`,
471
438
  queries: drizzleQueryOperations
472
439
  },
473
440
  'sqlite:sql:local': {
474
441
  dbType: 'Database',
475
- importLines: `import { Database } from 'bun:sqlite'`,
442
+ importLines: ``,
476
443
  queries: bunSqliteQueryOperations
477
444
  },
478
445
  'sqlite:sql:turso': {
479
446
  dbType: 'Client',
480
- importLines: `import { Client } from '@libsql/client'`,
447
+ importLines: ``,
481
448
  queries: libsqlQueryOperations
482
449
  }
483
450
  };
@@ -1,8 +1,8 @@
1
1
  import type { CreateConfiguration } from '../../types';
2
- type ScaffoldDatabaseProps = Pick<CreateConfiguration, 'projectName' | 'databaseHost' | 'orm' | 'databaseDirectory' | 'authProvider' | 'databaseEngine'> & {
2
+ type ScaffoldDatabaseProps = Pick<CreateConfiguration, 'projectName' | 'databaseHost' | 'orm' | 'databaseDirectory' | 'authOption' | 'databaseEngine'> & {
3
3
  databaseDirectory: string;
4
4
  backendDirectory: string;
5
5
  typesDirectory: string;
6
6
  };
7
- export declare const scaffoldDatabase: ({ projectName, databaseEngine, databaseHost, databaseDirectory, backendDirectory, authProvider, orm, typesDirectory }: ScaffoldDatabaseProps) => Promise<void>;
7
+ export declare const scaffoldDatabase: ({ projectName, databaseEngine, databaseHost, databaseDirectory, backendDirectory, authOption, orm, typesDirectory }: ScaffoldDatabaseProps) => Promise<void>;
8
8
  export {};