abckit 0.0.45 → 0.0.49

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/module.d.mts CHANGED
@@ -124,6 +124,21 @@ interface ModulesConfig {
124
124
  * @default false (or true if all: true)
125
125
  */
126
126
  sentry?: boolean;
127
+ /**
128
+ * Enable Redis/Dragonfly storage driver
129
+ * @default false
130
+ */
131
+ redis?: boolean;
132
+ /**
133
+ * Enable S3/R2 storage driver
134
+ * @default false
135
+ */
136
+ s3?: boolean;
137
+ /**
138
+ * Enable local disk storage driver
139
+ * @default false
140
+ */
141
+ disk?: boolean;
127
142
  }
128
143
  interface ModuleOptions {
129
144
  /**
package/dist/module.mjs CHANGED
@@ -1,9 +1,11 @@
1
- import { updateRuntimeConfig, addTypeTemplate, addServerScanDir, addRouteMiddleware, defineNuxtModule, createResolver } from '@nuxt/kit';
1
+ import { addTypeTemplate, addServerScanDir, addRouteMiddleware, defineNuxtModule, createResolver } from '@nuxt/kit';
2
2
  import { defu } from 'defu';
3
3
  import { join } from 'node:path';
4
4
  import { networkInterfaces } from 'node:os';
5
+ import { existsSync } from 'node:fs';
6
+ import { consola } from 'consola';
5
7
 
6
- const CORE_MODULES = ["tailwindcss", "notivue", "icon", "colada", "colorMode", "vueuse", "pinia", "veeValidate", "graphql", "persistedState", "ionic", "scripts"];
8
+ const CORE_MODULES = ["tailwindcss", "notivue", "icon", "colada", "colorMode", "vueuse", "pinia", "veeValidate", "persistedState", "scripts"];
7
9
  function resolveModule(modules, key) {
8
10
  if (modules?.[key] !== void 0) {
9
11
  return modules[key];
@@ -83,11 +85,6 @@ const IMGPROXY_DEFAULTS = {
83
85
  storageUrl: "",
84
86
  cdnDomains: []
85
87
  };
86
- const STORAGE_DEFAULTS = {
87
- redis: false,
88
- s3: false,
89
- disk: false
90
- };
91
88
  const APP_HEAD_LINKS = [
92
89
  { rel: "icon", type: "image/png", href: "/favicon-96x96.png", sizes: "96x96" },
93
90
  { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" },
@@ -179,22 +176,17 @@ async function setupRuntimeConfig(nuxt, options, isSentryEnabled) {
179
176
  }
180
177
  };
181
178
  nuxt.options.runtimeConfig.imgproxy = defu(nuxt.options.runtimeConfig.imgproxy, IMGPROXY_DEFAULTS);
182
- nuxt.options.runtimeConfig.storage = defu(nuxt.options.runtimeConfig.storage, STORAGE_DEFAULTS);
179
+ nuxt.options.runtimeConfig.modules = defu(nuxt.options.runtimeConfig.modules, {
180
+ s3: options.modules?.s3 ?? false,
181
+ redis: options.modules?.redis ?? false,
182
+ disk: options.modules?.disk ?? false
183
+ });
183
184
  nuxt.options.runtimeConfig.public = defu(nuxt.options.runtimeConfig.public, {
184
185
  siteUrl: isMobileBuild ? mobileBaseURL : "http://localhost:3000",
185
186
  isMobile: isMobileBuild,
186
187
  debug: nuxt.options.dev,
187
188
  imgproxy: IMGPROXY_DEFAULTS
188
189
  });
189
- await updateRuntimeConfig({
190
- modules: defu(options.modules, {
191
- s3: false,
192
- graphql: false,
193
- redis: false,
194
- disk: false,
195
- ionic: false
196
- })
197
- });
198
190
  }
199
191
  function setupAppHead(nuxt) {
200
192
  const siteUrl = nuxt.options.runtimeConfig.public.siteUrl;
@@ -330,6 +322,136 @@ function setupDevtools(nuxt) {
330
322
  });
331
323
  }
332
324
 
325
+ const FEATURE_GROUPS = {
326
+ core: {
327
+ name: "Core UI",
328
+ description: "UI components, auth, state management",
329
+ packages: [
330
+ "reka-ui",
331
+ "better-auth",
332
+ "@nuxtjs/tailwindcss",
333
+ "tailwindcss",
334
+ "@nuxtjs/color-mode",
335
+ "@pinia/nuxt",
336
+ "pinia",
337
+ "@pinia/colada-nuxt",
338
+ "@pinia/colada",
339
+ "@vueuse/nuxt",
340
+ "@vueuse/core",
341
+ "@vee-validate/nuxt",
342
+ "vee-validate",
343
+ "notivue",
344
+ "@nuxt/icon",
345
+ "@nuxt/scripts",
346
+ "pinia-plugin-persistedstate",
347
+ "vaul-vue",
348
+ "vue-sonner",
349
+ "embla-carousel-vue",
350
+ "vue-input-otp",
351
+ "date-fns",
352
+ "zod"
353
+ ],
354
+ installCommand: `pnpm add reka-ui better-auth @nuxtjs/tailwindcss tailwindcss @nuxtjs/color-mode \\
355
+ @pinia/nuxt pinia @pinia/colada-nuxt @pinia/colada @pinia/colada-plugin-auto-refetch \\
356
+ @vueuse/nuxt @vueuse/core @vee-validate/nuxt vee-validate \\
357
+ notivue @nuxt/icon @nuxt/scripts pinia-plugin-persistedstate \\
358
+ vaul-vue vue-sonner embla-carousel-vue vue-input-otp date-fns zod uuid ofetch`
359
+ },
360
+ graphql: {
361
+ name: "GraphQL",
362
+ description: "GraphQL API with Yoga",
363
+ packages: ["graphql", "graphql-yoga", "nitro-graphql", "graphql-scalars", "@graphql-tools/utils"],
364
+ installCommand: "pnpm add graphql graphql-yoga nitro-graphql graphql-scalars @graphql-tools/utils graphql-config"
365
+ },
366
+ ionic: {
367
+ name: "Ionic/Mobile UI",
368
+ description: "Ionic Vue components",
369
+ packages: ["@ionic/vue", "@nuxtjs/ionic"],
370
+ installCommand: "pnpm add @ionic/vue @nuxtjs/ionic"
371
+ },
372
+ capacitor: {
373
+ name: "Capacitor",
374
+ description: "Native mobile features",
375
+ packages: ["@capacitor/core", "@capacitor/preferences", "@capacitor/app"],
376
+ installCommand: `pnpm add @capacitor/core @capacitor/cli @capacitor/preferences @capacitor/app \\
377
+ @capacitor/browser @capacitor/device @capacitor/haptics @capacitor/network \\
378
+ @capacitor/splash-screen @capacitor/status-bar capacitor-native-settings`
379
+ },
380
+ sentry: {
381
+ name: "Sentry",
382
+ description: "Error tracking",
383
+ packages: ["@sentry/nuxt"],
384
+ installCommand: "pnpm add @sentry/nuxt"
385
+ },
386
+ database: {
387
+ name: "Database",
388
+ description: "Drizzle ORM + PostgreSQL + Redis",
389
+ packages: ["drizzle-orm", "pg", "ioredis"],
390
+ installCommand: "pnpm add drizzle-orm drizzle-kit drizzle-zod pg ioredis"
391
+ },
392
+ storage: {
393
+ name: "S3 Storage",
394
+ description: "S3/R2 file storage",
395
+ packages: ["aws4fetch", "unstorage"],
396
+ installCommand: "pnpm add aws4fetch unstorage"
397
+ },
398
+ i18n: {
399
+ name: "Internationalization",
400
+ description: "Multi-language support",
401
+ packages: ["@nuxtjs/i18n"],
402
+ installCommand: "pnpm add @nuxtjs/i18n"
403
+ },
404
+ polar: {
405
+ name: "Polar",
406
+ description: "Polar.sh payments",
407
+ packages: ["@polar-sh/sdk"],
408
+ installCommand: "pnpm add @polar-sh/sdk"
409
+ },
410
+ table: {
411
+ name: "Data Table",
412
+ description: "TanStack Table",
413
+ packages: ["@tanstack/vue-table"],
414
+ installCommand: "pnpm add @tanstack/vue-table"
415
+ },
416
+ charts: {
417
+ name: "Charts",
418
+ description: "Unovis charts",
419
+ packages: ["@unovis/vue"],
420
+ installCommand: "pnpm add @unovis/vue @unovis/ts"
421
+ },
422
+ editor: {
423
+ name: "Markdown Editor",
424
+ description: "MD Editor V3",
425
+ packages: ["md-editor-v3"],
426
+ installCommand: "pnpm add md-editor-v3"
427
+ }
428
+ };
429
+ function isPackageInstalled(pkg, nodeModulesPath) {
430
+ const pkgPath = join(nodeModulesPath, pkg);
431
+ return existsSync(pkgPath);
432
+ }
433
+ function checkDependencies(nuxt, features) {
434
+ const nodeModulesPath = join(nuxt.options.rootDir, "node_modules");
435
+ const warnings = [];
436
+ for (const [key, enabled] of Object.entries(features)) {
437
+ if (!enabled)
438
+ continue;
439
+ const group = FEATURE_GROUPS[key];
440
+ if (!group)
441
+ continue;
442
+ const missing = group.packages.filter((pkg) => !isPackageInstalled(pkg, nodeModulesPath));
443
+ if (missing.length > 0) {
444
+ warnings.push(`
445
+ ${group.name} (${group.description}):`);
446
+ warnings.push(` Missing: ${missing.join(", ")}`);
447
+ warnings.push(` Install: ${group.installCommand}`);
448
+ }
449
+ }
450
+ if (warnings.length > 0) {
451
+ consola.warn(`[abckit] Missing peer dependencies detected:${warnings.join("\n")}`);
452
+ }
453
+ }
454
+
333
455
  const module$1 = defineNuxtModule({
334
456
  meta: {
335
457
  name: "abckit",
@@ -348,13 +470,25 @@ const module$1 = defineNuxtModule({
348
470
  },
349
471
  npm: false
350
472
  },
351
- moduleDependencies: getModuleDependencies,
473
+ async moduleDependencies(nuxt) {
474
+ const deps = getModuleDependencies(nuxt);
475
+ return deps;
476
+ },
352
477
  async setup(options, nuxt) {
353
478
  const { resolve } = createResolver(import.meta.url);
354
479
  nuxt.options.abckit = defu(nuxt.options.abckit, options);
355
480
  const isEnabled = createModuleChecker(nuxt.options.abckit);
356
481
  const isSentryEnabled = isEnabled("sentry", "sentry");
357
- isEnabled("graphql", "graphql");
482
+ const isGraphqlEnabled = isEnabled("graphql", "graphql");
483
+ const isIonicEnabled = isEnabled("ionic");
484
+ if (nuxt.options.dev) {
485
+ checkDependencies(nuxt, {
486
+ core: true,
487
+ graphql: isGraphqlEnabled,
488
+ ionic: isIonicEnabled,
489
+ sentry: isSentryEnabled
490
+ });
491
+ }
358
492
  setupDevtools(nuxt);
359
493
  await setupRuntimeConfig(nuxt, options, isSentryEnabled);
360
494
  setupAppHead(nuxt);
@@ -1,34 +0,0 @@
1
- import type { Config } from './interface.js';
2
- import * as z from 'zod';
3
- declare const __VLS_export: <T extends z.ZodAny>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
- props: import("vue").PublicProps & __VLS_PrettifyLocal<{
5
- fieldName: string;
6
- required?: boolean;
7
- config?: Config<T>;
8
- schema?: z.ZodArray<T>;
9
- disabled?: boolean;
10
- }> & (typeof globalThis extends {
11
- __VLS_PROPS_FALLBACK: infer P;
12
- } ? P : {});
13
- expose: (exposed: {}) => void;
14
- attrs: any;
15
- slots: {
16
- default?: (props: import("vue").DefineProps<import("@vue/shared").LooseRequired<{
17
- fieldName: string;
18
- required?: boolean;
19
- config?: Config<T>;
20
- schema?: z.ZodArray<T>;
21
- disabled?: boolean;
22
- }>, "required" | "disabled" | (Config<T> | undefined extends boolean | undefined ? (boolean & Config<T>) | undefined extends undefined ? never : "config" : never)>) => any;
23
- };
24
- emit: {};
25
- }>) => import("vue").VNode & {
26
- __ctx?: Awaited<typeof __VLS_setup>;
27
- };
28
- declare const _default: typeof __VLS_export;
29
- export default _default;
30
- type __VLS_PrettifyLocal<T> = (T extends any ? {
31
- [K in keyof T]: T[K];
32
- } : {
33
- [K in keyof T as K]: T[K];
34
- }) & {};
@@ -1,34 +0,0 @@
1
- import type { Config } from './interface.js';
2
- import * as z from 'zod';
3
- declare const __VLS_export: <T extends z.ZodAny>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
- props: import("vue").PublicProps & __VLS_PrettifyLocal<{
5
- fieldName: string;
6
- required?: boolean;
7
- config?: Config<T>;
8
- schema?: z.ZodArray<T>;
9
- disabled?: boolean;
10
- }> & (typeof globalThis extends {
11
- __VLS_PROPS_FALLBACK: infer P;
12
- } ? P : {});
13
- expose: (exposed: {}) => void;
14
- attrs: any;
15
- slots: {
16
- default?: (props: import("vue").DefineProps<import("@vue/shared").LooseRequired<{
17
- fieldName: string;
18
- required?: boolean;
19
- config?: Config<T>;
20
- schema?: z.ZodArray<T>;
21
- disabled?: boolean;
22
- }>, "required" | "disabled" | (Config<T> | undefined extends boolean | undefined ? (boolean & Config<T>) | undefined extends undefined ? never : "config" : never)>) => any;
23
- };
24
- emit: {};
25
- }>) => import("vue").VNode & {
26
- __ctx?: Awaited<typeof __VLS_setup>;
27
- };
28
- declare const _default: typeof __VLS_export;
29
- export default _default;
30
- type __VLS_PrettifyLocal<T> = (T extends any ? {
31
- [K in keyof T]: T[K];
32
- } : {
33
- [K in keyof T as K]: T[K];
34
- }) & {};
@@ -1,34 +0,0 @@
1
- import type { ZodObject, ZodRawShape } from 'zod';
2
- import type { Config } from './interface.js';
3
- declare const __VLS_export: <T extends ZodRawShape>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
- props: import("vue").PublicProps & __VLS_PrettifyLocal<{
5
- fieldName: string;
6
- required?: boolean;
7
- config?: Config<T>;
8
- schema?: ZodObject<T>;
9
- disabled?: boolean;
10
- }> & (typeof globalThis extends {
11
- __VLS_PROPS_FALLBACK: infer P;
12
- } ? P : {});
13
- expose: (exposed: {}) => void;
14
- attrs: any;
15
- slots: {
16
- default?: (props: import("vue").DefineProps<import("@vue/shared").LooseRequired<{
17
- fieldName: string;
18
- required?: boolean;
19
- config?: Config<T>;
20
- schema?: ZodObject<T>;
21
- disabled?: boolean;
22
- }>, "required" | "disabled" | (Config<T> | undefined extends boolean | undefined ? (boolean & Config<T>) | undefined extends undefined ? never : "config" : never)>) => any;
23
- };
24
- emit: {};
25
- }>) => import("vue").VNode & {
26
- __ctx?: Awaited<typeof __VLS_setup>;
27
- };
28
- declare const _default: typeof __VLS_export;
29
- export default _default;
30
- type __VLS_PrettifyLocal<T> = (T extends any ? {
31
- [K in keyof T]: T[K];
32
- } : {
33
- [K in keyof T as K]: T[K];
34
- }) & {};
@@ -1,34 +0,0 @@
1
- import type { ZodObject, ZodRawShape } from 'zod';
2
- import type { Config } from './interface.js';
3
- declare const __VLS_export: <T extends ZodRawShape>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
- props: import("vue").PublicProps & __VLS_PrettifyLocal<{
5
- fieldName: string;
6
- required?: boolean;
7
- config?: Config<T>;
8
- schema?: ZodObject<T>;
9
- disabled?: boolean;
10
- }> & (typeof globalThis extends {
11
- __VLS_PROPS_FALLBACK: infer P;
12
- } ? P : {});
13
- expose: (exposed: {}) => void;
14
- attrs: any;
15
- slots: {
16
- default?: (props: import("vue").DefineProps<import("@vue/shared").LooseRequired<{
17
- fieldName: string;
18
- required?: boolean;
19
- config?: Config<T>;
20
- schema?: ZodObject<T>;
21
- disabled?: boolean;
22
- }>, "required" | "disabled" | (Config<T> | undefined extends boolean | undefined ? (boolean & Config<T>) | undefined extends undefined ? never : "config" : never)>) => any;
23
- };
24
- emit: {};
25
- }>) => import("vue").VNode & {
26
- __ctx?: Awaited<typeof __VLS_setup>;
27
- };
28
- declare const _default: typeof __VLS_export;
29
- export default _default;
30
- type __VLS_PrettifyLocal<T> = (T extends any ? {
31
- [K in keyof T]: T[K];
32
- } : {
33
- [K in keyof T as K]: T[K];
34
- }) & {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "abckit",
3
3
  "type": "module",
4
- "version": "0.0.45",
4
+ "version": "0.0.49",
5
5
  "description": "Nuxt 4 module — UI components, auth, storage, GraphQL",
6
6
  "author": "productdevbook",
7
7
  "license": "MIT",
@@ -28,9 +28,6 @@
28
28
  ],
29
29
  "private": false,
30
30
  "sideEffects": false,
31
- "workspaces": [
32
- "playground/*"
33
- ],
34
31
  "exports": {
35
32
  ".": {
36
33
  "types": "./dist/module.d.mts",
@@ -72,6 +69,13 @@
72
69
  "dist"
73
70
  ],
74
71
  "dependencies": {
72
+ "class-variance-authority": "^0.7.1",
73
+ "clsx": "^2.1.1",
74
+ "consola": "^3.4.2",
75
+ "defu": "^6.1.4",
76
+ "tailwind-merge": "^3.4.0"
77
+ },
78
+ "peerDependencies": {
75
79
  "@better-auth/oauth-provider": "^1.4.12",
76
80
  "@capacitor/android": "^8.0.1",
77
81
  "@capacitor/app": "^8.0.0",
@@ -116,12 +120,8 @@
116
120
  "aws4fetch": "^1.0.20",
117
121
  "better-auth": "^1.4.12",
118
122
  "capacitor-native-settings": "^7.0.2",
119
- "class-variance-authority": "^0.7.1",
120
- "clsx": "^2.1.1",
121
- "consola": "^3.4.2",
122
123
  "dataloader": "^2.2.3",
123
124
  "date-fns": "^4.1.0",
124
- "defu": "^6.1.4",
125
125
  "drizzle-kit": "^0.31.8",
126
126
  "drizzle-orm": "^0.45.1",
127
127
  "drizzle-zod": "^0.8.3",
@@ -132,27 +132,158 @@
132
132
  "graphql-yoga": "^5.18.0",
133
133
  "ioredis": "^5.9.1",
134
134
  "md-editor-v3": "^6.3.1",
135
- "nitro": "https://pkg.pr.new/nitrojs/nitro@99691fc",
136
135
  "nitro-graphql": "^2.0.0-beta.65",
137
136
  "notivue": "^2.4.5",
137
+ "ofetch": "^2.0.0-alpha.3",
138
138
  "pg": "^8.16.3",
139
139
  "pinia": "^3.0.4",
140
140
  "pinia-plugin-persistedstate": "^4.7.1",
141
141
  "reka-ui": "^2.7.0",
142
- "tailwind-merge": "^3.4.0",
143
142
  "tailwindcss": "^4.1.18",
144
143
  "tw-animate-css": "^1.4.0",
145
144
  "unstorage": "^2.0.0-alpha.5",
146
145
  "uuid": "^13.0.0",
147
146
  "vaul-vue": "^0.4.1",
148
147
  "vee-validate": "5.0.0-beta.0",
149
- "vite-tsconfig-paths": "^6.0.4",
150
148
  "vue-input-otp": "^0.3.2",
151
149
  "vue-router": "^4.6.4",
152
150
  "vue-sonner": "^2.0.9",
153
- "vue-tsc": "^3.2.2",
154
151
  "zod": "^4.3.5"
155
152
  },
153
+ "peerDependenciesMeta": {
154
+ "@better-auth/oauth-provider": {
155
+ "optional": true
156
+ },
157
+ "@capacitor/android": {
158
+ "optional": true
159
+ },
160
+ "@capacitor/app": {
161
+ "optional": true
162
+ },
163
+ "@capacitor/browser": {
164
+ "optional": true
165
+ },
166
+ "@capacitor/cli": {
167
+ "optional": true
168
+ },
169
+ "@capacitor/core": {
170
+ "optional": true
171
+ },
172
+ "@capacitor/device": {
173
+ "optional": true
174
+ },
175
+ "@capacitor/geolocation": {
176
+ "optional": true
177
+ },
178
+ "@capacitor/haptics": {
179
+ "optional": true
180
+ },
181
+ "@capacitor/ios": {
182
+ "optional": true
183
+ },
184
+ "@capacitor/network": {
185
+ "optional": true
186
+ },
187
+ "@capacitor/preferences": {
188
+ "optional": true
189
+ },
190
+ "@capacitor/push-notifications": {
191
+ "optional": true
192
+ },
193
+ "@capacitor/splash-screen": {
194
+ "optional": true
195
+ },
196
+ "@capacitor/status-bar": {
197
+ "optional": true
198
+ },
199
+ "@capgo/capacitor-social-login": {
200
+ "optional": true
201
+ },
202
+ "@graphql-tools/utils": {
203
+ "optional": true
204
+ },
205
+ "@ionic/vue": {
206
+ "optional": true
207
+ },
208
+ "@nuxtjs/i18n": {
209
+ "optional": true
210
+ },
211
+ "@nuxtjs/ionic": {
212
+ "optional": true
213
+ },
214
+ "@openfga/sdk": {
215
+ "optional": true
216
+ },
217
+ "@polar-sh/sdk": {
218
+ "optional": true
219
+ },
220
+ "@sentry/nuxt": {
221
+ "optional": true
222
+ },
223
+ "@tailwindcss/typography": {
224
+ "optional": true
225
+ },
226
+ "@tanstack/vue-table": {
227
+ "optional": true
228
+ },
229
+ "@unovis/vue": {
230
+ "optional": true
231
+ },
232
+ "@vueuse/router": {
233
+ "optional": true
234
+ },
235
+ "@vueuse/sound": {
236
+ "optional": true
237
+ },
238
+ "apiful": {
239
+ "optional": true
240
+ },
241
+ "aws4fetch": {
242
+ "optional": true
243
+ },
244
+ "capacitor-native-settings": {
245
+ "optional": true
246
+ },
247
+ "dataloader": {
248
+ "optional": true
249
+ },
250
+ "drizzle-kit": {
251
+ "optional": true
252
+ },
253
+ "drizzle-orm": {
254
+ "optional": true
255
+ },
256
+ "drizzle-zod": {
257
+ "optional": true
258
+ },
259
+ "graphql": {
260
+ "optional": true
261
+ },
262
+ "graphql-config": {
263
+ "optional": true
264
+ },
265
+ "graphql-scalars": {
266
+ "optional": true
267
+ },
268
+ "graphql-yoga": {
269
+ "optional": true
270
+ },
271
+ "ioredis": {
272
+ "optional": true
273
+ },
274
+ "md-editor-v3": {
275
+ "optional": true
276
+ },
277
+ "nitro-graphql": {
278
+ "optional": true
279
+ },
280
+ "pg": {
281
+ "optional": true
282
+ },
283
+ "unstorage": {
284
+ "optional": true
285
+ }
286
+ },
156
287
  "devDependencies": {
157
288
  "@antfu/eslint-config": "^7.0.0",
158
289
  "@nuxt/eslint": "latest",
@@ -162,11 +293,14 @@
162
293
  "@types/node": "^25.0.8",
163
294
  "@types/pg": "^8.16.0",
164
295
  "eslint": "^9.39.2",
296
+ "nitro": "https://pkg.pr.new/nitrojs/nitro@99691fc",
165
297
  "nuxt": "https://pkg.pr.new/nuxt@33005",
166
298
  "rolldown": "1.0.0-beta.60",
167
299
  "shadcn-vue": "^2.4.3",
168
300
  "typescript": "^5.9.3",
169
- "vue": "^3.5.26"
301
+ "vite-tsconfig-paths": "^6.0.4",
302
+ "vue": "^3.5.26",
303
+ "vue-tsc": "^3.2.2"
170
304
  },
171
305
  "resolutions": {
172
306
  "abckit": "workspace:*"