UNPKG

@decaf-ts/decorator-validation

Version:
67 lines 6.24 kB
"use strict"; // import { z } from "zod/index"; // import { hashedBy, Model, ModelArg, serializedBy } from "../../model"; // import { Tool, ToolParameters } from "fastmcp"; // // export const createModelParameters = z // .array( // z.object({ // name: z.string(), // type: z.enum(["string", "number", "boolean", "Date"]), // decorators: z.array( // z.object({ // name: z.string(), // args: z.array(z.any()).optional(), // }) // ), // }) // ) // .describe("Model properties with their decorators"); // // type T = z.infer<typeof createModelParameters> & ToolParameters; // // export const createModelTool: Tool<undefined, T> = { // name: "create-model", // description: "Create a new model class with validation decorators", // parameters: createModelParameters, // execute: async (args: T) => { // const { name, properties, options } = args; // // // Create dynamic model class // const dynamicModel = class extends Model { // constructor(data?: ModelArg<typeof dynamicModel>) { // super(data); // Model.fromModel(this, data); // } // }; // // // Apply model-level decorators // if (options?.hashAlgorithm) { // hashedBy(options.hashAlgorithm)(dynamicModel); // } // if (options?.serializer) { // serializedBy(options.serializer)(dynamicModel); // } // // // Apply property decorators // properties.forEach((prop) => { // prop.decorators.forEach((decorator) => { // const decoratorFn = getDecoratorFunction(decorator.name); // if (decoratorFn) { // decoratorFn(...(decorator.args || []))( // dynamicModel.prototype, // prop.name // ); // } // }); // }); // // // Register the model // Object.defineProperty(dynamicModel, "name", { value: name }); // Model.register(dynamicModel); // modelRegistry.set(name, dynamicModel); // // return `Model "${name}" created and registered successfully`; // }, // }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlTW9kZWwudG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AvdG9vbHMvY3JlYXRlTW9kZWwudG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUNBQWlDO0FBQ2pDLHlFQUF5RTtBQUN6RSxrREFBa0Q7QUFDbEQsRUFBRTtBQUNGLHlDQUF5QztBQUN6QyxZQUFZO0FBQ1osaUJBQWlCO0FBQ2pCLDBCQUEwQjtBQUMxQiwrREFBK0Q7QUFDL0QsNkJBQTZCO0FBQzdCLHFCQUFxQjtBQUNyQiw4QkFBOEI7QUFDOUIsK0NBQStDO0FBQy9DLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNULE1BQU07QUFDTix5REFBeUQ7QUFDekQsRUFBRTtBQUNGLG1FQUFtRTtBQUNuRSxFQUFFO0FBQ0YsdURBQXVEO0FBQ3ZELDBCQUEwQjtBQUMxQix3RUFBd0U7QUFDeEUsdUNBQXVDO0FBQ3ZDLGtDQUFrQztBQUNsQyxrREFBa0Q7QUFDbEQsRUFBRTtBQUNGLG9DQUFvQztBQUNwQyxpREFBaUQ7QUFDakQsNERBQTREO0FBQzVELHVCQUF1QjtBQUN2Qix1Q0FBdUM7QUFDdkMsVUFBVTtBQUNWLFNBQVM7QUFDVCxFQUFFO0FBQ0Ysc0NBQXNDO0FBQ3RDLG9DQUFvQztBQUNwQyx1REFBdUQ7QUFDdkQsUUFBUTtBQUNSLGlDQUFpQztBQUNqQyx3REFBd0Q7QUFDeEQsUUFBUTtBQUNSLEVBQUU7QUFDRixtQ0FBbUM7QUFDbkMscUNBQXFDO0FBQ3JDLGlEQUFpRDtBQUNqRCxvRUFBb0U7QUFDcEUsNkJBQTZCO0FBQzdCLG9EQUFvRDtBQUNwRCxzQ0FBc0M7QUFDdEMsd0JBQXdCO0FBQ3hCLGVBQWU7QUFDZixZQUFZO0FBQ1osWUFBWTtBQUNaLFVBQVU7QUFDVixFQUFFO0FBQ0YsNEJBQTRCO0FBQzVCLG9FQUFvRTtBQUNwRSxvQ0FBb0M7QUFDcEMsNkNBQTZDO0FBQzdDLEVBQUU7QUFDRixvRUFBb0U7QUFDcEUsT0FBTztBQUNQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyB6IH0gZnJvbSBcInpvZC9pbmRleFwiO1xuLy8gaW1wb3J0IHsgaGFzaGVkQnksIE1vZGVsLCBNb2RlbEFyZywgc2VyaWFsaXplZEJ5IH0gZnJvbSBcIi4uLy4uL21vZGVsXCI7XG4vLyBpbXBvcnQgeyBUb29sLCBUb29sUGFyYW1ldGVycyB9IGZyb20gXCJmYXN0bWNwXCI7XG4vL1xuLy8gZXhwb3J0IGNvbnN0IGNyZWF0ZU1vZGVsUGFyYW1ldGVycyA9IHpcbi8vICAgLmFycmF5KFxuLy8gICAgIHoub2JqZWN0KHtcbi8vICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4vLyAgICAgICB0eXBlOiB6LmVudW0oW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiLCBcIkRhdGVcIl0pLFxuLy8gICAgICAgZGVjb3JhdG9yczogei5hcnJheShcbi8vICAgICAgICAgei5vYmplY3Qoe1xuLy8gICAgICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4vLyAgICAgICAgICAgYXJnczogei5hcnJheSh6LmFueSgpKS5vcHRpb25hbCgpLFxuLy8gICAgICAgICB9KVxuLy8gICAgICAgKSxcbi8vICAgICB9KVxuLy8gICApXG4vLyAgIC5kZXNjcmliZShcIk1vZGVsIHByb3BlcnRpZXMgd2l0aCB0aGVpciBkZWNvcmF0b3JzXCIpO1xuLy9cbi8vIHR5cGUgVCA9IHouaW5mZXI8dHlwZW9mIGNyZWF0ZU1vZGVsUGFyYW1ldGVycz4gJiBUb29sUGFyYW1ldGVycztcbi8vXG4vLyBleHBvcnQgY29uc3QgY3JlYXRlTW9kZWxUb29sOiBUb29sPHVuZGVmaW5lZCwgVD4gPSB7XG4vLyAgIG5hbWU6IFwiY3JlYXRlLW1vZGVsXCIsXG4vLyAgIGRlc2NyaXB0aW9uOiBcIkNyZWF0ZSBhIG5ldyBtb2RlbCBjbGFzcyB3aXRoIHZhbGlkYXRpb24gZGVjb3JhdG9yc1wiLFxuLy8gICBwYXJhbWV0ZXJzOiBjcmVhdGVNb2RlbFBhcmFtZXRlcnMsXG4vLyAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiBUKSA9PiB7XG4vLyAgICAgY29uc3QgeyBuYW1lLCBwcm9wZXJ0aWVzLCBvcHRpb25zIH0gPSBhcmdzO1xuLy9cbi8vICAgICAvLyBDcmVhdGUgZHluYW1pYyBtb2RlbCBjbGFzc1xuLy8gICAgIGNvbnN0IGR5bmFtaWNNb2RlbCA9IGNsYXNzIGV4dGVuZHMgTW9kZWwge1xuLy8gICAgICAgY29uc3RydWN0b3IoZGF0YT86IE1vZGVsQXJnPHR5cGVvZiBkeW5hbWljTW9kZWw+KSB7XG4vLyAgICAgICAgIHN1cGVyKGRhdGEpO1xuLy8gICAgICAgICBNb2RlbC5mcm9tTW9kZWwodGhpcywgZGF0YSk7XG4vLyAgICAgICB9XG4vLyAgICAgfTtcbi8vXG4vLyAgICAgLy8gQXBwbHkgbW9kZWwtbGV2ZWwgZGVjb3JhdG9yc1xuLy8gICAgIGlmIChvcHRpb25zPy5oYXNoQWxnb3JpdGhtKSB7XG4vLyAgICAgICBoYXNoZWRCeShvcHRpb25zLmhhc2hBbGdvcml0aG0pKGR5bmFtaWNNb2RlbCk7XG4vLyAgICAgfVxuLy8gICAgIGlmIChvcHRpb25zPy5zZXJpYWxpemVyKSB7XG4vLyAgICAgICBzZXJpYWxpemVkQnkob3B0aW9ucy5zZXJpYWxpemVyKShkeW5hbWljTW9kZWwpO1xuLy8gICAgIH1cbi8vXG4vLyAgICAgLy8gQXBwbHkgcHJvcGVydHkgZGVjb3JhdG9yc1xuLy8gICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcCkgPT4ge1xuLy8gICAgICAgcHJvcC5kZWNvcmF0b3JzLmZvckVhY2goKGRlY29yYXRvcikgPT4ge1xuLy8gICAgICAgICBjb25zdCBkZWNvcmF0b3JGbiA9IGdldERlY29yYXRvckZ1bmN0aW9uKGRlY29yYXRvci5uYW1lKTtcbi8vICAgICAgICAgaWYgKGRlY29yYXRvckZuKSB7XG4vLyAgICAgICAgICAgZGVjb3JhdG9yRm4oLi4uKGRlY29yYXRvci5hcmdzIHx8IFtdKSkoXG4vLyAgICAgICAgICAgICBkeW5hbWljTW9kZWwucHJvdG90eXBlLFxuLy8gICAgICAgICAgICAgcHJvcC5uYW1lXG4vLyAgICAgICAgICAgKTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSk7XG4vLyAgICAgfSk7XG4vL1xuLy8gICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2RlbFxuLy8gICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkeW5hbWljTW9kZWwsIFwibmFtZVwiLCB7IHZhbHVlOiBuYW1lIH0pO1xuLy8gICAgIE1vZGVsLnJlZ2lzdGVyKGR5bmFtaWNNb2RlbCk7XG4vLyAgICAgbW9kZWxSZWdpc3RyeS5zZXQobmFtZSwgZHluYW1pY01vZGVsKTtcbi8vXG4vLyAgICAgcmV0dXJuIGBNb2RlbCBcIiR7bmFtZX1cIiBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseWA7XG4vLyAgIH0sXG4vLyB9O1xuIl19