silgi 0.2.3 → 0.3.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.
@@ -1,15 +1,15 @@
1
1
  import { defineCommand } from 'citty';
2
- import { l as loadSilgiConfig } from '../shared/silgi.DT4okyEE.mjs';
2
+ import { l as loadSilgiConfig } from '../shared/silgi.2D3gmgW0.mjs';
3
3
  import { createHooks } from 'hookable';
4
4
  import ignore from 'ignore';
5
5
  import { isAbsolute, resolve, join, relative, dirname, basename, extname } from 'pathe';
6
6
  import { promises, existsSync, writeFileSync, readFileSync } from 'node:fs';
7
7
  import { readPackageJSON } from 'pkg-types';
8
- import { r as relativeWithDot } from '../shared/silgi.C0NIj2vN.mjs';
8
+ import { r as relativeWithDot } from '../shared/silgi.BNEdIEZH.mjs';
9
9
  import { defu } from 'defu';
10
10
  import { withTrailingSlash } from 'ufo';
11
11
  import { resolvePath, resolve as resolve$1 } from 'mlly';
12
- import { i as getDirectory, r as resolveSilgiModule, j as resolvePath$1, k as generateUris, m as generateSilgiStorageBaseType } from '../shared/silgi.BxA0HYd5.mjs';
12
+ import { i as getDirectory, r as resolveSilgiModule, j as resolvePath$1, k as generateUris, m as generateSilgiStorageBaseType } from '../shared/silgi.mBwNj1W0.mjs';
13
13
  import { readdir } from 'node:fs/promises';
14
14
  import { consola } from 'consola';
15
15
  import { globby } from 'globby';
@@ -329,16 +329,6 @@ async function _generateSilgiFile(silgi) {
329
329
  "",
330
330
  " return silgi",
331
331
  "}",
332
- "",
333
- "export default function createSilgiConfig() {",
334
- " const returnObject = {",
335
- " uris,",
336
- " services,",
337
- " shareds,",
338
- " schemas,",
339
- " }",
340
- " return returnObject",
341
- "}",
342
332
  ""
343
333
  ].join("\n");
344
334
  return {
@@ -558,8 +548,58 @@ async function writeRootTsConfig(silgi) {
558
548
  await promises.writeFile(tsConfigPath, GeneratedBy);
559
549
  }
560
550
 
551
+ async function generateRouterDTS(silgi) {
552
+ silgi.hook("read:core.ts", async (data) => {
553
+ silgi.hook("close", async () => {
554
+ const { object } = await data();
555
+ const uris = object.uris;
556
+ const tag = "srn";
557
+ const groupedRoutes = Object.entries(uris).reduce((acc, [key, _value]) => {
558
+ const [service, resource, method, action] = key.split("/");
559
+ const routePath = `${tag}/${service}/${resource}/${action}`;
560
+ if (!acc[routePath]) {
561
+ acc[routePath] = {};
562
+ }
563
+ acc[routePath][method] = {
564
+ input: `ExtractInputFromURI<'${key}'>`,
565
+ output: `ExtractOutputFromURI<'${key}'>`,
566
+ params: `ExtractRouterParamsFromURI<'${key}'>['params']`
567
+ };
568
+ return acc;
569
+ }, {});
570
+ const routerTypes = Object.entries(groupedRoutes).map(([path, methods]) => {
571
+ const methodEntries = Object.entries(methods).map(([method, { input, output, params }]) => {
572
+ return ` '${method}': {
573
+ input: ${input},
574
+ output: ${output}
575
+ params: ${params}
576
+ }`;
577
+ }).join(",\n");
578
+ return ` '${path}': {
579
+ ${methodEntries}
580
+ }`;
581
+ });
582
+ const context = [
583
+ "import type { ExtractInputFromURI, ExtractOutputFromURI, ExtractRouterParamsFromURI } from 'silgi'",
584
+ "",
585
+ "export type RouterTypes = {",
586
+ routerTypes.join(",\n"),
587
+ "}",
588
+ "",
589
+ "declare module 'silgi' {",
590
+ " interface SilgiRouterTypes extends RouterTypes {",
591
+ " }",
592
+ "}"
593
+ ].join("\n");
594
+ const outputPath = resolve(silgi.options.buildDir, "silgi-routes.d.ts");
595
+ await promises.writeFile(outputPath, context);
596
+ });
597
+ });
598
+ }
599
+
561
600
  async function writeTypes(silgi) {
562
601
  await writeH3DTS(silgi);
602
+ await generateRouterDTS(silgi);
563
603
  await writeSilgiFile(silgi);
564
604
  await writeSchema(silgi);
565
605
  await writeTsConfig(silgi);
@@ -877,25 +917,24 @@ async function scanFiles(silgi) {
877
917
  }
878
918
 
879
919
  async function readSilgiTs(silgi) {
880
- const jiti = createJiti(silgi.options.silgiDir);
881
920
  const path = resolve(silgi.options.silgiDir, "core.ts");
921
+ const jiti = createJiti(silgi.options.rootDir, {
922
+ fsCache: false,
923
+ interopDefault: true,
924
+ moduleCache: false
925
+ });
882
926
  const context = await promises.readFile(path, "utf-8");
883
- const silgiTypes = await jiti.import(
884
- "./core.ts",
885
- {
886
- default: true
887
- }
927
+ const coreFile = await jiti.import(
928
+ path
888
929
  );
889
- if (typeof silgiTypes === "string") {
890
- throw new TypeError(`Could not load \`${silgiTypes}\`. Is it installed?`);
891
- }
892
- if (typeof silgiTypes !== "function") {
893
- throw new TypeError(`Nuxt module should be a function: ${silgiTypes}`);
894
- }
895
- const object = silgiTypes();
896
930
  return {
897
931
  context,
898
- object,
932
+ object: {
933
+ schemas: coreFile.schemas,
934
+ uris: coreFile.uris,
935
+ services: coreFile.services,
936
+ shareds: coreFile.shareds
937
+ },
899
938
  path
900
939
  };
901
940
  }
@@ -1176,16 +1215,18 @@ async function generate$1(mergeConfig) {
1176
1215
  silgi.hook("prepare:types", (opts) => {
1177
1216
  opts.references.push({ path: resolve(silgi.options.buildDir, "schema.d.ts") });
1178
1217
  opts.references.push({ path: resolve(silgi.options.buildDir, "h3.d.ts") });
1218
+ opts.references.push({ path: resolve(silgi.options.buildDir, "silgi-routes.d.ts") });
1179
1219
  });
1180
1220
  await generateUris(silgi);
1181
1221
  await generateSilgiStorageBaseType(silgi);
1182
1222
  await installCLIModules(silgi);
1183
1223
  await scanFiles(silgi);
1184
1224
  await writeTypes(silgi);
1185
- silgi.callHook("read:core.ts", async () => {
1225
+ await silgi.callHook("read:core.ts", async () => {
1186
1226
  const data = await readSilgiTs(silgi);
1187
1227
  return data;
1188
1228
  });
1229
+ return silgi;
1189
1230
  }
1190
1231
 
1191
1232
  const generate = defineCommand({
@@ -1201,7 +1242,8 @@ const generate = defineCommand({
1201
1242
  dev: true
1202
1243
  }
1203
1244
  });
1204
- await generate$1(mergeConfig);
1245
+ const silgi = await generate$1(mergeConfig);
1246
+ await silgi.close();
1205
1247
  }
1206
1248
  });
1207
1249
 
@@ -1,11 +1,11 @@
1
1
  import * as unstorage from 'unstorage';
2
2
  import * as net from 'net';
3
3
  import * as consola from 'consola';
4
- import { D as DeepPartial, S as SilgiOptions, a as SilgiModuleOptions, V as ValidationLibrary } from '../shared/silgi.wMv9BQmS.mjs';
4
+ import { D as DeepPartial, S as SilgiOptions, a as SilgiModuleOptions } from '../shared/silgi.DJkQv6rh.mjs';
5
5
  import 'hookable';
6
6
  import 'ignore';
7
+ import '@standard-schema/spec';
7
8
  import 'defu';
8
- import 'zod';
9
9
  import 'h3';
10
10
  import 'pkg-types';
11
11
  import 'nitropack/types';
@@ -13,7 +13,6 @@ import 'nitropack/types';
13
13
  declare function defineSilgiConfig(config: DeepPartial<SilgiOptions> & Partial<SilgiModuleOptions>): {
14
14
  [x: string]: any;
15
15
  environment?: ("nitrojs" | "h3" | "undefined") | undefined;
16
- validationLibrary?: ValidationLibrary | undefined;
17
16
  isPackage?: boolean | undefined;
18
17
  _eventContext?: {
19
18
  clear?: {} | undefined;
@@ -1,11 +1,11 @@
1
1
  import * as unstorage from 'unstorage';
2
2
  import * as net from 'net';
3
3
  import * as consola from 'consola';
4
- import { D as DeepPartial, S as SilgiOptions, a as SilgiModuleOptions, V as ValidationLibrary } from '../shared/silgi.wMv9BQmS.js';
4
+ import { D as DeepPartial, S as SilgiOptions, a as SilgiModuleOptions } from '../shared/silgi.DJkQv6rh.js';
5
5
  import 'hookable';
6
6
  import 'ignore';
7
+ import '@standard-schema/spec';
7
8
  import 'defu';
8
- import 'zod';
9
9
  import 'h3';
10
10
  import 'pkg-types';
11
11
  import 'nitropack/types';
@@ -13,7 +13,6 @@ import 'nitropack/types';
13
13
  declare function defineSilgiConfig(config: DeepPartial<SilgiOptions> & Partial<SilgiModuleOptions>): {
14
14
  [x: string]: any;
15
15
  environment?: ("nitrojs" | "h3" | "undefined") | undefined;
16
- validationLibrary?: ValidationLibrary | undefined;
17
16
  isPackage?: boolean | undefined;
18
17
  _eventContext?: {
19
18
  clear?: {} | undefined;
@@ -3,7 +3,7 @@ import consola from 'consola';
3
3
 
4
4
  const name = "silgi";
5
5
  const type = "module";
6
- const version = "0.2.3";
6
+ const version = "0.3.0";
7
7
  const packageManager = "pnpm@9.15.1";
8
8
  const sideEffects = false;
9
9
  const exports = {
@@ -67,10 +67,24 @@ const scripts = {
67
67
  pb: "pnpm unbuild && pnpm publish --no-git-checks --access public",
68
68
  generate: "pnpm --filter ./playground... generate && pnpm --filter ./modules... generate && pnpm --filter ./ecosystem... generate && pnpm --filter ./examples/** generate"
69
69
  };
70
+ const peerDependencies = {
71
+ "@nuxt/kit": "^3.15.3",
72
+ typescript: "^5.7.3",
73
+ zod: "^3.24.1"
74
+ };
75
+ const peerDependenciesMeta = {
76
+ "@nuxt/kit": {
77
+ optional: true
78
+ },
79
+ zod: {
80
+ optional: true
81
+ }
82
+ };
70
83
  const dependencies = {
71
84
  "@antfu/eslint-config": "^3.16.0",
72
85
  "@nuxt/schema": "^3.15.2",
73
86
  "@oxc-parser/wasm": "^0.48.0",
87
+ "@standard-schema/spec": "^1.0.0",
74
88
  c12: "^2.0.1",
75
89
  citty: "^0.1.6",
76
90
  consola: "^3.4.0",
@@ -96,15 +110,15 @@ const dependencies = {
96
110
  unctx: "^2.4.1",
97
111
  unimport: "^4.0.0",
98
112
  unstorage: "^1.14.4",
99
- untyped: "^1.5.2",
100
- zod: "^3.24.1"
113
+ untyped: "^1.5.2"
101
114
  };
102
115
  const devDependencies = {
103
116
  "@nuxt/kit": "^3.15.3",
104
117
  "@types/node": "^22.10.7",
105
118
  "@types/semver": "^7.5.8",
106
119
  unbuild: "^3.3.1",
107
- vitest: "^3.0.3"
120
+ vitest: "^3.0.3",
121
+ zod: "^3.24.1"
108
122
  };
109
123
  const resolutions = {
110
124
  "@silgi/modules": "workspace:*",
@@ -126,6 +140,8 @@ const packageJson = {
126
140
  bin: bin,
127
141
  files: files,
128
142
  scripts: scripts,
143
+ peerDependencies: peerDependencies,
144
+ peerDependenciesMeta: peerDependenciesMeta,
129
145
  dependencies: dependencies,
130
146
  devDependencies: devDependencies,
131
147
  resolutions: resolutions,
@@ -1,7 +1,7 @@
1
1
  import { fileURLToPath } from 'node:url';
2
2
  import { resolve, dirname, join } from 'pathe';
3
- import { l as loadSilgiConfig } from '../../shared/silgi.DT4okyEE.mjs';
4
- import { r as relativeWithDot } from '../../shared/silgi.C0NIj2vN.mjs';
3
+ import { l as loadSilgiConfig } from '../../shared/silgi.2D3gmgW0.mjs';
4
+ import { r as relativeWithDot } from '../../shared/silgi.BNEdIEZH.mjs';
5
5
  import 'c12';
6
6
  import 'untyped';
7
7
  import 'std-env';
package/dist/index.d.mts CHANGED
@@ -1,12 +1,12 @@
1
- import { b as SilgiConfig, c as SilgiHelper, M as ModuleOptions, d as ModuleDefinition, e as SilgiModule, B as BaseSchemaType, f as SelectedValidationLibrary, g as SilgiServiceInterface, h as DefaultNamespaces, i as Silgi, j as SilgiOperation, k as MergedSilgiSchema, l as ServiceType, m as SilgiSchema, R as RequiredServiceType, n as SilgiModuleShared } from './shared/silgi.wMv9BQmS.mjs';
2
- export { A as Awaitable, C as CreateScope, D as DeepPartial, z as DefaultHooks, y as DefaultMethods, E as ExtendShared, t as SilgiDefaultShared, o as SilgiEvent, x as SilgiHook, p as SilgiModuleMethods, a as SilgiModuleOptions, q as SilgiModules, r as SilgiNamespaces, S as SilgiOptions, v as SilgiStorageBase, u as SilgiURIs, s as SilgiValidationSchema, U as URIsTypes, w as silgi } from './shared/silgi.wMv9BQmS.mjs';
1
+ import { b as SilgiConfig, c as SilgiHelper, M as ModuleOptions, d as ModuleDefinition, e as SilgiModule, B as BaseSchemaType, f as SilgiServiceInterface, g as DefaultNamespaces, h as Silgi, i as SilgiOperation, j as MergedSilgiSchema, k as ServiceType, l as SilgiSchema, R as RequiredServiceType, m as SilgiModuleShared } from './shared/silgi.DJkQv6rh.mjs';
2
+ export { F as Awaitable, G as CreateScope, D as DeepPartial, C as DefaultHooks, A as DefaultMethods, E as ExtendShared, t as ExtractInputFromURI, u as ExtractOutputFromURI, v as ExtractRouterParamsFromURI, r as SilgiDefaultShared, n as SilgiEvent, z as SilgiHook, o as SilgiModuleMethods, a as SilgiModuleOptions, p as SilgiModules, q as SilgiNamespaces, S as SilgiOptions, y as SilgiRouterTypes, w as SilgiStorageBase, s as SilgiURIs, U as URIsTypes, x as silgi } from './shared/silgi.DJkQv6rh.mjs';
3
+ import { StandardSchemaV1 } from '@standard-schema/spec';
3
4
  import * as unctx_index from 'unctx/index';
4
5
  import 'consola';
5
6
  import 'hookable';
6
7
  import 'ignore';
7
8
  import 'unstorage';
8
9
  import 'defu';
9
- import 'zod';
10
10
  import 'h3';
11
11
  import 'pkg-types';
12
12
  import 'nitropack/types';
@@ -94,11 +94,11 @@ interface SilgiModuleContext extends Record<string, any> {
94
94
  interface ExtendContext {
95
95
  }
96
96
 
97
- interface BaseNamespaceType extends Record<keyof DefaultNamespaces, Record<string, BaseSchemaType<SelectedValidationLibrary>>> {
97
+ interface BaseNamespaceType extends Record<keyof DefaultNamespaces, Record<string, BaseSchemaType<StandardSchemaV1>>> {
98
98
  }
99
99
  type Namespaces<T extends BaseNamespaceType> = {
100
100
  [K in keyof T]: {
101
- [P in keyof T[K]]: T[K][P] extends BaseSchemaType<SelectedValidationLibrary> ? SilgiServiceInterface<T[K][P]> : never;
101
+ [P in keyof T[K]]: T[K][P] extends BaseSchemaType<StandardSchemaV1> ? SilgiServiceInterface<T[K][P]> : never;
102
102
  };
103
103
  };
104
104
 
@@ -145,7 +145,7 @@ declare function createService<T extends SilgiSchema>(variables: ServiceType<T>)
145
145
 
146
146
  declare function createShared(shared: Partial<SilgiModuleShared>): SilgiModuleShared;
147
147
 
148
- declare function createSchema<T extends Partial<Record<keyof DefaultNamespaces, Record<string, BaseSchemaType<SelectedValidationLibrary>>>>>(silgiType: T): {
148
+ declare function createSchema<T extends Partial<Record<keyof DefaultNamespaces, Record<string, BaseSchemaType<StandardSchemaV1>>>>>(silgiType: T): {
149
149
  [K in keyof T]: {
150
150
  [P in keyof T[K]]: T[K][P];
151
151
  };
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { b as SilgiConfig, c as SilgiHelper, M as ModuleOptions, d as ModuleDefinition, e as SilgiModule, B as BaseSchemaType, f as SelectedValidationLibrary, g as SilgiServiceInterface, h as DefaultNamespaces, i as Silgi, j as SilgiOperation, k as MergedSilgiSchema, l as ServiceType, m as SilgiSchema, R as RequiredServiceType, n as SilgiModuleShared } from './shared/silgi.wMv9BQmS.js';
2
- export { A as Awaitable, C as CreateScope, D as DeepPartial, z as DefaultHooks, y as DefaultMethods, E as ExtendShared, t as SilgiDefaultShared, o as SilgiEvent, x as SilgiHook, p as SilgiModuleMethods, a as SilgiModuleOptions, q as SilgiModules, r as SilgiNamespaces, S as SilgiOptions, v as SilgiStorageBase, u as SilgiURIs, s as SilgiValidationSchema, U as URIsTypes, w as silgi } from './shared/silgi.wMv9BQmS.js';
1
+ import { b as SilgiConfig, c as SilgiHelper, M as ModuleOptions, d as ModuleDefinition, e as SilgiModule, B as BaseSchemaType, f as SilgiServiceInterface, g as DefaultNamespaces, h as Silgi, i as SilgiOperation, j as MergedSilgiSchema, k as ServiceType, l as SilgiSchema, R as RequiredServiceType, m as SilgiModuleShared } from './shared/silgi.DJkQv6rh.js';
2
+ export { F as Awaitable, G as CreateScope, D as DeepPartial, C as DefaultHooks, A as DefaultMethods, E as ExtendShared, t as ExtractInputFromURI, u as ExtractOutputFromURI, v as ExtractRouterParamsFromURI, r as SilgiDefaultShared, n as SilgiEvent, z as SilgiHook, o as SilgiModuleMethods, a as SilgiModuleOptions, p as SilgiModules, q as SilgiNamespaces, S as SilgiOptions, y as SilgiRouterTypes, w as SilgiStorageBase, s as SilgiURIs, U as URIsTypes, x as silgi } from './shared/silgi.DJkQv6rh.js';
3
+ import { StandardSchemaV1 } from '@standard-schema/spec';
3
4
  import * as unctx_index from 'unctx/index';
4
5
  import 'consola';
5
6
  import 'hookable';
6
7
  import 'ignore';
7
8
  import 'unstorage';
8
9
  import 'defu';
9
- import 'zod';
10
10
  import 'h3';
11
11
  import 'pkg-types';
12
12
  import 'nitropack/types';
@@ -94,11 +94,11 @@ interface SilgiModuleContext extends Record<string, any> {
94
94
  interface ExtendContext {
95
95
  }
96
96
 
97
- interface BaseNamespaceType extends Record<keyof DefaultNamespaces, Record<string, BaseSchemaType<SelectedValidationLibrary>>> {
97
+ interface BaseNamespaceType extends Record<keyof DefaultNamespaces, Record<string, BaseSchemaType<StandardSchemaV1>>> {
98
98
  }
99
99
  type Namespaces<T extends BaseNamespaceType> = {
100
100
  [K in keyof T]: {
101
- [P in keyof T[K]]: T[K][P] extends BaseSchemaType<SelectedValidationLibrary> ? SilgiServiceInterface<T[K][P]> : never;
101
+ [P in keyof T[K]]: T[K][P] extends BaseSchemaType<StandardSchemaV1> ? SilgiServiceInterface<T[K][P]> : never;
102
102
  };
103
103
  };
104
104
 
@@ -145,7 +145,7 @@ declare function createService<T extends SilgiSchema>(variables: ServiceType<T>)
145
145
 
146
146
  declare function createShared(shared: Partial<SilgiModuleShared>): SilgiModuleShared;
147
147
 
148
- declare function createSchema<T extends Partial<Record<keyof DefaultNamespaces, Record<string, BaseSchemaType<SelectedValidationLibrary>>>>>(silgiType: T): {
148
+ declare function createSchema<T extends Partial<Record<keyof DefaultNamespaces, Record<string, BaseSchemaType<StandardSchemaV1>>>>>(silgiType: T): {
149
149
  [K in keyof T]: {
150
150
  [P in keyof T[K]]: T[K][P];
151
151
  };
package/dist/index.mjs CHANGED
@@ -2,11 +2,11 @@ import { createConsola } from 'consola';
2
2
  import defu, { defu as defu$1 } from 'defu';
3
3
  import { createHooks } from 'hookable';
4
4
  import { applyDefaults } from 'untyped';
5
- import { u as useSilgi, l as loadSilgiModuleInstance, p as parseURI, S as SilgiError, a as useStorage, n as normalizeResult, b as SilgiErrorCode, g as generateStorageKey, s as scanAction, c as createStorage, d as silgiCtx, t as tryUseSilgi } from './shared/silgi.BxA0HYd5.mjs';
6
- export { e as createResolver, f as useHook, h as useShared } from './shared/silgi.BxA0HYd5.mjs';
5
+ import { u as useSilgi, l as loadSilgiModuleInstance, p as parseURI, S as SilgiError, a as useStorage, n as normalizeResult, b as SilgiErrorCode, g as generateStorageKey, s as scanAction, c as createStorage, d as silgiCtx, t as tryUseSilgi } from './shared/silgi.mBwNj1W0.mjs';
6
+ export { e as createResolver, f as useHook, h as useShared } from './shared/silgi.mBwNj1W0.mjs';
7
7
  import satisfies from 'semver/functions/satisfies.js';
8
- import { S as SilgiConfigSchema } from './shared/silgi.C0NIj2vN.mjs';
9
- export { r as relativeWithDot } from './shared/silgi.C0NIj2vN.mjs';
8
+ import { S as SilgiConfigSchema } from './shared/silgi.BNEdIEZH.mjs';
9
+ export { r as relativeWithDot } from './shared/silgi.BNEdIEZH.mjs';
10
10
  import { defineEventHandler, getQuery, readBody } from 'h3';
11
11
  import 'node:fs';
12
12
  import 'pathe';
@@ -1,6 +1,6 @@
1
1
  import { loadConfig } from 'c12';
2
2
  import { applyDefaults } from 'untyped';
3
- import { S as SilgiConfigSchema } from './silgi.C0NIj2vN.mjs';
3
+ import { S as SilgiConfigSchema } from './silgi.BNEdIEZH.mjs';
4
4
 
5
5
  async function loadSilgiConfig(opts) {
6
6
  globalThis.defineSilgiConfig = (c) => c;
@@ -11,13 +11,6 @@ const common = defineUntypedSchema({
11
11
  environment: {
12
12
  $resolve: (val) => val ?? "h3"
13
13
  },
14
- /**
15
- * Validation library to use.
16
- * @default 'zod'
17
- */
18
- validationLibrary: {
19
- $resolve: (val) => val ?? "zod"
20
- },
21
14
  /**
22
15
  * Define the root directory of your application.
23
16
  *
@@ -2,8 +2,8 @@ import { ConsolaOptions, ConsolaInstance } from 'consola';
2
2
  import { Hookable } from 'hookable';
3
3
  import { Ignore } from 'ignore';
4
4
  import { BuiltinDriverName, TransactionOptions, StorageValue, Storage } from 'unstorage';
5
+ import { StandardSchemaV1 } from '@standard-schema/spec';
5
6
  import { Defu } from 'defu';
6
- import { z } from 'zod';
7
7
  import { Router, H3Event } from 'h3';
8
8
  import { TSConfig } from 'pkg-types';
9
9
  import { NitroApp } from 'nitropack/types';
@@ -23,28 +23,11 @@ interface SilgiSchema {
23
23
  }
24
24
  interface MergedSilgiSchema {
25
25
  }
26
- interface SilgiValidationSchema {
27
- }
28
- type ValidationLibrary = 'zod' | 'yup';
29
- type SelectedValidationLibrary = SilgiValidationSchema extends {
30
- validationLibrary: infer V;
31
- } ? V extends ValidationLibrary ? V : 'zod' : 'zod';
32
- /**
33
- * A map of validation library names to their type definitions.
34
- *
35
- * @see {@link https://zod.dev/ | Zod}
36
- * @see {@link https://github.com/jquense/yup | Yup}
37
- */
38
- interface SchemaTypes {
39
- zod: z.ZodTypeAny;
40
- yup: any;
41
- }
42
- type InferSchemaType<V extends SelectedValidationLibrary, T> = V extends 'zod' ? T extends z.ZodTypeAny ? z.infer<T> : never : V extends 'yup' ? any : never;
43
- type BaseSchemaType<V extends SelectedValidationLibrary> = {
26
+ type BaseSchemaType<T extends StandardSchemaV1> = {
44
27
  [Action in BaseSilgiMethodType]?: Record<string, {
45
- input?: SchemaTypes[V];
46
- output?: SchemaTypes[V];
47
- routerParams?: SchemaTypes[V];
28
+ input?: T;
29
+ output?: T;
30
+ routerParams?: T;
48
31
  }>;
49
32
  };
50
33
 
@@ -64,16 +47,31 @@ type GetInput<T extends {
64
47
  entity: string;
65
48
  method: string;
66
49
  action: string;
67
- }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']]['input'] : never : never : never : never;
50
+ }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']] extends {
51
+ input: infer I;
52
+ } ? I extends StandardSchemaV1 ? StandardSchemaV1.InferInput<I> : never : never : never : never : never : never;
68
53
  type GetOutput<T extends {
69
54
  service: string;
70
55
  entity: string;
71
56
  method: string;
72
57
  action: string;
73
- }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']]['output'] : never : never : never : never;
58
+ }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']] extends {
59
+ output: infer O;
60
+ } ? O extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<O> : never : never : never : never : never : never;
61
+ type GetRouterParams<T extends {
62
+ service: string;
63
+ entity: string;
64
+ method: string;
65
+ action: string;
66
+ }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']] extends {
67
+ router: infer I;
68
+ } ? I extends StandardSchemaV1 ? StandardSchemaV1.InferInput<I> : never : never : never : never : never : never;
74
69
  type ExtractInputFromURI<TURI extends keyof SilgiURIs> = GetInput<ExtractPath<TURI>>;
75
70
  type ExtractOutputFromURI<TURI extends keyof SilgiURIs> = GetOutput<ExtractPath<TURI>>;
71
+ type ExtractRouterParamsFromURI<TURI extends keyof SilgiURIs> = GetRouterParams<ExtractPath<TURI>>;
76
72
 
73
+ interface SilgiRouterTypes {
74
+ }
77
75
  interface SilgiHook {
78
76
  }
79
77
  interface DefaultHooks {
@@ -222,7 +220,6 @@ interface SilgiOptions {
222
220
  * @default 'nitrojs'
223
221
  */
224
222
  environment?: ('nitrojs' | 'h3' | 'undefined');
225
- validationLibrary?: ValidationLibrary;
226
223
  isPackage: boolean;
227
224
  /**
228
225
  *
@@ -703,22 +700,22 @@ type MethodHandlerType<T> = {
703
700
  [Action in keyof T]: T[Action] extends Record<string, any> ? {
704
701
  [Method in keyof T[Action]]: {
705
702
  default?: {
706
- input?: T[Action][Method]['input'] extends infer U ? U : never;
707
- output?: T[Action][Method]['output'] extends infer U ? U : never;
703
+ input?: StandardSchemaV1.InferInput<T[Action][Method]['input']>;
704
+ output?: StandardSchemaV1.InferInput<T[Action][Method]['output']>;
708
705
  };
709
- handler: (router: T[Action][Method]['router'] extends infer U ? U : never, input: T[Action][Method]['input'], shared: SilgiDefaultShared, event: SilgiEvent) => EventHandlerResponse<T[Action][Method]['output'] extends infer U ? U : undefined>;
706
+ handler: (router: StandardSchemaV1.InferInput<T[Action][Method]['router']>, input: StandardSchemaV1.InferInput<T[Action][Method]['input']>, shared: SilgiDefaultShared, event: SilgiEvent) => EventHandlerResponse<StandardSchemaV1.InferOutput<T[Action][Method]['output']>>;
710
707
  modules?: ModuleConfigurations;
711
708
  storage?: StorageConfig<T[Action][Method]['input']>;
712
709
  };
713
710
  } : never;
714
711
  };
715
712
  interface ResolvedMethodHandlerType {
716
- input?: Partial<InferSchemaType<SelectedValidationLibrary, any>>;
717
- output: Partial<InferSchemaType<SelectedValidationLibrary, any>>;
718
- handler: (router: InferSchemaType<SelectedValidationLibrary, any>, input: InferSchemaType<SelectedValidationLibrary, any>, shared: SilgiDefaultShared, event: SilgiEvent) => Promise<InferSchemaType<SelectedValidationLibrary, any>>;
713
+ input?: Partial<BaseSchemaType<any>>;
714
+ output: Partial<BaseSchemaType<any>>;
715
+ handler: (router: StandardSchemaV1.InferInput<any>, input: StandardSchemaV1.InferInput<any>, shared: SilgiDefaultShared, event: SilgiEvent) => Promise<StandardSchemaV1.InferInput<any>>;
719
716
  modules?: ModuleConfigurations;
720
- storage?: StorageConfig<InferSchemaType<SelectedValidationLibrary, any>>;
721
- execute: (input: InferSchemaType<SelectedValidationLibrary, any>, shared: SilgiDefaultShared, event: SilgiEvent) => Promise<InferSchemaType<SelectedValidationLibrary, any>>;
717
+ storage?: StorageConfig<StandardSchemaV1.InferInput<any>>;
718
+ execute: (input: StandardSchemaV1.InferInput<any>, shared: SilgiDefaultShared, event: SilgiEvent) => Promise<StandardSchemaV1.InferInput<any>>;
722
719
  }
723
720
  type MethodResponse<T> = {
724
721
  success: true;
@@ -734,85 +731,15 @@ type MethodResponse<T> = {
734
731
  };
735
732
 
736
733
  declare function silgi(event?: SilgiEvent | Record<string, any>): {
737
- execute: <TURI extends keyof SilgiURIs>(uriString: TURI, input: ExtractInputFromURI<TURI>) => Promise<MethodResponse<(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
738
- service: Service;
739
- entity: Entity;
740
- method: Method;
741
- action: Action;
742
- } : never : never)["service"] extends never ? (TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
743
- service: Service;
744
- entity: Entity;
745
- method: Method;
746
- action: Action;
747
- } : never : never)["entity"] extends keyof SilgiSchema[(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
748
- service: Service;
749
- entity: Entity;
750
- method: Method;
751
- action: Action;
752
- } : never : never)["service"]] ? (TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
753
- service: Service;
754
- entity: Entity;
755
- method: Method;
756
- action: Action;
757
- } : never : never)["method"] extends keyof SilgiSchema[(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
758
- service: Service;
759
- entity: Entity;
760
- method: Method;
761
- action: Action;
762
- } : never : never)["service"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
763
- service: Service;
764
- entity: Entity;
765
- method: Method;
766
- action: Action;
767
- } : never : never)["entity"]] ? (TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
768
- service: Service;
769
- entity: Entity;
770
- method: Method;
771
- action: Action;
772
- } : never : never)["action"] extends keyof SilgiSchema[(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
773
- service: Service;
774
- entity: Entity;
775
- method: Method;
776
- action: Action;
777
- } : never : never)["service"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
778
- service: Service;
779
- entity: Entity;
780
- method: Method;
781
- action: Action;
782
- } : never : never)["entity"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
783
- service: Service;
784
- entity: Entity;
785
- method: Method;
786
- action: Action;
787
- } : never : never)["method"]] ? SilgiSchema[(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
788
- service: Service;
789
- entity: Entity;
790
- method: Method;
791
- action: Action;
792
- } : never : never)["service"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
793
- service: Service;
794
- entity: Entity;
795
- method: Method;
796
- action: Action;
797
- } : never : never)["entity"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
798
- service: Service;
799
- entity: Entity;
800
- method: Method;
801
- action: Action;
802
- } : never : never)["method"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
803
- service: Service;
804
- entity: Entity;
805
- method: Method;
806
- action: Action;
807
- } : never : never)["action"]]["output"] : never : never : never : never>>;
734
+ execute: <TURI extends keyof SilgiURIs>(uriString: TURI, input: ExtractInputFromURI<TURI>) => Promise<MethodResponse<ExtractOutputFromURI<TURI>>>;
808
735
  };
809
736
 
810
- type SilgiServiceInterface<T extends BaseSchemaType<SelectedValidationLibrary>> = {
737
+ type SilgiServiceInterface<T extends BaseSchemaType<StandardSchemaV1>> = {
811
738
  [Action in keyof T]: T[Action] extends Record<string, any> ? {
812
739
  [Method in keyof T[Action]]: {
813
- input: InferSchemaType<SelectedValidationLibrary, T[Action][Method]['input']>;
814
- output?: InferSchemaType<SelectedValidationLibrary, T[Action][Method]['output']>;
815
- router?: InferSchemaType<SelectedValidationLibrary, T[Action][Method]['router']>;
740
+ input: T[Action][Method]['input'];
741
+ output: T[Action][Method]['output'];
742
+ router: T[Action][Method]['router'];
816
743
  };
817
744
  } : never;
818
745
  };
@@ -878,4 +805,4 @@ interface SilgiConfig extends Pick<Silgi, 'services' | 'shared' | 'uris' | 'sche
878
805
  }
879
806
  type SilgiFunction = typeof silgi;
880
807
 
881
- export { type Awaitable as A, type BaseSchemaType as B, type CreateScope as C, type DeepPartial as D, type ExtendShared as E, type ModuleOptions as M, type RequiredServiceType as R, type SilgiOptions as S, type URIsTypes as U, type ValidationLibrary as V, type SilgiModuleOptions as a, type SilgiConfig as b, SilgiHelper as c, type ModuleDefinition as d, type SilgiModule as e, type SelectedValidationLibrary as f, type SilgiServiceInterface as g, type DefaultNamespaces as h, type Silgi as i, type SilgiOperation as j, type MergedSilgiSchema as k, type ServiceType as l, type SilgiSchema as m, type SilgiModuleShared as n, type SilgiEvent as o, type SilgiModuleMethods as p, type SilgiModules as q, type SilgiNamespaces as r, type SilgiValidationSchema as s, type SilgiDefaultShared as t, type SilgiURIs as u, type SilgiStorageBase as v, silgi as w, type SilgiHook as x, type DefaultMethods as y, type DefaultHooks as z };
808
+ export { type DefaultMethods as A, type BaseSchemaType as B, type DefaultHooks as C, type DeepPartial as D, type ExtendShared as E, type Awaitable as F, type CreateScope as G, type ModuleOptions as M, type RequiredServiceType as R, type SilgiOptions as S, type URIsTypes as U, type SilgiModuleOptions as a, type SilgiConfig as b, SilgiHelper as c, type ModuleDefinition as d, type SilgiModule as e, type SilgiServiceInterface as f, type DefaultNamespaces as g, type Silgi as h, type SilgiOperation as i, type MergedSilgiSchema as j, type ServiceType as k, type SilgiSchema as l, type SilgiModuleShared as m, type SilgiEvent as n, type SilgiModuleMethods as o, type SilgiModules as p, type SilgiNamespaces as q, type SilgiDefaultShared as r, type SilgiURIs as s, type ExtractInputFromURI as t, type ExtractOutputFromURI as u, type ExtractRouterParamsFromURI as v, type SilgiStorageBase as w, silgi as x, type SilgiRouterTypes as y, type SilgiHook as z };
@@ -2,8 +2,8 @@ import { ConsolaOptions, ConsolaInstance } from 'consola';
2
2
  import { Hookable } from 'hookable';
3
3
  import { Ignore } from 'ignore';
4
4
  import { BuiltinDriverName, TransactionOptions, StorageValue, Storage } from 'unstorage';
5
+ import { StandardSchemaV1 } from '@standard-schema/spec';
5
6
  import { Defu } from 'defu';
6
- import { z } from 'zod';
7
7
  import { Router, H3Event } from 'h3';
8
8
  import { TSConfig } from 'pkg-types';
9
9
  import { NitroApp } from 'nitropack/types';
@@ -23,28 +23,11 @@ interface SilgiSchema {
23
23
  }
24
24
  interface MergedSilgiSchema {
25
25
  }
26
- interface SilgiValidationSchema {
27
- }
28
- type ValidationLibrary = 'zod' | 'yup';
29
- type SelectedValidationLibrary = SilgiValidationSchema extends {
30
- validationLibrary: infer V;
31
- } ? V extends ValidationLibrary ? V : 'zod' : 'zod';
32
- /**
33
- * A map of validation library names to their type definitions.
34
- *
35
- * @see {@link https://zod.dev/ | Zod}
36
- * @see {@link https://github.com/jquense/yup | Yup}
37
- */
38
- interface SchemaTypes {
39
- zod: z.ZodTypeAny;
40
- yup: any;
41
- }
42
- type InferSchemaType<V extends SelectedValidationLibrary, T> = V extends 'zod' ? T extends z.ZodTypeAny ? z.infer<T> : never : V extends 'yup' ? any : never;
43
- type BaseSchemaType<V extends SelectedValidationLibrary> = {
26
+ type BaseSchemaType<T extends StandardSchemaV1> = {
44
27
  [Action in BaseSilgiMethodType]?: Record<string, {
45
- input?: SchemaTypes[V];
46
- output?: SchemaTypes[V];
47
- routerParams?: SchemaTypes[V];
28
+ input?: T;
29
+ output?: T;
30
+ routerParams?: T;
48
31
  }>;
49
32
  };
50
33
 
@@ -64,16 +47,31 @@ type GetInput<T extends {
64
47
  entity: string;
65
48
  method: string;
66
49
  action: string;
67
- }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']]['input'] : never : never : never : never;
50
+ }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']] extends {
51
+ input: infer I;
52
+ } ? I extends StandardSchemaV1 ? StandardSchemaV1.InferInput<I> : never : never : never : never : never : never;
68
53
  type GetOutput<T extends {
69
54
  service: string;
70
55
  entity: string;
71
56
  method: string;
72
57
  action: string;
73
- }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']]['output'] : never : never : never : never;
58
+ }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']] extends {
59
+ output: infer O;
60
+ } ? O extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<O> : never : never : never : never : never : never;
61
+ type GetRouterParams<T extends {
62
+ service: string;
63
+ entity: string;
64
+ method: string;
65
+ action: string;
66
+ }> = T['service'] extends keyof SilgiSchema ? T['entity'] extends keyof SilgiSchema[T['service']] ? T['method'] extends keyof SilgiSchema[T['service']][T['entity']] ? T['action'] extends keyof SilgiSchema[T['service']][T['entity']][T['method']] ? SilgiSchema[T['service']][T['entity']][T['method']][T['action']] extends {
67
+ router: infer I;
68
+ } ? I extends StandardSchemaV1 ? StandardSchemaV1.InferInput<I> : never : never : never : never : never : never;
74
69
  type ExtractInputFromURI<TURI extends keyof SilgiURIs> = GetInput<ExtractPath<TURI>>;
75
70
  type ExtractOutputFromURI<TURI extends keyof SilgiURIs> = GetOutput<ExtractPath<TURI>>;
71
+ type ExtractRouterParamsFromURI<TURI extends keyof SilgiURIs> = GetRouterParams<ExtractPath<TURI>>;
76
72
 
73
+ interface SilgiRouterTypes {
74
+ }
77
75
  interface SilgiHook {
78
76
  }
79
77
  interface DefaultHooks {
@@ -222,7 +220,6 @@ interface SilgiOptions {
222
220
  * @default 'nitrojs'
223
221
  */
224
222
  environment?: ('nitrojs' | 'h3' | 'undefined');
225
- validationLibrary?: ValidationLibrary;
226
223
  isPackage: boolean;
227
224
  /**
228
225
  *
@@ -703,22 +700,22 @@ type MethodHandlerType<T> = {
703
700
  [Action in keyof T]: T[Action] extends Record<string, any> ? {
704
701
  [Method in keyof T[Action]]: {
705
702
  default?: {
706
- input?: T[Action][Method]['input'] extends infer U ? U : never;
707
- output?: T[Action][Method]['output'] extends infer U ? U : never;
703
+ input?: StandardSchemaV1.InferInput<T[Action][Method]['input']>;
704
+ output?: StandardSchemaV1.InferInput<T[Action][Method]['output']>;
708
705
  };
709
- handler: (router: T[Action][Method]['router'] extends infer U ? U : never, input: T[Action][Method]['input'], shared: SilgiDefaultShared, event: SilgiEvent) => EventHandlerResponse<T[Action][Method]['output'] extends infer U ? U : undefined>;
706
+ handler: (router: StandardSchemaV1.InferInput<T[Action][Method]['router']>, input: StandardSchemaV1.InferInput<T[Action][Method]['input']>, shared: SilgiDefaultShared, event: SilgiEvent) => EventHandlerResponse<StandardSchemaV1.InferOutput<T[Action][Method]['output']>>;
710
707
  modules?: ModuleConfigurations;
711
708
  storage?: StorageConfig<T[Action][Method]['input']>;
712
709
  };
713
710
  } : never;
714
711
  };
715
712
  interface ResolvedMethodHandlerType {
716
- input?: Partial<InferSchemaType<SelectedValidationLibrary, any>>;
717
- output: Partial<InferSchemaType<SelectedValidationLibrary, any>>;
718
- handler: (router: InferSchemaType<SelectedValidationLibrary, any>, input: InferSchemaType<SelectedValidationLibrary, any>, shared: SilgiDefaultShared, event: SilgiEvent) => Promise<InferSchemaType<SelectedValidationLibrary, any>>;
713
+ input?: Partial<BaseSchemaType<any>>;
714
+ output: Partial<BaseSchemaType<any>>;
715
+ handler: (router: StandardSchemaV1.InferInput<any>, input: StandardSchemaV1.InferInput<any>, shared: SilgiDefaultShared, event: SilgiEvent) => Promise<StandardSchemaV1.InferInput<any>>;
719
716
  modules?: ModuleConfigurations;
720
- storage?: StorageConfig<InferSchemaType<SelectedValidationLibrary, any>>;
721
- execute: (input: InferSchemaType<SelectedValidationLibrary, any>, shared: SilgiDefaultShared, event: SilgiEvent) => Promise<InferSchemaType<SelectedValidationLibrary, any>>;
717
+ storage?: StorageConfig<StandardSchemaV1.InferInput<any>>;
718
+ execute: (input: StandardSchemaV1.InferInput<any>, shared: SilgiDefaultShared, event: SilgiEvent) => Promise<StandardSchemaV1.InferInput<any>>;
722
719
  }
723
720
  type MethodResponse<T> = {
724
721
  success: true;
@@ -734,85 +731,15 @@ type MethodResponse<T> = {
734
731
  };
735
732
 
736
733
  declare function silgi(event?: SilgiEvent | Record<string, any>): {
737
- execute: <TURI extends keyof SilgiURIs>(uriString: TURI, input: ExtractInputFromURI<TURI>) => Promise<MethodResponse<(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
738
- service: Service;
739
- entity: Entity;
740
- method: Method;
741
- action: Action;
742
- } : never : never)["service"] extends never ? (TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
743
- service: Service;
744
- entity: Entity;
745
- method: Method;
746
- action: Action;
747
- } : never : never)["entity"] extends keyof SilgiSchema[(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
748
- service: Service;
749
- entity: Entity;
750
- method: Method;
751
- action: Action;
752
- } : never : never)["service"]] ? (TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
753
- service: Service;
754
- entity: Entity;
755
- method: Method;
756
- action: Action;
757
- } : never : never)["method"] extends keyof SilgiSchema[(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
758
- service: Service;
759
- entity: Entity;
760
- method: Method;
761
- action: Action;
762
- } : never : never)["service"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
763
- service: Service;
764
- entity: Entity;
765
- method: Method;
766
- action: Action;
767
- } : never : never)["entity"]] ? (TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
768
- service: Service;
769
- entity: Entity;
770
- method: Method;
771
- action: Action;
772
- } : never : never)["action"] extends keyof SilgiSchema[(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
773
- service: Service;
774
- entity: Entity;
775
- method: Method;
776
- action: Action;
777
- } : never : never)["service"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
778
- service: Service;
779
- entity: Entity;
780
- method: Method;
781
- action: Action;
782
- } : never : never)["entity"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
783
- service: Service;
784
- entity: Entity;
785
- method: Method;
786
- action: Action;
787
- } : never : never)["method"]] ? SilgiSchema[(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
788
- service: Service;
789
- entity: Entity;
790
- method: Method;
791
- action: Action;
792
- } : never : never)["service"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
793
- service: Service;
794
- entity: Entity;
795
- method: Method;
796
- action: Action;
797
- } : never : never)["entity"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
798
- service: Service;
799
- entity: Entity;
800
- method: Method;
801
- action: Action;
802
- } : never : never)["method"]][(TURI extends `${infer Path}` ? Path extends `${infer Service}/${infer Entity}/${infer Method}/${infer Action}` ? {
803
- service: Service;
804
- entity: Entity;
805
- method: Method;
806
- action: Action;
807
- } : never : never)["action"]]["output"] : never : never : never : never>>;
734
+ execute: <TURI extends keyof SilgiURIs>(uriString: TURI, input: ExtractInputFromURI<TURI>) => Promise<MethodResponse<ExtractOutputFromURI<TURI>>>;
808
735
  };
809
736
 
810
- type SilgiServiceInterface<T extends BaseSchemaType<SelectedValidationLibrary>> = {
737
+ type SilgiServiceInterface<T extends BaseSchemaType<StandardSchemaV1>> = {
811
738
  [Action in keyof T]: T[Action] extends Record<string, any> ? {
812
739
  [Method in keyof T[Action]]: {
813
- input: InferSchemaType<SelectedValidationLibrary, T[Action][Method]['input']>;
814
- output?: InferSchemaType<SelectedValidationLibrary, T[Action][Method]['output']>;
815
- router?: InferSchemaType<SelectedValidationLibrary, T[Action][Method]['router']>;
740
+ input: T[Action][Method]['input'];
741
+ output: T[Action][Method]['output'];
742
+ router: T[Action][Method]['router'];
816
743
  };
817
744
  } : never;
818
745
  };
@@ -878,4 +805,4 @@ interface SilgiConfig extends Pick<Silgi, 'services' | 'shared' | 'uris' | 'sche
878
805
  }
879
806
  type SilgiFunction = typeof silgi;
880
807
 
881
- export { type Awaitable as A, type BaseSchemaType as B, type CreateScope as C, type DeepPartial as D, type ExtendShared as E, type ModuleOptions as M, type RequiredServiceType as R, type SilgiOptions as S, type URIsTypes as U, type ValidationLibrary as V, type SilgiModuleOptions as a, type SilgiConfig as b, SilgiHelper as c, type ModuleDefinition as d, type SilgiModule as e, type SelectedValidationLibrary as f, type SilgiServiceInterface as g, type DefaultNamespaces as h, type Silgi as i, type SilgiOperation as j, type MergedSilgiSchema as k, type ServiceType as l, type SilgiSchema as m, type SilgiModuleShared as n, type SilgiEvent as o, type SilgiModuleMethods as p, type SilgiModules as q, type SilgiNamespaces as r, type SilgiValidationSchema as s, type SilgiDefaultShared as t, type SilgiURIs as u, type SilgiStorageBase as v, silgi as w, type SilgiHook as x, type DefaultMethods as y, type DefaultHooks as z };
808
+ export { type DefaultMethods as A, type BaseSchemaType as B, type DefaultHooks as C, type DeepPartial as D, type ExtendShared as E, type Awaitable as F, type CreateScope as G, type ModuleOptions as M, type RequiredServiceType as R, type SilgiOptions as S, type URIsTypes as U, type SilgiModuleOptions as a, type SilgiConfig as b, SilgiHelper as c, type ModuleDefinition as d, type SilgiModule as e, type SilgiServiceInterface as f, type DefaultNamespaces as g, type Silgi as h, type SilgiOperation as i, type MergedSilgiSchema as j, type ServiceType as k, type SilgiSchema as l, type SilgiModuleShared as m, type SilgiEvent as n, type SilgiModuleMethods as o, type SilgiModules as p, type SilgiNamespaces as q, type SilgiDefaultShared as r, type SilgiURIs as s, type ExtractInputFromURI as t, type ExtractOutputFromURI as u, type ExtractRouterParamsFromURI as v, type SilgiStorageBase as w, silgi as x, type SilgiRouterTypes as y, type SilgiHook as z };
@@ -139,65 +139,7 @@ ${this.stack}`;
139
139
  }
140
140
  }
141
141
 
142
- const plugins = {
143
- zod: {
144
- name: "zod",
145
- isSchemaType: (obj) => obj?._def?.typeName !== undefined,
146
- getRouterParams: (routerObj) => {
147
- try {
148
- const shape = routerObj?.shape?.params?.shape;
149
- return shape ? Object.keys(shape) : null;
150
- } catch {
151
- return null;
152
- }
153
- },
154
- internalKeys: ["_def", "shape"]
155
- // Zod-specific internal keys
156
- },
157
- yup: {
158
- name: "yup",
159
- isSchemaType: (obj) => obj?._type !== undefined,
160
- getRouterParams: (routerObj) => {
161
- return routerObj?.fields ? Object.keys(routerObj.fields) : null;
162
- },
163
- internalKeys: ["_type", "fields"]
164
- // Yup-specific internal keys
165
- }
166
- };
167
- class SchemaValidatorRegistry {
168
- currentValidator = null;
169
- validators = [];
170
- constructor(validationLibrary = "zod") {
171
- this.setValidationLibrary(validationLibrary);
172
- }
173
- isInternalKey(key) {
174
- if (!this.currentValidator) return false;
175
- return this.currentValidator.internalKeys.includes(key);
176
- }
177
- setValidationLibrary(library) {
178
- this.validators = [];
179
- const plugin = plugins[library];
180
- if (plugin) {
181
- this.currentValidator = plugin;
182
- this.register(plugin);
183
- }
184
- }
185
- register(plugin) {
186
- this.validators.push(plugin);
187
- }
188
- getParams(routerObj) {
189
- for (const validator of this.validators) {
190
- if (validator.isSchemaType(routerObj)) {
191
- return validator.getRouterParams(routerObj);
192
- }
193
- }
194
- return null;
195
- }
196
- }
197
- const schemaRegistry = new SchemaValidatorRegistry();
198
-
199
142
  function traverseObject(silgi, obj, currentPath = []) {
200
- schemaRegistry.setValidationLibrary(silgi.options.validationLibrary || "zod");
201
143
  const uriMap = /* @__PURE__ */ new Map();
202
144
  function traverse(node, path = []) {
203
145
  if (!node || typeof node !== "object")
@@ -206,7 +148,15 @@ function traverseObject(silgi, obj, currentPath = []) {
206
148
  const basePath = path.join("/");
207
149
  let paramString = "";
208
150
  if (node.router) {
209
- const params = schemaRegistry.getParams(node.router);
151
+ let params = null;
152
+ if (node.router?._def?.typeName !== undefined) {
153
+ try {
154
+ const shape = node.router?.shape?.params?.shape;
155
+ params = shape ? Object.keys(shape) : null;
156
+ } catch {
157
+ params = null;
158
+ }
159
+ }
210
160
  if (params?.length) {
211
161
  paramString = params.map((p) => `:${p}`).join("/");
212
162
  }
@@ -215,7 +165,7 @@ function traverseObject(silgi, obj, currentPath = []) {
215
165
  return;
216
166
  }
217
167
  for (const key in node) {
218
- if (!schemaRegistry.isInternalKey(key)) {
168
+ if (!["_type", "fields"].includes(key)) {
219
169
  traverse(node[key], [...path, key]);
220
170
  }
221
171
  }
@@ -330,14 +280,16 @@ async function generateUris(silgi) {
330
280
  silgi.hook("read:core.ts", async (data) => {
331
281
  const { context, object, path } = await data();
332
282
  const uriMap = traverseObject(silgi, object.schemas, []);
333
- const uriContent = Array.from(uriMap.entries()).map(([uri, params]) => ` '${uri}': '${params}',`).join("\n");
334
- const newContext = context.replace(
335
- "export const uris = {}",
336
- `export const uris = {
283
+ if (uriMap.size > 0) {
284
+ const uriContent = Array.from(uriMap.entries()).map(([uri, params]) => ` '${uri}': '${params}',`).join("\n");
285
+ const newContext = context.replace(
286
+ /export const uris = \{[^}]*\}/,
287
+ `export const uris = {
337
288
  ${uriContent}
338
289
  }`
339
- );
340
- await promises.writeFile(path, newContext);
290
+ );
291
+ await promises.writeFile(path, newContext);
292
+ }
341
293
  });
342
294
  }
343
295
  async function findAction(silgi, uri) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "silgi",
3
3
  "type": "module",
4
- "version": "0.2.3",
4
+ "version": "0.3.0",
5
5
  "sideEffects": false,
6
6
  "exports": {
7
7
  ".": {
@@ -50,10 +50,24 @@
50
50
  "dist",
51
51
  "package.json"
52
52
  ],
53
+ "peerDependencies": {
54
+ "@nuxt/kit": "^3.15.3",
55
+ "typescript": "^5.7.3",
56
+ "zod": "^3.24.1"
57
+ },
58
+ "peerDependenciesMeta": {
59
+ "@nuxt/kit": {
60
+ "optional": true
61
+ },
62
+ "zod": {
63
+ "optional": true
64
+ }
65
+ },
53
66
  "dependencies": {
54
67
  "@antfu/eslint-config": "^3.16.0",
55
68
  "@nuxt/schema": "^3.15.2",
56
69
  "@oxc-parser/wasm": "^0.48.0",
70
+ "@standard-schema/spec": "^1.0.0",
57
71
  "c12": "^2.0.1",
58
72
  "citty": "^0.1.6",
59
73
  "consola": "^3.4.0",
@@ -79,15 +93,15 @@
79
93
  "unctx": "^2.4.1",
80
94
  "unimport": "^4.0.0",
81
95
  "unstorage": "^1.14.4",
82
- "untyped": "^1.5.2",
83
- "zod": "^3.24.1"
96
+ "untyped": "^1.5.2"
84
97
  },
85
98
  "devDependencies": {
86
99
  "@nuxt/kit": "^3.15.3",
87
100
  "@types/node": "^22.10.7",
88
101
  "@types/semver": "^7.5.8",
89
102
  "unbuild": "^3.3.1",
90
- "vitest": "^3.0.3"
103
+ "vitest": "^3.0.3",
104
+ "zod": "^3.24.1"
91
105
  },
92
106
  "resolutions": {
93
107
  "@silgi/modules": "workspace:*",