@batijs/cli 0.0.649 → 0.0.651

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 (147) hide show
  1. package/dist/boilerplates/@batijs/auth0/bati.config.mjs +1 -1
  2. package/dist/boilerplates/@batijs/authjs/bati.config.mjs +1 -1
  3. package/dist/boilerplates/@batijs/authjs/files/server/authjs-handler.ts +1 -1
  4. package/dist/boilerplates/@batijs/aws/bati.config.mjs +1 -1
  5. package/dist/boilerplates/@batijs/aws/files/cdk/bin/infrastructure.ts +1 -1
  6. package/dist/boilerplates/@batijs/better-auth/bati.config.mjs +1 -1
  7. package/dist/boilerplates/@batijs/better-auth/files/database/better-auth/migrate.ts +1 -3
  8. package/dist/boilerplates/@batijs/better-auth/files/database/drizzle/schema/auth.ts +5 -5
  9. package/dist/boilerplates/@batijs/better-auth/files/server/better-auth-handler.ts +2 -2
  10. package/dist/boilerplates/@batijs/better-auth/files/server/better-auth.ts +8 -8
  11. package/dist/boilerplates/@batijs/biome/bati.config.mjs +1 -1
  12. package/dist/boilerplates/@batijs/cloudflare/bati.config.mjs +1 -1
  13. package/dist/boilerplates/@batijs/cloudflare/files/$vite.config.ts.js +9 -9
  14. package/dist/boilerplates/@batijs/compiled/bati.config.mjs +1 -1
  15. package/dist/boilerplates/@batijs/compiled/files/$vite.config.ts.js +9 -9
  16. package/dist/boilerplates/@batijs/d1/bati.config.mjs +1 -1
  17. package/dist/boilerplates/@batijs/d1-kysely/bati.config.mjs +1 -1
  18. package/dist/boilerplates/@batijs/d1-sqlite/bati.config.mjs +1 -1
  19. package/dist/boilerplates/@batijs/docker-compose/bati.config.mjs +1 -1
  20. package/dist/boilerplates/@batijs/docker-compose/files/$Dockerfile.js +5 -44
  21. package/dist/boilerplates/@batijs/docker-compose/files/docker-compose.yml +6 -6
  22. package/dist/boilerplates/@batijs/dokploy/bati.config.mjs +1 -1
  23. package/dist/boilerplates/@batijs/drizzle/bati.config.mjs +6 -1
  24. package/dist/boilerplates/@batijs/drizzle/files/database/drizzle/db.ts +3 -3
  25. package/dist/boilerplates/@batijs/drizzle/files/database/drizzle/queries/todos.ts +10 -10
  26. package/dist/boilerplates/@batijs/drizzle/files/database/drizzle/schema/todos.ts +2 -2
  27. package/dist/boilerplates/@batijs/drizzle/files/drizzle.config.ts +3 -3
  28. package/dist/boilerplates/@batijs/drizzle/types/database/drizzle/queries/todos.d.mts +6 -6
  29. package/dist/boilerplates/@batijs/edgeone/bati.config.mjs +1 -1
  30. package/dist/boilerplates/@batijs/edgeone/files/$vite.config.ts.js +7 -7
  31. package/dist/boilerplates/@batijs/elysia/bati.config.mjs +1 -1
  32. package/dist/boilerplates/@batijs/elysia/files/+server.ts +1 -1
  33. package/dist/boilerplates/@batijs/elysia/files/server/elysia.ts +9 -9
  34. package/dist/boilerplates/@batijs/eslint/bati.config.mjs +1 -1
  35. package/dist/boilerplates/@batijs/eslint/files/eslint.config.ts +14 -14
  36. package/dist/boilerplates/@batijs/express/bati.config.mjs +1 -1
  37. package/dist/boilerplates/@batijs/express/files/+server.ts +10 -10
  38. package/dist/boilerplates/@batijs/fastify/bati.config.mjs +1 -1
  39. package/dist/boilerplates/@batijs/fastify/files/+server.ts +10 -10
  40. package/dist/boilerplates/@batijs/google-analytics/bati.config.mjs +1 -1
  41. package/dist/boilerplates/@batijs/hono/bati.config.mjs +1 -1
  42. package/dist/boilerplates/@batijs/hono/files/+server.ts +2 -2
  43. package/dist/boilerplates/@batijs/hono/files/entry_aws_lambda.ts +1 -3
  44. package/dist/boilerplates/@batijs/hono/files/server/hono.ts +9 -9
  45. package/dist/boilerplates/@batijs/kysely/bati.config.mjs +2 -1
  46. package/dist/boilerplates/@batijs/kysely/files/$vite.config.ts.js +9 -12
  47. package/dist/boilerplates/@batijs/kysely/files/database/kysely/db.ts +5 -5
  48. package/dist/boilerplates/@batijs/kysely/files/database/kysely/migrate.ts +5 -6
  49. package/dist/boilerplates/@batijs/kysely/files/database/kysely/migrations/001_create_todos_table.ts +2 -3
  50. package/dist/boilerplates/@batijs/kysely/files/database/kysely/queries/todos.ts +8 -8
  51. package/dist/boilerplates/@batijs/kysely/files/vite-plugin-input.ts +1 -2
  52. package/dist/boilerplates/@batijs/kysely/types/database/kysely/queries/todos.d.mts +8 -8
  53. package/dist/boilerplates/@batijs/mantine/bati.config.mjs +1 -1
  54. package/dist/boilerplates/@batijs/netlify/bati.config.mjs +1 -1
  55. package/dist/boilerplates/@batijs/netlify/files/$vite.config.ts.js +8 -8
  56. package/dist/boilerplates/@batijs/oxlint/bati.config.mjs +1 -1
  57. package/dist/boilerplates/@batijs/plausible.io/bati.config.mjs +1 -1
  58. package/dist/boilerplates/@batijs/pnpm/bati.config.mjs +1 -1
  59. package/dist/boilerplates/@batijs/postgres/bati.config.mjs +2 -1
  60. package/dist/boilerplates/@batijs/postgres/files/database/postgres/db.ts +1 -1
  61. package/dist/boilerplates/@batijs/postgres/files/database/postgres/schema/todos.ts +1 -1
  62. package/dist/boilerplates/@batijs/prettier/bati.config.mjs +1 -1
  63. package/dist/boilerplates/@batijs/prisma/bati.config.mjs +1 -1
  64. package/dist/boilerplates/@batijs/react/bati.config.mjs +1 -1
  65. package/dist/boilerplates/@batijs/react/files/$vite.config.ts.js +7 -7
  66. package/dist/boilerplates/@batijs/react/files/pages/+Head.tsx +6 -6
  67. package/dist/boilerplates/@batijs/react/files/pages/+Layout.tsx +14 -14
  68. package/dist/boilerplates/@batijs/react/files/pages/+config.ts +3 -3
  69. package/dist/boilerplates/@batijs/react/files/pages/index/+Page.tsx +1 -1
  70. package/dist/boilerplates/@batijs/react/files/pages/index/Counter.tsx +3 -3
  71. package/dist/boilerplates/@batijs/react/files/pages/todo/TodoList.tsx +6 -6
  72. package/dist/boilerplates/@batijs/react-better-auth/bati.config.mjs +1 -1
  73. package/dist/boilerplates/@batijs/react-better-auth/files/pages/account/+Page.tsx +1 -1
  74. package/dist/boilerplates/@batijs/react-better-auth/files/pages/login/+Page.tsx +4 -4
  75. package/dist/boilerplates/@batijs/react-better-auth/files/pages/signup/+Page.tsx +4 -4
  76. package/dist/boilerplates/@batijs/react-sentry/bati.config.mjs +1 -1
  77. package/dist/boilerplates/@batijs/sentry/bati.config.mjs +1 -1
  78. package/dist/boilerplates/@batijs/sentry/files/$vite.config.ts.js +10 -10
  79. package/dist/boilerplates/@batijs/sentry/files/pages/$+client.ts.js +12 -18
  80. package/dist/boilerplates/@batijs/shadcn-ui/bati.config.mjs +1 -1
  81. package/dist/boilerplates/@batijs/shadcn-ui/files/$vite.config.ts.js +5 -27
  82. package/dist/boilerplates/@batijs/shared/bati.config.mjs +1 -1
  83. package/dist/boilerplates/@batijs/shared/files/vite.config.ts +1 -1
  84. package/dist/boilerplates/@batijs/shared-db/bati.config.mjs +1 -1
  85. package/dist/boilerplates/@batijs/shared-db/files/server/db-middleware.ts +21 -21
  86. package/dist/boilerplates/@batijs/shared-db/types/server/db-middleware.d.mts +10 -10
  87. package/dist/boilerplates/@batijs/shared-env/bati.config.mjs +1 -1
  88. package/dist/boilerplates/@batijs/shared-env/files/server/env.ts +6 -4
  89. package/dist/boilerplates/@batijs/shared-env/files/server/load.ts +1 -1
  90. package/dist/boilerplates/@batijs/shared-env/types/server/env.d.mts +2 -2
  91. package/dist/boilerplates/@batijs/shared-server/bati.config.mjs +1 -1
  92. package/dist/boilerplates/@batijs/shared-server/files/server/create-todo-handler.ts +16 -16
  93. package/dist/boilerplates/@batijs/shared-server/types/server/create-todo-handler.d.mts +10 -10
  94. package/dist/boilerplates/@batijs/shared-todo/bati.config.mjs +1 -1
  95. package/dist/boilerplates/@batijs/shared-todo/files/global.d.ts +11 -11
  96. package/dist/boilerplates/@batijs/shared-todo/files/pages/todo/+config.ts +1 -4
  97. package/dist/boilerplates/@batijs/shared-todo/files/pages/todo/+data.ts +5 -5
  98. package/dist/boilerplates/@batijs/solid/bati.config.mjs +1 -1
  99. package/dist/boilerplates/@batijs/solid/files/$vite.config.ts.js +7 -7
  100. package/dist/boilerplates/@batijs/solid/files/pages/+Head.tsx +3 -4
  101. package/dist/boilerplates/@batijs/solid/files/pages/+Layout.tsx +10 -10
  102. package/dist/boilerplates/@batijs/solid/files/pages/+config.ts +3 -3
  103. package/dist/boilerplates/@batijs/solid/files/pages/index/Counter.tsx +2 -2
  104. package/dist/boilerplates/@batijs/solid/files/pages/todo/TodoList.tsx +6 -6
  105. package/dist/boilerplates/@batijs/solid-better-auth/bati.config.mjs +1 -1
  106. package/dist/boilerplates/@batijs/solid-better-auth/files/pages/account/+Page.tsx +1 -1
  107. package/dist/boilerplates/@batijs/solid-better-auth/files/pages/login/+Page.tsx +4 -4
  108. package/dist/boilerplates/@batijs/solid-better-auth/files/pages/signup/+Page.tsx +4 -4
  109. package/dist/boilerplates/@batijs/solid-sentry/bati.config.mjs +1 -1
  110. package/dist/boilerplates/@batijs/sqlite/bati.config.mjs +2 -1
  111. package/dist/boilerplates/@batijs/sqlite/files/database/sqlite/db.ts +1 -1
  112. package/dist/boilerplates/@batijs/sqlite/files/database/sqlite/schema/todos.ts +1 -1
  113. package/dist/boilerplates/@batijs/storybook/bati.config.mjs +1 -1
  114. package/dist/boilerplates/@batijs/tailwindcss/bati.config.mjs +1 -1
  115. package/dist/boilerplates/@batijs/tailwindcss/files/$vite.config.ts.js +7 -7
  116. package/dist/boilerplates/@batijs/tailwindcss/files/pages/tailwind.css +2 -2
  117. package/dist/boilerplates/@batijs/telefunc/bati.config.mjs +1 -1
  118. package/dist/boilerplates/@batijs/telefunc/files/$vite.config.ts.js +8 -8
  119. package/dist/boilerplates/@batijs/telefunc/files/global.d.ts +12 -12
  120. package/dist/boilerplates/@batijs/telefunc/files/pages/todo/TodoList.telefunc.ts +5 -5
  121. package/dist/boilerplates/@batijs/telefunc/files/server/telefunc-handler.ts +12 -12
  122. package/dist/boilerplates/@batijs/trpc/bati.config.mjs +1 -1
  123. package/dist/boilerplates/@batijs/trpc/files/server/trpc-handler.ts +4 -4
  124. package/dist/boilerplates/@batijs/trpc/files/trpc/server.ts +15 -15
  125. package/dist/boilerplates/@batijs/ts-rest/bati.config.mjs +1 -1
  126. package/dist/boilerplates/@batijs/ts-rest/files/server/ts-rest-handler.ts +15 -15
  127. package/dist/boilerplates/@batijs/universal-deploy/bati.config.mjs +1 -1
  128. package/dist/boilerplates/@batijs/vercel/bati.config.mjs +1 -1
  129. package/dist/boilerplates/@batijs/vercel/files/$vite.config.ts.js +8 -8
  130. package/dist/boilerplates/@batijs/vue/bati.config.mjs +1 -1
  131. package/dist/boilerplates/@batijs/vue/files/$vite.config.ts.js +7 -7
  132. package/dist/boilerplates/@batijs/vue/files/components/Content.vue +2 -2
  133. package/dist/boilerplates/@batijs/vue/files/components/Counter.vue +3 -3
  134. package/dist/boilerplates/@batijs/vue/files/components/Logo.vue +2 -2
  135. package/dist/boilerplates/@batijs/vue/files/components/Sidebar.vue +2 -2
  136. package/dist/boilerplates/@batijs/vue/files/pages/+Head.vue +2 -3
  137. package/dist/boilerplates/@batijs/vue/files/pages/+Layout.vue +3 -3
  138. package/dist/boilerplates/@batijs/vue/files/pages/+config.ts +3 -3
  139. package/dist/boilerplates/@batijs/vue/files/pages/+onCreateApp.ts +1 -1
  140. package/dist/boilerplates/@batijs/vue/files/pages/todo/TodoList.vue +8 -8
  141. package/dist/boilerplates/@batijs/vue-better-auth/bati.config.mjs +1 -1
  142. package/dist/boilerplates/@batijs/vue-better-auth/files/pages/account/+Page.vue +1 -1
  143. package/dist/boilerplates/@batijs/vue-better-auth/files/pages/login/+Page.vue +3 -3
  144. package/dist/boilerplates/@batijs/vue-better-auth/files/pages/signup/+Page.vue +2 -2
  145. package/dist/boilerplates/@batijs/vue-sentry/bati.config.mjs +1 -1
  146. package/dist/index.js +49 -47
  147. package/package.json +5 -5
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <div id="page-container">
3
- <!-- BATI.has("tailwindcss") -->
3
+ <!-- $$.BATI.has("tailwindcss") -->
4
4
  <div id="page-content" class="p-5 pb-12 min-h-screen">
5
5
  <slot />
6
6
  </div>
7
- <!-- !BATI.has("tailwindcss") -->
7
+ <!-- !$$.BATI.has("tailwindcss") -->
8
8
  <div id="page-content" style="padding: 20px; padding-bottom: 50px; min-height: 100vh">
9
9
  <slot />
10
10
  </div>
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <!-- BATI.has("daisyui") -->
2
+ <!-- $$.BATI.has("daisyui") -->
3
3
  <button type="button" class="btn" @click="state.count++">Counter {{ state.count }}</button>
4
- <!-- BATI.has("tailwindcss") && !BATI.has("daisyui") -->
4
+ <!-- $$.BATI.has("tailwindcss") && !$$.BATI.has("daisyui") -->
5
5
  <button
6
6
  type="button"
7
7
  class="inline-block border border-black rounded bg-gray-200 px-2 py-1 text-xs font-medium uppercase leading-normal"
@@ -9,7 +9,7 @@
9
9
  >
10
10
  Counter {{ state.count }}
11
11
  </button>
12
- <!-- !BATI.has("tailwindcss") -->
12
+ <!-- !$$.BATI.has("tailwindcss") -->
13
13
  <button type="button" @click="state.count++">Counter {{ state.count }}</button>
14
14
  </template>
15
15
 
@@ -1,11 +1,11 @@
1
1
  <template>
2
- <!-- BATI.has("tailwindcss") -->
2
+ <!-- $$.BATI.has("tailwindcss") -->
3
3
  <div class="p-5 mb-2">
4
4
  <a href="/">
5
5
  <img src="../assets/logo.svg" height="64" width="64" />
6
6
  </a>
7
7
  </div>
8
- <!-- !BATI.has("tailwindcss") -->
8
+ <!-- !$$.BATI.has("tailwindcss") -->
9
9
  <div style="margin-top: 20px; margin-bottom: 10px">
10
10
  <a href="/">
11
11
  <img src="../assets/logo.svg" height="64" width="64" />
@@ -1,9 +1,9 @@
1
1
  <template>
2
- <!-- BATI.has("tailwindcss") -->
2
+ <!-- $$.BATI.has("tailwindcss") -->
3
3
  <div id="sidebar" class="p-5 flex flex-col shrink-0 border-r-2 border-r-gray-200">
4
4
  <slot />
5
5
  </div>
6
- <!-- !BATI.has("tailwindcss") -->
6
+ <!-- !$$.BATI.has("tailwindcss") -->
7
7
  <div
8
8
  id="sidebar"
9
9
  style="
@@ -2,15 +2,14 @@
2
2
 
3
3
  <template>
4
4
  <link rel="icon" :href="logoUrl" />
5
-
6
- <!-- BATI.has("plausible.io") -->
5
+ <!-- $$.BATI.has("plausible.io") -->
7
6
  <!-- See https://plausible.io/docs/plausible-script -->
8
7
  <!-- TODO: update data-domain -->
9
8
  <component :is="'script'" defer data-domain="yourdomain.com" src="https://plausible.io/js/script.js" />
10
9
  </template>
11
10
 
12
11
  <script setup lang="ts">
13
- //# BATI.has("tailwindcss")
12
+ // $$.BATI.has("tailwindcss")
14
13
  import "@batijs/tailwindcss/pages/tailwind.css";
15
14
  import logoUrl from "../assets/logo.svg";
16
15
  </script>
@@ -7,7 +7,7 @@
7
7
  <Link href="/"> Welcome </Link>
8
8
  <Link href="/todo"> Todo </Link>
9
9
  <Link href="/star-wars"> Data Fetching </Link>
10
- <!-- BATI.has("better-auth") -->
10
+ <!-- $$.BATI.has("better-auth") -->
11
11
  <AuthNav />
12
12
  </Sidebar>
13
13
  <Content><slot /></Content>
@@ -15,7 +15,7 @@
15
15
  </template>
16
16
 
17
17
  <script lang="ts" setup>
18
- //# BATI.has("better-auth")
18
+ // $$.BATI.has("better-auth")
19
19
  import AuthNav from "../components/AuthNav.vue";
20
20
  import Content from "../components/Content.vue";
21
21
  import Link from "../components/Link.vue";
@@ -23,7 +23,7 @@ import Logo from "../components/Logo.vue";
23
23
  import Sidebar from "../components/Sidebar.vue";
24
24
  import { sentryBrowserConfig } from "../sentry.browser.config";
25
25
 
26
- //# BATI.has("sentry")
26
+ // $$.BATI.has("sentry")
27
27
  sentryBrowserConfig();
28
28
  </script>
29
29
 
@@ -9,14 +9,14 @@ const config: Config = {
9
9
  title: "My Vike App",
10
10
  description: "Demo showcasing Vike",
11
11
 
12
- //# BATI.has("auth0") || BATI.has("authjs") || BATI.has("better-auth")
12
+ // $$.BATI.has("auth0") || $$.BATI.has("authjs") || $$.BATI.has("better-auth")
13
13
  passToClient: ["user"],
14
14
  extends: [vikeVue],
15
15
 
16
- //# BATI.has("vercel")
16
+ // $$.BATI.has("vercel")
17
17
  prerender: true,
18
18
 
19
- //# BATI.hasUD && !BATI.hasServer
19
+ // $$.BATI.hasUD && !$$.BATI.hasServer
20
20
  // https://vike.dev/server
21
21
  server: true,
22
22
  };
@@ -1,7 +1,7 @@
1
1
  import type { OnCreateAppSync } from "vike-vue/types";
2
2
  import { createGtag } from "vue-gtag";
3
3
 
4
- // BATI.has("google-analytics")
4
+ // $$.BATI.has("google-analytics")
5
5
  export const onCreateApp: OnCreateAppSync = (pageContext): ReturnType<OnCreateAppSync> => {
6
6
  const { app } = pageContext;
7
7
 
@@ -5,13 +5,13 @@
5
5
  </li>
6
6
  <li>
7
7
  <form @submit.prevent="submitNewTodo()">
8
- <!-- BATI.has("tailwindcss") -->
8
+ <!-- $$.BATI.has("tailwindcss") -->
9
9
  <input v-model="newTodo" type="text" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 w-full sm:w-auto p-2 mr-1 mb-1" />
10
- <!-- !BATI.has("tailwindcss") -->
10
+ <!-- !$$.BATI.has("tailwindcss") -->
11
11
  <input v-model="newTodo" type="text" />
12
- <!-- BATI.has("tailwindcss") -->
12
+ <!-- $$.BATI.has("tailwindcss") -->
13
13
  <button type="submit" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-2 focus:outline-hidden focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto p-2">Add to-do</button>
14
- <!-- !BATI.has("tailwindcss") -->
14
+ <!-- !$$.BATI.has("tailwindcss") -->
15
15
  <button type="submit">Add to-do</button>
16
16
  </form>
17
17
  </li>
@@ -34,12 +34,12 @@ const submitNewTodo = async () => {
34
34
  const text = newTodo.value;
35
35
  todoItems.value.push({ text });
36
36
  newTodo.value = "";
37
- if (BATI.hasServer) {
38
- if (BATI.has("telefunc")) {
37
+ if ($$.BATI.hasServer) {
38
+ if ($$.BATI.has("telefunc")) {
39
39
  await onNewTodo({ text });
40
- } else if (BATI.has("trpc")) {
40
+ } else if ($$.BATI.has("trpc")) {
41
41
  await trpc.onNewTodo.mutate(text);
42
- } else if (BATI.has("ts-rest")) {
42
+ } else if ($$.BATI.has("ts-rest")) {
43
43
  await client.createTodo({ body: { text } });
44
44
  } else {
45
45
  const response = await fetch("/api/todo/create", {
@@ -3,7 +3,7 @@ function e(e, t) {
3
3
  if (!e) throw Error(t);
4
4
  }
5
5
  function t(t) {
6
- return `enforce` in t && e(t.enforce === `pre` || t.enforce === `post`, `'enforce' must be 'pre' or 'post', was ${t.enforce}`), `if` in t && e(typeof t.if == `function`, `'if' must be a function`), `nextSteps` in t && e(typeof t.nextSteps == `function`, `'nextSteps' must be a function`), `knip` in t && (e(typeof t.knip == `object` && t.knip !== null, `'knip' must be an object`), `entry` in t.knip && e(Array.isArray(t.knip.entry), `'knip.entry' must be an array`), `ignoreDependencies` in t.knip && e(Array.isArray(t.knip.ignoreDependencies), `'knip.ignoreDependencies' must be an array`), `ignore` in t.knip && e(Array.isArray(t.knip.ignore), `'knip.ignore' must be an array`), `vite` in t.knip && e(typeof t.knip.vite == `boolean`, `'knip.vite' must be a boolean`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), t;
6
+ return `enforce` in t && e(t.enforce === `pre` || t.enforce === `post`, `'enforce' must be 'pre' or 'post', was ${t.enforce}`), `if` in t && e(typeof t.if == `function`, `'if' must be a function`), `nextSteps` in t && e(typeof t.nextSteps == `function`, `'nextSteps' must be a function`), `knip` in t && (e(typeof t.knip == `object` && t.knip !== null, `'knip' must be an object`), `entry` in t.knip && e(Array.isArray(t.knip.entry), `'knip.entry' must be an array`), `ignoreDependencies` in t.knip && e(Array.isArray(t.knip.ignoreDependencies), `'knip.ignoreDependencies' must be an array`), `ignore` in t.knip && e(Array.isArray(t.knip.ignore), `'knip.ignore' must be an array`), `vite` in t.knip && e(typeof t.knip.vite == `boolean`, `'knip.vite' must be a boolean`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), t;
7
7
  }
8
8
  //#endregion
9
9
  //#region bati.config.ts
@@ -15,7 +15,7 @@ import { usePageContext } from "vike-vue/usePageContext";
15
15
  const authClient = createAuthClient();
16
16
  const pageContext = usePageContext();
17
17
 
18
- const buttonClass = BATI.has("tailwindcss")
18
+ const buttonClass = $$.BATI.has("tailwindcss")
19
19
  ? "text-white bg-blue-700 hover:bg-blue-800 focus:ring-2 focus:outline-hidden focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto p-2"
20
20
  : "";
21
21
 
@@ -39,13 +39,13 @@ const email = ref("");
39
39
  const password = ref("");
40
40
  const error = ref<string | null>(null);
41
41
 
42
- const inputClass = BATI.has("tailwindcss")
42
+ const inputClass = $$.BATI.has("tailwindcss")
43
43
  ? "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 w-full sm:w-auto p-2 mr-1 mb-1"
44
44
  : "";
45
- const buttonClass = BATI.has("tailwindcss")
45
+ const buttonClass = $$.BATI.has("tailwindcss")
46
46
  ? "text-white bg-blue-700 hover:bg-blue-800 focus:ring-2 focus:outline-hidden focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto p-2"
47
47
  : "";
48
- const githubButtonClass = BATI.has("tailwindcss")
48
+ const githubButtonClass = $$.BATI.has("tailwindcss")
49
49
  ? "text-white bg-gray-800 hover:bg-gray-900 focus:ring-2 focus:outline-hidden focus:ring-gray-300 font-medium rounded-lg text-sm w-full sm:w-auto p-2"
50
50
  : "";
51
51
 
@@ -35,10 +35,10 @@ const email = ref("");
35
35
  const password = ref("");
36
36
  const error = ref<string | null>(null);
37
37
 
38
- const inputClass = BATI.has("tailwindcss")
38
+ const inputClass = $$.BATI.has("tailwindcss")
39
39
  ? "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 w-full sm:w-auto p-2 mr-1 mb-1"
40
40
  : "";
41
- const buttonClass = BATI.has("tailwindcss")
41
+ const buttonClass = $$.BATI.has("tailwindcss")
42
42
  ? "text-white bg-blue-700 hover:bg-blue-800 focus:ring-2 focus:outline-hidden focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto p-2"
43
43
  : "";
44
44
 
@@ -3,7 +3,7 @@ function e(e, t) {
3
3
  if (!e) throw Error(t);
4
4
  }
5
5
  function t(t) {
6
- return `enforce` in t && e(t.enforce === `pre` || t.enforce === `post`, `'enforce' must be 'pre' or 'post', was ${t.enforce}`), `if` in t && e(typeof t.if == `function`, `'if' must be a function`), `nextSteps` in t && e(typeof t.nextSteps == `function`, `'nextSteps' must be a function`), `knip` in t && (e(typeof t.knip == `object` && t.knip !== null, `'knip' must be an object`), `entry` in t.knip && e(Array.isArray(t.knip.entry), `'knip.entry' must be an array`), `ignoreDependencies` in t.knip && e(Array.isArray(t.knip.ignoreDependencies), `'knip.ignoreDependencies' must be an array`), `ignore` in t.knip && e(Array.isArray(t.knip.ignore), `'knip.ignore' must be an array`), `vite` in t.knip && e(typeof t.knip.vite == `boolean`, `'knip.vite' must be a boolean`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), t;
6
+ return `enforce` in t && e(t.enforce === `pre` || t.enforce === `post`, `'enforce' must be 'pre' or 'post', was ${t.enforce}`), `if` in t && e(typeof t.if == `function`, `'if' must be a function`), `nextSteps` in t && e(typeof t.nextSteps == `function`, `'nextSteps' must be a function`), `knip` in t && (e(typeof t.knip == `object` && t.knip !== null, `'knip' must be an object`), `entry` in t.knip && e(Array.isArray(t.knip.entry), `'knip.entry' must be an array`), `ignoreDependencies` in t.knip && e(Array.isArray(t.knip.ignoreDependencies), `'knip.ignoreDependencies' must be an array`), `ignore` in t.knip && e(Array.isArray(t.knip.ignore), `'knip.ignore' must be an array`), `vite` in t.knip && e(typeof t.knip.vite == `boolean`, `'knip.vite' must be a boolean`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), t;
7
7
  }
8
8
  //#endregion
9
9
  //#region bati.config.ts
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import { access, constants, lstat, mkdir, opendir, readFile, readdir, rm, rmdir,
7
7
  import { tmpdir } from "node:os";
8
8
  import path, { dirname, extname, join, normalize, parse, relative } from "node:path";
9
9
  import { fileURLToPath } from "node:url";
10
- import { formatCode, getVersion, packageManager, parseModule, transformAndFormat, which, withIcon } from "@batijs/core";
10
+ import { formatCode, getVersion, markEmptyExport, mergeDts, packageManager, transformAndFormat, which, withIcon } from "@batijs/core";
11
11
  import { BatiSet, cliFlags, features } from "@batijs/features";
12
12
  import { RulesMessage, execRules } from "@batijs/features/rules";
13
13
  import { AsyncLocalStorage, AsyncResource } from "node:async_hooks";
@@ -49,39 +49,36 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
49
49
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
50
50
  //#endregion
51
51
  //#region ../build/dist/index.js
52
- async function mergeDts({ fileContent, previousContent, filepath, meta }) {
53
- const previousAst = parseModule(previousContent);
54
- const currentAst = parseModule(fileContent);
55
- for (const imp of previousAst.imports.$items) currentAst.imports[imp.local] = imp;
56
- const index = currentAst.$ast.body.findIndex((node) => node.type === "ExportNamedDeclaration" || node.type === "ExportDefaultDeclaration");
57
- for (const node of previousAst.$ast.body) {
58
- if (node.type === "ImportDeclaration" || node.type === "ExportNamedDeclaration" || node.type === "ExportDefaultDeclaration") continue;
59
- if (index === -1) currentAst.$ast.body.push(node);
60
- else currentAst.$ast.body.splice(index, 0, node);
61
- }
62
- return clearExports((await transformAndFormat(currentAst.generate().code, meta, { filepath })).code, meta);
63
- }
64
- function clearExports(code, meta) {
52
+ let merger;
53
+ let emptyExportMarker;
54
+ /**
55
+ * Merge two already-`$$`-transformed `.d.ts` files into one: concatenate them and run the `mergeDts`
56
+ * codemod, which hoists/dedupes imports and folds same-named `declare global` / `declare module` /
57
+ * `namespace` / `interface` declarations together. Then tidy whitespace and strip a now-empty
58
+ * `export {}`.
59
+ */
60
+ async function mergeDts$1({ fileContent, previousContent, filepath, meta }) {
61
+ merger ??= mergeDts.forTarget("tsx");
62
+ return clearExports(await formatCode((await merger).transform(`${previousContent}\n${fileContent}`, {}), { filepath }), meta);
63
+ }
64
+ async function clearExports(code, meta) {
65
65
  if (code.trim() === "export {};") return;
66
- if (meta.BATI.has("biome")) {
67
- const index = code.indexOf("\nexport {};");
68
- const foundImport = code.match(/^import .* from /gm);
69
- if (index !== -1 && foundImport) return code.slice(0, index) + "\n// biome-ignore lint/complexity/noUselessEmptyExport: ensure that the file is considered as a module" + code.slice(index);
70
- }
71
- return code;
66
+ if (!meta.BATI.has("biome")) return code;
67
+ emptyExportMarker ??= markEmptyExport.forTarget("tsx");
68
+ return (await emptyExportMarker).transform(code, {});
72
69
  }
73
70
  async function executeOperationFile(op, { meta, previousOperationSameDestination }) {
74
71
  const code = await readFile(op.sourceAbsolute, { encoding: "utf-8" });
75
72
  const filepath = relative(op.source, op.sourceAbsolute);
76
73
  const result = await transformAndFormat(code, meta, { filepath });
77
74
  let fileContent = result.code;
78
- if (op.sourceAbsolute.endsWith(".d.ts")) if (previousOperationSameDestination?.content) fileContent = await mergeDts({
75
+ if (op.sourceAbsolute.endsWith(".d.ts")) if (previousOperationSameDestination?.content) fileContent = await mergeDts$1({
79
76
  fileContent,
80
77
  previousContent: previousOperationSameDestination.content,
81
- meta,
82
- filepath
78
+ filepath,
79
+ meta
83
80
  });
84
- else fileContent = clearExports(fileContent, meta);
81
+ else fileContent = await clearExports(fileContent, meta);
85
82
  return {
86
83
  context: result.context,
87
84
  content: fileContent ? fileContent.trimStart() : void 0
@@ -172,7 +169,7 @@ async function transformFileAfterExec(filepath, fileContent) {
172
169
  async function importTransformer(p) {
173
170
  return (await (isWin$1 ? import(`file://${p}`) : import(p))).default;
174
171
  }
175
- async function executeOperationTransform(op, { meta, previousOperationSameDestination, packageJson, env }) {
172
+ async function executeOperationTransform(op, { meta, previousOperationSameDestination, packageJson, env, deploy }) {
176
173
  const transformer = await importTransformer(op.sourceAbsolute);
177
174
  const previousContent = previousOperationSameDestination?.content;
178
175
  const fileContent = await transformFileAfterExec(op.destination, await transformer({
@@ -181,20 +178,21 @@ async function executeOperationTransform(op, { meta, previousOperationSameDestin
181
178
  source: op.source,
182
179
  target: op.destination,
183
180
  packageJson,
184
- env
181
+ env,
182
+ deploy
185
183
  }));
186
184
  return { content: fileContent !== null ? fileContent : void 0 };
187
185
  }
188
186
  var RelationFile = class RelationFile {
189
187
  pathAbsolute;
190
- includeIfImported;
188
+ keepFileIfImported;
191
189
  static allPathAbsolute = /* @__PURE__ */ new Map();
192
- static allIncludeIfImported = [];
193
- constructor(pathAbsolute, includeIfImported) {
190
+ static allKeepFileIfImported = [];
191
+ constructor(pathAbsolute, keepFileIfImported) {
194
192
  this.pathAbsolute = pathAbsolute;
195
- this.includeIfImported = includeIfImported;
193
+ this.keepFileIfImported = keepFileIfImported;
196
194
  RelationFile.allPathAbsolute.set(pathAbsolute, this);
197
- if (includeIfImported) RelationFile.allIncludeIfImported.push(this);
195
+ if (keepFileIfImported) RelationFile.allKeepFileIfImported.push(this);
198
196
  }
199
197
  };
200
198
  var RelationImport = class RelationImport {
@@ -213,10 +211,10 @@ var RelationImport = class RelationImport {
213
211
  static computeUnimportedFiles() {
214
212
  const unimportedFiles = [];
215
213
  const importedByVolatileFile = [];
216
- for (const file of RelationFile.allIncludeIfImported) {
214
+ for (const file of RelationFile.allKeepFileIfImported) {
217
215
  const importedFile = RelationImport.allImports.find((ai) => ai.importTargetRelationFile === file);
218
216
  if (!importedFile) unimportedFiles.push(file);
219
- else if (importedFile.source.includeIfImported) importedByVolatileFile.push(importedFile);
217
+ else if (importedFile.source.keepFileIfImported) importedByVolatileFile.push(importedFile);
220
218
  }
221
219
  return computeDeepUnimportedFiles(importedByVolatileFile, unimportedFiles);
222
220
  }
@@ -288,8 +286,9 @@ async function* walk(dir) {
288
286
  async function main(options, meta) {
289
287
  const sources = Array.isArray(options.source) ? options.source : [options.source];
290
288
  const env = options.env ?? [];
291
- function updateAllImports(target, imports, includeIfImported) {
292
- const rf = new RelationFile(target, includeIfImported);
289
+ const deploy = options.deploy ?? [];
290
+ function updateAllImports(target, imports, keepFileIfImported) {
291
+ const rf = new RelationFile(target, keepFileIfImported);
293
292
  if (!imports) return;
294
293
  for (const imp of imports.values()) new RelationImport(rf, path.resolve(path.dirname(target), imp));
295
294
  }
@@ -334,12 +333,13 @@ Please report this issue to https://github.com/vikejs/bati`);
334
333
  meta,
335
334
  previousOperationSameDestination: previousOp
336
335
  });
337
- updateAllImports(op.destinationAbsolute, report.context?.imports, Boolean(report.context?.flags.has("include-if-imported")));
336
+ updateAllImports(op.destinationAbsolute, report.context?.imports, Boolean(report.context?.flags.has("keep-file-if-imported")));
338
337
  } else if (op.kind === "transform") report = await executeOperationTransform(op, {
339
338
  meta,
340
339
  previousOperationSameDestination: previousOp,
341
340
  packageJson,
342
- env
341
+ env,
342
+ deploy
343
343
  });
344
344
  if (report.content) {
345
345
  await safeWriteFile(op.destination, report.content.trimStart());
@@ -2518,7 +2518,7 @@ var colorette_exports = /* @__PURE__ */ __exportAll({
2518
2518
  underline: () => underline,
2519
2519
  white: () => white,
2520
2520
  whiteBright: () => whiteBright,
2521
- yellow: () => yellow$1,
2521
+ yellow: () => yellow,
2522
2522
  yellowBright: () => yellowBright
2523
2523
  });
2524
2524
  const { env = {}, argv = [], platform = "" } = typeof process === "undefined" ? {} : process;
@@ -2580,7 +2580,7 @@ const createColors = ({ useColor = isColorSupported } = {}) => useColor ? colors
2580
2580
  ...colors,
2581
2581
  [key]: String
2582
2582
  }), {});
2583
- const { reset, bold, dim, italic, underline, inverse, hidden, strikethrough, black, red, green, yellow: yellow$1, blue, magenta, cyan, white, gray, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, blackBright, redBright, greenBright, yellowBright, blueBright, magentaBright, cyanBright, whiteBright, bgBlackBright, bgRedBright, bgGreenBright, bgYellowBright, bgBlueBright, bgMagentaBright, bgCyanBright, bgWhiteBright } = createColors();
2583
+ const { reset, bold, dim, italic, underline, inverse, hidden, strikethrough, black, red, green, yellow, blue, magenta, cyan, white, gray, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, blackBright, redBright, greenBright, yellowBright, blueBright, magentaBright, cyanBright, whiteBright, bgBlackBright, bgRedBright, bgGreenBright, bgYellowBright, bgBlueBright, bgMagentaBright, bgCyanBright, bgWhiteBright } = createColors();
2584
2584
  //#endregion
2585
2585
  //#region ../../node_modules/.bun/scule@1.3.0/node_modules/scule/dist/index.mjs
2586
2586
  const NUMBER_CHAR_RE = /\d/;
@@ -2638,7 +2638,7 @@ function kebabCase(str, joiner) {
2638
2638
  //#endregion
2639
2639
  //#region package.json
2640
2640
  var name = "@batijs/cli";
2641
- var version = "0.0.649";
2641
+ var version = "0.0.651";
2642
2642
  var description = "Next-gen scaffolder. Get started with fully-functional apps, and choose any tool you want";
2643
2643
  //#endregion
2644
2644
  //#region rules.ts
@@ -2853,13 +2853,13 @@ async function checkArguments(args) {
2853
2853
  newArgs.project = `my-app-${generateRandomFilename(5)}`;
2854
2854
  return newArgs;
2855
2855
  } else if (!stat.isDirectory()) {
2856
- console.error(`${yellow$1("⚠")} Target ${cyan(newArgs.project)} already exists but is not a directory. ${yellow$1("Aborting")}.`);
2856
+ console.error(`${yellow("⚠")} Target ${cyan(newArgs.project)} already exists but is not a directory. ${yellow("Aborting")}.`);
2857
2857
  process.exit(2);
2858
2858
  }
2859
2859
  try {
2860
2860
  await access(newArgs.project, constants.W_OK);
2861
2861
  } catch {
2862
- console.error(`${yellow$1("⚠")} Target folder ${cyan(newArgs.project)} already exists but is not writable. ${yellow$1("Aborting")}.`);
2862
+ console.error(`${yellow("⚠")} Target folder ${cyan(newArgs.project)} already exists but is not writable. ${yellow("Aborting")}.`);
2863
2863
  process.exit(3);
2864
2864
  }
2865
2865
  if (!newArgs.force) {
@@ -2867,7 +2867,7 @@ async function checkArguments(args) {
2867
2867
  newArgs.project = `my-app-${generateRandomFilename(5)}`;
2868
2868
  return newArgs;
2869
2869
  } else {
2870
- console.error(`${yellow$1("⚠")} Target folder ${cyan(newArgs.project)} already exists and is not empty.\n Continuing might erase existing files. ${yellow$1("Aborting")}.`);
2870
+ console.error(`${yellow("⚠")} Target folder ${cyan(newArgs.project)} already exists and is not empty.\n Continuing might erase existing files. ${yellow("Aborting")}.`);
2871
2871
  process.exit(4);
2872
2872
  }
2873
2873
  }
@@ -2895,7 +2895,7 @@ async function checkFlagsIncludesUiFramework(flags) {
2895
2895
  const flagsUi = features.filter((fs) => fs.category === "UI Framework").map((fs) => fs.flag);
2896
2896
  const flagsHosting = features.filter((fs) => fs.category === "Hosting").map((fs) => fs.flag);
2897
2897
  const flagsUiFound = flags.some((f) => flagsUi.includes(f));
2898
- if (flags.filter((f) => !flagsUi.includes(f) && !flagsHosting.includes(f)).length === 0) console.warn(`${yellow$1("🛈 Scaffolding a bare-bones app")} ➡️ Go to ${underline("https://vike.dev/new")} to scaffold full-fledged apps with Tailwind, authentication, database, deployment, and more.\n`);
2898
+ if (flags.filter((f) => !flagsUi.includes(f) && !flagsHosting.includes(f)).length === 0) console.warn(`${yellow("🛈 Scaffolding a bare-bones app")} ➡️ Go to ${underline("https://vike.dev/new")} to scaffold full-fledged apps with Tailwind, authentication, database, deployment, and more.\n`);
2899
2899
  if (!flagsUiFound) {
2900
2900
  const ui = await dist_default({
2901
2901
  theme: { style: { highlight(t) {
@@ -2934,7 +2934,7 @@ function checkRules(flags) {
2934
2934
  }
2935
2935
  if (warnings.length > 0) {
2936
2936
  warnings.forEach((m) => {
2937
- console.warn(yellow$1(`⚠ ${m.value}.`));
2937
+ console.warn(yellow(`⚠ ${m.value}.`));
2938
2938
  });
2939
2939
  console.log("");
2940
2940
  }
@@ -3001,7 +3001,7 @@ function gitInit(cwd) {
3001
3001
  force: true
3002
3002
  });
3003
3003
  } catch {}
3004
- console.warn(`${yellow$1("⚠")} failed to initialize a git repository in destination folder. Skipping.`);
3004
+ console.warn(`${yellow("⚠")} failed to initialize a git repository in destination folder. Skipping.`);
3005
3005
  }
3006
3006
  }
3007
3007
  async function run() {
@@ -3048,10 +3048,12 @@ async function run() {
3048
3048
  }
3049
3049
  const hooksMap = await retrieveHooks(hooks);
3050
3050
  const env = filteredBoilerplates.flatMap((b) => b.config.env?.(meta) ?? []);
3051
+ const deploy = [...new Set(filteredBoilerplates.flatMap((b) => typeof b.config.deploy === "function" ? b.config.deploy(meta) : b.config.deploy ?? []))];
3051
3052
  await main({
3052
3053
  source: sources,
3053
3054
  dist: args.project,
3054
- env
3055
+ env,
3056
+ deploy
3055
3057
  }, meta);
3056
3058
  for (const onafter of hooksMap.get("after") ?? []) await onafter(args.project, meta);
3057
3059
  if (args.knip) await generateKnipConfig(args.project, filteredBoilerplates);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@batijs/cli",
3
- "version": "0.0.649",
3
+ "version": "0.0.651",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "check-types": "tsc --noEmit",
@@ -13,8 +13,8 @@
13
13
  "repository": "https://github.com/vikejs/bati",
14
14
  "license": "MIT",
15
15
  "devDependencies": {
16
- "@batijs/build": "0.0.649",
17
- "@batijs/compile": "0.0.649",
16
+ "@batijs/build": "0.0.651",
17
+ "@batijs/compile": "0.0.651",
18
18
  "@inquirer/prompts": "^8.5.2",
19
19
  "@types/node": "^20.19.37",
20
20
  "@types/which": "^3.0.4",
@@ -30,8 +30,8 @@
30
30
  "vite": "^8.0.16"
31
31
  },
32
32
  "dependencies": {
33
- "@batijs/core": "0.0.649",
34
- "@batijs/features": "0.0.649"
33
+ "@batijs/core": "0.0.651",
34
+ "@batijs/features": "0.0.651"
35
35
  },
36
36
  "bin": "./cli.js",
37
37
  "exports": {