create-mikstack 0.1.2 → 0.1.4

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/dist/index.js CHANGED
@@ -57,9 +57,13 @@ function postScaffold(targetDir, packageManager) {
57
57
  } catch {
58
58
  s.stop("Failed to install dependencies. You can run install manually.");
59
59
  }
60
+ s.start("Formatting project...");
60
61
  try {
61
62
  run(`${packageManager} run format`);
62
- } catch {}
63
+ s.stop("Project formatted.");
64
+ } catch {
65
+ s.stop("Formatting skipped.");
66
+ }
63
67
  s.start("Initializing git repository...");
64
68
  try {
65
69
  run("git init");
@@ -193,13 +197,14 @@ function renderTemplate(content, context) {
193
197
  //#endregion
194
198
  //#region src/scaffold.ts
195
199
  const TEMPLATES_DIR = path.resolve(import.meta.dirname, "..", "templates");
196
- function scaffold(config) {
200
+ function scaffold(config, onStatus) {
197
201
  const target = path.resolve(process.cwd(), config.targetDir);
198
202
  if (fs.existsSync(target)) {
199
203
  if (fs.readdirSync(target).length > 0) throw new Error(`Target directory "${config.targetDir}" is not empty. Please choose a different name or remove the directory.`);
200
204
  }
201
205
  const svBin = new URL("../bin.mjs", import.meta.resolve("sv")).pathname;
202
206
  execSync(`node ${svBin} create ${target} --template minimal --types ts --add devtools-json --no-install`, { stdio: "pipe" });
207
+ onStatus?.("Applying templates...");
203
208
  const overlay = (dir) => {
204
209
  copyDir(dir, target);
205
210
  mergePartials(target);
@@ -213,6 +218,7 @@ function scaffold(config) {
213
218
  if (config.githubActions) overlay(path.join(TEMPLATES_DIR, `github-actions-${config.packageManager}`));
214
219
  overlay(path.join(TEMPLATES_DIR, `supply-chain-${config.packageManager}`));
215
220
  overlay(path.join(TEMPLATES_DIR, "adapters", config.adapter));
221
+ onStatus?.("Rendering configuration...");
216
222
  renderDir(target, buildContext(config));
217
223
  appendGitignoreFiles(target);
218
224
  appendLockfileIgnores(target, config.packageManager);
@@ -378,14 +384,23 @@ async function cli() {
378
384
  p.intro("create-mikstack");
379
385
  p.log.info(`Scaffolding ${config.projectName} with recommended defaults (non-interactive)...`);
380
386
  } else config = await runPrompts(projectName, packageManager);
387
+ const s = p.spinner();
388
+ s.start("Running sv create...");
381
389
  try {
382
- scaffold(config);
390
+ scaffold(config, (msg) => s.message(msg));
391
+ s.stop("Project scaffolded.");
383
392
  } catch (err) {
393
+ s.stop("Scaffolding failed.");
384
394
  p.log.error(err instanceof Error ? err.message : String(err));
385
395
  process.exit(1);
386
396
  }
387
397
  postScaffold(config.targetDir, config.packageManager);
388
- p.note([`cd ${config.targetDir}`, `${config.packageManager} run dev`].join("\n"), "Next steps");
398
+ const run = pmRun(config.packageManager);
399
+ p.note([
400
+ `cd ${config.targetDir}`,
401
+ `${run} db:push`,
402
+ `${run} dev`
403
+ ].join("\n"), "Next steps");
389
404
  }
390
405
  function printHelp() {
391
406
  console.log(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-mikstack",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,6 +9,11 @@ services:
9
9
  POSTGRES_PASSWORD: mysecretpassword
10
10
  POSTGRES_DB: local
11
11
  command: ["postgres", "-c", "wal_level=logical"]
12
+ healthcheck:
13
+ test: ["CMD-SHELL", "pg_isready -U root -d local"]
14
+ interval: 2s
15
+ timeout: 5s
16
+ retries: 5
12
17
  volumes:
13
18
  - pgdata:/var/lib/postgresql/data
14
19
  volumes:
@@ -1,18 +1,22 @@
1
1
  {
2
2
  "scripts": {
3
- "check": "drizzle-zero generate --output src/lib/zero/zero-schema.gen.ts && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
4
- "check:watch": "drizzle-zero generate --output src/lib/zero/zero-schema.gen.ts && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
5
- "lint": "drizzle-zero generate --output src/lib/zero/zero-schema.gen.ts && eslint .",
3
+ "prepare": "drizzle-zero generate --output src/lib/zero/zero-schema.gen.ts && (svelte-kit sync || echo '')",
4
+ "dev": "docker compose up -d --wait && concurrently --names app,zero \"vite dev\" \"zero-cache-dev\"",
5
+ "dev:app": "vite dev",
6
+ "dev:zero": "zero-cache-dev",
7
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
8
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
9
+ "lint": "eslint .",
6
10
  "format": "prettier --write .",
7
11
  "format:check": "prettier --check .",
8
- "db:start": "docker compose up -d",
12
+ "db:start": "docker compose up -d --wait",
9
13
  "db:generate": "drizzle-kit generate",
10
14
  "db:migrate": "drizzle-kit migrate",
11
- "db:push": "drizzle-kit push",
15
+ "db:push": "docker compose up -d --wait && drizzle-kit push",
12
16
  "db:studio": "drizzle-kit studio",
13
17
  "db:seed": "{{seedRunner}} src/lib/server/db/seed.ts",
14
18
  "zero:generate": "drizzle-zero generate --output src/lib/zero/zero-schema.gen.ts",
15
- "zero:start": "zero-cache-server"
19
+ "zero:start": "zero-cache-dev"
16
20
  },
17
21
  "dependencies": {
18
22
  "@mikstack/email": "^0.1.0",
@@ -27,6 +31,7 @@
27
31
  "zero-svelte": "^1.2.2"
28
32
  },
29
33
  "devDependencies": {
34
+ "concurrently": "^9.2.1",
30
35
  "@eslint/compat": "^1.4.1",
31
36
  "@eslint/js": "^9.39.2",
32
37
  "@types/nodemailer": "^7.0.9",
@@ -39,5 +44,8 @@
39
44
  "prettier": "^3.8.1",
40
45
  "prettier-plugin-svelte": "^3.4.1",
41
46
  "typescript-eslint": "^8.54.0"
42
- }
47
+ },
48
+ "trustedDependencies": [
49
+ "@rocicorp/zero-sqlite3"
50
+ ]
43
51
  }
@@ -1,3 +1,7 @@
1
+ [run]
2
+ # Use Bun runtime instead of following shebangs (needed for zero-cache native addons)
3
+ bun = true
4
+
1
5
  [install]
2
6
  # Reject packages published less than 3 days ago
3
7
  minPublishAge = "3d"