nuxt-feathers-zod 0.1.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 (95) hide show
  1. package/README.md +283 -0
  2. package/dist/module.d.mts +17 -0
  3. package/dist/module.json +12 -0
  4. package/dist/module.mjs +124 -0
  5. package/dist/runtime/adapters/ofetch.d.ts +5 -0
  6. package/dist/runtime/adapters/ofetch.js +18 -0
  7. package/dist/runtime/composables/feathers.d.ts +5 -0
  8. package/dist/runtime/composables/feathers.js +9 -0
  9. package/dist/runtime/composables/pinia.d.ts +1 -0
  10. package/dist/runtime/composables/pinia.js +11 -0
  11. package/dist/runtime/errors.d.ts +3 -0
  12. package/dist/runtime/errors.js +5 -0
  13. package/dist/runtime/options/authentication/client.d.ts +13 -0
  14. package/dist/runtime/options/authentication/client.js +12 -0
  15. package/dist/runtime/options/authentication/index.d.ts +42 -0
  16. package/dist/runtime/options/authentication/index.js +71 -0
  17. package/dist/runtime/options/authentication/jwt-types.d.ts +29 -0
  18. package/dist/runtime/options/authentication/jwt-types.js +0 -0
  19. package/dist/runtime/options/authentication/jwt.d.ts +7 -0
  20. package/dist/runtime/options/authentication/jwt.js +19 -0
  21. package/dist/runtime/options/authentication/local.d.ts +8 -0
  22. package/dist/runtime/options/authentication/local.js +8 -0
  23. package/dist/runtime/options/client/index.d.ts +14 -0
  24. package/dist/runtime/options/client/index.js +33 -0
  25. package/dist/runtime/options/client/pinia.d.ts +14 -0
  26. package/dist/runtime/options/client/pinia.js +22 -0
  27. package/dist/runtime/options/database/index.d.ts +6 -0
  28. package/dist/runtime/options/database/index.js +8 -0
  29. package/dist/runtime/options/database/mongodb.d.ts +12 -0
  30. package/dist/runtime/options/database/mongodb.js +3 -0
  31. package/dist/runtime/options/index.d.ts +44 -0
  32. package/dist/runtime/options/index.js +63 -0
  33. package/dist/runtime/options/plugins.d.ts +20 -0
  34. package/dist/runtime/options/plugins.js +69 -0
  35. package/dist/runtime/options/server.d.ts +7 -0
  36. package/dist/runtime/options/server.js +11 -0
  37. package/dist/runtime/options/services.d.ts +6 -0
  38. package/dist/runtime/options/services.js +13 -0
  39. package/dist/runtime/options/transports/index.d.ts +23 -0
  40. package/dist/runtime/options/transports/index.js +14 -0
  41. package/dist/runtime/options/transports/rest.d.ts +9 -0
  42. package/dist/runtime/options/transports/rest.js +22 -0
  43. package/dist/runtime/options/transports/utils.d.ts +1 -0
  44. package/dist/runtime/options/transports/utils.js +7 -0
  45. package/dist/runtime/options/transports/websocket.d.ts +8 -0
  46. package/dist/runtime/options/transports/websocket.js +17 -0
  47. package/dist/runtime/options/utils.d.ts +11 -0
  48. package/dist/runtime/options/utils.js +22 -0
  49. package/dist/runtime/options/validator.d.ts +13 -0
  50. package/dist/runtime/options/validator.js +29 -0
  51. package/dist/runtime/plugins/feathers-auth.d.ts +11 -0
  52. package/dist/runtime/plugins/feathers-auth.js +13 -0
  53. package/dist/runtime/server/tsconfig.json +3 -0
  54. package/dist/runtime/services.d.ts +4 -0
  55. package/dist/runtime/services.js +14 -0
  56. package/dist/runtime/stores/auth.d.ts +28 -0
  57. package/dist/runtime/stores/auth.js +47 -0
  58. package/dist/runtime/templates/client/authentication.d.ts +2 -0
  59. package/dist/runtime/templates/client/authentication.js +28 -0
  60. package/dist/runtime/templates/client/client.d.ts +2 -0
  61. package/dist/runtime/templates/client/client.js +50 -0
  62. package/dist/runtime/templates/client/connection.d.ts +3 -0
  63. package/dist/runtime/templates/client/connection.js +39 -0
  64. package/dist/runtime/templates/client/index.d.ts +4 -0
  65. package/dist/runtime/templates/client/index.js +33 -0
  66. package/dist/runtime/templates/client/plugin.d.ts +2 -0
  67. package/dist/runtime/templates/client/plugin.js +81 -0
  68. package/dist/runtime/templates/server/authentication.d.ts +2 -0
  69. package/dist/runtime/templates/server/authentication.js +32 -0
  70. package/dist/runtime/templates/server/index.d.ts +3 -0
  71. package/dist/runtime/templates/server/index.js +33 -0
  72. package/dist/runtime/templates/server/mongodb.d.ts +2 -0
  73. package/dist/runtime/templates/server/mongodb.js +26 -0
  74. package/dist/runtime/templates/server/plugin.d.ts +2 -0
  75. package/dist/runtime/templates/server/plugin.js +110 -0
  76. package/dist/runtime/templates/server/server.d.ts +2 -0
  77. package/dist/runtime/templates/server/server.js +61 -0
  78. package/dist/runtime/templates/server/validators.d.ts +2 -0
  79. package/dist/runtime/templates/server/validators.js +30 -0
  80. package/dist/runtime/templates/types.d.ts +6 -0
  81. package/dist/runtime/templates/types.js +0 -0
  82. package/dist/runtime/templates/utils.d.ts +4 -0
  83. package/dist/runtime/templates/utils.js +6 -0
  84. package/dist/runtime/zod/format.d.ts +10 -0
  85. package/dist/runtime/zod/format.js +7 -0
  86. package/dist/runtime/zod/index.d.ts +4 -0
  87. package/dist/runtime/zod/index.js +4 -0
  88. package/dist/runtime/zod/objectId.d.ts +9 -0
  89. package/dist/runtime/zod/objectId.js +17 -0
  90. package/dist/runtime/zod/query.d.ts +43 -0
  91. package/dist/runtime/zod/query.js +75 -0
  92. package/dist/runtime/zod/validators.d.ts +17 -0
  93. package/dist/runtime/zod/validators.js +46 -0
  94. package/dist/types.d.mts +7 -0
  95. package/package.json +111 -0
@@ -0,0 +1,30 @@
1
+ import { put } from "../utils.js";
2
+ export function getServerValidatorContents(options) {
3
+ return () => {
4
+ const formats = options?.validator?.formats;
5
+ const mongo = !!options?.database?.mongo;
6
+ return `// ! Generated by nuxt-feathers-zod - do not change manually
7
+ // For more information about this file see https://dove.feathersjs.com/guides/cli/validators.html
8
+
9
+ ${put(mongo, `import { keywordObjectId } from '@feathersjs/mongodb'`)}
10
+ import type { FormatsPluginOptions } from '@feathersjs/schema'
11
+ import { addFormats, Ajv } from '@feathersjs/schema'
12
+
13
+ const formats: FormatsPluginOptions = [
14
+ '${formats?.join(`',
15
+ '`)}'
16
+ ]
17
+
18
+ export const dataValidator: Ajv = addFormats(new Ajv({}), formats)
19
+
20
+ export const queryValidator: Ajv = addFormats(
21
+ new Ajv({
22
+ coerceTypes: true,
23
+ }),
24
+ formats,
25
+ )
26
+ ${put(mongo, `
27
+ dataValidator.addKeyword(keywordObjectId)
28
+ queryValidator.addKeyword(keywordObjectId)`)}`;
29
+ };
30
+ }
@@ -0,0 +1,6 @@
1
+ import type { NuxtTemplate } from 'nuxt/schema';
2
+ import type { ModuleConfig } from '../options/index.js';
3
+ export type GetContentsType = Required<NuxtTemplate<ModuleConfig>>['getContents'];
4
+ export type GetContentsDataType = Parameters<GetContentsType>[0];
5
+ export type Template = Required<Pick<NuxtTemplate, 'filename' | 'getContents' | 'write'>>;
6
+ export type Templates = Array<Template>;
File without changes
@@ -0,0 +1,4 @@
1
+ type putData = [expr: any, content: string, def?: string];
2
+ export declare function put(expr: any, content: string, def?: string): string;
3
+ export declare function puts(puts: putData[]): string;
4
+ export {};
@@ -0,0 +1,6 @@
1
+ export function put(expr, content, def = "") {
2
+ return expr ? content : def;
3
+ }
4
+ export function puts(puts2) {
5
+ return puts2.map((p) => put(p[0], p[1], p?.[2])).filter(Boolean).join("\n");
6
+ }
@@ -0,0 +1,10 @@
1
+ import type { ZodError } from 'zod';
2
+ export interface ZodIssueItem {
3
+ path: string;
4
+ code: string;
5
+ message: string;
6
+ }
7
+ /**
8
+ * Formats Zod issues into a stable, UI-friendly structure.
9
+ */
10
+ export declare function formatZodIssues(err: ZodError): ZodIssueItem[];
@@ -0,0 +1,7 @@
1
+ export function formatZodIssues(err) {
2
+ return err.issues.map((i) => ({
3
+ path: i.path.length ? i.path.join(".") : "",
4
+ code: i.code,
5
+ message: i.message
6
+ }));
7
+ }
@@ -0,0 +1,4 @@
1
+ export { formatZodIssues } from './format.js';
2
+ export { objectIdSchema } from './objectId.js';
3
+ export { queryPropertiesShape, queryProperty, sortDefinition, zodQuerySyntax } from './query.js';
4
+ export { getZodValidator } from './validators.js';
@@ -0,0 +1,4 @@
1
+ export { formatZodIssues } from "./format.js";
2
+ export { objectIdSchema } from "./objectId.js";
3
+ export { queryPropertiesShape, queryProperty, sortDefinition, zodQuerySyntax } from "./query.js";
4
+ export { getZodValidator } from "./validators.js";
@@ -0,0 +1,9 @@
1
+ import { ObjectId } from 'mongodb';
2
+ import { z } from 'zod';
3
+ /**
4
+ * MongoDB ObjectId schema that accepts:
5
+ * - ObjectId instances
6
+ * - 24-hex strings (converted to ObjectId)
7
+ * - undefined (optional)
8
+ */
9
+ export declare function objectIdSchema(): z.ZodUnion<[z.ZodOptional<z.ZodType<ObjectId, z.ZodTypeDef, ObjectId>>, z.ZodEffects<z.ZodString, ObjectId, string>]>;
@@ -0,0 +1,17 @@
1
+ import { ObjectId } from "mongodb";
2
+ import { z } from "zod";
3
+ export function objectIdSchema() {
4
+ return z.instanceof(ObjectId).optional().or(
5
+ z.string().transform((input, ctx) => {
6
+ try {
7
+ return ObjectId.createFromHexString(input);
8
+ } catch (err) {
9
+ ctx.addIssue({
10
+ code: z.ZodIssueCode.custom,
11
+ message: err?.message ?? "Invalid ObjectId"
12
+ });
13
+ return z.NEVER;
14
+ }
15
+ })
16
+ );
17
+ }
@@ -0,0 +1,43 @@
1
+ import { z, type ZodRawShape, type ZodTypeAny } from 'zod';
2
+ type KeysOf<Shape extends ZodRawShape> = Extract<keyof Shape, string>;
3
+ export declare function sortDefinition<Shape extends ZodRawShape>(shape: Shape): z.ZodObject<Record<string, z.ZodTypeAny>, "strict", z.ZodTypeAny, {
4
+ [x: string]: any;
5
+ }, {
6
+ [x: string]: any;
7
+ }>;
8
+ export declare function queryProperty<T extends ZodTypeAny, X extends Record<string, ZodTypeAny> = {}>(prop: T, extension?: X): z.ZodUnion<[z.ZodOptional<z.ZodNullable<T>>, z.ZodObject<{
9
+ $ne: z.ZodOptional<z.ZodOptional<z.ZodNullable<T>>>;
10
+ $gt: z.ZodOptional<z.ZodOptional<T>>;
11
+ $gte: z.ZodOptional<z.ZodOptional<T>>;
12
+ $lt: z.ZodOptional<z.ZodOptional<T>>;
13
+ $lte: z.ZodOptional<z.ZodOptional<T>>;
14
+ $in: z.ZodOptional<z.ZodArray<z.ZodOptional<z.ZodNullable<T>>, "many">>;
15
+ $nin: z.ZodOptional<z.ZodArray<z.ZodOptional<z.ZodNullable<T>>, "many">>;
16
+ } & X, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
17
+ $ne: z.ZodOptional<z.ZodOptional<z.ZodNullable<T>>>;
18
+ $gt: z.ZodOptional<z.ZodOptional<T>>;
19
+ $gte: z.ZodOptional<z.ZodOptional<T>>;
20
+ $lt: z.ZodOptional<z.ZodOptional<T>>;
21
+ $lte: z.ZodOptional<z.ZodOptional<T>>;
22
+ $in: z.ZodOptional<z.ZodArray<z.ZodOptional<z.ZodNullable<T>>, "many">>;
23
+ $nin: z.ZodOptional<z.ZodArray<z.ZodOptional<z.ZodNullable<T>>, "many">>;
24
+ } & X>, any> extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never, z.baseObjectInputType<{
25
+ $ne: z.ZodOptional<z.ZodOptional<z.ZodNullable<T>>>;
26
+ $gt: z.ZodOptional<z.ZodOptional<T>>;
27
+ $gte: z.ZodOptional<z.ZodOptional<T>>;
28
+ $lt: z.ZodOptional<z.ZodOptional<T>>;
29
+ $lte: z.ZodOptional<z.ZodOptional<T>>;
30
+ $in: z.ZodOptional<z.ZodArray<z.ZodOptional<z.ZodNullable<T>>, "many">>;
31
+ $nin: z.ZodOptional<z.ZodArray<z.ZodOptional<z.ZodNullable<T>>, "many">>;
32
+ } & X> extends infer T_2 ? { [k_1 in keyof T_2]: T_2[k_1]; } : never>]>;
33
+ export declare function queryPropertiesShape<Shape extends ZodRawShape, X extends Partial<Record<KeysOf<Shape>, Record<string, ZodTypeAny>>> = {}>(shape: Shape, extensions?: X): Record<Extract<keyof Shape, string>, z.ZodTypeAny>;
34
+ /**
35
+ * Zod equivalent of @feathersjs/typebox querySyntax():
36
+ * - $select, $sort, $limit, $skip
37
+ * - field filters with operator objects ($gt/$in/...)
38
+ * - $and / $or (recursive)
39
+ *
40
+ * Extensions allow adding per-field custom operators (e.g. $regex for strings).
41
+ */
42
+ export declare function zodQuerySyntax<Schema extends z.AnyZodObject, Shape extends Schema['shape'], X extends Partial<Record<KeysOf<Shape>, Record<string, ZodTypeAny>>> = {}>(schema: Schema, extensions?: X): z.ZodTypeAny;
43
+ export {};
@@ -0,0 +1,75 @@
1
+ import { z } from "zod";
2
+ const order = z.union([z.literal(1), z.literal(-1)]);
3
+ function coerceNumber() {
4
+ return z.preprocess((v) => {
5
+ if (typeof v === "string" && v.trim() !== "")
6
+ return Number(v);
7
+ return v;
8
+ }, z.number());
9
+ }
10
+ function coerceStringArrayFromCsv() {
11
+ return z.preprocess((v) => {
12
+ if (typeof v === "string") {
13
+ return v.split(",").map((s) => s.trim()).filter(Boolean);
14
+ }
15
+ return v;
16
+ }, z.array(z.string()));
17
+ }
18
+ export function sortDefinition(shape) {
19
+ const properties = Object.keys(shape).reduce((acc, key) => {
20
+ ;
21
+ acc[key] = order.optional();
22
+ return acc;
23
+ }, {});
24
+ return z.object(properties).strict();
25
+ }
26
+ function arrayOfKeys(shape) {
27
+ const keys = Object.keys(shape);
28
+ return z.enum(keys).array();
29
+ }
30
+ export function queryProperty(prop, extension = {}) {
31
+ const nullishProp = prop.nullish();
32
+ const propOptional = prop.optional();
33
+ return z.union([
34
+ // Direct equality (supports null/undefined if the base schema allows it)
35
+ nullishProp,
36
+ // Operator object
37
+ z.object({
38
+ $ne: nullishProp.optional(),
39
+ $gt: propOptional.optional(),
40
+ $gte: propOptional.optional(),
41
+ $lt: propOptional.optional(),
42
+ $lte: propOptional.optional(),
43
+ $in: z.array(nullishProp).optional(),
44
+ $nin: z.array(nullishProp).optional(),
45
+ ...extension
46
+ }).strict()
47
+ ]);
48
+ }
49
+ export function queryPropertiesShape(shape, extensions = {}) {
50
+ const keys = Object.keys(shape);
51
+ return keys.reduce((acc, key) => {
52
+ ;
53
+ acc[key] = queryProperty(shape[key], extensions[key]).optional();
54
+ return acc;
55
+ }, {});
56
+ }
57
+ export function zodQuerySyntax(schema, extensions = {}) {
58
+ const shape = schema.shape;
59
+ const keys = Object.keys(shape);
60
+ const properties = queryPropertiesShape(shape, extensions);
61
+ const baseQuery = z.object({
62
+ $select: z.union([arrayOfKeys(shape), coerceStringArrayFromCsv().pipe(z.array(z.enum(keys)))]).optional(),
63
+ $sort: sortDefinition(shape).optional(),
64
+ $limit: coerceNumber().pipe(z.number().min(-1)).optional(),
65
+ $skip: coerceNumber().pipe(z.number().min(0)).optional(),
66
+ ...properties
67
+ }).strict();
68
+ const query = z.lazy(
69
+ () => baseQuery.extend({
70
+ $or: z.array(query).optional(),
71
+ $and: z.array(query).optional()
72
+ }).strict()
73
+ );
74
+ return query;
75
+ }
@@ -0,0 +1,17 @@
1
+ import type { Validator } from '@feathersjs/schema';
2
+ import type { ZodTypeAny } from 'zod';
3
+ export type ValidatorKind = 'data' | 'query';
4
+ export interface ZodValidatorOptions {
5
+ kind?: ValidatorKind;
6
+ message?: string;
7
+ useSafeParse?: boolean;
8
+ }
9
+ /**
10
+ * Feathers Schema-compatible validator based on Zod.
11
+ *
12
+ * Notes:
13
+ * - Accepts the extra 3rd argument (ResolverStatus) expected by @feathersjs/schema types.
14
+ * - Marks the validated object with VALIDATED (adapter-commons) to avoid re-validating in adapters.
15
+ * - Supports array data payloads (createMany).
16
+ */
17
+ export declare function getZodValidator<T extends ZodTypeAny>(schema: T, opts?: ZodValidatorOptions): Validator;
@@ -0,0 +1,46 @@
1
+ import { VALIDATED } from "@feathersjs/adapter-commons";
2
+ import { BadRequest } from "@feathersjs/errors";
3
+ import { ZodError } from "zod";
4
+ import { formatZodIssues } from "./format.js";
5
+ export function getZodValidator(schema, opts = {}) {
6
+ const kind = opts.kind ?? "data";
7
+ const message = opts.message ?? (kind === "query" ? "Invalid query" : "Invalid data");
8
+ const useSafeParse = opts.useSafeParse ?? true;
9
+ const validator = (async (value, context, _status) => {
10
+ try {
11
+ const parseOne = async (v) => {
12
+ if (useSafeParse) {
13
+ const res = schema.safeParse(v);
14
+ if (!res.success) {
15
+ throw new BadRequest(message, {
16
+ errors: formatZodIssues(res.error),
17
+ issues: res.error.issues,
18
+ kind,
19
+ path: context?.path,
20
+ method: context?.method
21
+ });
22
+ }
23
+ return res.data;
24
+ }
25
+ return schema.parse(v);
26
+ };
27
+ const parsed = kind === "data" && Array.isArray(value) ? await Promise.all(value.map(parseOne)) : await parseOne(value);
28
+ Object.defineProperty(parsed, VALIDATED, { value: true });
29
+ return parsed;
30
+ } catch (err) {
31
+ if (err instanceof BadRequest)
32
+ throw err;
33
+ if (err instanceof ZodError) {
34
+ throw new BadRequest(message, {
35
+ errors: formatZodIssues(err),
36
+ issues: err.issues,
37
+ kind,
38
+ path: context?.path,
39
+ method: context?.method
40
+ });
41
+ }
42
+ throw err;
43
+ }
44
+ });
45
+ return validator;
46
+ }
@@ -0,0 +1,7 @@
1
+ import type { NuxtModule } from '@nuxt/schema'
2
+
3
+ import type { default as Module } from './module.mjs'
4
+
5
+ export type ModuleOptions = typeof Module extends NuxtModule<infer O> ? Partial<O> : Record<string, any>
6
+
7
+ export { default } from './module.mjs'
package/package.json ADDED
@@ -0,0 +1,111 @@
1
+ {
2
+ "name": "nuxt-feathers-zod",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "packageManager": "bun@1.3.6",
6
+ "description": "Feathers API integration for Nuxt",
7
+ "author": "Herve de CHAVIGNY",
8
+ "license": "MIT",
9
+ "repository": {
10
+ "type": "github",
11
+ "url": "git+ssh://git@github.com/vevedh/nuxt-feathers-zod.git"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/types.d.mts",
16
+ "import": "./dist/module.mjs"
17
+ },
18
+ "./options": "./dist/runtime/options/index.js",
19
+ "./ofetch-adapter": "./dist/runtime/adapters/ofetch.js",
20
+ "./validators": "./dist/runtime/zod/validators.js",
21
+ "./query": "./dist/runtime/zod/query.js",
22
+ "./format": "./dist/runtime/zod/format.js"
23
+ },
24
+ "main": "./dist/module.mjs",
25
+ "typesVersions": {
26
+ "*": {
27
+ ".": ["./dist/types.d.mts"],
28
+ "options": ["./dist/runtime/options/index.d.mts"],
29
+ "ofetch-adapter": ["./dist/runtime/adapters/ofetch.d.mts"]
30
+ }
31
+ },
32
+ "files": ["dist"],
33
+ "scripts": {
34
+ "prepack": "nuxt-module-build build",
35
+ "dev": "nuxi dev playground",
36
+ "build": "nuxi build playground",
37
+ "prepare": "nuxt-module-build prepare && nuxt-module-build build",
38
+ "lint": "eslint . && nr -r lint",
39
+ "lint:fix": "eslint . --fix && nr -r lint:fix",
40
+ "publish:npm": "bun run prepack && bun publish --access public",
41
+ "release": "bunx release-it",
42
+ "release:patch": "bunx release-it patch",
43
+ "release:minor": "bunx release-it minor",
44
+ "release:major": "bunx release-it major"
45
+ },
46
+ "peerDependencies": {
47
+ "nuxt": "^4.0.0"
48
+ },
49
+ "dependencies": {
50
+ "@feathersjs/adapter-commons": "latest",
51
+ "@feathersjs/authentication": "latest",
52
+ "@feathersjs/authentication-client": "latest",
53
+ "@feathersjs/authentication-local": "latest",
54
+ "@feathersjs/configuration": "latest",
55
+ "@feathersjs/errors": "^5.0.37",
56
+ "@feathersjs/feathers": "latest",
57
+ "@feathersjs/generators": "latest",
58
+ "@feathersjs/koa": "^5.0.37",
59
+ "@feathersjs/memory": "latest",
60
+ "@feathersjs/mongodb": "latest",
61
+ "@feathersjs/rest-client": "latest",
62
+ "@feathersjs/schema": "^5.0.37",
63
+ "@feathersjs/socketio-client": "latest",
64
+ "@gabortorma/feathers-nitro-adapter": "latest",
65
+ "@nuxt/kit": "latest",
66
+ "@pinia/nuxt": "latest",
67
+ "ajv-formats": "^3.0.1",
68
+ "change-case": "latest",
69
+ "consola": "latest",
70
+ "defu": "latest",
71
+ "feathers-pinia": "latest",
72
+ "mongodb": "^6.21.0",
73
+ "pinia": "latest",
74
+ "socket.io-client": "latest",
75
+ "unimport": "^3.14.6",
76
+ "zod": "^3.25.76"
77
+ },
78
+ "devDependencies": {
79
+ "@antfu/ni": "latest",
80
+ "@gabortorma/antfu-eslint-config": "^1.7.4",
81
+ "@gabortorma/mwm": "latest",
82
+ "@gabortorma/nuxt-eslint-layer": "latest",
83
+ "@nuxt/devtools": "latest",
84
+ "@nuxt/module-builder": "latest",
85
+ "@nuxt/schema": "latest",
86
+ "@nuxt/test-utils": "latest",
87
+ "@playwright/test": "latest",
88
+ "@types/node": "latest",
89
+ "dotenv-cli": "latest",
90
+ "eslint": "^9.39.2",
91
+ "nuxt": "^4.3.0",
92
+ "nuxt-mcp": "latest",
93
+ "release-it": "latest",
94
+ "typescript": "latest",
95
+ "vitest": "latest",
96
+ "vitest-mongodb": "latest",
97
+ "vue": "latest",
98
+ "vue-router": "latest"
99
+ },
100
+ "overrides": {
101
+ "@feathersjs/authentication": "5.0.37",
102
+ "@feathersjs/authentication-client": "5.0.37",
103
+ "@feathersjs/authentication-local": "5.0.37",
104
+ "@feathersjs/errors": "5.0.37",
105
+ "@feathersjs/feathers": "5.0.37",
106
+ "@feathersjs/koa": "5.0.37",
107
+ "@feathersjs/rest-client": "5.0.37",
108
+ "@feathersjs/schema": "5.0.37",
109
+ "@feathersjs/socketio-client": "5.0.37"
110
+ }
111
+ }