create-absolutejs 0.5.1 → 0.6.1
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.
- package/dist/data.d.ts +1 -1
- package/dist/data.js +2 -2
- package/dist/generators/configurations/generatePackageJson.d.ts +2 -2
- package/dist/generators/configurations/generatePackageJson.js +6 -2
- package/dist/generators/configurations/initializeRoot.js +2 -2
- package/dist/generators/db/generateDatabaseTypes.d.ts +3 -3
- package/dist/generators/db/generateDatabaseTypes.js +6 -6
- package/dist/generators/db/generateDrizzleSchema.d.ts +3 -3
- package/dist/generators/db/generateDrizzleSchema.js +4 -6
- package/dist/generators/db/generateSqliteSchema.d.ts +2 -2
- package/dist/generators/db/generateSqliteSchema.js +1 -1
- package/dist/generators/db/handlerTemplates.d.ts +27 -27
- package/dist/generators/db/handlerTemplates.js +59 -92
- package/dist/generators/db/scaffoldDatabase.d.ts +2 -2
- package/dist/generators/db/scaffoldDatabase.js +6 -6
- package/dist/generators/db/scaffoldDocker.d.ts +3 -3
- package/dist/generators/db/scaffoldDocker.js +2 -2
- package/dist/generators/html/scaffoldHTML.js +2 -2
- package/dist/generators/project/collectDependencies.d.ts +2 -2
- package/dist/generators/project/collectDependencies.js +2 -2
- package/dist/generators/project/generateAbsoluteAuthConfig.d.ts +2 -0
- package/dist/generators/project/generateAbsoluteAuthConfig.js +128 -0
- package/dist/generators/project/generateDBBlock.js +8 -2
- package/dist/generators/project/generateImportsBlock.d.ts +2 -2
- package/dist/generators/project/generateImportsBlock.js +8 -15
- package/dist/generators/project/generateRoutesBlock.d.ts +3 -3
- package/dist/generators/project/generateRoutesBlock.js +57 -46
- package/dist/generators/project/generateServer.d.ts +2 -2
- package/dist/generators/project/generateServer.js +28 -12
- package/dist/generators/project/scaffoldBackend.d.ts +6 -0
- package/dist/generators/project/scaffoldBackend.js +23 -0
- package/dist/generators/project/scaffoldFrontends.d.ts +2 -2
- package/dist/generators/project/scaffoldFrontends.js +18 -3
- package/dist/generators/react/generateReactComponents.d.ts +5 -0
- package/dist/generators/react/generateReactComponents.js +126 -0
- package/dist/generators/react/scaffoldReact.d.ts +1 -1
- package/dist/generators/react/scaffoldReact.js +11 -2
- package/dist/index.js +1 -1
- package/dist/messages.d.ts +1 -1
- package/dist/messages.js +4 -3
- package/dist/prompt.js +4 -3
- package/dist/questions/authOption.d.ts +1 -0
- package/dist/questions/{authProvider.js → authOption.js} +5 -5
- package/dist/scaffold.d.ts +1 -1
- package/dist/scaffold.js +13 -9
- package/dist/templates/assets/svg/google-logo.svg +7 -0
- package/dist/templates/react/components/OAuthLink.tsx +39 -0
- package/dist/templates/react/components/ProfilePicture.tsx +56 -0
- package/dist/typeGuards.d.ts +2 -2
- package/dist/typeGuards.js +1 -1
- package/dist/types.d.ts +7 -2
- package/dist/utils/abort.js +1 -1
- package/dist/utils/parseCommandLineOptions.js +29 -8
- package/dist/utils/t3-utils.js +1 -1
- package/package.json +3 -2
- package/dist/generators/project/generateUseBlock.d.ts +0 -6
- package/dist/generators/project/generateUseBlock.js +0 -32
- package/dist/generators/react/generateReactPage.d.ts +0 -2
- package/dist/generators/react/generateReactPage.js +0 -23
- package/dist/questions/authProvider.d.ts +0 -1
- 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 ["
|
|
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 = ['
|
|
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.
|
|
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, '
|
|
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,
|
|
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,
|
|
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 (
|
|
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 '
|
|
2
|
-
import { join } from '
|
|
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 {
|
|
1
|
+
import { AuthOption, DatabaseEngine, DatabaseHost } from '../../types';
|
|
2
2
|
type GenerateTypesProps = {
|
|
3
3
|
databaseEngine: DatabaseEngine;
|
|
4
4
|
databaseHost: DatabaseHost;
|
|
5
|
-
|
|
5
|
+
authOption: AuthOption;
|
|
6
6
|
};
|
|
7
|
-
export declare const generateDatabaseTypes: ({ databaseEngine, databaseHost,
|
|
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,
|
|
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 =
|
|
55
|
-
? `import { users,
|
|
56
|
-
: `import { countHistory
|
|
57
|
-
const extraTypes =
|
|
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
|
-
${
|
|
65
|
+
${`${dbTypeLine}\n`}export type SchemaType = typeof schema;\n\n${extraTypes}
|
|
66
66
|
`;
|
|
67
67
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AuthOption, AvailableDrizzleDialect } from '../../types';
|
|
2
2
|
type GenerateSchemaProps = {
|
|
3
3
|
databaseEngine: AvailableDrizzleDialect;
|
|
4
|
-
|
|
4
|
+
authOption: AuthOption;
|
|
5
5
|
};
|
|
6
|
-
export declare const generateDrizzleSchema: ({ databaseEngine,
|
|
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,
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 {
|
|
2
|
-
export declare const generateSqliteSchema: (
|
|
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 = (
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
30
|
+
readonly importLines: "";
|
|
31
31
|
readonly queries: QueryOperations;
|
|
32
32
|
};
|
|
33
33
|
readonly 'mongodb:native:local': {
|
|
34
34
|
readonly dbType: "Db";
|
|
35
|
-
readonly importLines: "
|
|
35
|
+
readonly importLines: "";
|
|
36
36
|
readonly queries: QueryOperations;
|
|
37
37
|
};
|
|
38
38
|
readonly 'mssql:sql:local': {
|
|
39
39
|
readonly dbType: "ConnectionPool";
|
|
40
|
-
readonly importLines: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
55
|
+
readonly importLines: "";
|
|
56
56
|
readonly queries: QueryOperations;
|
|
57
57
|
};
|
|
58
58
|
readonly 'mysql:sql:planetscale': {
|
|
59
59
|
readonly dbType: "Client";
|
|
60
|
-
readonly importLines: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
80
|
+
readonly importLines: "";
|
|
81
81
|
readonly queries: QueryOperations;
|
|
82
82
|
};
|
|
83
83
|
readonly 'postgresql:sql:neon': {
|
|
84
84
|
readonly dbType: "Pool";
|
|
85
|
-
readonly importLines: "
|
|
85
|
+
readonly importLines: "";
|
|
86
86
|
readonly queries: QueryOperations;
|
|
87
87
|
};
|
|
88
88
|
readonly 'postgresql:sql:planetscale': {
|
|
89
89
|
readonly dbType: "Pool";
|
|
90
|
-
readonly importLines: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
115
|
+
readonly importLines: "";
|
|
116
116
|
readonly queries: QueryOperations;
|
|
117
117
|
};
|
|
118
118
|
readonly 'sqlite:sql:turso': {
|
|
119
119
|
readonly dbType: "Client";
|
|
120
|
-
readonly importLines: "
|
|
120
|
+
readonly importLines: "";
|
|
121
121
|
readonly queries: QueryOperations;
|
|
122
122
|
};
|
|
123
123
|
};
|
|
@@ -1,36 +1,14 @@
|
|
|
1
|
-
const buildSqlAuthTemplate = ({ importLines,
|
|
2
|
-
import {
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
53
|
-
|
|
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:
|
|
325
|
+
importLines: ``,
|
|
340
326
|
queries: postgresSqlQueryOperations
|
|
341
327
|
},
|
|
342
328
|
'gel:drizzle:local': {
|
|
343
329
|
dbType: 'GelJsDatabase<SchemaType>',
|
|
344
|
-
importLines: `
|
|
345
|
-
import {
|
|
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:
|
|
337
|
+
importLines: ``,
|
|
354
338
|
queries: gelClientQueryOperations
|
|
355
339
|
},
|
|
356
340
|
'mariadb:drizzle:local': {
|
|
357
341
|
dbType: 'MySql2Database<SchemaType>',
|
|
358
|
-
importLines: `
|
|
359
|
-
import {
|
|
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:
|
|
348
|
+
importLines: ``,
|
|
367
349
|
queries: mysqlSqlQueryOperations
|
|
368
350
|
},
|
|
369
351
|
'mongodb:native:local': {
|
|
370
352
|
dbType: 'Db',
|
|
371
|
-
importLines:
|
|
353
|
+
importLines: ``,
|
|
372
354
|
queries: mongodbQueryOperations
|
|
373
355
|
},
|
|
374
356
|
'mssql:sql:local': {
|
|
375
357
|
dbType: 'ConnectionPool',
|
|
376
|
-
importLines:
|
|
358
|
+
importLines: ``,
|
|
377
359
|
queries: mssqlSqlQueryOperations
|
|
378
360
|
},
|
|
379
361
|
'mysql:drizzle:local': {
|
|
380
362
|
dbType: 'MySql2Database<SchemaType>',
|
|
381
|
-
importLines: `
|
|
382
|
-
import {
|
|
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 {
|
|
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:
|
|
375
|
+
importLines: ``,
|
|
398
376
|
queries: mysqlSqlQueryOperations
|
|
399
377
|
},
|
|
400
378
|
'mysql:sql:planetscale': {
|
|
401
379
|
dbType: 'Client',
|
|
402
|
-
importLines:
|
|
380
|
+
importLines: ``,
|
|
403
381
|
queries: mysqlPlanetScaleQueryOperations
|
|
404
382
|
},
|
|
405
383
|
'postgresql:drizzle:local': {
|
|
406
384
|
dbType: 'BunSQLDatabase<SchemaType>',
|
|
407
|
-
importLines: `
|
|
408
|
-
import {
|
|
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 {
|
|
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 {
|
|
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:
|
|
403
|
+
importLines: ``,
|
|
432
404
|
queries: postgresSqlQueryOperations
|
|
433
405
|
},
|
|
434
406
|
'postgresql:sql:neon': {
|
|
435
407
|
dbType: 'Pool',
|
|
436
|
-
importLines:
|
|
408
|
+
importLines: ``,
|
|
437
409
|
queries: postgresQueryOperations
|
|
438
410
|
},
|
|
439
411
|
'postgresql:sql:planetscale': {
|
|
440
412
|
dbType: 'Pool',
|
|
441
|
-
importLines:
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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:
|
|
442
|
+
importLines: ``,
|
|
476
443
|
queries: bunSqliteQueryOperations
|
|
477
444
|
},
|
|
478
445
|
'sqlite:sql:turso': {
|
|
479
446
|
dbType: 'Client',
|
|
480
|
-
importLines:
|
|
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' | '
|
|
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,
|
|
7
|
+
export declare const scaffoldDatabase: ({ projectName, databaseEngine, databaseHost, databaseDirectory, backendDirectory, authOption, orm, typesDirectory }: ScaffoldDatabaseProps) => Promise<void>;
|
|
8
8
|
export {};
|