create-absolutejs 0.10.3 → 0.12.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 (75) hide show
  1. package/dist/constants.d.ts +2 -2
  2. package/dist/constants.js +2 -2
  3. package/dist/data.d.ts +10 -10
  4. package/dist/data.js +88 -95
  5. package/dist/generators/angular/generateAngularPage.d.ts +11 -0
  6. package/dist/generators/angular/generateAngularPage.js +174 -0
  7. package/dist/generators/angular/scaffoldAngular.d.ts +2 -0
  8. package/dist/generators/angular/scaffoldAngular.js +38 -0
  9. package/dist/generators/configurations/generatePackageJson.js +28 -3
  10. package/dist/generators/configurations/scaffoldConfigurationFiles.js +26 -2
  11. package/dist/generators/db/dockerInitTemplates.d.ts +9 -9
  12. package/dist/generators/db/dockerInitTemplates.js +9 -9
  13. package/dist/generators/db/generateDatabaseTypes.js +5 -0
  14. package/dist/generators/db/generateDockerContainer.js +4 -2
  15. package/dist/generators/db/generateDrizzleSchema.js +16 -6
  16. package/dist/generators/db/handlerTemplates.d.ts +5 -0
  17. package/dist/generators/db/handlerTemplates.js +6 -0
  18. package/dist/generators/db/scaffoldDocker.js +42 -30
  19. package/dist/generators/html/generateHTMLPage.d.ts +1 -1
  20. package/dist/generators/html/generateHTMLPage.js +3 -3
  21. package/dist/generators/html/scaffoldHTML.d.ts +1 -1
  22. package/dist/generators/html/scaffoldHTML.js +4 -6
  23. package/dist/generators/htmx/generateHTMXPage.d.ts +1 -1
  24. package/dist/generators/htmx/generateHTMXPage.js +3 -3
  25. package/dist/generators/htmx/scaffoldHTMX.d.ts +1 -1
  26. package/dist/generators/htmx/scaffoldHTMX.js +4 -6
  27. package/dist/generators/project/computeFlags.d.ts +1 -0
  28. package/dist/generators/project/computeFlags.js +1 -0
  29. package/dist/generators/project/generateBuildBlock.d.ts +2 -1
  30. package/dist/generators/project/generateBuildBlock.js +12 -7
  31. package/dist/generators/project/generateDBBlock.js +6 -0
  32. package/dist/generators/project/generateImportsBlock.d.ts +1 -2
  33. package/dist/generators/project/generateImportsBlock.js +48 -50
  34. package/dist/generators/project/generateMarkupCSS.d.ts +1 -1
  35. package/dist/generators/project/generateMarkupCSS.js +5 -1
  36. package/dist/generators/project/generateRoutesBlock.d.ts +1 -4
  37. package/dist/generators/project/generateRoutesBlock.js +44 -38
  38. package/dist/generators/project/generateServer.js +5 -12
  39. package/dist/generators/project/scaffoldFrontends.js +40 -4
  40. package/dist/generators/react/generateReactComponents.d.ts +2 -2
  41. package/dist/generators/react/generateReactComponents.js +33 -33
  42. package/dist/generators/react/scaffoldReact.d.ts +1 -1
  43. package/dist/generators/react/scaffoldReact.js +4 -6
  44. package/dist/generators/svelte/generateSveltePage.d.ts +1 -1
  45. package/dist/generators/svelte/generateSveltePage.js +20 -2
  46. package/dist/generators/svelte/scaffoldSvelte.d.ts +1 -1
  47. package/dist/generators/svelte/scaffoldSvelte.js +4 -6
  48. package/dist/generators/vue/generateVuePage.d.ts +1 -1
  49. package/dist/generators/vue/generateVuePage.js +2 -229
  50. package/dist/generators/vue/scaffoldVue.d.ts +1 -1
  51. package/dist/generators/vue/scaffoldVue.js +6 -2
  52. package/dist/questions/databaseEngine.d.ts +1 -1
  53. package/dist/questions/frontendDirectoryConfigurations.d.ts +1 -1
  54. package/dist/questions/frontends.d.ts +1 -1
  55. package/dist/questions/frontends.js +3 -3
  56. package/dist/scaffold.js +14 -2
  57. package/dist/templates/assets/svg/angular.svg +18 -0
  58. package/dist/templates/configurations/tsconfig.example.json +12 -12
  59. package/dist/templates/react/components/App.tsx +2 -2
  60. package/dist/templates/react/components/Head.tsx +7 -7
  61. package/dist/templates/react/components/OAuthLink.tsx +2 -2
  62. package/dist/templates/styles/colors.ts +6 -8
  63. package/dist/templates/styles/reset.css +15 -0
  64. package/dist/templates/svelte/components/Counter.svelte +4 -0
  65. package/dist/templates/vue/components/CountButton.vue +1 -1
  66. package/dist/typeGuards.d.ts +6 -6
  67. package/dist/typeGuards.js +6 -6
  68. package/dist/types.d.ts +3 -0
  69. package/dist/utils/checkDockerInstalled.d.ts +4 -4
  70. package/dist/utils/checkDockerInstalled.js +78 -71
  71. package/dist/utils/parseCommandLineOptions.js +13 -16
  72. package/dist/versions.d.ts +38 -29
  73. package/dist/versions.js +49 -39
  74. package/package.json +10 -9
  75. /package/dist/templates/configurations/{eslint.config.mjs → eslint.config.example.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { existsSync } from 'fs';
1
+ import { existsSync, writeFileSync } from 'fs';
2
2
  import os from 'os';
3
3
  import { env, platform } from 'process';
4
4
  import { confirm, spinner } from '@clack/prompts';
@@ -65,14 +65,14 @@ const configureDocker = async () => {
65
65
  const installWindowsDirectDownload = async () => {
66
66
  const spin = spinner();
67
67
  spin.start('Downloading Docker Desktop installer…');
68
- const tmpDir = await import('os').then((os) => os.tmpdir());
68
+ const tmpDir = os.tmpdir();
69
69
  const installerPath = `${tmpDir}\\DockerDesktopInstaller.exe`;
70
70
  try {
71
- const res = await Bun.fetch(DOCKER_WIN_INSTALLER_URL);
71
+ const res = await fetch(DOCKER_WIN_INSTALLER_URL);
72
72
  if (!res.ok)
73
73
  return false;
74
74
  const buffer = await res.arrayBuffer();
75
- await Bun.write(installerPath, buffer);
75
+ writeFileSync(installerPath, new Uint8Array(buffer));
76
76
  spin.stop('Docker Desktop installer downloaded');
77
77
  spin.start('Running Docker Desktop installer…');
78
78
  const runRes = await $ `powershell.exe -NoProfile -Command "Start-Process -FilePath '${installerPath}' -ArgumentList 'install','--quiet','--accept-license' -Wait -Verb RunAs"`
@@ -156,8 +156,26 @@ const installLinux = async () => {
156
156
  console.log(`Automatic Linux install failed. See ${DOCKER_URL}`);
157
157
  return false;
158
158
  };
159
+ const installDockerForHost = async (host) => {
160
+ if (host === 'windows')
161
+ return installWindows();
162
+ if (host === 'wsl')
163
+ return installWSL();
164
+ if (host === 'linux')
165
+ return installLinux();
166
+ return false;
167
+ };
159
168
  const DAEMON_WAIT_ATTEMPTS = 30;
160
169
  const DAEMON_WAIT_INTERVAL_MS = 2000;
170
+ export const hasDocker = async () => {
171
+ const docker = resolveDockerExe();
172
+ return ((await $ `${docker} --version`.quiet().nothrow()).exitCode === 0 &&
173
+ (await $ `${docker} compose version`.quiet().nothrow()).exitCode === 0);
174
+ };
175
+ export const isDockerDaemonRunning = async () => {
176
+ const docker = resolveDockerExe();
177
+ return (await $ `${docker} info`.quiet().nothrow()).exitCode === 0;
178
+ };
161
179
  export const resolveDockerExe = () => {
162
180
  if (platform === 'win32') {
163
181
  const fullPath = `${DOCKER_WIN_BIN_PATH}\\docker.exe`;
@@ -166,22 +184,41 @@ export const resolveDockerExe = () => {
166
184
  }
167
185
  return 'docker';
168
186
  };
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);
187
+ const sleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
188
+ const waitForDaemonReady = async (attempt = 0) => {
189
+ if (attempt >= DAEMON_WAIT_ATTEMPTS)
190
+ return false;
191
+ if (await isDockerDaemonRunning())
192
+ return true;
193
+ await sleep(DAEMON_WAIT_INTERVAL_MS);
194
+ return waitForDaemonReady(attempt + 1);
173
195
  };
174
- export const isDockerDaemonRunning = async () => {
175
- const docker = resolveDockerExe();
176
- return (await $ `${docker} info`.quiet().nothrow()).exitCode === 0;
196
+ const startDarwinDockerDesktop = async (spin) => {
197
+ await $ `open -a Docker`.quiet().nothrow();
198
+ if (await waitForDaemonReady()) {
199
+ spin.stop('Docker Desktop started');
200
+ return true;
201
+ }
202
+ spin.stop('Docker daemon did not start');
203
+ throw new Error('Docker daemon did not start. Please start Docker Desktop manually.');
177
204
  };
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));
205
+ const startWin32DockerDesktop = async (spin) => {
206
+ const started = await startWindowsDockerDesktop();
207
+ if (started) {
208
+ spin.stop('Docker Desktop started');
209
+ return true;
183
210
  }
184
- return false;
211
+ spin.stop('Docker Desktop start failed');
212
+ throw new Error('Docker Desktop failed to start. Please start it manually.');
213
+ };
214
+ const startWindowsDockerDesktop = async () => {
215
+ const dockerDesktopExe = 'C:\\Program Files\\Docker\\Docker\\Docker Desktop.exe';
216
+ if (!existsSync(dockerDesktopExe))
217
+ return false;
218
+ await $ `powershell.exe -NoProfile -Command "Start-Process '${dockerDesktopExe}'"`
219
+ .quiet()
220
+ .nothrow();
221
+ return waitForDaemonReady();
185
222
  };
186
223
  const startDockerDaemon = async () => {
187
224
  const spin = spinner();
@@ -192,29 +229,10 @@ const startDockerDaemon = async () => {
192
229
  spin.stop('Docker Desktop started');
193
230
  return true;
194
231
  }
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
- }
232
+ if (platform === 'darwin')
233
+ return startDarwinDockerDesktop(spin);
234
+ if (platform === 'win32')
235
+ return startWin32DockerDesktop(spin);
218
236
  await ensureSudo();
219
237
  const systemctlRes = await $ `sudo systemctl start docker`.quiet().nothrow();
220
238
  if (systemctlRes.exitCode !== 0) {
@@ -227,6 +245,26 @@ const startDockerDaemon = async () => {
227
245
  spin.stop('Docker daemon did not start');
228
246
  throw new Error('Docker daemon did not start. Please start it manually.');
229
247
  };
248
+ export const checkDockerInstalled = async (databaseEngine) => {
249
+ if (await hasDocker())
250
+ return { freshInstall: false };
251
+ const dbLabel = databaseEngine ?? 'database';
252
+ const proceed = await confirm({
253
+ initialValue: true,
254
+ message: `Docker Engine and Compose plugin are required for your local ${dbLabel}. Install them now?`
255
+ });
256
+ if (!proceed)
257
+ return { freshInstall: false };
258
+ const installed = await installDockerForHost(hostEnv);
259
+ if (!installed) {
260
+ console.log(`Couldn't install Docker automatically. Download it from ${DOCKER_URL}`);
261
+ return { freshInstall: false };
262
+ }
263
+ if (hostEnv === 'windows' && !env.PATH?.includes(DOCKER_WIN_BIN_PATH)) {
264
+ env.PATH = `${DOCKER_WIN_BIN_PATH};${env.PATH}`;
265
+ }
266
+ return { freshInstall: true };
267
+ };
230
268
  export const ensureDockerDaemonRunning = async () => {
231
269
  if (await isDockerDaemonRunning()) {
232
270
  return { daemonWasStarted: false };
@@ -244,34 +282,3 @@ export const shutdownDockerDaemon = async () => {
244
282
  await $ `sudo systemctl stop docker`.quiet().nothrow();
245
283
  }
246
284
  };
247
- export const checkDockerInstalled = async (databaseEngine) => {
248
- if (await hasDocker())
249
- return { freshInstall: false };
250
- const dbLabel = databaseEngine ?? 'database';
251
- const proceed = await confirm({
252
- initialValue: true,
253
- message: `Docker Engine and Compose plugin are required for your local ${dbLabel}. Install them now?`
254
- });
255
- if (!proceed)
256
- return { freshInstall: false };
257
- switch (hostEnv) {
258
- case 'windows':
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
- }
265
- break;
266
- case 'wsl':
267
- if (await installWSL())
268
- return { freshInstall: true };
269
- break;
270
- case 'linux':
271
- if (await installLinux())
272
- return { freshInstall: true };
273
- break;
274
- }
275
- console.log(`Couldn't install Docker automatically. Download it from ${DOCKER_URL}`);
276
- return { freshInstall: false };
277
- };
@@ -60,23 +60,20 @@ export const parseCommandLineOptions = () => {
60
60
  authOption = 'none';
61
61
  }
62
62
  const absProviders = [];
63
- if (values['abs-provider'] !== undefined) {
64
- if (authOption === undefined || authOption === 'none') {
65
- authOption = 'abs';
66
- }
67
- else if (authOption !== 'abs') {
68
- errors.push(`Invalid auth configuration: "--abs-provider" specified but auth provider is set to "${authOption}". "--abs-provider" can only be used with "abs" auth provider.`);
69
- }
70
- for (const provider of values['abs-provider']) {
71
- if (!isValidProviderOption(provider)) {
72
- errors.push(`Invalid Absolute-Auth provider: "${provider}". Expected: ${Object.keys(providers).join(', ')}`);
73
- continue;
74
- }
75
- else {
76
- absProviders.push(provider);
77
- }
78
- }
63
+ if (values['abs-provider'] !== undefined &&
64
+ (authOption === undefined || authOption === 'none')) {
65
+ authOption = 'abs';
66
+ }
67
+ else if (values['abs-provider'] !== undefined && authOption !== 'abs') {
68
+ errors.push(`Invalid auth configuration: "--abs-provider" specified but auth provider is set to "${authOption}". "--abs-provider" can only be used with "abs" auth provider.`);
69
+ }
70
+ const rawProviders = values['abs-provider'] ?? [];
71
+ const validProviders = rawProviders.filter(isValidProviderOption);
72
+ const invalidProviders = rawProviders.filter((provider) => !isValidProviderOption(provider));
73
+ for (const provider of invalidProviders) {
74
+ errors.push(`Invalid Absolute-Auth provider: "${provider}". Expected: ${Object.keys(providers).join(', ')}`);
79
75
  }
76
+ absProviders.push(...validProviders);
80
77
  let databaseEngine;
81
78
  if (values.db !== undefined && !isDatabaseEngine(values.db)) {
82
79
  errors.push(`Invalid database engine: "${values.db}". Expected: [ ${availableDatabaseEngines.join(', ')} ]`);
@@ -4,51 +4,60 @@
4
4
  * Run `bun run check-versions` to compare against latest npm versions.
5
5
  */
6
6
  export declare const versions: {
7
- readonly '@absolutejs/absolute': "0.16.10";
8
- readonly '@absolutejs/auth': "0.22.0";
9
- readonly '@elysiajs/static': "1.4.7";
10
- readonly elysia: "1.4.25";
11
- readonly 'elysia-scoped-state': "0.1.1";
7
+ readonly '@absolutejs/absolute': "0.19.0-beta.872";
8
+ readonly '@absolutejs/auth': "0.22.4";
9
+ readonly '@angular/common': "21.2.0";
10
+ readonly '@angular/compiler': "21.2.0";
11
+ readonly '@angular/compiler-cli': "21.2.0";
12
+ readonly '@angular/core': "21.2.0";
13
+ readonly '@angular/platform-browser': "21.2.0";
14
+ readonly '@angular/platform-server': "21.2.0";
15
+ readonly '@angular/ssr': "21.2.0";
12
16
  readonly '@elysiajs/cors': "1.4.1";
17
+ readonly '@elysiajs/eden': "1.4.8";
18
+ readonly '@elysiajs/static': "1.4.7";
13
19
  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.2.0";
17
- readonly autoprefixer: "10.4.24";
18
- readonly postcss: "8.5.6";
19
- readonly tailwindcss: "4.2.0";
20
- readonly '@types/react': "19.2.14";
21
- readonly react: "19.2.4";
22
- readonly 'react-dom': "19.2.4";
23
- readonly 'prettier-plugin-svelte': "3.5.0";
24
- readonly svelte: "5.53.0";
25
- readonly vue: "3.5.28";
26
20
  readonly '@eslint/compat': "2.0.2";
27
21
  readonly '@eslint/js': "10.0.1";
28
- readonly globals: "17.3.0";
22
+ readonly '@libsql/client': "0.17.0";
23
+ readonly '@neondatabase/serverless': "1.0.2";
24
+ readonly '@planetscale/database': "1.19.0";
29
25
  readonly '@stylistic/eslint-plugin': "5.9.0";
26
+ readonly '@tailwindcss/cli': "4.2.0";
27
+ readonly '@types/mssql': "9.1.9";
28
+ readonly '@types/pg': "8.16.0";
29
+ readonly '@types/react': "19.2.14";
30
30
  readonly '@typescript-eslint/parser': "8.56.0";
31
+ readonly autoprefixer: "10.4.24";
32
+ readonly 'drizzle-orm': "0.45.1";
33
+ readonly elysia: "1.4.25";
34
+ readonly 'elysia-rate-limit': "4.5.0";
35
+ readonly 'elysia-scoped-state': "0.1.1";
31
36
  readonly eslint: "10.0.0";
32
37
  readonly 'eslint-plugin-absolute': "0.2.0";
33
38
  readonly 'eslint-plugin-import': "2.32.0";
34
- readonly 'eslint-plugin-promise': "7.2.1";
35
- readonly 'eslint-plugin-security': "4.0.0";
36
- readonly prettier: "3.8.1";
37
- readonly 'typescript-eslint': "8.56.0";
38
- readonly 'zod-validation-error': "4.0.2";
39
39
  readonly 'eslint-plugin-jsx-a11y': "6.10.2";
40
+ readonly 'eslint-plugin-promise': "7.2.1";
40
41
  readonly 'eslint-plugin-react': "7.37.5";
41
42
  readonly 'eslint-plugin-react-compiler': "19.1.0-rc.2";
42
43
  readonly 'eslint-plugin-react-hooks': "7.1.0-canary-e8c63626-20260213";
43
- readonly 'drizzle-orm': "0.45.1";
44
- readonly '@libsql/client': "0.17.0";
45
- readonly '@neondatabase/serverless': "1.0.2";
46
- readonly '@planetscale/database': "1.19.0";
47
- readonly '@types/mssql': "9.1.9";
48
- readonly '@types/pg': "8.16.0";
44
+ readonly 'eslint-plugin-security': "4.0.0";
49
45
  readonly gel: "2.2.0";
46
+ readonly globals: "17.3.0";
50
47
  readonly mongodb: "7.1.0";
51
48
  readonly mssql: "12.2.0";
52
49
  readonly mysql2: "3.17.3";
53
50
  readonly pg: "8.18.0";
51
+ readonly postcss: "8.5.6";
52
+ readonly prettier: "3.8.1";
53
+ readonly 'prettier-plugin-svelte': "3.5.0";
54
+ readonly react: "19.2.4";
55
+ readonly 'react-dom': "19.2.4";
56
+ readonly 'react-refresh': "0.18.0";
57
+ readonly svelte: "5.53.0";
58
+ readonly tailwindcss: "4.2.0";
59
+ readonly typescript: "5.9.3";
60
+ readonly 'typescript-eslint': "8.56.0";
61
+ readonly vue: "3.5.28";
62
+ readonly 'zod-validation-error': "4.0.2";
54
63
  };
package/dist/versions.js CHANGED
@@ -5,62 +5,72 @@
5
5
  */
6
6
  export const versions = {
7
7
  /* ── Core ─────────────────────────────────────────────── */
8
- '@absolutejs/absolute': '0.16.10',
9
- '@absolutejs/auth': '0.22.0',
10
- '@elysiajs/static': '1.4.7',
11
- elysia: '1.4.25',
12
- 'elysia-scoped-state': '0.1.1',
13
- /* ── Plugins ──────────────────────────────────────────── */
8
+ '@absolutejs/absolute': '0.19.0-beta.872',
9
+ '@absolutejs/auth': '0.22.4',
10
+ /* ── Angular ─────────────────────────────────────────── */
11
+ '@angular/common': '21.2.0',
12
+ '@angular/compiler': '21.2.0',
13
+ '@angular/compiler-cli': '21.2.0',
14
+ '@angular/core': '21.2.0',
15
+ '@angular/platform-browser': '21.2.0',
16
+ '@angular/platform-server': '21.2.0',
17
+ '@angular/ssr': '21.2.0',
14
18
  '@elysiajs/cors': '1.4.1',
19
+ /* ── Plugins ──────────────────────────────────────────── */
20
+ '@elysiajs/eden': '1.4.8',
21
+ '@elysiajs/static': '1.4.7',
15
22
  '@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.2.0',
21
- autoprefixer: '10.4.24',
22
- postcss: '8.5.6',
23
- tailwindcss: '4.2.0',
24
- /* ── React ────────────────────────────────────────────── */
25
- '@types/react': '19.2.14',
26
- react: '19.2.4',
27
- 'react-dom': '19.2.4',
28
- /* ── Svelte ───────────────────────────────────────────── */
29
- 'prettier-plugin-svelte': '3.5.0',
30
- svelte: '5.53.0',
31
- /* ── Vue ──────────────────────────────────────────────── */
32
- vue: '3.5.28',
33
23
  /* ── ESLint + Prettier ────────────────────────────────── */
34
24
  '@eslint/compat': '2.0.2',
35
25
  '@eslint/js': '10.0.1',
36
- globals: '17.3.0',
26
+ /* ── Database Hosts ───────────────────────────────────── */
27
+ '@libsql/client': '0.17.0',
28
+ '@neondatabase/serverless': '1.0.2',
29
+ '@planetscale/database': '1.19.0',
37
30
  '@stylistic/eslint-plugin': '5.9.0',
31
+ /* ── Tailwind CSS ─────────────────────────────────────── */
32
+ '@tailwindcss/cli': '4.2.0',
33
+ /* ── Database Drivers ─────────────────────────────────── */
34
+ '@types/mssql': '9.1.9',
35
+ '@types/pg': '8.16.0',
36
+ /* ── React ────────────────────────────────────────────── */
37
+ '@types/react': '19.2.14',
38
38
  '@typescript-eslint/parser': '8.56.0',
39
+ autoprefixer: '10.4.24',
40
+ /* ── ORM ──────────────────────────────────────────────── */
41
+ 'drizzle-orm': '0.45.1',
42
+ elysia: '1.4.25',
43
+ 'elysia-rate-limit': '4.5.0',
44
+ 'elysia-scoped-state': '0.1.1',
39
45
  eslint: '10.0.0',
40
46
  'eslint-plugin-absolute': '0.2.0',
41
47
  'eslint-plugin-import': '2.32.0',
42
- 'eslint-plugin-promise': '7.2.1',
43
- 'eslint-plugin-security': '4.0.0',
44
- prettier: '3.8.1',
45
- 'typescript-eslint': '8.56.0',
46
- 'zod-validation-error': '4.0.2',
47
48
  /* ── ESLint React ─────────────────────────────────────── */
48
49
  'eslint-plugin-jsx-a11y': '6.10.2',
50
+ 'eslint-plugin-promise': '7.2.1',
49
51
  'eslint-plugin-react': '7.37.5',
50
52
  'eslint-plugin-react-compiler': '19.1.0-rc.2',
51
53
  'eslint-plugin-react-hooks': '7.1.0-canary-e8c63626-20260213',
52
- /* ── ORM ──────────────────────────────────────────────── */
53
- 'drizzle-orm': '0.45.1',
54
- /* ── Database Hosts ───────────────────────────────────── */
55
- '@libsql/client': '0.17.0',
56
- '@neondatabase/serverless': '1.0.2',
57
- '@planetscale/database': '1.19.0',
58
- /* ── Database Drivers ─────────────────────────────────── */
59
- '@types/mssql': '9.1.9',
60
- '@types/pg': '8.16.0',
54
+ 'eslint-plugin-security': '4.0.0',
61
55
  gel: '2.2.0',
56
+ globals: '17.3.0',
62
57
  mongodb: '7.1.0',
63
58
  mssql: '12.2.0',
64
59
  mysql2: '3.17.3',
65
- pg: '8.18.0'
60
+ pg: '8.18.0',
61
+ postcss: '8.5.6',
62
+ prettier: '3.8.1',
63
+ /* ── Svelte ───────────────────────────────────────────── */
64
+ 'prettier-plugin-svelte': '3.5.0',
65
+ react: '19.2.4',
66
+ 'react-dom': '19.2.4',
67
+ 'react-refresh': '0.18.0',
68
+ svelte: '5.53.0',
69
+ tailwindcss: '4.2.0',
70
+ /* ── Build / TypeScript ───────────────────────────────── */
71
+ typescript: '5.9.3',
72
+ 'typescript-eslint': '8.56.0',
73
+ /* ── Vue ──────────────────────────────────────────────── */
74
+ vue: '3.5.28',
75
+ 'zod-validation-error': '4.0.2'
66
76
  };
package/package.json CHANGED
@@ -10,23 +10,24 @@
10
10
  },
11
11
  "description": "A CLI tool to create a new AbsoluteJS project",
12
12
  "devDependencies": {
13
- "@absolutejs/absolute": "0.16.9",
14
- "@stylistic/eslint-plugin-ts": "4.2.0",
13
+ "@absolutejs/absolute": "0.19.0-beta.872",
14
+ "@eslint/compat": "2.0.2",
15
+ "@stylistic/eslint-plugin": "5.9.0",
15
16
  "@types/bun": "1.3.8",
16
17
  "@types/react": "19.2.13",
17
18
  "autoprefixer": "10.4.24",
18
19
  "drizzle-kit": "0.31.8",
19
20
  "drizzle-orm": "0.45.1",
20
- "eslint": "9.39.2",
21
- "eslint-plugin-absolute": "0.1.6",
21
+ "eslint": "10.0.1",
22
+ "eslint-plugin-absolute": "0.2.1",
22
23
  "eslint-plugin-import": "2.32.0",
23
24
  "eslint-plugin-promise": "7.2.1",
24
- "eslint-plugin-security": "3.0.1",
25
+ "eslint-plugin-security": "4.0.0",
25
26
  "prettier": "3.8.1",
26
27
  "prettier-plugin-svelte": "3.4.1",
27
28
  "svelte": "5.49.2",
28
29
  "tailwindcss": "4.1.18",
29
- "typescript-eslint": "8.54.0",
30
+ "typescript-eslint": "8.56.0",
30
31
  "vue": "3.5.27"
31
32
  },
32
33
  "files": [
@@ -43,12 +44,12 @@
43
44
  "build": "rm -rf dist && tsc --project tsconfig.build.json && cp -R src/templates dist/templates",
44
45
  "check-versions": "bun scripts/check-versions.ts",
45
46
  "dev": "bun scripts/dev.ts",
46
- "format": "prettier --write \"./**/*.{js,jsx,ts,tsx,css,json,mjs,md,svelte,html,vue}\"",
47
- "lint": "eslint ./",
47
+ "format": "absolute prettier --write",
48
+ "lint": "absolute eslint --ignore-pattern 'absolutejs-project/**'",
48
49
  "release": "bun run format && bun run build && bun publish",
49
50
  "test": "cd absolutejs-project && bun dev",
50
51
  "typecheck": "bun run tsc --noEmit"
51
52
  },
52
53
  "type": "module",
53
- "version": "0.10.3"
54
+ "version": "0.12.0"
54
55
  }