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.
- 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 +41 -62
- package/dist/generators/configurations/generatePrettierrc.js +9 -9
- package/dist/generators/db/dockerInitTemplates.d.ts +4 -0
- package/dist/generators/db/dockerInitTemplates.js +83 -79
- package/dist/generators/db/generateDatabaseTypes.js +6 -6
- package/dist/generators/db/generateDockerContainer.js +53 -16
- package/dist/generators/db/generateDrizzleSchema.js +17 -17
- package/dist/generators/db/generateSqliteSchema.js +8 -8
- package/dist/generators/db/handlerTemplates.d.ts +1 -1
- package/dist/generators/db/handlerTemplates.js +260 -260
- package/dist/generators/db/scaffoldDatabase.d.ts +3 -1
- package/dist/generators/db/scaffoldDatabase.js +4 -2
- package/dist/generators/db/scaffoldDocker.d.ts +3 -1
- package/dist/generators/db/scaffoldDocker.js +21 -11
- 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/generateImportsBlock.js +4 -1
- 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/index.js +11 -2
- package/dist/messages.js +43 -43
- package/dist/questions/projectName.js +1 -1
- package/dist/scaffold.d.ts +3 -1
- package/dist/scaffold.js +10 -5
- 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/checkDockerInstalled.d.ts +9 -1
- package/dist/utils/checkDockerInstalled.js +137 -39
- package/dist/utils/checkSqliteInstalled.js +13 -13
- package/dist/utils/commandMaps.d.ts +1 -1
- package/dist/utils/commandMaps.js +4 -4
- package/dist/versions.d.ts +50 -0
- package/dist/versions.js +62 -0
- package/package.json +22 -21
- 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
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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(
|
|
81
|
+
spin.stop(runRes.exitCode === 0
|
|
70
82
|
? 'Docker Desktop installed'
|
|
71
|
-
: '
|
|
72
|
-
return
|
|
83
|
+
: 'Installer failed');
|
|
84
|
+
return runRes.exitCode === 0;
|
|
73
85
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
export const
|
|
156
|
-
if (
|
|
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:
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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<
|
|
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
|
|
9
|
-
npm: 'npx prettier --write
|
|
10
|
-
pnpm: 'pnpm dlx prettier --write
|
|
11
|
-
yarn: 'yarn dlx prettier --write
|
|
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
|
+
};
|
package/dist/versions.js
ADDED
|
@@ -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.
|
|
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": "
|
|
15
|
-
"@types/react": "19.
|
|
16
|
-
"autoprefixer": "10.4.
|
|
17
|
-
"drizzle-kit": "0.31.
|
|
18
|
-
"drizzle-orm": "0.
|
|
19
|
-
"eslint": "9.
|
|
20
|
-
"eslint-plugin-absolute": "0.1.
|
|
21
|
-
"eslint-plugin-import": "2.
|
|
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.
|
|
25
|
-
"prettier-plugin-svelte": "3.4.
|
|
26
|
-
"svelte": "5.
|
|
27
|
-
"tailwindcss": "4.1.
|
|
28
|
-
"typescript-eslint": "8.
|
|
29
|
-
"vue": "3.5.
|
|
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.
|
|
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
|
-
"
|
|
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": "
|
|
48
|
+
"test": "cd absolutejs-project && bun dev",
|
|
48
49
|
"typecheck": "bun run tsc --noEmit"
|
|
49
50
|
},
|
|
50
51
|
"type": "module",
|
|
51
|
-
"version": "0.
|
|
52
|
+
"version": "0.8.0"
|
|
52
53
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@import 'tailwindcss';
|