@schmock/faker 2.0.0 → 2.0.1

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/index.d.ts CHANGED
@@ -1,19 +1,5 @@
1
- import type { JSONSchema7 } from "json-schema";
2
- export interface SchemaGenerationContext {
3
- schema: JSONSchema7;
4
- count?: number;
5
- overrides?: Record<string, any>;
6
- params?: Record<string, string>;
7
- state?: any;
8
- query?: Record<string, string>;
9
- seed?: number;
10
- }
11
- export interface FakerPluginOptions {
12
- schema: JSONSchema7;
13
- count?: number;
14
- overrides?: Record<string, any>;
15
- seed?: number;
16
- }
1
+ export type SchemaGenerationContext = Schmock.SchemaGenerationContext;
2
+ export type FakerPluginOptions = Schmock.FakerPluginOptions;
17
3
  export declare function fakerPlugin(options: FakerPluginOptions): Schmock.Plugin;
18
- export declare function generateFromSchema(options: SchemaGenerationContext): Promise<any>;
4
+ export declare function generateFromSchema(options: SchemaGenerationContext): Promise<unknown>;
19
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CA+CvE;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,GAAG,CAAC,CA8Cd"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE5D,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CA+CvE;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,OAAO,CAAC,CA4ClB"}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{ResourceLimitError as l,SchemaGenerationError as PQ,SchemaValidationError as d}from"@schmock/core";var G=1e4,M=10,C=3,H=3,I=100,T=0.05;import{base as p,en as o,Faker as i}from"@faker-js/faker";import{generate as n}from"json-schema-faker";function D(Q){let $=new i({locale:[o,p]});if(Q!==void 0)$.seed(Q);return $}async function _(Q,$){let B=$??Math.floor(Math.random()*2147483647);return n(Q,{seed:B,optionalsProbability:1,alwaysFakeOptionals:!0,useDefaultValue:!0,ignoreMissingRefs:!0,failOnInvalidTypes:!1,failOnInvalidFormat:!1,extensions:{faker:D($)}})}var v=new Set(["__proto__","constructor","prototype"]);function y(Q,$,B=Math.random){if($!==void 0){if($<0)return 0;return $}if(Q.minItems!==void 0&&Q.maxItems!==void 0)return Math.floor(B()*(Q.maxItems-Q.minItems+1))+Q.minItems;if(Q.minItems!==void 0)return Math.max(Q.minItems,C);if(Q.maxItems!==void 0)return Math.min(Q.maxItems,C);return C}function P(Q,$,B,Z,K){if(!$)return Q;let X=structuredClone(Q);for(let[W,z]of Object.entries($)){if(v.has(W))continue;if(W.includes("."))m(X,W,z,{params:B,state:Z,query:K});else if(typeof z==="object"&&z!==null&&!Array.isArray(z))if(X[W]&&typeof X[W]==="object")X[W]=P(X[W],z,B,Z,K);else X[W]=P({},z,B,Z,K);else if(typeof z==="string"&&z.includes("{{"))X[W]=E(z,{params:B,state:Z,query:K});else X[W]=z}return X}function m(Q,$,B,Z){let K=$.split("."),X=Q;for(let z=0;z<K.length-1;z++){let q=K[z];if(v.has(q))return;if(!(q in X)||typeof X[q]!=="object"||X[q]===null)X[q]={};X=X[q]}let W=K[K.length-1];if(v.has(W))return;if(typeof B==="string"&&B.includes("{{"))X[W]=E(B,Z);else X[W]=B}function E(Q,$){let B=Q.match(/^\{\{\s*([^}]+)\s*\}\}$/);if(B){let X=B[1].trim().split("."),W=$;for(let z of X)if(W&&typeof W==="object")W=W[z];else return Q;return W!==void 0?W:Q}return Q.replace(/\{\{\s*([^}]+)\s*\}\}/g,(K,X)=>{let W=X.trim().split("."),z=$;for(let q of W)if(z&&typeof z==="object")z=z[q];else return K;return z!==void 0?String(z):K})}var r=[{keywords:["email"],fakerMethod:"internet.email",schemaType:"string",minScore:0.6,format:"email"},{keywords:["username","user_name","login","handle"],fakerMethod:"internet.username",schemaType:"string",minScore:0.6},{keywords:["password","passwd","secret"],fakerMethod:"internet.password",schemaType:"string",minScore:0.6},{keywords:["token","api_key","apikey","access_token","refresh_token"],fakerMethod:"string.alphanumeric",schemaType:"string",minScore:0.8}],h=[{keywords:["first_name","firstname","given_name","forename"],fakerMethod:"person.firstName",schemaType:"string",minScore:0.6},{keywords:["last_name","lastname","surname","family_name"],fakerMethod:"person.lastName",schemaType:"string",minScore:0.6},{keywords:["full_name","fullname","display_name","displayname","full_name"],fakerMethod:"person.fullName",schemaType:"string",minScore:0.6},{keywords:["name"],fakerMethod:"person.fullName",schemaType:"string",minScore:0.6},{keywords:["middle_name","middlename"],fakerMethod:"person.middleName",schemaType:"string",minScore:0.8},{keywords:["prefix","honorific","salutation"],fakerMethod:"person.prefix",schemaType:"string",minScore:0.8},{keywords:["suffix"],fakerMethod:"person.suffix",schemaType:"string",minScore:0.9},{keywords:["gender","sex"],fakerMethod:"person.sex",schemaType:"string",minScore:0.8},{keywords:["bio","biography"],fakerMethod:"lorem.paragraph",schemaType:"string",minScore:0.8},{keywords:["job_title","jobtitle","position","occupation","job","role"],fakerMethod:"person.jobTitle",schemaType:"string",minScore:0.6},{keywords:["job_area","department","division","team"],fakerMethod:"person.jobArea",schemaType:"string",minScore:0.8},{keywords:["zodiac","zodiac_sign"],fakerMethod:"person.zodiacSign",schemaType:"string",minScore:0.9}],c=[{keywords:["phone","mobile","cell","tel","telephone","cellphone","fax"],fakerMethod:"phone.number",schemaType:"string",minScore:0.6},{keywords:["imei"],fakerMethod:"phone.imei",schemaType:"string",minScore:0.9}],s=[{keywords:["street","street_address"],fakerMethod:"location.streetAddress",schemaType:"string",minScore:0.6},{keywords:["address","mailing_address","postal_address"],fakerMethod:"location.streetAddress",schemaType:"string",minScore:0.6},{keywords:["city","town"],fakerMethod:"location.city",schemaType:"string",minScore:0.6},{keywords:["state","province","region"],fakerMethod:"location.state",schemaType:"string",minScore:0.8},{keywords:["country"],fakerMethod:"location.country",schemaType:"string",minScore:0.8},{keywords:["country_code","countrycode"],fakerMethod:"location.countryCode",schemaType:"string",minScore:0.8},{keywords:["county"],fakerMethod:"location.county",schemaType:"string",minScore:0.9},{keywords:["continent"],fakerMethod:"location.continent",schemaType:"string",minScore:0.9},{keywords:["zip","zipcode","zip_code","postal","postal_code"],fakerMethod:"location.zipCode",schemaType:"string",minScore:0.6},{keywords:["latitude","lat"],fakerMethod:"location.latitude",schemaType:"number",minScore:0.6},{keywords:["longitude","lng","lon","long"],fakerMethod:"location.longitude",schemaType:"number",minScore:0.6},{keywords:["timezone","time_zone","tz"],fakerMethod:"location.timeZone",schemaType:"string",minScore:0.8},{keywords:["building_number"],fakerMethod:"location.buildingNumber",schemaType:"string",minScore:0.9}],t=[{keywords:["url","website","link","href","homepage","webpage"],fakerMethod:"internet.url",schemaType:"string",minScore:0.6},{keywords:["avatar","photo_url","profile_image","image_url","picture","thumbnail","icon"],fakerMethod:"image.avatar",schemaType:"string",minScore:0.6},{keywords:["domain","hostname","domain_name"],fakerMethod:"internet.domainName",schemaType:"string",minScore:0.8},{keywords:["ip","ip_address","ipaddress","ipv4"],fakerMethod:"internet.ipv4",schemaType:"string",minScore:0.8},{keywords:["ipv6"],fakerMethod:"internet.ipv6",schemaType:"string",minScore:0.9},{keywords:["mac","mac_address"],fakerMethod:"internet.mac",schemaType:"string",minScore:0.9},{keywords:["user_agent","useragent"],fakerMethod:"internet.userAgent",schemaType:"string",minScore:0.9},{keywords:["port"],fakerMethod:"internet.port",schemaType:"number",minScore:0.9},{keywords:["protocol"],fakerMethod:"internet.protocol",schemaType:"string",minScore:0.9}],a=[{keywords:["uuid","guid"],fakerMethod:"string.uuid",schemaType:"string",minScore:0.6},{keywords:["sku"],fakerMethod:"string.alphanumeric",schemaType:"string",minScore:0.9},{keywords:["slug"],fakerMethod:"lorem.slug",schemaType:"string",minScore:0.8},{keywords:["isbn"],fakerMethod:"commerce.isbn",schemaType:"string",minScore:0.9},{keywords:["vin"],fakerMethod:"vehicle.vin",schemaType:"string",minScore:0.9},{keywords:["iban"],fakerMethod:"finance.iban",schemaType:"string",minScore:0.9},{keywords:["bic","swift"],fakerMethod:"finance.bic",schemaType:"string",minScore:0.9},{keywords:["ssn","social_security"],fakerMethod:"string.numeric",schemaType:"string",minScore:0.9}],e=[{keywords:["description","desc","summary","overview","about","excerpt"],fakerMethod:"lorem.paragraph",schemaType:"string",minScore:0.6},{keywords:["content","body","text","message"],fakerMethod:"lorem.paragraphs",schemaType:"string",minScore:0.6},{keywords:["title","heading","subject","headline"],fakerMethod:"lorem.sentence",schemaType:"string",minScore:0.6},{keywords:["tag","label","category","keyword"],fakerMethod:"lorem.word",schemaType:"string",minScore:0.8},{keywords:["comment","note","remark","feedback","review"],fakerMethod:"lorem.sentence",schemaType:"string",minScore:0.8},{keywords:["sentence"],fakerMethod:"lorem.sentence",schemaType:"string",minScore:0.9},{keywords:["paragraph"],fakerMethod:"lorem.paragraph",schemaType:"string",minScore:0.9},{keywords:["word"],fakerMethod:"lorem.word",schemaType:"string",minScore:0.9}],QQ=[{keywords:["company","organization","org","employer","brand"],fakerMethod:"company.name",schemaType:"string",minScore:0.6},{keywords:["product","product_name","item_name"],fakerMethod:"commerce.productName",schemaType:"string",minScore:0.8},{keywords:["price","amount","cost","fee","salary","wage","total","subtotal","balance","revenue","income"],fakerMethod:"commerce.price",minScore:0.6},{keywords:["currency","currency_code"],fakerMethod:"finance.currencyCode",schemaType:"string",minScore:0.8},{keywords:["currency_name"],fakerMethod:"finance.currencyName",schemaType:"string",minScore:0.8},{keywords:["currency_symbol"],fakerMethod:"finance.currencySymbol",schemaType:"string",minScore:0.8},{keywords:["account_number","account_no"],fakerMethod:"finance.accountNumber",schemaType:"string",minScore:0.8},{keywords:["credit_card","card_number"],fakerMethod:"finance.creditCardNumber",schemaType:"string",minScore:0.8},{keywords:["cvv"],fakerMethod:"finance.creditCardCVV",schemaType:"string",minScore:0.9},{keywords:["transaction_type"],fakerMethod:"finance.transactionType",schemaType:"string",minScore:0.9}],$Q=[{keywords:["created_at","createdat","creation_date","date_created","createddate"],fakerMethod:"date.recent",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["updated_at","updatedat","modified_at","modifiedat","date_updated","last_modified","date_modified"],fakerMethod:"date.recent",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["deleted_at","deletedat"],fakerMethod:"date.recent",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["published_at","publishedat","publish_date"],fakerMethod:"date.recent",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["expires_at","expiresat","expiration","expiry"],fakerMethod:"date.future",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["birthday","date_of_birth","dob","birthdate","born"],fakerMethod:"date.birthdate",schemaType:"string",minScore:0.8},{keywords:["start_date","begin_date"],fakerMethod:"date.past",schemaType:"string",minScore:0.8},{keywords:["end_date","due_date","deadline"],fakerMethod:"date.future",schemaType:"string",minScore:0.8},{keywords:["timestamp","ts"],fakerMethod:"date.recent",schemaType:"string",minScore:0.8}],BQ=[{keywords:["color","colour"],fakerMethod:"color.human",schemaType:"string",minScore:0.8},{keywords:["hex_color","hexcolor"],fakerMethod:"color.rgb",schemaType:"string",minScore:0.9}],ZQ=[{keywords:["age"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:18,max:80}},{keywords:["rating","score","stars"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:1,max:5}},{keywords:["count","quantity","qty"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:1,max:100}},{keywords:["percentage","percent"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:0,max:100}},{keywords:["weight"],fakerMethod:"number.float",schemaType:"number",minScore:0.8,fakerArgs:{min:0.1,max:200}},{keywords:["height"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:100,max:220}},{keywords:["width","length","depth"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:1,max:1000}},{keywords:["priority","order","rank","level"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:1,max:10}},{keywords:["version"],fakerMethod:"system.semver",schemaType:"string",minScore:0.8}],KQ=[{keywords:["is_active","isactive","active","enabled","is_enabled"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.9},{keywords:["is_deleted","isdeleted","deleted"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.05},{keywords:["is_archived","isarchived","archived"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.1},{keywords:["is_verified","isverified","verified","confirmed","is_confirmed"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.8},{keywords:["is_admin","isadmin","admin"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.1},{keywords:["is_public","ispublic","public","visible","is_visible"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.7},{keywords:["is_read","isread","read","seen","is_seen"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.6},{keywords:["is_default","isdefault"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.8,trueProbability:0.1},{keywords:["is_required","isrequired","required","mandatory"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.5},{keywords:["is_featured","isfeatured","featured","promoted"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.8,trueProbability:0.15},{keywords:["available","in_stock"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.8,trueProbability:0.85}],XQ=[{keywords:["filename","file_name"],fakerMethod:"system.fileName",schemaType:"string",minScore:0.8},{keywords:["file_type","filetype","mime_type","mimetype","content_type"],fakerMethod:"system.mimeType",schemaType:"string",minScore:0.8},{keywords:["file_ext","extension"],fakerMethod:"system.fileExt",schemaType:"string",minScore:0.9},{keywords:["file_path","filepath","path"],fakerMethod:"system.filePath",schemaType:"string",minScore:0.9},{keywords:["cron","cron_expression"],fakerMethod:"system.cron",schemaType:"string",minScore:0.9},{keywords:["semver"],fakerMethod:"system.semver",schemaType:"string",minScore:0.9}],zQ=[{keywords:["aircraft_type","airplane","aircraft"],fakerMethod:"airline.aircraftType",schemaType:"string",minScore:0.9},{keywords:["flight_number","flight"],fakerMethod:"airline.flightNumber",schemaType:"string",minScore:0.9},{keywords:["record_locator","booking_ref","pnr"],fakerMethod:"airline.recordLocator",schemaType:"string",minScore:0.9},{keywords:["seat","seat_number"],fakerMethod:"airline.seat",schemaType:"string",minScore:0.9}],qQ=[{keywords:["animal","animal_type","species"],fakerMethod:"animal.type",schemaType:"string",minScore:0.9},{keywords:["pet_name"],fakerMethod:"animal.petName",schemaType:"string",minScore:0.9},{keywords:["breed"],fakerMethod:"animal.dog",schemaType:"string",minScore:0.9},{keywords:["bird"],fakerMethod:"animal.bird",schemaType:"string",minScore:0.9},{keywords:["fish"],fakerMethod:"animal.fish",schemaType:"string",minScore:0.9},{keywords:["horse"],fakerMethod:"animal.horse",schemaType:"string",minScore:0.9},{keywords:["insect"],fakerMethod:"animal.insect",schemaType:"string",minScore:0.9}],WQ=[{keywords:["book_title"],fakerMethod:"book.title",schemaType:"string",minScore:0.9},{keywords:["author","book_author","writer"],fakerMethod:"book.author",schemaType:"string",minScore:0.9},{keywords:["genre","book_genre"],fakerMethod:"book.genre",schemaType:"string",minScore:0.9},{keywords:["publisher","publishing_house"],fakerMethod:"book.publisher",schemaType:"string",minScore:0.9},{keywords:["book_series","series_name"],fakerMethod:"book.series",schemaType:"string",minScore:0.9}],UQ=[{keywords:["dish","meal","recipe_name"],fakerMethod:"food.dish",schemaType:"string",minScore:0.9},{keywords:["ingredient"],fakerMethod:"food.ingredient",schemaType:"string",minScore:0.9},{keywords:["spice"],fakerMethod:"food.spice",schemaType:"string",minScore:0.9},{keywords:["fruit"],fakerMethod:"food.fruit",schemaType:"string",minScore:0.9},{keywords:["vegetable"],fakerMethod:"food.vegetable",schemaType:"string",minScore:0.9},{keywords:["meat"],fakerMethod:"food.meat",schemaType:"string",minScore:0.9},{keywords:["food_description"],fakerMethod:"food.description",schemaType:"string",minScore:0.9},{keywords:["ethnic_category","cuisine"],fakerMethod:"food.ethnicCategory",schemaType:"string",minScore:0.9}],VQ=[{keywords:["song","song_name","track","track_name"],fakerMethod:"music.songName",schemaType:"string",minScore:0.9},{keywords:["album","album_name"],fakerMethod:"music.album",schemaType:"string",minScore:0.9},{keywords:["artist","musician","band"],fakerMethod:"music.artist",schemaType:"string",minScore:0.9},{keywords:["music_genre"],fakerMethod:"music.genre",schemaType:"string",minScore:0.9}],YQ=[],jQ=[{keywords:["vehicle","vehicle_name"],fakerMethod:"vehicle.vehicle",schemaType:"string",minScore:0.9},{keywords:["vehicle_type"],fakerMethod:"vehicle.type",schemaType:"string",minScore:0.9},{keywords:["vehicle_manufacturer","car_make"],fakerMethod:"vehicle.manufacturer",schemaType:"string",minScore:0.9},{keywords:["vehicle_model","car_model"],fakerMethod:"vehicle.model",schemaType:"string",minScore:0.9},{keywords:["fuel","fuel_type"],fakerMethod:"vehicle.fuel",schemaType:"string",minScore:0.9},{keywords:["bicycle"],fakerMethod:"vehicle.bicycle",schemaType:"string",minScore:0.9},{keywords:["vehicle_color","car_color"],fakerMethod:"vehicle.color",schemaType:"string",minScore:0.9}],FQ=[{keywords:["branch","branch_name","git_branch"],fakerMethod:"git.branch",schemaType:"string",minScore:0.9},{keywords:["commit_sha","commit_hash","sha"],fakerMethod:"git.commitSha",schemaType:"string",minScore:0.9},{keywords:["commit_message"],fakerMethod:"git.commitMessage",schemaType:"string",minScore:0.9}],CQ=[{keywords:["db_column","column_name"],fakerMethod:"database.column",schemaType:"string",minScore:0.9},{keywords:["db_type","column_type"],fakerMethod:"database.type",schemaType:"string",minScore:0.9},{keywords:["db_engine","database_engine"],fakerMethod:"database.engine",schemaType:"string",minScore:0.9},{keywords:["collation"],fakerMethod:"database.collation",schemaType:"string",minScore:0.9},{keywords:["mongodb_id","object_id"],fakerMethod:"database.mongodbObjectId",schemaType:"string",minScore:0.9}],GQ=[{keywords:["abbreviation","tech_abbreviation"],fakerMethod:"hacker.abbreviation",schemaType:"string",minScore:0.9},{keywords:["hacker_phrase","tech_phrase"],fakerMethod:"hacker.phrase",schemaType:"string",minScore:0.9}],HQ=[{keywords:["adjective"],fakerMethod:"word.adjective",schemaType:"string",minScore:0.8},{keywords:["adverb"],fakerMethod:"word.adverb",schemaType:"string",minScore:0.8},{keywords:["noun"],fakerMethod:"word.noun",schemaType:"string",minScore:0.8},{keywords:["verb"],fakerMethod:"word.verb",schemaType:"string",minScore:0.8}],k=[...r,...h,...c,...s,...t,...a,...e,...QQ,...$Q,...BQ,...ZQ,...KQ,...XQ,...zQ,...qQ,...WQ,...UQ,...VQ,...YQ,...jQ,...FQ,...CQ,...GQ,...HQ];function u(Q){let $=Q.split(/[_-]/),B=[];for(let Z of $){if(!Z)continue;let K=Z.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z0-9])([A-Z])/g,"$1_$2").split("_");for(let X of K)if(X)B.push(X.toLowerCase())}return B}function wQ(Q,$){let B=Q.join(""),Z=0;for(let K of $){let X=u(K),W=X.join("");if(B===W)return 1;if(X.length>0&&X.every((z)=>Q.includes(z))){let q=X.length/Q.length>0.5?0.9:0.65;Z=Math.max(Z,q)}if(X.length>0&&X.length<=Q.length){if(Q.slice(-X.length).every((q,U)=>q===X[U]))Z=Math.max(Z,0.8)}if(W.length>=3&&B.includes(W))Z=Math.max(Z,0.7)}return Z}function S(Q,$,B=k){let Z=$,K=typeof $.type==="string"?$.type:void 0;if(K==="string"&&$.format==="uuid")return{mapping:{keywords:["uuid"],fakerMethod:"string.uuid",schemaType:"string",minScore:0.5},score:1};if(Z.pattern||Z.enum||Z.faker||Z.$ref)return;let X=$.minimum!==void 0||$.maximum!==void 0||$.exclusiveMinimum!==void 0||$.exclusiveMaximum!==void 0,W=u(Q),z;for(let q of B){if(X&&(q.schemaType==="number"||q.schemaType==="integer"))continue;if(K==="object"||K==="array")continue;if(q.schemaType&&K&&q.schemaType!==K){if(!(q.schemaType==="number"&&K==="integer"||q.schemaType==="integer"&&K==="number"))continue}let U=wQ(W,q.keywords);if(U>=q.minScore&&(!z||U>z.score))z={mapping:q,score:U}}if(K==="string"){if(W[W.length-1]==="id"&&W.length>1){if(!z||z.score<0.8)z={mapping:{keywords:["id"],fakerMethod:"string.uuid",schemaType:"string",minScore:0.5},score:0.8}}}return z}import{ResourceLimitError as L,SchemaValidationError as Y}from"@schmock/core";var g;function V(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}function w(Q,$="$"){if(!Q||typeof Q!=="object")throw new Y($,"Schema must be a valid JSON Schema object");if(Object.keys(Q).length===0)throw new Y($,"Schema cannot be empty");let B=["object","array","string","number","integer","boolean","null"];if(Q.type&&typeof Q.type==="string"&&!B.includes(Q.type))throw new Y($,`Invalid schema type: "${Q.type}"`,"Supported types are: object, array, string, number, integer, boolean, null");if(Q.type==="object"&&Q.properties){if(typeof Q.properties!=="object"||Array.isArray(Q.properties))throw new Y(`${$}.properties`,"Properties must be an object mapping property names to schemas",'Use { "propertyName": { "type": "string" } } format');for(let[K,X]of Object.entries(Q.properties))if(typeof X==="object"&&X!==null){let W="faker"in X?String(X.faker):void 0;if(W)try{N(W)}catch(z){if(z instanceof Y){let q=z.context,U="Invalid faker method",F;if(q&&typeof q==="object"){if("issue"in q&&typeof q.issue==="string")U=q.issue;if("suggestion"in q&&typeof q.suggestion==="string")F=q.suggestion}throw new Y(`${$}.properties.${K}.faker`,U,F)}if(z instanceof Error)throw z;throw Error(String(z))}w(X,`${$}.properties.${K}`)}}if(Q.type==="array"){if(Q.items===null||Q.items===void 0)throw new Y(`${$}.items`,"Array schema must have valid items definition","Define items as a schema object or array of schemas");if(Array.isArray(Q.items)){if(Q.items.length===0)throw new Y(`${$}.items`,"Array items cannot be empty array","Provide at least one item schema");Q.items.forEach((K,X)=>{if(typeof K==="object"&&K!==null)w(K,`${$}.items[${X}]`)})}else if(typeof Q.items==="object"&&Q.items!==null)w(Q.items,`${$}.items`)}if(R(Q))throw new Y($,"Schema contains circular references which are not supported");let Z=O(Q);if(Z>M)throw new L("schema_nesting_depth",M,Z);if(Z>=H)JQ(Q,$);if(b(Q,$),Q.$ref==="#")throw new Y($,"Self-referencing schemas are not supported")}function R(Q,$=new Set){if($.has(Q))return!0;if(Q.$ref==="#")return!0;if($.add(Q),Q.type==="object"&&Q.properties){for(let B of Object.values(Q.properties))if(V(B)){if(R(B,$))return!0}}if(Q.type==="array"&&Q.items){let B=Array.isArray(Q.items)?Q.items:[Q.items];for(let Z of B)if(V(Z)){if(R(Z,$))return!0}}return $.delete(Q),!1}function O(Q,$=0){if($>M)return $;let B=$;if(Q.type==="object"&&Q.properties){for(let Z of Object.values(Q.properties))if(V(Z))B=Math.max(B,O(Z,$+1))}if(Q.type==="array"&&Q.items){let Z=Array.isArray(Q.items)?Q.items:[Q.items];for(let K of Z)if(V(K))B=Math.max(B,O(K,$+1))}return B}function JQ(Q,$){function B(Z,K){let X=Z.type;if(Array.isArray(X)?X.includes("array"):X==="array"){let z=Z.maxItems||C;if(K>=H&&z>=I)throw new L("deep_nesting_memory_risk",H*I,K*z);if(Z.items){let q=Array.isArray(Z.items)?Z.items:[Z.items];for(let U of q)if(V(U))B(U,K+1)}return}if(X==="object"&&Z.properties){for(let z of Object.values(Z.properties))if(V(z))B(z,K+1)}}B(Q,0)}function b(Q,$){if(Q.type==="array"){if(Q.maxItems&&Q.maxItems>G)throw new L("array_max_items",G,Q.maxItems);let B=O(Q),Z=Q.maxItems||Q.minItems||C;if(B>H&&Z>I)throw new L("memory_estimation",H*I,B*Z)}if(Q.type==="object"&&Q.properties){for(let[B,Z]of Object.entries(Q.properties))if(V(Z))b(Z,`${$}.properties.${B}`)}if(Q.type==="array"&&Q.items){if(Array.isArray(Q.items))Q.items.forEach((B,Z)=>{if(V(B))b(B,`${$}.items[${Z}]`)});else if(V(Q.items))b(Q.items,`${$}.items`)}}function N(Q){let $=Q.split(".");if($.length<2)throw new Y("$.faker",`Invalid faker method format: "${Q}"`,"Use format like 'person.firstName' or 'internet.email'");if(!g)g=D();let Z=g;for(let K of $)if(Z&&typeof Z==="object"&&K in Z)Z=Z[K];else throw new Y("$.faker",`Invalid faker method: "${Q}"`,"Check faker.js documentation for valid methods");if(typeof Z!=="function")throw new Y("$.faker",`Invalid faker method: "${Q}" is not a function`,"Check faker.js documentation for valid methods")}function j(Q){if(!Q||typeof Q!=="object")return Q;let $={...Q};if($.properties){$.properties={...$.properties};for(let[B,Z]of Object.entries($.properties))if(V(Z))$.properties[B]=IQ(B,Z)}for(let B of["allOf","anyOf","oneOf"]){let Z=$[B];if(Array.isArray(Z))$[B]=Z.map((K)=>V(K)?j(K):K)}if($.items){if(Array.isArray($.items))$.items=$.items.map((B)=>V(B)?j(B):B);else if(V($.items))$.items=j($.items)}if($.additionalProperties&&typeof $.additionalProperties==="object"&&!Array.isArray($.additionalProperties))$.additionalProperties=j($.additionalProperties);return $}function IQ(Q,$){let B={...$};if(B.faker)return N(B.faker),B;let Z=B.allOf||B.anyOf||B.oneOf;if(B.properties||Z||B.items){let X=j(B);Object.assign(B,X)}if(Z)return B;if(B.const!==void 0||B.enum)return B;let K=S(Q,B);if(K){if(B.faker=K.mapping.fakerMethod,K.mapping.format)B.format=K.mapping.format;if(K.mapping.trueProbability!==void 0)B.schmockTrueProbability=K.mapping.trueProbability}return B}function nQ(Q){return w(Q.schema),{name:"faker",version:"1.0.1",async process($,B){if(B!==void 0&&B!==null)return{context:$,response:B};try{let Z=await MQ({schema:Q.schema,count:Q.count,overrides:Q.overrides,params:$.params,state:$.routeState,query:$.query,seed:Q.seed});return{context:$,response:Z}}catch(Z){if(Z instanceof d||Z instanceof l)throw Z;throw new PQ($.path,Z instanceof Error?Z:Error(String(Z)),Q.schema)}}}}async function MQ(Q){let{schema:$,count:B,overrides:Z,params:K,state:X,query:W,seed:z}=Q;w($);let q;if($.type==="array"&&$.items){let U=y($,B);if(U>G)throw new l("array_size",G,U);let F=Array.isArray($.items)?$.items[0]:$.items;if(!F||typeof F==="boolean")throw new d("$.items","Array schema must have valid items definition");let f=j(F);q=[];for(let A=0;A<U;A++){let J=await _(f,z);J=x(J,f),J=P(J,Z,K,X,W),q.push(J)}}else{let U=j($);q=await _(U,z),q=x(q,U),q=P(q,Z,K,X,W)}return q}function x(Q,$){if(Q===null||Q===void 0||!$||typeof $!=="object")return Q;let B=$;if(B.schmockNullable===!0){if(Math.random()<T)return null}if($.type==="boolean"&&typeof B.schmockTrueProbability==="number")return Math.random()<B.schmockTrueProbability;if(typeof Q==="object"&&!Array.isArray(Q)&&$.properties){for(let[Z,K]of Object.entries($.properties))if(Z in Q&&V(K))Q[Z]=x(Q[Z],K)}if(Array.isArray(Q)&&$.items&&V($.items))for(let Z=0;Z<Q.length;Z++)Q[Z]=x(Q[Z],$.items);return Q}export{MQ as generateFromSchema,nQ as fakerPlugin};
1
+ import{ResourceLimitError as o,SchemaGenerationError as v0,SchemaValidationError as n}from"@schmock/core";var k="2.0.1";var F=1e4,M=10,Y=3,C=3,J=100,E=0.05;import{base as m,en as s,Faker as h}from"@faker-js/faker";import{generate as c}from"json-schema-faker";function g(Q){let $=new h({locale:[s,m]});if(Q!==void 0)$.seed(Q);return $}async function x(Q,$){let Z=$??Math.floor(Math.random()*2147483647);return c(Q,{seed:Z,optionalsProbability:1,alwaysFakeOptionals:!0,useDefaultValue:!0,ignoreMissingRefs:!0,failOnInvalidTypes:!1,failOnInvalidFormat:!1,extensions:{faker:g($)}})}var f=new Set(["__proto__","constructor","prototype"]);function S(Q,$,Z=Math.random){if($!==void 0){if($<0)return 0;return $}if(Q.minItems!==void 0&&Q.maxItems!==void 0){let B=Q.minItems,K=Math.max(B,Q.maxItems);return Math.floor(Z()*(K-B+1))+B}if(Q.minItems!==void 0)return Math.max(Q.minItems,Y);if(Q.maxItems!==void 0)return Math.min(Q.maxItems,Y);return Y}function I(Q,$,Z,B,K){if(!$)return Q;if(typeof Q!=="object"||Q===null)return Q;let j=structuredClone(Q);for(let[q,X]of Object.entries($)){if(f.has(q))continue;if(q.includes("."))t(j,q,X,{params:Z,state:B,query:K});else if(typeof X==="object"&&X!==null&&!Array.isArray(X)){let z=X;if(j[q]&&typeof j[q]==="object")j[q]=I(j[q],z,Z,B,K);else j[q]=I({},z,Z,B,K)}else if(typeof X==="string"&&X.includes("{{"))j[q]=l(X,{params:Z,state:B,query:K});else j[q]=X}return j}function t(Q,$,Z,B){let K=$.split("."),j=Q;for(let X=0;X<K.length-1;X++){let z=K[X];if(f.has(z))return;if(!(z in j)||typeof j[z]!=="object"||j[z]===null)j[z]={};j=j[z]}let q=K[K.length-1];if(f.has(q))return;if(typeof Z==="string"&&Z.includes("{{"))j[q]=l(Z,B);else j[q]=Z}function u(Q,$){let Z=$.trim().split("."),B=Q;for(let K of Z)if(B&&typeof B==="object")B=B[K];else return;return B}function l(Q,$){let Z=Q.match(/^\{\{\s*([^}]+)\s*\}\}$/);if(Z){let B=u($,Z[1]);return B!==void 0?B:Q}return Q.replace(/\{\{\s*([^}]+)\s*\}\}/g,(B,K)=>{let j=u($,K);return j!==void 0?String(j):B})}var a=[{keywords:["email"],fakerMethod:"internet.email",schemaType:"string",minScore:0.6,format:"email"},{keywords:["username","user_name","login","handle"],fakerMethod:"internet.username",schemaType:"string",minScore:0.6},{keywords:["password","passwd","secret"],fakerMethod:"internet.password",schemaType:"string",minScore:0.6},{keywords:["token","api_key","apikey","access_token","refresh_token"],fakerMethod:"string.alphanumeric",schemaType:"string",minScore:0.8}],e=[{keywords:["first_name","firstname","given_name","forename"],fakerMethod:"person.firstName",schemaType:"string",minScore:0.6},{keywords:["last_name","lastname","surname","family_name"],fakerMethod:"person.lastName",schemaType:"string",minScore:0.6},{keywords:["full_name","fullname","display_name","displayname","full_name"],fakerMethod:"person.fullName",schemaType:"string",minScore:0.6},{keywords:["name"],fakerMethod:"person.fullName",schemaType:"string",minScore:0.6},{keywords:["middle_name","middlename"],fakerMethod:"person.middleName",schemaType:"string",minScore:0.8},{keywords:["prefix","honorific","salutation"],fakerMethod:"person.prefix",schemaType:"string",minScore:0.8},{keywords:["suffix"],fakerMethod:"person.suffix",schemaType:"string",minScore:0.9},{keywords:["gender","sex"],fakerMethod:"person.sex",schemaType:"string",minScore:0.8},{keywords:["bio","biography"],fakerMethod:"lorem.paragraph",schemaType:"string",minScore:0.8},{keywords:["job_title","jobtitle","position","occupation","job","role"],fakerMethod:"person.jobTitle",schemaType:"string",minScore:0.6},{keywords:["job_area","department","division","team"],fakerMethod:"person.jobArea",schemaType:"string",minScore:0.8},{keywords:["zodiac","zodiac_sign"],fakerMethod:"person.zodiacSign",schemaType:"string",minScore:0.9}],Q0=[{keywords:["phone","mobile","cell","tel","telephone","cellphone","fax"],fakerMethod:"phone.number",schemaType:"string",minScore:0.6},{keywords:["imei"],fakerMethod:"phone.imei",schemaType:"string",minScore:0.9}],$0=[{keywords:["street","street_address"],fakerMethod:"location.streetAddress",schemaType:"string",minScore:0.6},{keywords:["address","mailing_address","postal_address"],fakerMethod:"location.streetAddress",schemaType:"string",minScore:0.6},{keywords:["city","town"],fakerMethod:"location.city",schemaType:"string",minScore:0.6},{keywords:["state","province","region"],fakerMethod:"location.state",schemaType:"string",minScore:0.8},{keywords:["country"],fakerMethod:"location.country",schemaType:"string",minScore:0.8},{keywords:["country_code","countrycode"],fakerMethod:"location.countryCode",schemaType:"string",minScore:0.8},{keywords:["county"],fakerMethod:"location.county",schemaType:"string",minScore:0.9},{keywords:["continent"],fakerMethod:"location.continent",schemaType:"string",minScore:0.9},{keywords:["zip","zipcode","zip_code","postal","postal_code"],fakerMethod:"location.zipCode",schemaType:"string",minScore:0.6},{keywords:["latitude","lat"],fakerMethod:"location.latitude",schemaType:"number",minScore:0.6},{keywords:["longitude","lng","lon","long"],fakerMethod:"location.longitude",schemaType:"number",minScore:0.6},{keywords:["timezone","time_zone","tz"],fakerMethod:"location.timeZone",schemaType:"string",minScore:0.8},{keywords:["building_number"],fakerMethod:"location.buildingNumber",schemaType:"string",minScore:0.9}],B0=[{keywords:["url","website","link","href","homepage","webpage"],fakerMethod:"internet.url",schemaType:"string",minScore:0.6},{keywords:["avatar","photo_url","profile_image","image_url","picture","thumbnail","icon"],fakerMethod:"image.avatar",schemaType:"string",minScore:0.6},{keywords:["domain","hostname","domain_name"],fakerMethod:"internet.domainName",schemaType:"string",minScore:0.8},{keywords:["ip","ip_address","ipaddress","ipv4"],fakerMethod:"internet.ipv4",schemaType:"string",minScore:0.8},{keywords:["ipv6"],fakerMethod:"internet.ipv6",schemaType:"string",minScore:0.9},{keywords:["mac","mac_address"],fakerMethod:"internet.mac",schemaType:"string",minScore:0.9},{keywords:["user_agent","useragent"],fakerMethod:"internet.userAgent",schemaType:"string",minScore:0.9},{keywords:["port"],fakerMethod:"internet.port",schemaType:"number",minScore:0.9},{keywords:["protocol"],fakerMethod:"internet.protocol",schemaType:"string",minScore:0.9}],Z0=[{keywords:["uuid","guid"],fakerMethod:"string.uuid",schemaType:"string",minScore:0.6},{keywords:["sku"],fakerMethod:"string.alphanumeric",schemaType:"string",minScore:0.9},{keywords:["slug"],fakerMethod:"lorem.slug",schemaType:"string",minScore:0.8},{keywords:["isbn"],fakerMethod:"commerce.isbn",schemaType:"string",minScore:0.9},{keywords:["vin"],fakerMethod:"vehicle.vin",schemaType:"string",minScore:0.9},{keywords:["iban"],fakerMethod:"finance.iban",schemaType:"string",minScore:0.9},{keywords:["bic","swift"],fakerMethod:"finance.bic",schemaType:"string",minScore:0.9},{keywords:["ssn","social_security"],fakerMethod:"string.numeric",schemaType:"string",minScore:0.9}],K0=[{keywords:["description","desc","summary","overview","about","excerpt"],fakerMethod:"lorem.paragraph",schemaType:"string",minScore:0.6},{keywords:["content","body","text","message"],fakerMethod:"lorem.paragraphs",schemaType:"string",minScore:0.6},{keywords:["title","heading","subject","headline"],fakerMethod:"lorem.sentence",schemaType:"string",minScore:0.6},{keywords:["tag","label","category","keyword"],fakerMethod:"lorem.word",schemaType:"string",minScore:0.8},{keywords:["comment","note","remark","feedback","review"],fakerMethod:"lorem.sentence",schemaType:"string",minScore:0.8},{keywords:["sentence"],fakerMethod:"lorem.sentence",schemaType:"string",minScore:0.9},{keywords:["paragraph"],fakerMethod:"lorem.paragraph",schemaType:"string",minScore:0.9},{keywords:["word"],fakerMethod:"lorem.word",schemaType:"string",minScore:0.9}],j0=[{keywords:["company","organization","org","employer","brand"],fakerMethod:"company.name",schemaType:"string",minScore:0.6},{keywords:["product","product_name","item_name"],fakerMethod:"commerce.productName",schemaType:"string",minScore:0.8},{keywords:["price","amount","cost","fee","salary","wage","total","subtotal","balance","revenue","income"],fakerMethod:"commerce.price",minScore:0.6},{keywords:["currency","currency_code"],fakerMethod:"finance.currencyCode",schemaType:"string",minScore:0.8},{keywords:["currency_name"],fakerMethod:"finance.currencyName",schemaType:"string",minScore:0.8},{keywords:["currency_symbol"],fakerMethod:"finance.currencySymbol",schemaType:"string",minScore:0.8},{keywords:["account_number","account_no"],fakerMethod:"finance.accountNumber",schemaType:"string",minScore:0.8},{keywords:["credit_card","card_number"],fakerMethod:"finance.creditCardNumber",schemaType:"string",minScore:0.8},{keywords:["cvv"],fakerMethod:"finance.creditCardCVV",schemaType:"string",minScore:0.9},{keywords:["transaction_type"],fakerMethod:"finance.transactionType",schemaType:"string",minScore:0.9}],X0=[{keywords:["created_at","createdat","creation_date","date_created","createddate"],fakerMethod:"date.recent",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["updated_at","updatedat","modified_at","modifiedat","date_updated","last_modified","date_modified"],fakerMethod:"date.recent",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["deleted_at","deletedat"],fakerMethod:"date.recent",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["published_at","publishedat","publish_date"],fakerMethod:"date.recent",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["expires_at","expiresat","expiration","expiry"],fakerMethod:"date.future",schemaType:"string",minScore:0.6,format:"date-time"},{keywords:["birthday","date_of_birth","dob","birthdate","born"],fakerMethod:"date.birthdate",schemaType:"string",minScore:0.8},{keywords:["start_date","begin_date"],fakerMethod:"date.past",schemaType:"string",minScore:0.8},{keywords:["end_date","due_date","deadline"],fakerMethod:"date.future",schemaType:"string",minScore:0.8},{keywords:["timestamp","ts"],fakerMethod:"date.recent",schemaType:"string",minScore:0.8}],z0=[{keywords:["color","colour"],fakerMethod:"color.human",schemaType:"string",minScore:0.8},{keywords:["hex_color","hexcolor"],fakerMethod:"color.rgb",schemaType:"string",minScore:0.9}],q0=[{keywords:["age"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:18,max:80}},{keywords:["rating","score","stars"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:1,max:5}},{keywords:["count","quantity","qty"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:1,max:100}},{keywords:["percentage","percent"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:0,max:100}},{keywords:["weight"],fakerMethod:"number.float",schemaType:"number",minScore:0.8,fakerArgs:{min:0.1,max:200}},{keywords:["height"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:100,max:220}},{keywords:["width","length","depth"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:1,max:1000}},{keywords:["priority","order","rank","level"],fakerMethod:"number.int",schemaType:"number",minScore:0.8,fakerArgs:{min:1,max:10}},{keywords:["version"],fakerMethod:"system.semver",schemaType:"string",minScore:0.8}],W0=[{keywords:["is_active","isactive","active","enabled","is_enabled"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.9},{keywords:["is_deleted","isdeleted","deleted"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.05},{keywords:["is_archived","isarchived","archived"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.1},{keywords:["is_verified","isverified","verified","confirmed","is_confirmed"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.8},{keywords:["is_admin","isadmin","admin"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.1},{keywords:["is_public","ispublic","public","visible","is_visible"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.7},{keywords:["is_read","isread","read","seen","is_seen"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.6},{keywords:["is_default","isdefault"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.8,trueProbability:0.1},{keywords:["is_required","isrequired","required","mandatory"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.6,trueProbability:0.5},{keywords:["is_featured","isfeatured","featured","promoted"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.8,trueProbability:0.15},{keywords:["available","in_stock"],fakerMethod:"datatype.boolean",schemaType:"boolean",minScore:0.8,trueProbability:0.85}],b0=[{keywords:["filename","file_name"],fakerMethod:"system.fileName",schemaType:"string",minScore:0.8},{keywords:["file_type","filetype","mime_type","mimetype","content_type"],fakerMethod:"system.mimeType",schemaType:"string",minScore:0.8},{keywords:["file_ext","extension"],fakerMethod:"system.fileExt",schemaType:"string",minScore:0.9},{keywords:["file_path","filepath","path"],fakerMethod:"system.filePath",schemaType:"string",minScore:0.9},{keywords:["cron","cron_expression"],fakerMethod:"system.cron",schemaType:"string",minScore:0.9},{keywords:["semver"],fakerMethod:"system.semver",schemaType:"string",minScore:0.9}],U0=[{keywords:["aircraft_type","airplane","aircraft"],fakerMethod:"airline.aircraftType",schemaType:"string",minScore:0.9},{keywords:["flight_number","flight"],fakerMethod:"airline.flightNumber",schemaType:"string",minScore:0.9},{keywords:["record_locator","booking_ref","pnr"],fakerMethod:"airline.recordLocator",schemaType:"string",minScore:0.9},{keywords:["seat","seat_number"],fakerMethod:"airline.seat",schemaType:"string",minScore:0.9}],w0=[{keywords:["animal","animal_type","species"],fakerMethod:"animal.type",schemaType:"string",minScore:0.9},{keywords:["pet_name"],fakerMethod:"animal.petName",schemaType:"string",minScore:0.9},{keywords:["breed"],fakerMethod:"animal.dog",schemaType:"string",minScore:0.9},{keywords:["bird"],fakerMethod:"animal.bird",schemaType:"string",minScore:0.9},{keywords:["fish"],fakerMethod:"animal.fish",schemaType:"string",minScore:0.9},{keywords:["horse"],fakerMethod:"animal.horse",schemaType:"string",minScore:0.9},{keywords:["insect"],fakerMethod:"animal.insect",schemaType:"string",minScore:0.9}],V0=[{keywords:["book_title"],fakerMethod:"book.title",schemaType:"string",minScore:0.9},{keywords:["author","book_author","writer"],fakerMethod:"book.author",schemaType:"string",minScore:0.9},{keywords:["genre","book_genre"],fakerMethod:"book.genre",schemaType:"string",minScore:0.9},{keywords:["publisher","publishing_house"],fakerMethod:"book.publisher",schemaType:"string",minScore:0.9},{keywords:["book_series","series_name"],fakerMethod:"book.series",schemaType:"string",minScore:0.9}],Y0=[{keywords:["dish","meal","recipe_name"],fakerMethod:"food.dish",schemaType:"string",minScore:0.9},{keywords:["ingredient"],fakerMethod:"food.ingredient",schemaType:"string",minScore:0.9},{keywords:["spice"],fakerMethod:"food.spice",schemaType:"string",minScore:0.9},{keywords:["fruit"],fakerMethod:"food.fruit",schemaType:"string",minScore:0.9},{keywords:["vegetable"],fakerMethod:"food.vegetable",schemaType:"string",minScore:0.9},{keywords:["meat"],fakerMethod:"food.meat",schemaType:"string",minScore:0.9},{keywords:["food_description"],fakerMethod:"food.description",schemaType:"string",minScore:0.9},{keywords:["ethnic_category","cuisine"],fakerMethod:"food.ethnicCategory",schemaType:"string",minScore:0.9}],F0=[{keywords:["song","song_name","track","track_name"],fakerMethod:"music.songName",schemaType:"string",minScore:0.9},{keywords:["album","album_name"],fakerMethod:"music.album",schemaType:"string",minScore:0.9},{keywords:["artist","musician","band"],fakerMethod:"music.artist",schemaType:"string",minScore:0.9},{keywords:["music_genre"],fakerMethod:"music.genre",schemaType:"string",minScore:0.9}],C0=[],G0=[{keywords:["vehicle","vehicle_name"],fakerMethod:"vehicle.vehicle",schemaType:"string",minScore:0.9},{keywords:["vehicle_type"],fakerMethod:"vehicle.type",schemaType:"string",minScore:0.9},{keywords:["vehicle_manufacturer","car_make"],fakerMethod:"vehicle.manufacturer",schemaType:"string",minScore:0.9},{keywords:["vehicle_model","car_model"],fakerMethod:"vehicle.model",schemaType:"string",minScore:0.9},{keywords:["fuel","fuel_type"],fakerMethod:"vehicle.fuel",schemaType:"string",minScore:0.9},{keywords:["bicycle"],fakerMethod:"vehicle.bicycle",schemaType:"string",minScore:0.9},{keywords:["vehicle_color","car_color"],fakerMethod:"vehicle.color",schemaType:"string",minScore:0.9}],H0=[{keywords:["branch","branch_name","git_branch"],fakerMethod:"git.branch",schemaType:"string",minScore:0.9},{keywords:["commit_sha","commit_hash","sha"],fakerMethod:"git.commitSha",schemaType:"string",minScore:0.9},{keywords:["commit_message"],fakerMethod:"git.commitMessage",schemaType:"string",minScore:0.9}],J0=[{keywords:["db_column","column_name"],fakerMethod:"database.column",schemaType:"string",minScore:0.9},{keywords:["db_type","column_type"],fakerMethod:"database.type",schemaType:"string",minScore:0.9},{keywords:["db_engine","database_engine"],fakerMethod:"database.engine",schemaType:"string",minScore:0.9},{keywords:["collation"],fakerMethod:"database.collation",schemaType:"string",minScore:0.9},{keywords:["mongodb_id","object_id"],fakerMethod:"database.mongodbObjectId",schemaType:"string",minScore:0.9}],I0=[{keywords:["abbreviation","tech_abbreviation"],fakerMethod:"hacker.abbreviation",schemaType:"string",minScore:0.9},{keywords:["hacker_phrase","tech_phrase"],fakerMethod:"hacker.phrase",schemaType:"string",minScore:0.9}],M0=[{keywords:["adjective"],fakerMethod:"word.adjective",schemaType:"string",minScore:0.8},{keywords:["adverb"],fakerMethod:"word.adverb",schemaType:"string",minScore:0.8},{keywords:["noun"],fakerMethod:"word.noun",schemaType:"string",minScore:0.8},{keywords:["verb"],fakerMethod:"word.verb",schemaType:"string",minScore:0.8}],d=[...a,...e,...Q0,...$0,...B0,...Z0,...K0,...j0,...X0,...z0,...q0,...W0,...b0,...U0,...w0,...V0,...Y0,...F0,...C0,...G0,...H0,...J0,...I0,...M0];function p(Q){let $=Q.split(/[_-]/),Z=[];for(let B of $){if(!B)continue;let K=B.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z0-9])([A-Z])/g,"$1_$2").split("_");for(let j of K)if(j)Z.push(j.toLowerCase())}return Z}function P0(Q,$){let Z=Q.join(""),B=0;for(let K of $){let j=p(K),q=j.join("");if(Z===q)return 1;if(j.length>0&&j.every((X)=>Q.includes(X))){let z=j.length/Q.length>0.5?0.9:0.65;B=Math.max(B,z)}if(j.length>0&&j.length<=Q.length){if(Q.slice(-j.length).every((z,W)=>z===j[W]))B=Math.max(B,0.8)}if(q.length>=3&&Z.includes(q))B=Math.max(B,0.7)}return B}function i(Q,$,Z=d){let B=$,K=typeof $.type==="string"?$.type:void 0;if(K==="string"&&$.format==="uuid")return{mapping:{keywords:["uuid"],fakerMethod:"string.uuid",schemaType:"string",minScore:0.5},score:1};if(B.pattern||B.enum||B.faker||B.$ref)return;let j=$.minimum!==void 0||$.maximum!==void 0||$.exclusiveMinimum!==void 0||$.exclusiveMaximum!==void 0,q=p(Q),X;for(let z of Z){if(j&&(z.schemaType==="number"||z.schemaType==="integer"))continue;if(K==="object"||K==="array")continue;if(z.schemaType&&K&&z.schemaType!==K){if(!(z.schemaType==="number"&&K==="integer"||z.schemaType==="integer"&&K==="number"))continue}let W=P0(q,z.keywords);if(W>=z.minScore&&(!X||W>X.score))X={mapping:z,score:W}}if(K==="string"){if(q[q.length-1]==="id"&&q.length>1){if(!X||X.score<0.8)X={mapping:{keywords:["id"],fakerMethod:"string.uuid",schemaType:"string",minScore:0.5},score:0.8}}}return X}import{ResourceLimitError as L,SchemaValidationError as U}from"@schmock/core";var _;function b(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}function G(Q,$="$"){if(!Q||typeof Q!=="object")throw new U($,"Schema must be a valid JSON Schema object");if(Object.keys(Q).length===0)throw new U($,"Schema cannot be empty");let Z=["object","array","string","number","integer","boolean","null"];if(Q.type&&typeof Q.type==="string"&&!Z.includes(Q.type))throw new U($,`Invalid schema type: "${Q.type}"`,"Supported types are: object, array, string, number, integer, boolean, null");if(Q.type==="object"&&Q.properties){if(typeof Q.properties!=="object"||Array.isArray(Q.properties))throw new U(`${$}.properties`,"Properties must be an object mapping property names to schemas",'Use { "propertyName": { "type": "string" } } format');for(let[K,j]of Object.entries(Q.properties))if(typeof j==="object"&&j!==null){let q="faker"in j?String(j.faker):void 0;if(q)try{y(q)}catch(X){if(X instanceof U){let z=X.context,W="Invalid faker method",V;if(z&&typeof z==="object"){if("issue"in z&&typeof z.issue==="string")W=z.issue;if("suggestion"in z&&typeof z.suggestion==="string")V=z.suggestion}throw new U(`${$}.properties.${K}.faker`,W,V)}if(X instanceof Error)throw X;throw Error(String(X))}G(j,`${$}.properties.${K}`)}}if(Q.type==="array"){if(Q.items===null||Q.items===void 0)throw new U(`${$}.items`,"Array schema must have valid items definition","Define items as a schema object or array of schemas");if(Array.isArray(Q.items)){if(Q.items.length===0)throw new U(`${$}.items`,"Array items cannot be empty array","Provide at least one item schema");Q.items.forEach((K,j)=>{if(typeof K==="object"&&K!==null)G(K,`${$}.items[${j}]`)})}else if(typeof Q.items==="object"&&Q.items!==null)G(Q.items,`${$}.items`)}if(R(Q))throw new U($,"Schema contains circular references which are not supported");let B=O(Q);if(B>M)throw new L("schema_nesting_depth",M,B);if(B>=C)L0(Q,$);if(P(Q,$),Q.$ref==="#")throw new U($,"Self-referencing schemas are not supported")}function R(Q,$=new Set){if($.has(Q))return!0;if(Q.$ref==="#")return!0;if($.add(Q),Q.type==="object"&&Q.properties){for(let Z of Object.values(Q.properties))if(b(Z)){if(R(Z,$))return!0}}if(Q.type==="array"&&Q.items){let Z=Array.isArray(Q.items)?Q.items:[Q.items];for(let B of Z)if(b(B)){if(R(B,$))return!0}}return $.delete(Q),!1}function O(Q,$=0){if($>M)return $;let Z=$;if(Q.type==="object"&&Q.properties){for(let B of Object.values(Q.properties))if(b(B))Z=Math.max(Z,O(B,$+1))}if(Q.type==="array"&&Q.items){let B=Array.isArray(Q.items)?Q.items:[Q.items];for(let K of B)if(b(K))Z=Math.max(Z,O(K,$+1))}return Z}function L0(Q,$){function Z(B,K){let j=B.type;if(Array.isArray(j)?j.includes("array"):j==="array"){let X=B.maxItems||Y;if(K>=C&&X>=J)throw new L("deep_nesting_memory_risk",C*J,K*X);if(B.items){let z=Array.isArray(B.items)?B.items:[B.items];for(let W of z)if(b(W))Z(W,K+1)}return}if(j==="object"&&B.properties){for(let X of Object.values(B.properties))if(b(X))Z(X,K+1)}}Z(Q,0)}function P(Q,$){if(Q.type==="array"){if(Q.maxItems&&Q.maxItems>F)throw new L("array_max_items",F,Q.maxItems);let Z=O(Q),B=Q.maxItems||Q.minItems||Y;if(Z>C&&B>J)throw new L("memory_estimation",C*J,Z*B)}if(Q.type==="object"&&Q.properties){for(let[Z,B]of Object.entries(Q.properties))if(b(B))P(B,`${$}.properties.${Z}`)}if(Q.type==="array"&&Q.items){if(Array.isArray(Q.items))Q.items.forEach((Z,B)=>{if(b(Z))P(Z,`${$}.items[${B}]`)});else if(b(Q.items))P(Q.items,`${$}.items`)}}function y(Q){let $=Q.split(".");if($.length<2)throw new U("$.faker",`Invalid faker method format: "${Q}"`,"Use format like 'person.firstName' or 'internet.email'");if(!_)_=g();let B=_;for(let K of $)if(B&&typeof B==="object"&&K in B)B=B[K];else throw new U("$.faker",`Invalid faker method: "${Q}"`,"Check faker.js documentation for valid methods");if(typeof B!=="function")throw new U("$.faker",`Invalid faker method: "${Q}" is not a function`,"Check faker.js documentation for valid methods")}function w(Q){if(!Q||typeof Q!=="object")return Q;let $={...Q};if($.properties){$.properties={...$.properties};for(let[Z,B]of Object.entries($.properties))if(b(B))$.properties[Z]=O0(Z,B)}for(let Z of["allOf","anyOf","oneOf"]){let B=$[Z];if(Array.isArray(B))$[Z]=B.map((K)=>b(K)?w(K):K)}if($.items){if(Array.isArray($.items))$.items=$.items.map((Z)=>b(Z)?w(Z):Z);else if(b($.items))$.items=w($.items)}if($.additionalProperties&&typeof $.additionalProperties==="object"&&!Array.isArray($.additionalProperties))$.additionalProperties=w($.additionalProperties);return $}function O0(Q,$){let Z={...$};if(Z.faker)return y(Z.faker),Z;let B=Z.allOf||Z.anyOf||Z.oneOf;if(Z.properties||B||Z.items){let j=w(Z);Object.assign(Z,j)}if(B)return Z;if(Z.const!==void 0||Z.enum)return Z;let K=i(Q,Z);if(K){if(Z.faker=K.mapping.fakerMethod,K.mapping.format)Z.format=K.mapping.format;if(K.mapping.trueProbability!==void 0)Z.schmockTrueProbability=K.mapping.trueProbability}return Z}function a0(Q){return G(Q.schema),{name:"faker",version:k,async process($,Z){if(Z!==void 0&&Z!==null)return{context:$,response:Z};try{let B=await D0({schema:Q.schema,count:Q.count,overrides:Q.overrides,params:$.params,state:$.routeState,query:$.query,seed:Q.seed});return{context:$,response:B}}catch(B){if(B instanceof n||B instanceof o)throw B;throw new v0($.path,B instanceof Error?B:Error(String(B)),Q.schema)}}}}async function D0(Q){let{schema:$,count:Z,overrides:B,params:K,state:j,query:q,seed:X}=Q;if(G($),$.type==="array"&&$.items){let V=S($,Z);if(V>F)throw new o("array_size",F,V);let D=Array.isArray($.items)?$.items[0]:$.items;if(!D||typeof D==="boolean")throw new n("$.items","Array schema must have valid items definition");let A=w(D),N=[];for(let T=0;T<V;T++){let H=await x(A,X);H=v(H,A),H=I(H,B,K,j,q),N.push(H)}return N}let z=w($),W=await x(z,X);return W=v(W,z),W=I(W,B,K,j,q),W}function v(Q,$){if(Q===null||Q===void 0||!$||typeof $!=="object")return Q;let Z=$;if(Z.schmockNullable===!0){if(Math.random()<E)return null}if($.type==="boolean"&&typeof Z.schmockTrueProbability==="number")return Math.random()<Z.schmockTrueProbability;if(typeof Q==="object"&&!Array.isArray(Q)&&$.properties){let B=Q;for(let[K,j]of Object.entries($.properties))if(K in B&&b(j))B[K]=v(B[K],j)}if(Array.isArray(Q)&&$.items&&b($.items))for(let B=0;B<Q.length;B++)Q[B]=v(Q[B],$.items);return Q}export{D0 as generateFromSchema,a0 as fakerPlugin};
@@ -17,5 +17,5 @@ export declare function determineArrayCount(schema: JSONSchema7, explicitCount?:
17
17
  * @param query - Query parameters for template expansion
18
18
  * @returns Data with overrides applied
19
19
  */
20
- export declare function applyOverrides(data: any, overrides?: Record<string, any>, params?: Record<string, string>, state?: any, query?: Record<string, string>): any;
20
+ export declare function applyOverrides(data: unknown, overrides?: Record<string, unknown>, params?: Record<string, string>, state?: Record<string, unknown>, query?: Record<string, string>): unknown;
21
21
  //# sourceMappingURL=overrides.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../src/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,GAAE,MAAM,MAAoB,GACjC,MAAM,CAyBR;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,GAAG,EACT,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,KAAK,CAAC,EAAE,GAAG,EACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,GAAG,CAuCL"}
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../src/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,GAAE,MAAM,MAAoB,GACjC,MAAM,CAwBR;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAyCT"}
package/dist/overrides.js CHANGED
@@ -16,8 +16,9 @@ export function determineArrayCount(schema, explicitCount, random = Math.random)
16
16
  return explicitCount;
17
17
  }
18
18
  if (schema.minItems !== undefined && schema.maxItems !== undefined) {
19
- return (Math.floor(random() * (schema.maxItems - schema.minItems + 1)) +
20
- schema.minItems);
19
+ const min = schema.minItems;
20
+ const max = Math.max(min, schema.maxItems);
21
+ return Math.floor(random() * (max - min + 1)) + min;
21
22
  }
22
23
  if (schema.minItems !== undefined) {
23
24
  return Math.max(schema.minItems, DEFAULT_ARRAY_COUNT);
@@ -40,6 +41,8 @@ export function determineArrayCount(schema, explicitCount, random = Math.random)
40
41
  export function applyOverrides(data, overrides, params, state, query) {
41
42
  if (!overrides)
42
43
  return data;
44
+ if (typeof data !== "object" || data === null)
45
+ return data;
43
46
  const result = structuredClone(data);
44
47
  for (const [key, value] of Object.entries(overrides)) {
45
48
  if (DANGEROUS_KEYS.has(key))
@@ -53,12 +56,13 @@ export function applyOverrides(data, overrides, params, state, query) {
53
56
  if (typeof value === "object" &&
54
57
  value !== null &&
55
58
  !Array.isArray(value)) {
59
+ const nested = value;
56
60
  // Recursively apply nested overrides
57
61
  if (result[key] && typeof result[key] === "object") {
58
- result[key] = applyOverrides(result[key], value, params, state, query);
62
+ result[key] = applyOverrides(result[key], nested, params, state, query);
59
63
  }
60
64
  else {
61
- result[key] = applyOverrides({}, value, params, state, query);
65
+ result[key] = applyOverrides({}, nested, params, state, query);
62
66
  }
63
67
  }
64
68
  else if (typeof value === "string" && value.includes("{{")) {
@@ -98,37 +102,30 @@ function setNestedProperty(obj, path, value, context) {
98
102
  current[finalKey] = value;
99
103
  }
100
104
  }
105
+ function resolveTemplatePath(context, expression) {
106
+ const parts = expression.trim().split(".");
107
+ let result = context;
108
+ for (const part of parts) {
109
+ if (result && typeof result === "object") {
110
+ result = result[part];
111
+ }
112
+ else {
113
+ return undefined;
114
+ }
115
+ }
116
+ return result;
117
+ }
101
118
  function processTemplate(template, context) {
102
119
  // Check if the template is just a single template expression
103
120
  const singleTemplateMatch = template.match(/^\{\{\s*([^}]+)\s*\}\}$/);
104
121
  if (singleTemplateMatch) {
105
122
  // For single templates, return the actual value without string conversion
106
- const expression = singleTemplateMatch[1];
107
- const parts = expression.trim().split(".");
108
- let result = context;
109
- for (const part of parts) {
110
- if (result && typeof result === "object") {
111
- result = result[part];
112
- }
113
- else {
114
- return template; // Return original if can't resolve
115
- }
116
- }
123
+ const result = resolveTemplatePath(context, singleTemplateMatch[1]);
117
124
  return result !== undefined ? result : template;
118
125
  }
119
126
  // For templates mixed with other text, do string replacement
120
- const processed = template.replace(/\{\{\s*([^}]+)\s*\}\}/g, (match, expression) => {
121
- const parts = expression.trim().split(".");
122
- let result = context;
123
- for (const part of parts) {
124
- if (result && typeof result === "object") {
125
- result = result[part];
126
- }
127
- else {
128
- return match; // Return original if can't resolve
129
- }
130
- }
127
+ return template.replace(/\{\{\s*([^}]+)\s*\}\}/g, (match, expression) => {
128
+ const result = resolveTemplatePath(context, expression);
131
129
  return result !== undefined ? String(result) : match;
132
130
  });
133
- return processed;
134
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,UAAU,WAAY,SAAQ,WAAW;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,OAAO;;sBAEJ,WAAW;sBAIX,WAAW;8BAIF,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAQ,WAAW;uBAM1D,WAAW,gBACJ;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,KACrD,WAAW;;sBAOE,WAAW,CAAC,MAAM,CAAC,eAAe,MAAM,KAAG,WAAW;;sBAO7D,MAAM,eACD,WAAW,KACtB,WAAW;sBAWL,MAAM,mBACG,WAAW,KAC1B,WAAW;;;oBASJ,WAAW;2BAYJ,WAAW;;CAkB/B,CAAC;AAGF,eAAO,MAAM,UAAU;+BAGR,MAAM,cACN,WAAW,CAAC,MAAM,CAAC,KAC7B,OAAO,CAAC,OAAO,CAAC;+BAqCQ,GAAG,EAAE,KAAG,MAAM;wBAMrB,GAAG,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,KAAG,OAAO;uCAM7D,MAAM,EAAE,YACP,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,KACjE,OAAO;CAgDX,CAAC;AAGF,eAAO,MAAM,WAAW;cACN,CAAC,MACX,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KACvB,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;wBAOvB,MAAM,IAAI,KAAG,MAAM;uBAW9B,MAAM,MACT,MAAM,GAAG,0BAEZ,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAgBvD,CAAC;AAGF,eAAO,MAAM,QAAQ;cACH,CAAC,UACP,WAAW,4BAET,GAAG,KACZ,OAAO,CAAC,CAAC,EAAE,CAAC;uBAQU,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,GAAG,CAAC;CAKpE,CAAC;AAGF,eAAO,MAAM,KAAK;4BACQ,GAAG,EAAE,KAAG,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;uBAS7B,GAAG,EAAE,KAAG,MAAM;CAclC,CAAC;AAGF,eAAO,MAAM,WAAW;0BACM,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC;4BAK7C,GAAG,iBACI,MAAM,GAAG,MAAM,KAC7B,OAAO,CAAC,IAAI,CAAC;gCAWN,GAAG,QACL,MAAM,UACJ,MAAM,KACb,OAAO,CAAC,IAAI,CAAC;CAejB,CAAC"}
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,UAAU,WAAY,SAAQ,WAAW;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,OAAO;;sBAEJ,WAAW;sBAIX,WAAW;8BAIF,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAQ,WAAW;uBAM1D,WAAW,gBACJ;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,KACrD,WAAW;;sBAOE,WAAW,CAAC,MAAM,CAAC,eAAe,MAAM,KAAG,WAAW;;sBAO7D,MAAM,eACD,WAAW,KACtB,WAAW;sBAWL,MAAM,mBACG,WAAW,KAC1B,WAAW;;;oBASJ,WAAW;2BAYJ,WAAW;;CAkB/B,CAAC;AAGF,eAAO,MAAM,UAAU;+BAGR,MAAM,cACN,WAAW,CAAC,MAAM,CAAC,KAC7B,OAAO,CAAC,OAAO,CAAC;+BAyCQ,GAAG,EAAE,KAAG,MAAM;wBAMrB,GAAG,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,KAAG,OAAO;uCAM7D,MAAM,EAAE,YACP,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,KACjE,OAAO;CAgDX,CAAC;AAGF,eAAO,MAAM,WAAW;cACN,CAAC,MACX,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KACvB,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;wBAOvB,MAAM,IAAI,KAAG,MAAM;uBAW9B,MAAM,MACT,MAAM,GAAG,0BAEZ,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAgBvD,CAAC;AAGF,eAAO,MAAM,QAAQ;cACH,CAAC,UACP,WAAW,4BAET,GAAG,KACZ,OAAO,CAAC,CAAC,EAAE,CAAC;uBAQU,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,GAAG,CAAC;CAKpE,CAAC;AAGF,eAAO,MAAM,KAAK;4BACQ,GAAG,EAAE,KAAG,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;uBAS7B,GAAG,EAAE,KAAG,MAAM;CAclC,CAAC;AAGF,eAAO,MAAM,WAAW;0BACM,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC;4BAK7C,GAAG,iBACI,MAAM,GAAG,MAAM,KAC7B,OAAO,CAAC,IAAI,CAAC;gCAWN,GAAG,QACL,MAAM,UACJ,MAAM,KACb,OAAO,CAAC,IAAI,CAAC;CAejB,CAAC"}
@@ -89,12 +89,16 @@ export const validators = {
89
89
  // Generate multiple samples to check for patterns
90
90
  const mappedSamples = [];
91
91
  for (let i = 0; i < 10; i++) {
92
- const result = await generateFromSchema({ schema: mappedSchema });
92
+ const result = (await generateFromSchema({
93
+ schema: mappedSchema,
94
+ }));
93
95
  mappedSamples.push(result[fieldName]);
94
96
  }
95
97
  const unmappedSamples = [];
96
98
  for (let i = 0; i < 10; i++) {
97
- const result = await generateFromSchema({ schema: unmappedSchema });
99
+ const result = (await generateFromSchema({
100
+ schema: unmappedSchema,
101
+ }));
98
102
  unmappedSamples.push(result.unmappedRandomField12345);
99
103
  }
100
104
  // If field is mapped to a specific faker method, it should have different characteristics
@@ -175,7 +179,7 @@ export const generate = {
175
179
  samples: async (schema, count = 10, options) => {
176
180
  const results = [];
177
181
  for (let i = 0; i < count; i++) {
178
- results.push(await generateFromSchema({ schema, ...options }));
182
+ results.push((await generateFromSchema({ schema, ...options })));
179
183
  }
180
184
  return results;
181
185
  },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@schmock/faker",
3
3
  "description": "Faker-powered automatic data generation for Schmock",
4
- "version": "2.0.0",
4
+ "version": "2.0.1",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
package/src/index.test.ts CHANGED
@@ -767,7 +767,7 @@ describe("Schema Generator", () => {
767
767
  });
768
768
 
769
769
  expect(plugin).toHaveProperty("name", "faker");
770
- expect(plugin).toHaveProperty("version", "1.0.1");
770
+ expect(plugin).toHaveProperty("version", "2.0.1");
771
771
  expect(plugin).toHaveProperty("process");
772
772
  expect(typeof plugin.process).toBe("function");
773
773
  });
package/src/index.ts CHANGED
@@ -6,28 +6,16 @@ import {
6
6
  SchemaValidationError,
7
7
  } from "@schmock/core";
8
8
  import type { JSONSchema7 } from "json-schema";
9
+ import { version as packageVersion } from "../package.json";
9
10
  import { MAX_ARRAY_SIZE, NULLABLE_NULL_PROBABILITY } from "./constants.js";
10
11
  import { generateWithJsf } from "./jsf-config.js";
11
12
  import { applyOverrides, determineArrayCount } from "./overrides.js";
12
13
  import { enhanceSchemaWithSmartMapping } from "./schema-enhancement.js";
13
14
  import { isJSONSchema7, validateSchema } from "./validation.js";
14
15
 
15
- export interface SchemaGenerationContext {
16
- schema: JSONSchema7;
17
- count?: number;
18
- overrides?: Record<string, any>;
19
- params?: Record<string, string>;
20
- state?: any;
21
- query?: Record<string, string>;
22
- seed?: number;
23
- }
16
+ export type SchemaGenerationContext = Schmock.SchemaGenerationContext;
24
17
 
25
- export interface FakerPluginOptions {
26
- schema: JSONSchema7;
27
- count?: number;
28
- overrides?: Record<string, any>;
29
- seed?: number;
30
- }
18
+ export type FakerPluginOptions = Schmock.FakerPluginOptions;
31
19
 
32
20
  export function fakerPlugin(options: FakerPluginOptions): Schmock.Plugin {
33
21
  // Validate schema immediately when plugin is created (fail-fast)
@@ -35,9 +23,9 @@ export function fakerPlugin(options: FakerPluginOptions): Schmock.Plugin {
35
23
 
36
24
  return {
37
25
  name: "faker",
38
- version: "1.0.1",
26
+ version: packageVersion,
39
27
 
40
- async process(context: Schmock.PluginContext, response?: any) {
28
+ async process(context: Schmock.PluginContext, response?: unknown) {
41
29
  // If response already exists, pass it through
42
30
  if (response !== undefined && response !== null) {
43
31
  return { context, response };
@@ -80,13 +68,11 @@ export function fakerPlugin(options: FakerPluginOptions): Schmock.Plugin {
80
68
 
81
69
  export async function generateFromSchema(
82
70
  options: SchemaGenerationContext,
83
- ): Promise<any> {
71
+ ): Promise<unknown> {
84
72
  const { schema, count, overrides, params, state, query, seed } = options;
85
73
 
86
74
  validateSchema(schema);
87
75
 
88
- let generated: any;
89
-
90
76
  // Handle array schemas with count
91
77
  if (schema.type === "array" && schema.items) {
92
78
  const itemCount = determineArrayCount(schema, count);
@@ -110,21 +96,21 @@ export async function generateFromSchema(
110
96
  const itemSchema = rawItemSchema;
111
97
  const enhancedItemSchema = enhanceSchemaWithSmartMapping(itemSchema);
112
98
 
113
- generated = [];
99
+ const items: unknown[] = [];
114
100
  for (let i = 0; i < itemCount; i++) {
115
- let item = await generateWithJsf(enhancedItemSchema, seed);
101
+ let item: unknown = await generateWithJsf(enhancedItemSchema, seed);
116
102
  item = postProcessGenerated(item, enhancedItemSchema);
117
103
  item = applyOverrides(item, overrides, params, state, query);
118
- generated.push(item);
104
+ items.push(item);
119
105
  }
120
- } else {
121
- // Handle object schemas
122
- const enhancedSchema = enhanceSchemaWithSmartMapping(schema);
123
- generated = await generateWithJsf(enhancedSchema, seed);
124
- generated = postProcessGenerated(generated, enhancedSchema);
125
- generated = applyOverrides(generated, overrides, params, state, query);
106
+ return items;
126
107
  }
127
108
 
109
+ // Handle object schemas
110
+ const enhancedSchema = enhanceSchemaWithSmartMapping(schema);
111
+ let generated: unknown = await generateWithJsf(enhancedSchema, seed);
112
+ generated = postProcessGenerated(generated, enhancedSchema);
113
+ generated = applyOverrides(generated, overrides, params, state, query);
128
114
  return generated;
129
115
  }
130
116
 
@@ -134,7 +120,7 @@ export async function generateFromSchema(
134
120
  * - schmockNullable: ~5% chance of null
135
121
  * - schmockTrueProbability: weighted boolean generation
136
122
  */
137
- function postProcessGenerated(data: any, schema: JSONSchema7): any {
123
+ function postProcessGenerated(data: unknown, schema: JSONSchema7): unknown {
138
124
  if (
139
125
  data === null ||
140
126
  data === undefined ||
@@ -144,10 +130,10 @@ function postProcessGenerated(data: any, schema: JSONSchema7): any {
144
130
  return data;
145
131
  }
146
132
 
147
- const schemaAny = schema as Record<string, unknown>;
133
+ const schemaExt = schema as Record<string, unknown>;
148
134
 
149
135
  // Apply nullable probability at this level
150
- if (schemaAny.schmockNullable === true) {
136
+ if (schemaExt.schmockNullable === true) {
151
137
  if (Math.random() < NULLABLE_NULL_PROBABILITY) {
152
138
  return null;
153
139
  }
@@ -156,16 +142,17 @@ function postProcessGenerated(data: any, schema: JSONSchema7): any {
156
142
  // Apply boolean weighting at this level
157
143
  if (
158
144
  schema.type === "boolean" &&
159
- typeof schemaAny.schmockTrueProbability === "number"
145
+ typeof schemaExt.schmockTrueProbability === "number"
160
146
  ) {
161
- return Math.random() < schemaAny.schmockTrueProbability;
147
+ return Math.random() < schemaExt.schmockTrueProbability;
162
148
  }
163
149
 
164
150
  // Recurse into object properties
165
151
  if (typeof data === "object" && !Array.isArray(data) && schema.properties) {
152
+ const record = data as Record<string, unknown>;
166
153
  for (const [key, propSchema] of Object.entries(schema.properties)) {
167
- if (key in data && isJSONSchema7(propSchema)) {
168
- data[key] = postProcessGenerated(data[key], propSchema);
154
+ if (key in record && isJSONSchema7(propSchema)) {
155
+ record[key] = postProcessGenerated(record[key], propSchema);
169
156
  }
170
157
  }
171
158
  }