@deessejs/functions 0.0.13 → 0.0.14

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/api/index.js CHANGED
@@ -6,7 +6,9 @@ const parse_1 = require("../functions/parse");
6
6
  const types_1 = require("../types");
7
7
  function createAPI(config) {
8
8
  const hydrate = (node) => {
9
- if (node && typeof node === "object" && node._type === "query") {
9
+ if (node &&
10
+ typeof node === "object" &&
11
+ (node._type === "query" || node._type === "mutation")) {
10
12
  const def = node;
11
13
  return (input) => {
12
14
  const parsed = (0, parse_1.parseArgs)(def.args, input);
@@ -1,8 +1,8 @@
1
- import z, { ZodType } from "zod";
2
- import { QueryDefinition } from "../context/define";
1
+ import z from "zod";
2
+ import { MutationDefinition, QueryDefinition } from "../context";
3
3
  import { AsyncResult } from "../types";
4
- type InferQueryFn<T> = T extends QueryDefinition<any, infer TArgs extends ZodType<any, any, any>, infer TOutput, infer TError> ? (input: z.input<TArgs>) => AsyncResult<TOutput, TError> : never;
4
+ type InferOperationFn<T> = T extends QueryDefinition<any, infer TArgs, infer TOutput, infer TError> | MutationDefinition<any, infer TArgs, infer TOutput, infer TError> ? (input: z.input<TArgs>) => AsyncResult<TOutput, TError> : never;
5
5
  export type ApiRouter<T> = {
6
- [K in keyof T]: T[K] extends QueryDefinition<any, any, any, any> ? InferQueryFn<T[K]> : T[K] extends Record<string, any> ? ApiRouter<T[K]> : never;
6
+ [K in keyof T]: T[K] extends QueryDefinition<any, any, any, any> | MutationDefinition<any, any, any, any> ? InferOperationFn<T[K]> : T[K] extends Record<string, any> ? ApiRouter<T[K]> : never;
7
7
  };
8
8
  export {};
@@ -1,13 +1,8 @@
1
1
  import z, { ZodType } from "zod";
2
2
  import { Exception } from "../errors/types";
3
3
  import { AsyncResult } from "../types";
4
- export type QueryDefinition<TContext, TArgs extends ZodType, TOutput, TError extends Exception> = {
5
- _type: "query";
6
- name: string;
7
- args: TArgs;
8
- handler: (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
9
- };
10
- export type APINode = QueryDefinition<any, any, any, any> | {
4
+ import { CommandsDefinition, MutationDefinition, QueryDefinition } from "./types";
5
+ export type APINode = CommandsDefinition | {
11
6
  [key: string]: APINode;
12
7
  };
13
8
  export declare function defineContext<TContext extends Record<string, unknown>>(): {
@@ -16,5 +11,10 @@ export declare function defineContext<TContext extends Record<string, unknown>>(
16
11
  args: TArgs;
17
12
  handler: (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
18
13
  }) => QueryDefinition<TContext, TArgs, TOutput, TError>;
14
+ mutation: <TArgs extends ZodType<any, any, any>, TOutput, TError extends Exception = Exception>(options: {
15
+ name: string;
16
+ args: TArgs;
17
+ handler: (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
18
+ }) => MutationDefinition<TContext, TArgs, TOutput, TError>;
19
19
  group: <T extends Record<string, APINode>>(definitions: T) => T;
20
20
  };
@@ -11,6 +11,14 @@ function defineContext() {
11
11
  handler: options.handler,
12
12
  };
13
13
  },
14
+ mutation: (options) => {
15
+ return {
16
+ _type: "mutation",
17
+ name: options.name,
18
+ args: options.args,
19
+ handler: options.handler,
20
+ };
21
+ },
14
22
  group: (definitions) => {
15
23
  return definitions;
16
24
  },
@@ -1 +1,2 @@
1
1
  export * from "./define";
2
+ export * from "./types";
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./define"), exports);
18
+ __exportStar(require("./types"), exports);
@@ -1 +1,16 @@
1
+ import z, { ZodType } from "zod";
2
+ import { Exception } from "../errors/types";
3
+ import { AsyncResult } from "../types";
1
4
  export type Context = Record<string, unknown>;
5
+ export type CommandDefinition<TContext, TArgs extends ZodType, TOutput, TError extends Exception> = {
6
+ name: string;
7
+ args: TArgs;
8
+ handler: (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
9
+ };
10
+ export type QueryDefinition<TContext, TArgs extends ZodType, TOutput, TError extends Exception> = CommandDefinition<TContext, TArgs, TOutput, TError> & {
11
+ _type: "query";
12
+ };
13
+ export type MutationDefinition<TContext, TArgs extends ZodType, TOutput, TError extends Exception> = CommandDefinition<TContext, TArgs, TOutput, TError> & {
14
+ _type: "mutation";
15
+ };
16
+ export type CommandsDefinition = QueryDefinition<any, any, any, any> | MutationDefinition<any, any, any, any>;
@@ -1,15 +1,8 @@
1
1
  import { z, ZodType } from "zod";
2
2
  import { Exception } from "../errors/types";
3
3
  import { AsyncResult } from "../types";
4
- export declare function mutation<TArgs extends ZodType<any, any, any>, TOutput, TError extends Exception = Exception>(options: {
5
- args: TArgs;
6
- handler: (args: z.infer<TArgs>) => AsyncResult<TOutput, TError>;
7
- }): (input: z.core.output<TArgs>) => AsyncResult<TOutput, TError>;
8
- export declare const createMutation: <TContext extends Record<string, unknown> = Record<string, unknown>>() => <TArgs extends ZodType<any, any, any>, TOutput, TError extends Exception = Exception>(options: {
9
- args: TArgs;
10
- handler: (args: z.infer<TArgs>) => AsyncResult<TOutput, TError>;
11
- }) => (input: z.core.output<TArgs>) => AsyncResult<TOutput, TError>;
12
- export declare function mutationWithContext<TArgs extends ZodType<any, any, any>, TOutput, TError extends Exception = Exception, TContext extends Record<string, unknown> = Record<string, unknown>>(options: {
4
+ export declare function mutation<TArgs extends ZodType<any, any, any>, TOutput, TError extends Exception = Exception, TContext extends Record<string, unknown> = Record<string, unknown>>(options: {
5
+ name: string;
13
6
  args: TArgs;
14
7
  handler: (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
15
- }): (input: z.core.output<TArgs>, context?: TContext) => AsyncResult<TOutput, TError>;
8
+ }): (input: z.core.output<TArgs>, context: TContext) => AsyncResult<TOutput, TError>;
@@ -1,43 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMutation = void 0;
4
3
  exports.mutation = mutation;
5
- exports.mutationWithContext = mutationWithContext;
6
4
  const errors_1 = require("../errors");
7
5
  const types_1 = require("../types");
8
6
  const parse_1 = require("./parse");
9
- // Mutation functions do not accept context to avoid side effects
10
- // They remain pure and focused on state modification
11
7
  function mutation(options) {
12
- return (input) => {
13
- const parsed = (0, parse_1.parseArgs)(options.args, input);
14
- return parsed.match({
15
- onSuccess: (data) => options.handler(data),
16
- onFailure: (error) => {
17
- const ValidationError = (0, errors_1.exception)({
18
- name: "ValidationError",
19
- message: error.message,
20
- });
21
- return Promise.resolve((0, types_1.failure)(ValidationError));
22
- },
23
- });
24
- };
25
- }
26
- // Mutation builder for consistency with query builder
27
- const createMutation = () => {
28
- return (options) => {
29
- return mutation(options);
30
- };
31
- };
32
- exports.createMutation = createMutation;
33
- // Optional: Mutation that can access context but should not modify it
34
- function mutationWithContext(options) {
35
8
  return (input, context) => {
36
9
  const parsed = (0, parse_1.parseArgs)(options.args, input);
37
10
  return parsed.match({
38
11
  onSuccess: (data) => {
39
- // Use provided context or get from global context
40
- const ctx = context ?? globalThis.__context;
12
+ const ctx = context;
41
13
  return options.handler(data, ctx);
42
14
  },
43
15
  onFailure: (error) => {
@@ -27,7 +27,8 @@ export type Query<TArgs extends ZodType = ZodType, TError extends Exception = Ex
27
27
  args: TArgs;
28
28
  handler: (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
29
29
  }) => (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
30
- export type Mutation<TArgs extends ZodType = ZodType, TError extends Exception = Exception, TOutput = Unit> = (options: {
30
+ export type Mutation<TArgs extends ZodType = ZodType, TError extends Exception = Exception, TOutput = Unit, TContext = {}> = (options: {
31
+ name: string;
31
32
  args: TArgs;
32
- handler: (args: z.infer<TArgs>) => AsyncResult<TOutput, TError>;
33
- }) => (args: z.infer<TArgs>) => AsyncResult<TOutput, TError>;
33
+ handler: (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
34
+ }) => (args: z.infer<TArgs>, ctx: TContext) => AsyncResult<TOutput, TError>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deessejs/functions",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "description": "A powerful utility library for building type-safe APIs and functions with context management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",