create-absolutejs 0.4.2 → 0.5.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.
@@ -1,5 +1,6 @@
1
1
  import { mkdirSync, writeFileSync } from 'fs';
2
2
  import { join } from 'path';
3
+ import { isDrizzleDialect } from '../../typeGuards';
3
4
  export const generateImportsBlock = ({ backendDirectory, deps, flags, orm, authProvider, databaseEngine, databaseHost, frontendDirectories }) => {
4
5
  const rawImports = [];
5
6
  const pushHandler = (cond, name) => cond &&
@@ -51,44 +52,112 @@ export const generateImportsBlock = ({ backendDirectory, deps, flags, orm, authP
51
52
  const isRemoteHost = databaseHost !== undefined && databaseHost !== 'none';
52
53
  const hasDatabase = databaseEngine !== undefined && databaseEngine !== 'none';
53
54
  const noOrm = orm === undefined || orm === 'none';
54
- if (orm === 'drizzle' && isRemoteHost) {
55
- const key = databaseHost;
56
- rawImports.push(...connectorImports[key], ...dialectImports[key]);
57
- }
58
- if (orm === 'drizzle' && !isRemoteHost && databaseEngine === 'postgresql')
59
- rawImports.push(`import { Pool } from 'pg'`, `import { drizzle } from 'drizzle-orm/node-postgres'`);
60
- if (orm === 'drizzle' && databaseEngine === 'sqlite' && !isRemoteHost)
61
- rawImports.push(`import { Database } from 'bun:sqlite'`, `import { drizzle } from 'drizzle-orm/bun-sqlite'`);
62
- if (noOrm && databaseEngine === 'sqlite')
63
- rawImports.push(...(databaseHost === 'turso'
55
+ const ormImports = {
56
+ drizzle: [
57
+ `import { Elysia } from 'elysia'`,
58
+ ...(databaseEngine === 'sqlite' && !isRemoteHost
59
+ ? []
60
+ : [`import { getEnv } from '@absolutejs/absolute'`]),
61
+ ...(authProvider === 'absoluteAuth'
62
+ ? [
63
+ `import { schema } from '../../db/schema'`,
64
+ `import { User } from '../types/databaseTypes'`
65
+ ]
66
+ : [`import { schema } from '../../db/schema'`])
67
+ ]
68
+ };
69
+ const ormDatabaseImports = {
70
+ drizzle: {
71
+ gel: [
72
+ `import { createClient } from 'gel'`,
73
+ `import { drizzle } from 'drizzle-orm/gel'`
74
+ ],
75
+ mariadb: [
76
+ `import { drizzle } from 'drizzle-orm/mysql2'`,
77
+ `import { createPool } from 'mysql2/promise'`
78
+ ],
79
+ mysql: !isRemoteHost
80
+ ? [
81
+ `import { drizzle } from 'drizzle-orm/mysql2'`,
82
+ `import { createPool } from 'mysql2/promise'`
83
+ ]
84
+ : [],
85
+ postgresql: !isRemoteHost
86
+ ? [
87
+ `import { SQL } from 'bun'`,
88
+ `import { drizzle } from 'drizzle-orm/bun-sql'`
89
+ ]
90
+ : [],
91
+ singlestore: [
92
+ `import { drizzle } from 'drizzle-orm/singlestore'`,
93
+ `import { createPool } from 'mysql2/promise'`
94
+ ],
95
+ sqlite: !isRemoteHost
96
+ ? [
97
+ `import { Database } from 'bun:sqlite'`,
98
+ `import { drizzle } from 'drizzle-orm/bun-sqlite'`
99
+ ]
100
+ : []
101
+ }
102
+ };
103
+ const noOrmImports = {
104
+ cockroachdb: [
105
+ `import { SQL } from 'bun'`,
106
+ `import { getEnv } from '@absolutejs/absolute'`
107
+ ],
108
+ gel: [
109
+ `import { createClient } from 'gel'`,
110
+ `import { getEnv } from '@absolutejs/absolute'`
111
+ ],
112
+ mariadb: [
113
+ `import { SQL } from 'bun'`,
114
+ `import { getEnv } from '@absolutejs/absolute'`
115
+ ],
116
+ mongodb: [],
117
+ mssql: [
118
+ `import { connect } from 'mssql'`,
119
+ `import { getEnv } from '@absolutejs/absolute'`
120
+ ],
121
+ mysql: isRemoteHost
64
122
  ? [
65
- `import { createClient } from '@libsql/client'`,
123
+ ...connectorImports[databaseHost],
66
124
  `import { getEnv } from '@absolutejs/absolute'`
67
125
  ]
68
- : [`import { Database } from 'bun:sqlite'`]));
69
- if (databaseEngine === 'mysql' && isRemoteHost) {
70
- const key = databaseHost;
71
- rawImports.push(...connectorImports[key]);
72
- }
73
- if (databaseEngine === 'mysql' && !isRemoteHost) {
74
- rawImports.push(`import { createPool } from 'mysql2/promise'`);
126
+ : [
127
+ `import { SQL } from 'bun'`,
128
+ `import { getEnv } from '@absolutejs/absolute'`
129
+ ],
130
+ postgresql: isRemoteHost
131
+ ? [
132
+ ...connectorImports[databaseHost],
133
+ `import { getEnv } from '@absolutejs/absolute'`
134
+ ]
135
+ : [
136
+ `import { SQL } from 'bun'`,
137
+ `import { getEnv } from '@absolutejs/absolute'`
138
+ ],
139
+ singlestore: [
140
+ `import { createPool } from 'mysql2/promise'`,
141
+ `import { getEnv } from '@absolutejs/absolute'`
142
+ ],
143
+ sqlite: isRemoteHost
144
+ ? [
145
+ ...connectorImports[databaseHost],
146
+ `import { getEnv } from '@absolutejs/absolute'`
147
+ ]
148
+ : [`import { Database } from 'bun:sqlite'`]
149
+ };
150
+ if (orm === 'drizzle') {
151
+ rawImports.push(...ormImports[orm]);
75
152
  }
76
- if (databaseEngine === 'mysql' && orm === 'drizzle') {
77
- rawImports.push(`import { drizzle } from 'drizzle-orm/mysql2'`);
153
+ if (orm === 'drizzle' && isRemoteHost) {
154
+ rawImports.push(...connectorImports[databaseHost], ...dialectImports[databaseHost]);
78
155
  }
79
- if (databaseEngine === 'mysql') {
80
- rawImports.push(`import { getEnv } from '@absolutejs/absolute'`);
156
+ if (orm === 'drizzle' && isDrizzleDialect(databaseEngine)) {
157
+ rawImports.push(...ormDatabaseImports[orm][databaseEngine]);
81
158
  }
82
- if (noOrm && databaseEngine === 'postgresql')
83
- rawImports.push(...(isRemoteHost
84
- ? connectorImports[databaseHost]
85
- : [`import { Pool } from 'pg'`]), `import { getEnv } from '@absolutejs/absolute'`);
86
- if (orm === 'drizzle') {
87
- rawImports.push(`import { Elysia } from 'elysia'`, ...(databaseEngine === 'sqlite' && !isRemoteHost
88
- ? []
89
- : [`import { getEnv } from '@absolutejs/absolute'`]), authProvider === 'absoluteAuth'
90
- ? `import { schema, User } from '../../db/schema'`
91
- : `import { schema } from '../../db/schema'`);
159
+ if (noOrm && hasDatabase && noOrmImports[databaseEngine]) {
160
+ rawImports.push(...noOrmImports[databaseEngine]);
92
161
  }
93
162
  if (authProvider === 'absoluteAuth')
94
163
  rawImports.push(`import { absoluteAuth, instantiateUserSession } from '@absolutejs/auth'`, ...(hasDatabase
@@ -12,7 +12,11 @@ export const generateUseBlock = ({ deps, databaseEngine, orm }) => deps
12
12
  const instantiate = 'instantiateUserSession';
13
13
  const pluginGeneric = hasOrm ? '<User>' : '';
14
14
  const callback = hasDatabase
15
- ? `async ({ authProvider, providerInstance, tokenResponse, userSessionId, session }) => ${instantiate}({ authProvider, providerInstance, session, tokenResponse, userSessionId, createUser: (userIdentity) => createUser({ authProvider, db, userIdentity }), getUser: (userIdentity) => getUser({ authProvider, db, userIdentity }) })`
15
+ ? `async ({ authProvider, providerInstance, tokenResponse, unregisteredSession, cookie: { user_session_id }, session }) => ${instantiate}(
16
+ { authProvider, providerInstance, session, tokenResponse, unregisteredSession, user_session_id,
17
+ getUser: async (userIdentity) => getUser({ authProvider, db, userIdentity }),
18
+ onNewUser: async (userIdentity) => createUser({ authProvider, db, userIdentity })
19
+ })`
16
20
  : `({ authProvider, tokenResponse, userSessionId }) => { console.log(\`Successfully authorized OAuth2 with \${authProvider} (session: \${userSessionId})\`, tokenResponse); }`;
17
21
  const mergedConfig = `{ ${baseConfigString}${baseConfigString ? ',' : ''} onCallbackSuccess: ${callback} }`;
18
22
  return `.use(absoluteAuth${pluginGeneric}(${mergedConfig}))`;
@@ -1 +1 @@
1
- export declare const getDatabaseEngine: () => Promise<"gel" | "mysql" | "postgresql" | "sqlite" | "singlestore" | "mongodb" | "mariadb" | "cockroachdb" | "mssql" | undefined>;
1
+ export declare const getDatabaseEngine: () => Promise<"gel" | "mysql" | "postgresql" | "sqlite" | "singlestore" | "mariadb" | "mongodb" | "cockroachdb" | "mssql" | undefined>;
package/dist/scaffold.js CHANGED
@@ -13,7 +13,7 @@ import { scaffoldFrontends } from './generators/project/scaffoldFrontends';
13
13
  export const scaffold = async ({ response: { projectName, codeQualityTool, initializeGitNow, databaseEngine, databaseHost, useHTMLScripts, useTailwind, databaseDirectory, orm, frontends, plugins, authProvider, buildDirectory, assetsDirectory, tailwind, installDependenciesNow, frontendDirectories }, latest, envVariables, packageManager }) => {
14
14
  const __dirname = dirname(fileURLToPath(import.meta.url));
15
15
  const templatesDirectory = join(__dirname, '/templates');
16
- const { frontendDirectory, backendDirectory, projectAssetsDirectory } = initalizeRoot(projectName, templatesDirectory);
16
+ const { frontendDirectory, backendDirectory, projectAssetsDirectory, typesDirectory } = initalizeRoot(projectName, templatesDirectory);
17
17
  copyFileSync(join(templatesDirectory, 'README.md'), join(projectName, 'README.md'));
18
18
  scaffoldConfigurationFiles({
19
19
  codeQualityTool,
@@ -60,7 +60,8 @@ export const scaffold = async ({ response: { projectName, codeQualityTool, initi
60
60
  databaseEngine,
61
61
  databaseHost,
62
62
  orm,
63
- projectName
63
+ projectName,
64
+ typesDirectory
64
65
  })));
65
66
  scaffoldFrontends({
66
67
  frontendDirectories,
package/package.json CHANGED
@@ -47,5 +47,5 @@
47
47
  "typecheck": "bun run tsc --noEmit"
48
48
  },
49
49
  "type": "module",
50
- "version": "0.4.2"
50
+ "version": "0.5.0"
51
51
  }