@regle/nuxt 1.2.0-beta.1 → 1.2.0-beta.3

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/README.md CHANGED
@@ -5,36 +5,30 @@
5
5
  # Regle
6
6
 
7
7
 
8
- Regle \ʁɛɡl\ (French word for 'rule' ) is a Typescript-first model-based validation library for Vue 3.
8
+ Regle \ʁɛɡl\ (French word for 'rule') is a Typescript-first model-based validation library for Vue 3.
9
9
  It's heavily inspired by Vuelidate.
10
10
 
11
11
 
12
- # 📚 Documentation
13
-
14
- [![Documentation](https://raw.githubusercontent.com/victorgarciaesgi/regle/refs/heads/main/.github/images/redirectDoc.svg)](https://reglejs.dev/)
15
-
16
-
17
- ## Quick Setup
18
-
19
- Install the module to your Nuxt application with one command:
20
-
21
- ```bash
22
- npx nuxi module add regle
23
- ```
12
+ ## 📚 Documentation
24
13
 
14
+ [![Documentation](https://raw.githubusercontent.com/victorgarciaesgi/regle/refs/heads/main/.github/images/redirectDoc.svg)](https://reglejs.dev/)
25
15
 
26
16
  ## 🎮 Play with it
27
17
 
28
- | Simple demo | Advanced Demo |
29
- | ------------- | ------------- |
30
- | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-example) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/advanced-example?file=examples/advanced-example/src/App.vue&configPath=examples/advanced-example) |
18
+ | Playground | Simple demo | Advanced Demo |
19
+ | ------------- | ------------- | ------------- |
20
+ | <a target='_blank' href="https://play.reglejs.dev"><img width="180" src="https://raw.githubusercontent.com/victorgarciaesgi/regle/refs/heads/main/.github/images/regle-playground-button.svg" /></a> | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-example) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/advanced-example?file=examples/advanced-example/src/App.vue&configPath=examples/advanced-example) |
31
21
 
32
22
  ## 🧰 Features
33
- - ✅ 100% type inference
34
- - 📖 Model based validation
35
- - 🛒 Collection validation
36
- - 🪗 Extensible
37
- - 🦸‍♂️ [Zod](https://zod.dev/) support
38
- - 🤖 [Valibot](https://valibot.dev/) support
39
- - 🪶 Light(~7kb gzip) and 0 dependencies
40
23
 
24
+ - ☁️ Headless
25
+ - ✅ Type safety
26
+ - 🧮 Model based
27
+ - 🧰 Modular
28
+ - 🔄 Async validation
29
+ - 🌐 Plug any i18n library
30
+ - 📗 Vuelidate compatible API
31
+ - Standard Schemas spec support
32
+ - 🦸‍♂️ [Zod](https://zod.dev/)
33
+ - 🤖 [Valibot](https://valibot.dev/)
34
+ - 🚢 [ArkType](https://arktype.io) 🚧
package/dist/module.d.mts CHANGED
@@ -1,6 +1,10 @@
1
1
  import * as _nuxt_schema from '@nuxt/schema';
2
2
 
3
3
  interface ModuleOptions {
4
+ /**
5
+ * Path to your setupFile, it needs to return a useRegle composable
6
+ */
7
+ setupFile: string;
4
8
  }
5
9
  declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
6
10
 
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "regle",
3
3
  "configKey": "regle",
4
- "version": "1.2.0-beta.1",
4
+ "version": "1.2.0-beta.3",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.1",
7
7
  "unbuild": "3.5.0"
package/dist/module.mjs CHANGED
@@ -1,4 +1,5 @@
1
- import { defineNuxtModule, addImportsSources } from '@nuxt/kit';
1
+ import { defineNuxtModule, createResolver, resolvePath, addTemplate, addImports, addImportsSources } from '@nuxt/kit';
2
+ import path from 'path';
2
3
 
3
4
  const module = defineNuxtModule({
4
5
  meta: {
@@ -6,34 +7,75 @@ const module = defineNuxtModule({
6
7
  configKey: "regle"
7
8
  },
8
9
  defaults: {},
9
- async setup(_options, _nuxt) {
10
- addImportsSources({
11
- from: "@regle/core",
12
- imports: [
13
- "useRegle",
14
- "createRule",
15
- "defineRegleConfig",
16
- "inferRules",
17
- "extendRegleConfig",
18
- "createVariant",
19
- "narrowVariant",
20
- "useScopedRegle",
21
- "useCollectScope"
22
- ]
23
- });
24
- addImportsSources({
25
- from: "@regle/rules",
26
- imports: ["withAsync", "withMessage", "withParams", "withTooltip"]
27
- });
28
- try {
29
- const regleSchema = await import('@regle/schemas');
30
- if (regleSchema) {
31
- addImportsSources({
32
- from: "@regle/schemas",
33
- imports: ["useRegleSchema", "inferSchema", "withDeps", "defineRegleSchemaConfig"]
34
- });
10
+ async setup(options, nuxt) {
11
+ const { resolve } = createResolver(import.meta.url);
12
+ if (options.setupFile) {
13
+ try {
14
+ const setupFilePath = await resolvePath(options.setupFile);
15
+ if (setupFilePath) {
16
+ const dotNuxtFolder = resolve(`${nuxt.options.rootDir}/.nuxt`);
17
+ const relativePath = path.relative(dotNuxtFolder, setupFilePath);
18
+ const setupFilePathWithoutExtension = path.join(
19
+ path.dirname(relativePath),
20
+ path.basename(relativePath, path.extname(relativePath))
21
+ );
22
+ const template = addTemplate({
23
+ filename: "regle-exports.ts",
24
+ write: true,
25
+ getContents: () => `import ReglePlugin from "${setupFilePathWithoutExtension}";
26
+ export const {inferRules, useRegle, useCollectScope, useScopedRegle} = ReglePlugin`
27
+ });
28
+ const exportsNames = ["inferRules", "useRegle", "useCollectScope", "useScopedRegle"];
29
+ exportsNames.forEach((name) => addImports({ name, as: name, from: template.dst }));
30
+ addImportsSources({
31
+ from: "@regle/core",
32
+ imports: [
33
+ "createRule",
34
+ "defineRegleConfig",
35
+ "extendRegleConfig",
36
+ "createVariant",
37
+ "narrowVariant"
38
+ ]
39
+ });
40
+ await addDefaultImportSources();
41
+ } else {
42
+ console.error(`[regle] Couldn't find your setup file at ${options.setupFile}`);
43
+ }
44
+ } catch (e) {
45
+ console.error(`[regle] Couldn't find your setup file at ${options.setupFile}`);
46
+ }
47
+ } else {
48
+ addImportsSources({
49
+ from: "@regle/core",
50
+ imports: [
51
+ "useRegle",
52
+ "createRule",
53
+ "defineRegleConfig",
54
+ "inferRules",
55
+ "extendRegleConfig",
56
+ "createVariant",
57
+ "narrowVariant",
58
+ "useScopedRegle",
59
+ "useCollectScope"
60
+ ]
61
+ });
62
+ await addDefaultImportSources();
63
+ }
64
+ async function addDefaultImportSources() {
65
+ addImportsSources({
66
+ from: "@regle/rules",
67
+ imports: ["withAsync", "withMessage", "withParams", "withTooltip"]
68
+ });
69
+ try {
70
+ const regleSchema = await import('@regle/schemas');
71
+ if (regleSchema) {
72
+ addImportsSources({
73
+ from: "@regle/schemas",
74
+ imports: ["useRegleSchema", "inferSchema", "withDeps", "defineRegleSchemaConfig"]
75
+ });
76
+ }
77
+ } catch (e) {
35
78
  }
36
- } catch (e) {
37
79
  }
38
80
  }
39
81
  });
@@ -0,0 +1,11 @@
1
+ import type { useCollectScope as defaultUseCollectScope } from '@regle/core';
2
+ import { type useRegleFn, type inferRulesFn, type AllRulesDeclarations, type RegleShortcutDefinition } from '@regle/core';
3
+ export declare function defineRegleNuxtPlugin<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any>>(setup: () => {
4
+ useRegle: useRegleFn<TCustomRules, TShortcuts>;
5
+ inferRules: inferRulesFn<TCustomRules>;
6
+ }): {
7
+ useRegle: useRegleFn<TCustomRules, TShortcuts>;
8
+ inferRules: inferRulesFn<TCustomRules>;
9
+ useScopedRegle: useRegleFn<TCustomRules, TShortcuts>;
10
+ useCollectScope: typeof defaultUseCollectScope;
11
+ };
@@ -0,0 +1,8 @@
1
+ import {
2
+ createScopedUseRegle
3
+ } from "@regle/core";
4
+ export function defineRegleNuxtPlugin(setup) {
5
+ const { inferRules, useRegle } = setup();
6
+ const { useCollectScope, useScopedRegle } = createScopedUseRegle({ customUseRegle: useRegle });
7
+ return { inferRules, useRegle, useCollectScope, useScopedRegle };
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/nuxt",
3
- "version": "1.2.0-beta.1",
3
+ "version": "1.2.0-beta.3",
4
4
  "description": "Regle nuxt module",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -8,6 +8,10 @@
8
8
  ".": {
9
9
  "types": "./dist/types.d.mts",
10
10
  "import": "./dist/module.mjs"
11
+ },
12
+ "./setup": {
13
+ "types": "./dist/runtime/defineRegleNuxtPlugin.d.ts",
14
+ "import": "./dist/runtime/defineRegleNuxtPlugin.js"
11
15
  }
12
16
  },
13
17
  "main": "./dist/module.mjs",
@@ -16,33 +20,33 @@
16
20
  "dist"
17
21
  ],
18
22
  "dependencies": {
19
- "@nuxt/kit": "3.16.2",
20
- "@nuxt/schema": "3.16.2",
21
- "@regle/core": "1.2.0-beta.1",
22
- "@regle/rules": "1.2.0-beta.1"
23
+ "@nuxt/kit": "3.17.1",
24
+ "@nuxt/schema": "3.17.1",
25
+ "@regle/rules": "1.2.0-beta.3",
26
+ "@regle/core": "1.2.0-beta.3"
23
27
  },
24
28
  "optionalDependencies": {
25
- "@regle/schemas": "1.2.0-beta.1"
29
+ "@regle/schemas": "1.2.0-beta.3"
26
30
  },
27
31
  "devDependencies": {
28
32
  "@nuxt/devtools": "2.4.0",
29
33
  "@nuxt/eslint-config": "1.3.0",
30
34
  "@nuxt/module-builder": "1.0.1",
31
35
  "@nuxt/test-utils": "3.17.2",
32
- "@types/node": "22.13.17",
33
- "eslint": "9.15.0",
36
+ "@types/node": "22.15.3",
37
+ "eslint": "9.25.1",
34
38
  "eslint-config-prettier": "9.1.0",
35
- "eslint-plugin-vue": "9.31.0",
36
- "nuxt": "3.16.2",
39
+ "eslint-plugin-vue": "9.33.0",
40
+ "nuxt": "3.17.1",
37
41
  "prettier": "3.5.3",
38
42
  "tsup": "8.4.0",
39
- "type-fest": "4.38.0",
40
- "typescript": "5.8.2",
43
+ "type-fest": "4.40.1",
44
+ "typescript": "5.8.3",
41
45
  "unbuild": "3.5.0",
42
- "vitest": "3.1.1",
46
+ "vitest": "3.1.2",
43
47
  "vue": "3.5.13",
44
48
  "vue-eslint-parser": "10.1.3",
45
- "vue-tsc": "2.2.8"
49
+ "vue-tsc": "2.2.10"
46
50
  },
47
51
  "publishConfig": {
48
52
  "access": "public"