create-absolutejs 0.6.1 → 0.7.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.
- package/LICENSE +24 -24
- package/README.md +179 -179
- package/dist/commands/formatProject.js +3 -2
- package/dist/commands/initializeGit.js +1 -1
- package/dist/commands/installDependencies.js +4 -3
- package/dist/data.js +22 -21
- package/dist/generators/configurations/generateDrizzleConfig.js +15 -15
- package/dist/generators/configurations/generatePackageJson.js +25 -23
- package/dist/generators/configurations/generatePrettierrc.js +9 -9
- package/dist/generators/db/dockerInitTemplates.js +79 -79
- package/dist/generators/db/generateDatabaseTypes.js +6 -6
- package/dist/generators/db/generateDockerContainer.js +14 -14
- package/dist/generators/db/generateDrizzleSchema.js +17 -17
- package/dist/generators/db/generateSqliteSchema.js +8 -8
- package/dist/generators/db/handlerTemplates.js +259 -259
- package/dist/generators/db/scaffoldDocker.js +1 -1
- package/dist/generators/html/generateHTMLPage.js +60 -60
- package/dist/generators/htmx/generateHTMXPage.js +86 -86
- package/dist/generators/project/generateAbsoluteAuthConfig.d.ts +1 -1
- package/dist/generators/project/generateAbsoluteAuthConfig.js +100 -89
- package/dist/generators/project/generateDBBlock.js +9 -9
- package/dist/generators/project/generateMarkupCSS.js +145 -145
- package/dist/generators/project/generateRoutesBlock.d.ts +3 -2
- package/dist/generators/project/generateRoutesBlock.js +37 -36
- package/dist/generators/project/generateServer.js +22 -18
- package/dist/generators/project/scaffoldBackend.js +2 -1
- package/dist/generators/project/scaffoldFrontends.d.ts +2 -2
- package/dist/generators/project/scaffoldFrontends.js +5 -2
- package/dist/generators/react/generateReactComponents.js +95 -95
- package/dist/generators/svelte/generateSveltePage.js +210 -210
- package/dist/generators/vue/generateVuePage.js +261 -261
- package/dist/messages.js +43 -43
- package/dist/questions/projectName.js +1 -1
- package/dist/scaffold.js +2 -1
- package/dist/templates/README.md +35 -35
- package/dist/templates/assets/svg/google-logo.svg +7 -7
- package/dist/templates/assets/svg/htmx-logo-black.svg +9 -9
- package/dist/templates/assets/svg/htmx-logo-white.svg +9 -9
- package/dist/templates/assets/svg/vue-logo.svg +4 -4
- package/dist/templates/configurations/.prettierignore +3 -3
- package/dist/templates/configurations/.prettierrc.json +9 -9
- package/dist/templates/configurations/drizzle.config.ts +13 -13
- package/dist/templates/configurations/eslint.config.mjs +243 -243
- package/dist/templates/configurations/tsconfig.example.json +98 -98
- package/dist/templates/constants.ts +2 -2
- package/dist/templates/db/docker-compose.db.yml +15 -15
- package/dist/templates/git/gitignore +51 -51
- package/dist/templates/html/scripts/typescript-example.ts +21 -21
- package/dist/templates/react/components/App.tsx +52 -52
- package/dist/templates/react/components/Head.tsx +34 -34
- package/dist/templates/react/components/OAuthLink.tsx +39 -39
- package/dist/templates/react/components/ProfilePicture.tsx +56 -56
- package/dist/templates/styles/colors.ts +11 -11
- package/dist/templates/styles/reset.css +84 -84
- package/dist/templates/svelte/components/Counter.svelte +19 -19
- package/dist/templates/svelte/composables/counter.svelte.ts +14 -14
- package/dist/templates/tailwind/postcss.config.ts +8 -8
- package/dist/templates/tailwind/tailwind.config.ts +7 -7
- package/dist/templates/tailwind/tailwind.css +1 -1
- package/dist/templates/vue/components/CountButton.vue +39 -39
- package/dist/templates/vue/composables/useCount.ts +14 -14
- package/dist/utils/commandMaps.d.ts +1 -1
- package/dist/utils/commandMaps.js +4 -4
- package/dist/versions.d.ts +49 -0
- package/dist/versions.js +61 -0
- package/package.json +22 -21
- package/dist/templates/styles/tailwind.css +0 -1
|
@@ -4,6 +4,7 @@ import { spinner } from '@clack/prompts';
|
|
|
4
4
|
import { green } from 'picocolors';
|
|
5
5
|
import { absoluteAuthPlugin, availablePlugins, defaultDependencies, defaultPlugins, eslintAndPrettierDependencies, eslintReactDependencies } from '../../data';
|
|
6
6
|
import { getPackageVersion } from '../../utils/getPackageVersion';
|
|
7
|
+
import { versions } from '../../versions';
|
|
7
8
|
import { initTemplates } from '../db/dockerInitTemplates';
|
|
8
9
|
import { computeFlags } from '../project/computeFlags';
|
|
9
10
|
const dbScripts = {
|
|
@@ -43,7 +44,7 @@ export const createPackageJson = ({ projectName, authOption, plugins, databaseEn
|
|
|
43
44
|
const resolveVersion = (name, listed) => latest ? (getPackageVersion(name) ?? listed) : listed;
|
|
44
45
|
const dependencies = {};
|
|
45
46
|
const devDependencies = {};
|
|
46
|
-
devDependencies['typescript'] = resolveVersion('typescript', '
|
|
47
|
+
devDependencies['typescript'] = resolveVersion('typescript', versions['typescript']);
|
|
47
48
|
const flags = computeFlags(frontendDirectories);
|
|
48
49
|
for (const p of defaultPlugins) {
|
|
49
50
|
dependencies[p.value] = resolveVersion(p.value, p.latestVersion);
|
|
@@ -66,14 +67,15 @@ export const createPackageJson = ({ projectName, authOption, plugins, databaseEn
|
|
|
66
67
|
});
|
|
67
68
|
}
|
|
68
69
|
if (useTailwind) {
|
|
69
|
-
devDependencies['autoprefixer'] = resolveVersion('autoprefixer', '
|
|
70
|
-
devDependencies['postcss'] = resolveVersion('postcss', '
|
|
71
|
-
devDependencies['tailwindcss'] = resolveVersion('tailwindcss', '
|
|
72
|
-
devDependencies['@tailwindcss/cli'] = resolveVersion('@tailwindcss/cli', '
|
|
70
|
+
devDependencies['autoprefixer'] = resolveVersion('autoprefixer', versions['autoprefixer']);
|
|
71
|
+
devDependencies['postcss'] = resolveVersion('postcss', versions['postcss']);
|
|
72
|
+
devDependencies['tailwindcss'] = resolveVersion('tailwindcss', versions['tailwindcss']);
|
|
73
|
+
devDependencies['@tailwindcss/cli'] = resolveVersion('@tailwindcss/cli', versions['@tailwindcss/cli']);
|
|
73
74
|
}
|
|
74
75
|
if (flags.requiresReact) {
|
|
75
|
-
dependencies['react'] = resolveVersion('react', '
|
|
76
|
-
|
|
76
|
+
dependencies['react'] = resolveVersion('react', versions['react']);
|
|
77
|
+
dependencies['react-dom'] = resolveVersion('react-dom', versions['react-dom']);
|
|
78
|
+
devDependencies['@types/react'] = resolveVersion('@types/react', versions['@types/react']);
|
|
77
79
|
}
|
|
78
80
|
if (flags.requiresReact && codeQualityTool === 'eslint+prettier') {
|
|
79
81
|
eslintReactDependencies.forEach((dep) => {
|
|
@@ -81,35 +83,35 @@ export const createPackageJson = ({ projectName, authOption, plugins, databaseEn
|
|
|
81
83
|
});
|
|
82
84
|
}
|
|
83
85
|
if (flags.requiresSvelte) {
|
|
84
|
-
dependencies['svelte'] = resolveVersion('svelte', '
|
|
86
|
+
dependencies['svelte'] = resolveVersion('svelte', versions['svelte']);
|
|
85
87
|
}
|
|
86
88
|
if (flags.requiresSvelte && codeQualityTool === 'eslint+prettier') {
|
|
87
|
-
devDependencies['prettier-plugin-svelte'] = resolveVersion('prettier-plugin-svelte', '
|
|
89
|
+
devDependencies['prettier-plugin-svelte'] = resolveVersion('prettier-plugin-svelte', versions['prettier-plugin-svelte']);
|
|
88
90
|
}
|
|
89
91
|
if (flags.requiresVue) {
|
|
90
|
-
dependencies['vue'] = resolveVersion('vue', '
|
|
92
|
+
dependencies['vue'] = resolveVersion('vue', versions['vue']);
|
|
91
93
|
}
|
|
92
94
|
if (flags.requiresHtmx) {
|
|
93
|
-
dependencies['elysia-scoped-state'] = resolveVersion('elysia-scoped-state', '
|
|
95
|
+
dependencies['elysia-scoped-state'] = resolveVersion('elysia-scoped-state', versions['elysia-scoped-state']);
|
|
94
96
|
}
|
|
95
97
|
if (orm === 'drizzle') {
|
|
96
|
-
dependencies['drizzle-orm'] = resolveVersion('drizzle-orm', '
|
|
98
|
+
dependencies['drizzle-orm'] = resolveVersion('drizzle-orm', versions['drizzle-orm']);
|
|
97
99
|
}
|
|
98
100
|
switch (databaseHost) {
|
|
99
101
|
case 'neon':
|
|
100
|
-
dependencies['@neondatabase/serverless'] = resolveVersion('@neondatabase/serverless', '
|
|
102
|
+
dependencies['@neondatabase/serverless'] = resolveVersion('@neondatabase/serverless', versions['@neondatabase/serverless']);
|
|
101
103
|
break;
|
|
102
104
|
case 'planetscale':
|
|
103
|
-
dependencies['@planetscale/database'] = resolveVersion('@planetscale/database', '
|
|
105
|
+
dependencies['@planetscale/database'] = resolveVersion('@planetscale/database', versions['@planetscale/database']);
|
|
104
106
|
break;
|
|
105
107
|
case 'turso':
|
|
106
|
-
dependencies['@libsql/client'] = resolveVersion('@libsql/client', '
|
|
108
|
+
dependencies['@libsql/client'] = resolveVersion('@libsql/client', versions['@libsql/client']);
|
|
107
109
|
break;
|
|
108
110
|
}
|
|
109
111
|
if (latest)
|
|
110
112
|
s.stop(green('Package versions resolved'));
|
|
111
113
|
const scripts = {
|
|
112
|
-
dev: '
|
|
114
|
+
dev: 'bun run --watch src/backend/server.ts',
|
|
113
115
|
format: `prettier --write "./**/*.{js,ts,css,json,mjs,md${flags.requiresReact ? ',jsx,tsx' : ''}${flags.requiresSvelte ? ',svelte' : ''}${flags.requiresVue ? ',vue' : ''}${flags.requiresHtml || flags.requiresHtmx ? ',html' : ''}}"`,
|
|
114
116
|
lint: 'eslint ./src',
|
|
115
117
|
test: 'echo "Error: no test specified" && exit 1',
|
|
@@ -138,21 +140,21 @@ export const createPackageJson = ({ projectName, authOption, plugins, databaseEn
|
|
|
138
140
|
if (isLocal &&
|
|
139
141
|
(databaseEngine === 'mysql' || databaseEngine === 'mariadb') &&
|
|
140
142
|
orm === 'drizzle') {
|
|
141
|
-
dependencies['mysql2'] = resolveVersion('mysql2', '
|
|
143
|
+
dependencies['mysql2'] = resolveVersion('mysql2', versions['mysql2']);
|
|
142
144
|
}
|
|
143
145
|
if (isLocal && databaseEngine === 'singlestore') {
|
|
144
|
-
dependencies['mysql2'] = resolveVersion('mysql2', '
|
|
146
|
+
dependencies['mysql2'] = resolveVersion('mysql2', versions['mysql2']);
|
|
145
147
|
}
|
|
146
148
|
if (databaseEngine === 'postgresql' && databaseHost === 'planetscale') {
|
|
147
|
-
dependencies['pg'] = resolveVersion('pg', '
|
|
148
|
-
devDependencies['@types/pg'] = resolveVersion('@types/pg', '
|
|
149
|
+
dependencies['pg'] = resolveVersion('pg', versions['pg']);
|
|
150
|
+
devDependencies['@types/pg'] = resolveVersion('@types/pg', versions['@types/pg']);
|
|
149
151
|
}
|
|
150
152
|
if (isLocal && databaseEngine === 'mssql') {
|
|
151
|
-
dependencies['mssql'] = resolveVersion('mssql', '
|
|
152
|
-
devDependencies['@types/mssql'] = resolveVersion('@types/mssql', '
|
|
153
|
+
dependencies['mssql'] = resolveVersion('mssql', versions['mssql']);
|
|
154
|
+
devDependencies['@types/mssql'] = resolveVersion('@types/mssql', versions['@types/mssql']);
|
|
153
155
|
}
|
|
154
156
|
if (isLocal && databaseEngine === 'gel') {
|
|
155
|
-
dependencies['gel'] = resolveVersion('gel', '
|
|
157
|
+
dependencies['gel'] = resolveVersion('gel', versions['gel']);
|
|
156
158
|
}
|
|
157
159
|
if (isLocal && databaseEngine === 'sqlite') {
|
|
158
160
|
scripts['db:sqlite'] = 'sqlite3 db/database.sqlite';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
export const generatePrettierrc = (frontends) => {
|
|
2
2
|
const usesSvelte = frontends.some((frontend) => frontend === 'svelte');
|
|
3
|
-
return `{
|
|
4
|
-
"endOfLine": "auto",
|
|
5
|
-
"printWidth": 80,
|
|
6
|
-
"semi": true,
|
|
7
|
-
"singleQuote": true,
|
|
8
|
-
"tabWidth": 4,
|
|
9
|
-
"trailingComma": "none",
|
|
10
|
-
"useTabs": true
|
|
11
|
-
${usesSvelte ? `,"plugins": ["prettier-plugin-svelte"],\n"overrides": [{"files": "*.svelte", "options": {"parser": "svelte"}}]` : ''}
|
|
3
|
+
return `{
|
|
4
|
+
"endOfLine": "auto",
|
|
5
|
+
"printWidth": 80,
|
|
6
|
+
"semi": true,
|
|
7
|
+
"singleQuote": true,
|
|
8
|
+
"tabWidth": 4,
|
|
9
|
+
"trailingComma": "none",
|
|
10
|
+
"useTabs": true
|
|
11
|
+
${usesSvelte ? `,"plugins": ["prettier-plugin-svelte"],\n"overrides": [{"files": "*.svelte", "options": {"parser": "svelte"}}]` : ''}
|
|
12
12
|
}`;
|
|
13
13
|
};
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
const postgresqlUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
2
|
-
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
3
|
-
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
4
|
-
metadata JSONB DEFAULT '{}'::jsonb
|
|
1
|
+
const postgresqlUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
2
|
+
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
3
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
4
|
+
metadata JSONB DEFAULT '{}'::jsonb
|
|
5
5
|
);`;
|
|
6
|
-
const postgresqlCountHistory = `CREATE TABLE IF NOT EXISTS count_history (
|
|
7
|
-
uid INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
8
|
-
count INTEGER NOT NULL,
|
|
9
|
-
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
6
|
+
const postgresqlCountHistory = `CREATE TABLE IF NOT EXISTS count_history (
|
|
7
|
+
uid INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
8
|
+
count INTEGER NOT NULL,
|
|
9
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
10
10
|
);`;
|
|
11
|
-
const mysqlUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
12
|
-
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
13
|
-
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
14
|
-
metadata JSON DEFAULT (JSON_OBJECT())
|
|
11
|
+
const mysqlUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
12
|
+
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
13
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
14
|
+
metadata JSON DEFAULT (JSON_OBJECT())
|
|
15
15
|
);`;
|
|
16
|
-
const mysqlCountHistory = `CREATE TABLE IF NOT EXISTS count_history (
|
|
17
|
-
uid INT AUTO_INCREMENT PRIMARY KEY,
|
|
18
|
-
count INT NOT NULL,
|
|
19
|
-
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
16
|
+
const mysqlCountHistory = `CREATE TABLE IF NOT EXISTS count_history (
|
|
17
|
+
uid INT AUTO_INCREMENT PRIMARY KEY,
|
|
18
|
+
count INT NOT NULL,
|
|
19
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
20
20
|
);`;
|
|
21
|
-
const mariadbUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
22
|
-
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
23
|
-
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
24
|
-
metadata JSON DEFAULT ('{}')
|
|
21
|
+
const mariadbUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
22
|
+
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
23
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
24
|
+
metadata JSON DEFAULT ('{}')
|
|
25
25
|
);`;
|
|
26
|
-
const mariadbCountHistory = `CREATE TABLE IF NOT EXISTS count_history (
|
|
27
|
-
uid INT AUTO_INCREMENT PRIMARY KEY,
|
|
28
|
-
count INT NOT NULL,
|
|
29
|
-
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
26
|
+
const mariadbCountHistory = `CREATE TABLE IF NOT EXISTS count_history (
|
|
27
|
+
uid INT AUTO_INCREMENT PRIMARY KEY,
|
|
28
|
+
count INT NOT NULL,
|
|
29
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
30
30
|
);`;
|
|
31
|
-
const singlestoreUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
32
|
-
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
33
|
-
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
34
|
-
metadata JSON DEFAULT ('{}')
|
|
31
|
+
const singlestoreUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
32
|
+
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
33
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
34
|
+
metadata JSON DEFAULT ('{}')
|
|
35
35
|
);`;
|
|
36
|
-
const singlestoreCountHistory = `CREATE TABLE IF NOT EXISTS count_history (
|
|
37
|
-
uid INT AUTO_INCREMENT PRIMARY KEY,
|
|
38
|
-
count INT NOT NULL,
|
|
39
|
-
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
36
|
+
const singlestoreCountHistory = `CREATE TABLE IF NOT EXISTS count_history (
|
|
37
|
+
uid INT AUTO_INCREMENT PRIMARY KEY,
|
|
38
|
+
count INT NOT NULL,
|
|
39
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
40
40
|
);`;
|
|
41
|
-
const cockroachdbUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
42
|
-
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
43
|
-
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
44
|
-
metadata JSONB DEFAULT '{}'::jsonb
|
|
41
|
+
const cockroachdbUsers = `CREATE TABLE IF NOT EXISTS users (
|
|
42
|
+
auth_sub VARCHAR(255) PRIMARY KEY,
|
|
43
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
44
|
+
metadata JSONB DEFAULT '{}'::jsonb
|
|
45
45
|
);`;
|
|
46
|
-
const cockroachdbCountHistory = `CREATE SEQUENCE IF NOT EXISTS count_history_uid_seq START WITH 1 INCREMENT BY 1;
|
|
47
|
-
CREATE TABLE IF NOT EXISTS count_history (
|
|
48
|
-
uid BIGINT PRIMARY KEY DEFAULT nextval('count_history_uid_seq'),
|
|
49
|
-
count INT NOT NULL,
|
|
50
|
-
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
46
|
+
const cockroachdbCountHistory = `CREATE SEQUENCE IF NOT EXISTS count_history_uid_seq START WITH 1 INCREMENT BY 1;
|
|
47
|
+
CREATE TABLE IF NOT EXISTS count_history (
|
|
48
|
+
uid BIGINT PRIMARY KEY DEFAULT nextval('count_history_uid_seq'),
|
|
49
|
+
count INT NOT NULL,
|
|
50
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
51
51
|
);`;
|
|
52
|
-
const mssqlUsers = `IF OBJECT_ID('users','U') IS NULL
|
|
53
|
-
BEGIN
|
|
54
|
-
CREATE TABLE users (
|
|
55
|
-
auth_sub NVARCHAR(255) PRIMARY KEY,
|
|
56
|
-
created_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME(),
|
|
57
|
-
metadata NVARCHAR(MAX) NULL
|
|
58
|
-
);
|
|
52
|
+
const mssqlUsers = `IF OBJECT_ID('users','U') IS NULL
|
|
53
|
+
BEGIN
|
|
54
|
+
CREATE TABLE users (
|
|
55
|
+
auth_sub NVARCHAR(255) PRIMARY KEY,
|
|
56
|
+
created_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME(),
|
|
57
|
+
metadata NVARCHAR(MAX) NULL
|
|
58
|
+
);
|
|
59
59
|
END;`;
|
|
60
|
-
const mssqlCountHistory = `IF OBJECT_ID('count_history','U') IS NULL
|
|
61
|
-
BEGIN
|
|
62
|
-
CREATE TABLE count_history (
|
|
63
|
-
uid INT IDENTITY(1,1) PRIMARY KEY,
|
|
64
|
-
count INT NOT NULL,
|
|
65
|
-
created_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME()
|
|
66
|
-
);
|
|
60
|
+
const mssqlCountHistory = `IF OBJECT_ID('count_history','U') IS NULL
|
|
61
|
+
BEGIN
|
|
62
|
+
CREATE TABLE count_history (
|
|
63
|
+
uid INT IDENTITY(1,1) PRIMARY KEY,
|
|
64
|
+
count INT NOT NULL,
|
|
65
|
+
created_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME()
|
|
66
|
+
);
|
|
67
67
|
END;`;
|
|
68
|
-
const gelUsers = `create type users {
|
|
69
|
-
create required property auth_sub: str {
|
|
70
|
-
create constraint exclusive;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
create required property created_at: datetime {
|
|
74
|
-
set default := datetime_current();
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
create required property metadata: json {
|
|
78
|
-
set default := to_json('{}');
|
|
79
|
-
};
|
|
68
|
+
const gelUsers = `create type users {
|
|
69
|
+
create required property auth_sub: str {
|
|
70
|
+
create constraint exclusive;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
create required property created_at: datetime {
|
|
74
|
+
set default := datetime_current();
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
create required property metadata: json {
|
|
78
|
+
set default := to_json('{}');
|
|
79
|
+
};
|
|
80
80
|
};`;
|
|
81
|
-
const gelCountHistory = `create scalar type CountHistoryUid extending sequence;
|
|
82
|
-
create type count_history {
|
|
83
|
-
create required property uid: CountHistoryUid {
|
|
84
|
-
create constraint exclusive;
|
|
85
|
-
set default := sequence_next(introspect CountHistoryUid);
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
create required property count: int16;
|
|
89
|
-
|
|
90
|
-
create required property created_at: datetime {
|
|
91
|
-
set default := datetime_current();
|
|
92
|
-
};
|
|
81
|
+
const gelCountHistory = `create scalar type CountHistoryUid extending sequence;
|
|
82
|
+
create type count_history {
|
|
83
|
+
create required property uid: CountHistoryUid {
|
|
84
|
+
create constraint exclusive;
|
|
85
|
+
set default := sequence_next(introspect CountHistoryUid);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
create required property count: int16;
|
|
89
|
+
|
|
90
|
+
create required property created_at: datetime {
|
|
91
|
+
set default := datetime_current();
|
|
92
|
+
};
|
|
93
93
|
};`;
|
|
94
94
|
export const userTables = {
|
|
95
95
|
cockroachdb: cockroachdbUsers,
|
|
@@ -55,13 +55,13 @@ export const generateDatabaseTypes = ({ databaseEngine, databaseHost, authOption
|
|
|
55
55
|
? `import { users, schema } from '../../db/schema';`
|
|
56
56
|
: `import { countHistory } from '../../db/schema';`;
|
|
57
57
|
const extraTypes = authOption === 'abs'
|
|
58
|
-
? `export type User = typeof users.$inferSelect;
|
|
58
|
+
? `export type User = typeof users.$inferSelect;
|
|
59
59
|
export type NewUser = typeof users.$inferInsert;`
|
|
60
|
-
: `export type CountHistory = typeof countHistory.$inferSelect;
|
|
60
|
+
: `export type CountHistory = typeof countHistory.$inferSelect;
|
|
61
61
|
export type NewCountHistory = typeof countHistory.$inferInsert;`;
|
|
62
|
-
return `${schemaImport}
|
|
63
|
-
${dbImport}
|
|
64
|
-
|
|
65
|
-
${`${dbTypeLine}\n`}export type SchemaType = typeof schema;\n\n${extraTypes}
|
|
62
|
+
return `${schemaImport}
|
|
63
|
+
${dbImport}
|
|
64
|
+
|
|
65
|
+
${`${dbTypeLine}\n`}export type SchemaType = typeof schema;\n\n${extraTypes}
|
|
66
66
|
`;
|
|
67
67
|
};
|
|
@@ -87,19 +87,19 @@ export const generateDockerContainer = (databaseEngine) => {
|
|
|
87
87
|
const envLines = Object.entries(env)
|
|
88
88
|
.map(([key, value]) => ` ${key}: ${value}`)
|
|
89
89
|
.join('\n');
|
|
90
|
-
return `services:
|
|
91
|
-
db:
|
|
92
|
-
image: ${image}
|
|
93
|
-
restart: always
|
|
94
|
-
environment:
|
|
95
|
-
${envLines}
|
|
96
|
-
ports:
|
|
97
|
-
- "${port}"
|
|
98
|
-
${commandLines}
|
|
99
|
-
volumes:
|
|
100
|
-
- db_data:${volumePath}
|
|
101
|
-
|
|
102
|
-
volumes:
|
|
103
|
-
db_data:
|
|
90
|
+
return `services:
|
|
91
|
+
db:
|
|
92
|
+
image: ${image}
|
|
93
|
+
restart: always
|
|
94
|
+
environment:
|
|
95
|
+
${envLines}
|
|
96
|
+
ports:
|
|
97
|
+
- "${port}"
|
|
98
|
+
${commandLines}
|
|
99
|
+
volumes:
|
|
100
|
+
- db_data:${volumePath}
|
|
101
|
+
|
|
102
|
+
volumes:
|
|
103
|
+
db_data:
|
|
104
104
|
`;
|
|
105
105
|
};
|
|
@@ -80,31 +80,31 @@ export const generateDrizzleSchema = ({ databaseEngine, authOption }) => {
|
|
|
80
80
|
uidColumn = `integer('uid').primaryKey().generatedAlwaysAsIdentity()`;
|
|
81
81
|
}
|
|
82
82
|
const constsBlock = databaseEngine === 'sqlite'
|
|
83
|
-
? `const JULIAN_DAY_UNIX_EPOCH_OFFSET = 2440587.5;
|
|
83
|
+
? `const JULIAN_DAY_UNIX_EPOCH_OFFSET = 2440587.5;
|
|
84
84
|
const MILLIS_PER_DAY = 86400000;\n\n`
|
|
85
85
|
: '';
|
|
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
89
|
const tableBlock = authOption === 'abs'
|
|
90
|
-
? `export const users = ${cfg.table}('users', {
|
|
91
|
-
auth_sub: ${cfg.string}.primaryKey(),
|
|
92
|
-
created_at: ${timestampColumn},
|
|
93
|
-
metadata: ${cfg.json}.$type<Record<string, unknown>>().default({})
|
|
90
|
+
? `export const users = ${cfg.table}('users', {
|
|
91
|
+
auth_sub: ${cfg.string}.primaryKey(),
|
|
92
|
+
created_at: ${timestampColumn},
|
|
93
|
+
metadata: ${cfg.json}.$type<Record<string, unknown>>().default({})
|
|
94
94
|
});`
|
|
95
|
-
: `export const countHistory = ${cfg.table}('count_history', {
|
|
96
|
-
uid: ${uidColumn},
|
|
97
|
-
count: ${intBuilder}('count').notNull(),
|
|
98
|
-
created_at: ${timestampColumn}
|
|
95
|
+
: `export const countHistory = ${cfg.table}('count_history', {
|
|
96
|
+
uid: ${uidColumn},
|
|
97
|
+
count: ${intBuilder}('count').notNull(),
|
|
98
|
+
created_at: ${timestampColumn}
|
|
99
99
|
});`;
|
|
100
100
|
const schemaKey = authOption === 'abs' ? 'users' : 'countHistory';
|
|
101
|
-
return `
|
|
102
|
-
${sqliteImports}${builderImport}
|
|
103
|
-
|
|
104
|
-
${constsBlock}${tableBlock}
|
|
105
|
-
|
|
106
|
-
export const schema = {
|
|
107
|
-
${schemaKey}
|
|
108
|
-
};
|
|
101
|
+
return `
|
|
102
|
+
${sqliteImports}${builderImport}
|
|
103
|
+
|
|
104
|
+
${constsBlock}${tableBlock}
|
|
105
|
+
|
|
106
|
+
export const schema = {
|
|
107
|
+
${schemaKey}
|
|
108
|
+
};
|
|
109
109
|
`;
|
|
110
110
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export const generateSqliteSchema = (authOption) => authOption && authOption !== 'none'
|
|
2
|
-
? `CREATE TABLE IF NOT EXISTS users (
|
|
3
|
-
auth_sub TEXT PRIMARY KEY,
|
|
4
|
-
created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000),
|
|
5
|
-
metadata TEXT DEFAULT '{}'
|
|
2
|
+
? `CREATE TABLE IF NOT EXISTS users (
|
|
3
|
+
auth_sub TEXT PRIMARY KEY,
|
|
4
|
+
created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000),
|
|
5
|
+
metadata TEXT DEFAULT '{}'
|
|
6
6
|
);`
|
|
7
|
-
: `CREATE TABLE IF NOT EXISTS count_history (
|
|
8
|
-
uid INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
9
|
-
count INTEGER NOT NULL,
|
|
10
|
-
created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000)
|
|
7
|
+
: `CREATE TABLE IF NOT EXISTS count_history (
|
|
8
|
+
uid INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
9
|
+
count INTEGER NOT NULL,
|
|
10
|
+
created_at INTEGER NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400000)
|
|
11
11
|
);`;
|