create-absolutejs 0.6.0 → 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.
Files changed (67) hide show
  1. package/LICENSE +24 -24
  2. package/README.md +179 -179
  3. package/dist/commands/formatProject.js +3 -2
  4. package/dist/commands/initializeGit.js +1 -1
  5. package/dist/commands/installDependencies.js +4 -3
  6. package/dist/data.js +22 -21
  7. package/dist/generators/configurations/generateDrizzleConfig.js +15 -15
  8. package/dist/generators/configurations/generatePackageJson.js +25 -23
  9. package/dist/generators/configurations/generatePrettierrc.js +9 -9
  10. package/dist/generators/db/dockerInitTemplates.js +79 -79
  11. package/dist/generators/db/generateDatabaseTypes.js +6 -6
  12. package/dist/generators/db/generateDockerContainer.js +14 -14
  13. package/dist/generators/db/generateDrizzleSchema.js +17 -17
  14. package/dist/generators/db/generateSqliteSchema.js +8 -8
  15. package/dist/generators/db/handlerTemplates.js +259 -259
  16. package/dist/generators/db/scaffoldDocker.js +1 -1
  17. package/dist/generators/html/generateHTMLPage.js +60 -60
  18. package/dist/generators/htmx/generateHTMXPage.js +86 -86
  19. package/dist/generators/project/generateAbsoluteAuthConfig.d.ts +1 -1
  20. package/dist/generators/project/generateAbsoluteAuthConfig.js +100 -89
  21. package/dist/generators/project/generateDBBlock.js +9 -9
  22. package/dist/generators/project/generateMarkupCSS.js +145 -145
  23. package/dist/generators/project/generateRoutesBlock.d.ts +3 -2
  24. package/dist/generators/project/generateRoutesBlock.js +37 -36
  25. package/dist/generators/project/generateServer.js +22 -18
  26. package/dist/generators/project/scaffoldBackend.js +2 -1
  27. package/dist/generators/project/scaffoldFrontends.d.ts +2 -2
  28. package/dist/generators/project/scaffoldFrontends.js +5 -2
  29. package/dist/generators/react/generateReactComponents.js +95 -95
  30. package/dist/generators/svelte/generateSveltePage.js +210 -210
  31. package/dist/generators/vue/generateVuePage.js +261 -261
  32. package/dist/messages.js +43 -43
  33. package/dist/questions/projectName.js +1 -1
  34. package/dist/scaffold.js +2 -1
  35. package/dist/templates/README.md +35 -35
  36. package/dist/templates/assets/svg/google-logo.svg +7 -7
  37. package/dist/templates/assets/svg/htmx-logo-black.svg +9 -9
  38. package/dist/templates/assets/svg/htmx-logo-white.svg +9 -9
  39. package/dist/templates/assets/svg/vue-logo.svg +4 -4
  40. package/dist/templates/configurations/.prettierignore +3 -3
  41. package/dist/templates/configurations/.prettierrc.json +9 -9
  42. package/dist/templates/configurations/drizzle.config.ts +13 -13
  43. package/dist/templates/configurations/eslint.config.mjs +243 -243
  44. package/dist/templates/configurations/tsconfig.example.json +98 -98
  45. package/dist/templates/constants.ts +2 -2
  46. package/dist/templates/db/docker-compose.db.yml +15 -15
  47. package/dist/templates/git/gitignore +51 -51
  48. package/dist/templates/html/scripts/typescript-example.ts +21 -21
  49. package/dist/templates/react/components/App.tsx +52 -52
  50. package/dist/templates/react/components/Head.tsx +34 -34
  51. package/dist/templates/react/components/OAuthLink.tsx +39 -39
  52. package/dist/templates/react/components/ProfilePicture.tsx +56 -56
  53. package/dist/templates/styles/colors.ts +11 -11
  54. package/dist/templates/styles/reset.css +84 -84
  55. package/dist/templates/svelte/components/Counter.svelte +19 -19
  56. package/dist/templates/svelte/composables/counter.svelte.ts +14 -14
  57. package/dist/templates/tailwind/postcss.config.ts +8 -8
  58. package/dist/templates/tailwind/tailwind.config.ts +7 -7
  59. package/dist/templates/tailwind/tailwind.css +1 -1
  60. package/dist/templates/vue/components/CountButton.vue +39 -39
  61. package/dist/templates/vue/composables/useCount.ts +14 -14
  62. package/dist/utils/commandMaps.d.ts +1 -1
  63. package/dist/utils/commandMaps.js +4 -4
  64. package/dist/versions.d.ts +49 -0
  65. package/dist/versions.js +61 -0
  66. package/package.json +21 -20
  67. 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', '5.9.3');
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', '10.4.21');
70
- devDependencies['postcss'] = resolveVersion('postcss', '8.5.3');
71
- devDependencies['tailwindcss'] = resolveVersion('tailwindcss', '4.1.7');
72
- devDependencies['@tailwindcss/cli'] = resolveVersion('@tailwindcss/cli', '4.1.7');
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', '19.2.1');
76
- devDependencies['@types/react'] = resolveVersion('@types/react', '19.2.0');
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', '5.34.7');
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', '3.4.0');
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', '3.5.17');
92
+ dependencies['vue'] = resolveVersion('vue', versions['vue']);
91
93
  }
92
94
  if (flags.requiresHtmx) {
93
- dependencies['elysia-scoped-state'] = resolveVersion('elysia-scoped-state', '0.1.1');
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', '0.41.0');
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', '1.0.0');
102
+ dependencies['@neondatabase/serverless'] = resolveVersion('@neondatabase/serverless', versions['@neondatabase/serverless']);
101
103
  break;
102
104
  case 'planetscale':
103
- dependencies['@planetscale/database'] = resolveVersion('@planetscale/database', '1.19.0');
105
+ dependencies['@planetscale/database'] = resolveVersion('@planetscale/database', versions['@planetscale/database']);
104
106
  break;
105
107
  case 'turso':
106
- dependencies['@libsql/client'] = resolveVersion('@libsql/client', '0.15.9');
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: 'bash -c \'trap "exit 0" INT; bun run --watch src/backend/server.ts\'',
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', '3.14.2');
143
+ dependencies['mysql2'] = resolveVersion('mysql2', versions['mysql2']);
142
144
  }
143
145
  if (isLocal && databaseEngine === 'singlestore') {
144
- dependencies['mysql2'] = resolveVersion('mysql2', '3.14.2');
146
+ dependencies['mysql2'] = resolveVersion('mysql2', versions['mysql2']);
145
147
  }
146
148
  if (databaseEngine === 'postgresql' && databaseHost === 'planetscale') {
147
- dependencies['pg'] = resolveVersion('pg', '8.11.0');
148
- devDependencies['@types/pg'] = resolveVersion('@types/pg', '8.6.1');
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', '12.1.0');
152
- devDependencies['@types/mssql'] = resolveVersion('@types/mssql', '9.1.8');
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', '2.1.1');
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
  );`;