create-absolutejs 0.6.1 → 0.8.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 (78) 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 +41 -62
  9. package/dist/generators/configurations/generatePrettierrc.js +9 -9
  10. package/dist/generators/db/dockerInitTemplates.d.ts +4 -0
  11. package/dist/generators/db/dockerInitTemplates.js +83 -79
  12. package/dist/generators/db/generateDatabaseTypes.js +6 -6
  13. package/dist/generators/db/generateDockerContainer.js +53 -16
  14. package/dist/generators/db/generateDrizzleSchema.js +17 -17
  15. package/dist/generators/db/generateSqliteSchema.js +8 -8
  16. package/dist/generators/db/handlerTemplates.d.ts +1 -1
  17. package/dist/generators/db/handlerTemplates.js +260 -260
  18. package/dist/generators/db/scaffoldDatabase.d.ts +3 -1
  19. package/dist/generators/db/scaffoldDatabase.js +4 -2
  20. package/dist/generators/db/scaffoldDocker.d.ts +3 -1
  21. package/dist/generators/db/scaffoldDocker.js +21 -11
  22. package/dist/generators/html/generateHTMLPage.js +60 -60
  23. package/dist/generators/htmx/generateHTMXPage.js +86 -86
  24. package/dist/generators/project/generateAbsoluteAuthConfig.d.ts +1 -1
  25. package/dist/generators/project/generateAbsoluteAuthConfig.js +100 -89
  26. package/dist/generators/project/generateDBBlock.js +9 -9
  27. package/dist/generators/project/generateImportsBlock.js +4 -1
  28. package/dist/generators/project/generateMarkupCSS.js +145 -145
  29. package/dist/generators/project/generateRoutesBlock.d.ts +3 -2
  30. package/dist/generators/project/generateRoutesBlock.js +37 -36
  31. package/dist/generators/project/generateServer.js +22 -18
  32. package/dist/generators/project/scaffoldBackend.js +2 -1
  33. package/dist/generators/project/scaffoldFrontends.d.ts +2 -2
  34. package/dist/generators/project/scaffoldFrontends.js +5 -2
  35. package/dist/generators/react/generateReactComponents.js +95 -95
  36. package/dist/generators/svelte/generateSveltePage.js +210 -210
  37. package/dist/generators/vue/generateVuePage.js +261 -261
  38. package/dist/index.js +11 -2
  39. package/dist/messages.js +43 -43
  40. package/dist/questions/projectName.js +1 -1
  41. package/dist/scaffold.d.ts +3 -1
  42. package/dist/scaffold.js +10 -5
  43. package/dist/templates/README.md +35 -35
  44. package/dist/templates/assets/svg/google-logo.svg +7 -7
  45. package/dist/templates/assets/svg/htmx-logo-black.svg +9 -9
  46. package/dist/templates/assets/svg/htmx-logo-white.svg +9 -9
  47. package/dist/templates/assets/svg/vue-logo.svg +4 -4
  48. package/dist/templates/configurations/.prettierignore +3 -3
  49. package/dist/templates/configurations/.prettierrc.json +9 -9
  50. package/dist/templates/configurations/drizzle.config.ts +13 -13
  51. package/dist/templates/configurations/eslint.config.mjs +243 -243
  52. package/dist/templates/configurations/tsconfig.example.json +98 -98
  53. package/dist/templates/constants.ts +2 -2
  54. package/dist/templates/db/docker-compose.db.yml +15 -15
  55. package/dist/templates/git/gitignore +51 -51
  56. package/dist/templates/html/scripts/typescript-example.ts +21 -21
  57. package/dist/templates/react/components/App.tsx +52 -52
  58. package/dist/templates/react/components/Head.tsx +34 -34
  59. package/dist/templates/react/components/OAuthLink.tsx +39 -39
  60. package/dist/templates/react/components/ProfilePicture.tsx +56 -56
  61. package/dist/templates/styles/colors.ts +11 -11
  62. package/dist/templates/styles/reset.css +84 -84
  63. package/dist/templates/svelte/components/Counter.svelte +19 -19
  64. package/dist/templates/svelte/composables/counter.svelte.ts +14 -14
  65. package/dist/templates/tailwind/postcss.config.ts +8 -8
  66. package/dist/templates/tailwind/tailwind.config.ts +7 -7
  67. package/dist/templates/tailwind/tailwind.css +1 -1
  68. package/dist/templates/vue/components/CountButton.vue +39 -39
  69. package/dist/templates/vue/composables/useCount.ts +14 -14
  70. package/dist/utils/checkDockerInstalled.d.ts +9 -1
  71. package/dist/utils/checkDockerInstalled.js +137 -39
  72. package/dist/utils/checkSqliteInstalled.js +13 -13
  73. package/dist/utils/commandMaps.d.ts +1 -1
  74. package/dist/utils/commandMaps.js +4 -4
  75. package/dist/versions.d.ts +50 -0
  76. package/dist/versions.js +62 -0
  77. package/package.json +22 -21
  78. package/dist/templates/styles/tailwind.css +0 -1
@@ -1,9 +1,12 @@
1
+ import { existsSync } from 'fs';
1
2
  import os from 'os';
2
3
  import { env, platform } from 'process';
3
4
  import { confirm, spinner } from '@clack/prompts';
4
5
  import { $ } from 'bun';
5
6
  import { dim, yellow } from 'picocolors';
6
7
  const DOCKER_URL = 'https://www.docker.com/products/docker-desktop';
8
+ const DOCKER_WIN_INSTALLER_URL = 'https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe';
9
+ const DOCKER_WIN_BIN_PATH = 'C:\\Program Files\\Docker\\Docker\\resources\\bin';
7
10
  const isWSL = () => env.WSL_DISTRO_NAME !== undefined || /microsoft/i.test(os.release());
8
11
  let hostEnv;
9
12
  if (platform === 'win32') {
@@ -59,45 +62,48 @@ const configureDocker = async () => {
59
62
  await $ `sudo systemctl enable --now docker`.quiet().nothrow();
60
63
  spin.stop('Docker daemon running & permissions configured');
61
64
  };
62
- const installWindows = async () => {
63
- if (await commandExists('winget')) {
64
- const spin = spinner();
65
- spin.start('Installing Docker Desktop with winget');
66
- const res = await $ `winget install -e --id Docker.DockerDesktop`
65
+ const installWindowsDirectDownload = async () => {
66
+ const spin = spinner();
67
+ spin.start('Downloading Docker Desktop installer…');
68
+ const tmpDir = await import('os').then((os) => os.tmpdir());
69
+ const installerPath = `${tmpDir}\\DockerDesktopInstaller.exe`;
70
+ try {
71
+ const res = await Bun.fetch(DOCKER_WIN_INSTALLER_URL);
72
+ if (!res.ok)
73
+ return false;
74
+ const buffer = await res.arrayBuffer();
75
+ await Bun.write(installerPath, buffer);
76
+ spin.stop('Docker Desktop installer downloaded');
77
+ spin.start('Running Docker Desktop installer…');
78
+ const runRes = await $ `powershell.exe -NoProfile -Command "Start-Process -FilePath '${installerPath}' -ArgumentList 'install','--quiet','--accept-license' -Wait -Verb RunAs"`
67
79
  .quiet()
68
80
  .nothrow();
69
- spin.stop(res.exitCode === 0
81
+ spin.stop(runRes.exitCode === 0
70
82
  ? 'Docker Desktop installed'
71
- : 'winget install failed');
72
- return res.exitCode === 0;
83
+ : 'Installer failed');
84
+ return runRes.exitCode === 0;
73
85
  }
74
- if (await commandExists('choco')) {
75
- const spin = spinner();
76
- spin.start('Installing Docker Desktop with Chocolatey');
77
- const res = await $ `choco install docker-desktop -y`.quiet().nothrow();
78
- spin.stop(res.exitCode === 0
79
- ? 'Docker Desktop installed'
80
- : 'Chocolatey install failed');
81
- return res.exitCode === 0;
86
+ catch {
87
+ spin.stop('Direct download failed');
88
+ return false;
82
89
  }
83
- console.log(`Automatic Windows install failed. Get Docker Desktop from ${DOCKER_URL}`);
90
+ };
91
+ const installWindowsOpenBrowser = async () => {
92
+ await $ `powershell.exe -NoProfile -Command "Start-Process '${DOCKER_URL}'"`
93
+ .quiet()
94
+ .nothrow();
95
+ console.log(`Opened Docker Desktop download page. Install it, then run this again.`);
96
+ return false;
97
+ };
98
+ const installWindows = async () => {
99
+ if (await installWindowsDirectDownload())
100
+ return true;
101
+ await installWindowsOpenBrowser();
84
102
  return false;
85
103
  };
86
104
  const installWSL = async () => {
87
105
  if ((await $ `docker.exe --version`.quiet().nothrow()).exitCode === 0)
88
106
  return true;
89
- if (await commandExists('powershell.exe')) {
90
- const spin = spinner();
91
- spin.start('Installing Docker Desktop on Windows via winget');
92
- const res = await $ `powershell.exe -NoProfile -Command winget install -e --id Docker.DockerDesktop`
93
- .quiet()
94
- .nothrow();
95
- spin.stop(res.exitCode === 0
96
- ? 'Docker Desktop installed'
97
- : 'winget install failed');
98
- if (res.exitCode === 0)
99
- return true;
100
- }
101
107
  if (await aptInstall())
102
108
  return true;
103
109
  return runGetDocker();
@@ -150,30 +156,122 @@ const installLinux = async () => {
150
156
  console.log(`Automatic Linux install failed. See ${DOCKER_URL}`);
151
157
  return false;
152
158
  };
153
- export const hasDocker = async () => (await $ `docker --version`.quiet().nothrow()).exitCode === 0 &&
154
- (await $ `docker compose version`.quiet().nothrow()).exitCode === 0;
155
- export const checkDockerInstalled = async () => {
156
- if (await hasDocker())
159
+ const DAEMON_WAIT_ATTEMPTS = 30;
160
+ const DAEMON_WAIT_INTERVAL_MS = 2000;
161
+ export const resolveDockerExe = () => {
162
+ if (platform === 'win32') {
163
+ const fullPath = `${DOCKER_WIN_BIN_PATH}\\docker.exe`;
164
+ if (existsSync(fullPath))
165
+ return fullPath;
166
+ }
167
+ return 'docker';
168
+ };
169
+ export const hasDocker = async () => {
170
+ const docker = resolveDockerExe();
171
+ return ((await $ `${docker} --version`.quiet().nothrow()).exitCode === 0 &&
172
+ (await $ `${docker} compose version`.quiet().nothrow()).exitCode === 0);
173
+ };
174
+ export const isDockerDaemonRunning = async () => {
175
+ const docker = resolveDockerExe();
176
+ return (await $ `${docker} info`.quiet().nothrow()).exitCode === 0;
177
+ };
178
+ const waitForDaemonReady = async () => {
179
+ for (let attempt = 0; attempt < DAEMON_WAIT_ATTEMPTS; attempt++) {
180
+ if (await isDockerDaemonRunning())
181
+ return true;
182
+ await new Promise((resolve) => setTimeout(resolve, DAEMON_WAIT_INTERVAL_MS));
183
+ }
184
+ return false;
185
+ };
186
+ const startDockerDaemon = async () => {
187
+ const spin = spinner();
188
+ spin.start('Starting Docker daemon…');
189
+ const docker = resolveDockerExe();
190
+ const desktopRes = await $ `${docker} desktop start`.quiet().nothrow();
191
+ if (desktopRes.exitCode === 0 && (await waitForDaemonReady())) {
192
+ spin.stop('Docker Desktop started');
193
+ return true;
194
+ }
195
+ if (platform === 'darwin') {
196
+ await $ `open -a Docker`.quiet().nothrow();
197
+ if (await waitForDaemonReady()) {
198
+ spin.stop('Docker Desktop started');
199
+ return true;
200
+ }
201
+ spin.stop('Docker daemon did not start');
202
+ throw new Error('Docker daemon did not start. Please start Docker Desktop manually.');
203
+ }
204
+ if (platform === 'win32') {
205
+ const dockerDesktopExe = 'C:\\Program Files\\Docker\\Docker\\Docker Desktop.exe';
206
+ if (existsSync(dockerDesktopExe)) {
207
+ await $ `powershell.exe -NoProfile -Command "Start-Process '${dockerDesktopExe}'"`
208
+ .quiet()
209
+ .nothrow();
210
+ if (await waitForDaemonReady()) {
211
+ spin.stop('Docker Desktop started');
212
+ return true;
213
+ }
214
+ }
215
+ spin.stop('Docker Desktop start failed');
216
+ throw new Error('Docker Desktop failed to start. Please start it manually.');
217
+ }
218
+ await ensureSudo();
219
+ const systemctlRes = await $ `sudo systemctl start docker`.quiet().nothrow();
220
+ if (systemctlRes.exitCode !== 0) {
221
+ await $ `sudo service docker start`.quiet().nothrow();
222
+ }
223
+ if (await waitForDaemonReady()) {
224
+ spin.stop('Docker daemon started');
225
+ return true;
226
+ }
227
+ spin.stop('Docker daemon did not start');
228
+ throw new Error('Docker daemon did not start. Please start it manually.');
229
+ };
230
+ export const ensureDockerDaemonRunning = async () => {
231
+ if (await isDockerDaemonRunning()) {
232
+ return { daemonWasStarted: false };
233
+ }
234
+ await startDockerDaemon();
235
+ return { daemonWasStarted: true };
236
+ };
237
+ export const shutdownDockerDaemon = async () => {
238
+ const docker = resolveDockerExe();
239
+ const desktopRes = await $ `${docker} desktop shutdown`.quiet().nothrow();
240
+ if (desktopRes.exitCode === 0)
157
241
  return;
242
+ if (platform !== 'win32') {
243
+ await ensureSudo();
244
+ await $ `sudo systemctl stop docker`.quiet().nothrow();
245
+ }
246
+ };
247
+ export const checkDockerInstalled = async (databaseEngine) => {
248
+ if (await hasDocker())
249
+ return { freshInstall: false };
250
+ const dbLabel = databaseEngine ?? 'database';
158
251
  const proceed = await confirm({
159
252
  initialValue: true,
160
- message: 'Docker Engine and Compose plugin are required for local Postgresql. Install them now?'
253
+ message: `Docker Engine and Compose plugin are required for your local ${dbLabel}. Install them now?`
161
254
  });
162
255
  if (!proceed)
163
- return;
256
+ return { freshInstall: false };
164
257
  switch (hostEnv) {
165
258
  case 'windows':
166
- if (await installWindows())
167
- return;
259
+ if (await installWindows()) {
260
+ if (!env.PATH?.includes(DOCKER_WIN_BIN_PATH)) {
261
+ env.PATH = `${DOCKER_WIN_BIN_PATH};${env.PATH}`;
262
+ }
263
+ return { freshInstall: true };
264
+ }
168
265
  break;
169
266
  case 'wsl':
170
267
  if (await installWSL())
171
- return;
268
+ return { freshInstall: true };
172
269
  break;
173
270
  case 'linux':
174
271
  if (await installLinux())
175
- return;
272
+ return { freshInstall: true };
176
273
  break;
177
274
  }
178
275
  console.log(`Couldn't install Docker automatically. Download it from ${DOCKER_URL}`);
276
+ return { freshInstall: false };
179
277
  };
@@ -57,24 +57,24 @@ const apkInstallSqlite = async () => {
57
57
  spin.stop(res.exitCode === 0 ? 'sqlite3 installed' : 'apk install failed');
58
58
  return res.exitCode === 0;
59
59
  };
60
+ const hasWinget = async () => (await $ `powershell.exe -NoProfile -Command "Get-Command winget"`
61
+ .quiet()
62
+ .nothrow()).exitCode === 0;
60
63
  const installWindowsSqlite = async () => {
61
- if (await commandExists('winget')) {
64
+ if (await hasWinget()) {
62
65
  const spin = spinner();
66
+ spin.start('Updating winget sources');
67
+ await $ `powershell.exe -NoProfile -Command winget source update`
68
+ .quiet()
69
+ .nothrow();
70
+ spin.stop('winget sources updated');
63
71
  spin.start('Installing sqlite3 with winget');
64
- const res = await $ `winget install -e --id SQLite.SQLite`
72
+ await $ `powershell.exe -NoProfile -Command "Start-Process winget -ArgumentList 'install','-e','--id','SQLite.SQLite','--accept-package-agreements','--accept-source-agreements' -Verb RunAs -Wait"`
65
73
  .quiet()
66
74
  .nothrow();
67
- spin.stop(res.exitCode === 0 ? 'sqlite3 installed' : 'winget install failed');
68
- return res.exitCode === 0;
69
- }
70
- if (await commandExists('choco')) {
71
- const spin = spinner();
72
- spin.start('Installing sqlite3 with Chocolatey');
73
- const res = await $ `choco install sqlite -y`.quiet().nothrow();
74
- spin.stop(res.exitCode === 0
75
- ? 'sqlite3 installed'
76
- : 'Chocolatey install failed');
77
- return res.exitCode === 0;
75
+ const installed = await hasSqlite();
76
+ spin.stop(installed ? 'sqlite3 installed' : 'winget install failed');
77
+ return installed;
78
78
  }
79
79
  console.log(`Automatic Windows install failed. Get sqlite3 from ${SQLITE_URL}`);
80
80
  return false;
@@ -1,4 +1,4 @@
1
1
  import { PackageManager } from '../types';
2
2
  export declare const formatCommands: Record<PackageManager, string>;
3
3
  export declare const formatNoInstallCommands: Record<PackageManager, string>;
4
- export declare const installCommands: Record<string, string>;
4
+ export declare const installCommands: Record<PackageManager, string>;
@@ -5,10 +5,10 @@ export const formatCommands = {
5
5
  yarn: 'yarn format'
6
6
  };
7
7
  export const formatNoInstallCommands = {
8
- bun: 'bunx prettier --write "./**/*.{js,ts,css,json,mjs,md,jsx,tsx,svelte,vue}"',
9
- npm: 'npx prettier --write "./**/*.{js,ts,css,json,mjs,md,jsx,tsx,svelte,vue}"',
10
- pnpm: 'pnpm dlx prettier --write "./**/*.{js,ts,css,json,mjs,md,jsx,tsx,svelte,vue}"',
11
- yarn: 'yarn dlx prettier --write "./**/*.{js,ts,css,json,mjs,md,jsx,tsx,svelte,vue}"'
8
+ bun: 'bunx prettier --write ./**/*.{js,ts,css,json,mjs,md,jsx,tsx,svelte,vue}',
9
+ npm: 'npx prettier --write ./**/*.{js,ts,css,json,mjs,md,jsx,tsx,svelte,vue}',
10
+ pnpm: 'pnpm dlx prettier --write ./**/*.{js,ts,css,json,mjs,md,jsx,tsx,svelte,vue}',
11
+ yarn: 'yarn dlx prettier --write ./**/*.{js,ts,css,json,mjs,md,jsx,tsx,svelte,vue}'
12
12
  };
13
13
  export const installCommands = {
14
14
  bun: 'bun install',
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Single source of truth for all scaffolded dependency versions.
3
+ * Every package version used in project generation lives here.
4
+ * Run `bun run check-versions` to compare against latest npm versions.
5
+ */
6
+ export declare const versions: {
7
+ readonly '@absolutejs/absolute': "0.13.5";
8
+ readonly '@absolutejs/auth': "0.22.0";
9
+ readonly '@elysiajs/static': "1.4.7";
10
+ readonly elysia: "1.4.22";
11
+ readonly 'elysia-scoped-state': "0.1.1";
12
+ readonly '@elysiajs/cors': "1.4.1";
13
+ readonly '@elysiajs/swagger': "1.3.1";
14
+ readonly 'elysia-rate-limit': "4.5.0";
15
+ readonly typescript: "5.9.3";
16
+ readonly '@tailwindcss/cli': "4.1.18";
17
+ readonly autoprefixer: "10.4.24";
18
+ readonly postcss: "8.5.6";
19
+ readonly tailwindcss: "4.1.18";
20
+ readonly '@types/react': "19.2.13";
21
+ readonly react: "19.2.4";
22
+ readonly 'react-dom': "19.2.4";
23
+ readonly 'prettier-plugin-svelte': "3.4.1";
24
+ readonly svelte: "5.49.2";
25
+ readonly vue: "3.5.27";
26
+ readonly '@stylistic/eslint-plugin-ts': "4.4.1";
27
+ readonly '@typescript-eslint/parser': "8.47.0";
28
+ readonly eslint: "9.39.2";
29
+ readonly 'eslint-plugin-absolute': "0.1.6";
30
+ readonly 'eslint-plugin-import': "2.32.0";
31
+ readonly 'eslint-plugin-promise': "7.2.1";
32
+ readonly 'eslint-plugin-security': "3.0.1";
33
+ readonly prettier: "3.8.1";
34
+ readonly 'typescript-eslint': "8.47.0";
35
+ readonly 'eslint-plugin-jsx-a11y': "6.10.2";
36
+ readonly 'eslint-plugin-react': "7.37.5";
37
+ readonly 'eslint-plugin-react-compiler': "19.1.0-rc.2";
38
+ readonly 'eslint-plugin-react-hooks': "7.0.1";
39
+ readonly 'drizzle-orm': "0.45.1";
40
+ readonly '@libsql/client': "0.17.0";
41
+ readonly '@neondatabase/serverless': "1.0.2";
42
+ readonly '@planetscale/database': "1.19.0";
43
+ readonly '@types/mssql': "9.1.9";
44
+ readonly '@types/pg': "8.16.0";
45
+ readonly gel: "2.2.0";
46
+ readonly mongodb: "6.12.0";
47
+ readonly mssql: "12.2.0";
48
+ readonly mysql2: "3.16.3";
49
+ readonly pg: "8.18.0";
50
+ };
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Single source of truth for all scaffolded dependency versions.
3
+ * Every package version used in project generation lives here.
4
+ * Run `bun run check-versions` to compare against latest npm versions.
5
+ */
6
+ export const versions = {
7
+ /* ── Core ─────────────────────────────────────────────── */
8
+ '@absolutejs/absolute': '0.13.5',
9
+ '@absolutejs/auth': '0.22.0',
10
+ '@elysiajs/static': '1.4.7',
11
+ elysia: '1.4.22',
12
+ 'elysia-scoped-state': '0.1.1',
13
+ /* ── Plugins ──────────────────────────────────────────── */
14
+ '@elysiajs/cors': '1.4.1',
15
+ '@elysiajs/swagger': '1.3.1',
16
+ 'elysia-rate-limit': '4.5.0',
17
+ /* ── Build / TypeScript ───────────────────────────────── */
18
+ typescript: '5.9.3',
19
+ /* ── Tailwind CSS ─────────────────────────────────────── */
20
+ '@tailwindcss/cli': '4.1.18',
21
+ autoprefixer: '10.4.24',
22
+ postcss: '8.5.6',
23
+ tailwindcss: '4.1.18',
24
+ /* ── React ────────────────────────────────────────────── */
25
+ '@types/react': '19.2.13',
26
+ react: '19.2.4',
27
+ 'react-dom': '19.2.4',
28
+ /* ── Svelte ───────────────────────────────────────────── */
29
+ 'prettier-plugin-svelte': '3.4.1',
30
+ svelte: '5.49.2',
31
+ /* ── Vue ──────────────────────────────────────────────── */
32
+ vue: '3.5.27',
33
+ /* ── ESLint + Prettier ────────────────────────────────── */
34
+ '@stylistic/eslint-plugin-ts': '4.4.1',
35
+ '@typescript-eslint/parser': '8.47.0',
36
+ eslint: '9.39.2',
37
+ 'eslint-plugin-absolute': '0.1.6',
38
+ 'eslint-plugin-import': '2.32.0',
39
+ 'eslint-plugin-promise': '7.2.1',
40
+ 'eslint-plugin-security': '3.0.1',
41
+ prettier: '3.8.1',
42
+ 'typescript-eslint': '8.47.0',
43
+ /* ── ESLint React ─────────────────────────────────────── */
44
+ 'eslint-plugin-jsx-a11y': '6.10.2',
45
+ 'eslint-plugin-react': '7.37.5',
46
+ 'eslint-plugin-react-compiler': '19.1.0-rc.2',
47
+ 'eslint-plugin-react-hooks': '7.0.1',
48
+ /* ── ORM ──────────────────────────────────────────────── */
49
+ 'drizzle-orm': '0.45.1',
50
+ /* ── Database Hosts ───────────────────────────────────── */
51
+ '@libsql/client': '0.17.0',
52
+ '@neondatabase/serverless': '1.0.2',
53
+ '@planetscale/database': '1.19.0',
54
+ /* ── Database Drivers ─────────────────────────────────── */
55
+ '@types/mssql': '9.1.9',
56
+ '@types/pg': '8.16.0',
57
+ gel: '2.2.0',
58
+ mongodb: '6.12.0',
59
+ mssql: '12.2.0',
60
+ mysql2: '3.16.3',
61
+ pg: '8.18.0'
62
+ };
package/package.json CHANGED
@@ -4,29 +4,29 @@
4
4
  "create-absolutejs": "dist/index.js"
5
5
  },
6
6
  "dependencies": {
7
- "@clack/prompts": "0.11.0",
8
- "picocolors": "1.1.1",
9
- "@absolutejs/auth": "0.21.1"
7
+ "@clack/prompts": "1.0.0",
8
+ "picocolors": "1.1.1"
10
9
  },
11
10
  "description": "A CLI tool to create a new AbsoluteJS project",
12
11
  "devDependencies": {
12
+ "@absolutejs/auth": "0.22.0",
13
13
  "@stylistic/eslint-plugin-ts": "4.2.0",
14
- "@types/bun": "latest",
15
- "@types/react": "19.1.4",
16
- "autoprefixer": "10.4.21",
17
- "drizzle-kit": "0.31.1",
18
- "drizzle-orm": "0.41.0",
19
- "eslint": "9.27.0",
20
- "eslint-plugin-absolute": "0.1.4",
21
- "eslint-plugin-import": "2.31.0",
14
+ "@types/bun": "1.3.8",
15
+ "@types/react": "19.2.13",
16
+ "autoprefixer": "10.4.24",
17
+ "drizzle-kit": "0.31.8",
18
+ "drizzle-orm": "0.45.1",
19
+ "eslint": "9.39.2",
20
+ "eslint-plugin-absolute": "0.1.6",
21
+ "eslint-plugin-import": "2.32.0",
22
22
  "eslint-plugin-promise": "7.2.1",
23
23
  "eslint-plugin-security": "3.0.1",
24
- "prettier": "3.5.3",
25
- "prettier-plugin-svelte": "3.4.0",
26
- "svelte": "5.35.2",
27
- "tailwindcss": "4.1.7",
28
- "typescript-eslint": "8.32.0",
29
- "vue": "3.5.17"
24
+ "prettier": "3.8.1",
25
+ "prettier-plugin-svelte": "3.4.1",
26
+ "svelte": "5.49.2",
27
+ "tailwindcss": "4.1.18",
28
+ "typescript-eslint": "8.54.0",
29
+ "vue": "3.5.27"
30
30
  },
31
31
  "files": [
32
32
  "dist",
@@ -36,17 +36,18 @@
36
36
  "main": "dist/index.js",
37
37
  "name": "create-absolutejs",
38
38
  "peerDependencies": {
39
- "typescript": "5.8.3"
39
+ "typescript": "5.9.3"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "rm -rf dist && tsc --project tsconfig.build.json && cp -R src/templates dist/templates",
43
- "dev": "if [ -f absolutejs-project/package.json ] && grep -q '\"db:reset\"' absolutejs-project/package.json; then cd absolutejs-project && bun run db:reset && cd ..; fi && rm -rf absolutejs-project && bun run src/index.ts",
43
+ "check-versions": "bun scripts/check-versions.ts",
44
+ "dev": "bun scripts/dev.ts",
44
45
  "format": "prettier --write \"./**/*.{js,jsx,ts,tsx,css,json,mjs,md,svelte,html,vue}\"",
45
46
  "lint": "eslint ./",
46
47
  "release": "bun run format && bun run build && bun publish",
47
- "test": "bash -c 'trap \"exit 0\" INT; cd absolutejs-project && bun dev'",
48
+ "test": "cd absolutejs-project && bun dev",
48
49
  "typecheck": "bun run tsc --noEmit"
49
50
  },
50
51
  "type": "module",
51
- "version": "0.6.1"
52
+ "version": "0.8.0"
52
53
  }
@@ -1 +0,0 @@
1
- @import 'tailwindcss';