@schmock/faker 2.2.2 → 2.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 +1 @@
1
- {"version":3,"file":"field-mappings.d.ts","sourceRoot":"","sources":["../src/field-mappings.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAmlCD,eAAO,MAAM,kBAAkB,EAAE,YAAY,EAyB5C,CAAC"}
1
+ {"version":3,"file":"field-mappings.d.ts","sourceRoot":"","sources":["../src/field-mappings.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AA0lCD,eAAO,MAAM,kBAAkB,EAAE,YAAY,EAyB5C,CAAC"}
@@ -395,7 +395,14 @@ const text = [
395
395
  // ── Business/Commerce ───────────────────────────────────────────────
396
396
  const business = [
397
397
  {
398
- keywords: ["company", "organization", "org", "employer", "brand"],
398
+ keywords: [
399
+ "company",
400
+ "organization",
401
+ "org",
402
+ "employer",
403
+ "brand",
404
+ "operator",
405
+ ],
399
406
  fakerMethod: "company.name",
400
407
  schemaType: "string",
401
408
  minScore: 0.6,
@@ -1 +1 @@
1
- {"version":3,"file":"field-name-matcher.d.ts","sourceRoot":"","sources":["../src/field-name-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAsC5E;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,YAAY,EAAuB,GAC5C,WAAW,GAAG,SAAS,CA6FzB"}
1
+ {"version":3,"file":"field-name-matcher.d.ts","sourceRoot":"","sources":["../src/field-name-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAsC5E;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,YAAY,EAAuB,GAC5C,WAAW,GAAG,SAAS,CA4FzB"}
@@ -70,7 +70,6 @@ export function scoreMatch(fieldTokens, keywords) {
70
70
  * Returns the highest-scoring match above its threshold, or undefined.
71
71
  */
72
72
  export function findBestMapping(fieldName, schema, mappings = ALL_FIELD_MAPPINGS) {
73
- const schemaAny = schema;
74
73
  const schemaType = typeof schema.type === "string" ? schema.type : undefined;
75
74
  // Priority: format:uuid always maps to string.uuid
76
75
  if (schemaType === "string" && schema.format === "uuid") {
@@ -89,10 +88,10 @@ export function findBestMapping(fieldName, schema, mappings = ALL_FIELD_MAPPINGS
89
88
  // mappings (e.g. lorem.word for "label") don't honor JSON Schema length
90
89
  // constraints, so they'd produce out-of-range strings ~20% of the time.
91
90
  // Mirrors the numeric constraint skip just below.
92
- if (schemaAny.pattern ||
93
- schemaAny.enum ||
94
- schemaAny.faker ||
95
- schemaAny.$ref ||
91
+ if (schema.pattern ||
92
+ schema.enum ||
93
+ ("faker" in schema && schema.faker) ||
94
+ schema.$ref ||
96
95
  (schemaType === "string" &&
97
96
  (schema.minLength !== undefined || schema.maxLength !== undefined))) {
98
97
  return undefined;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAM5D,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,CAwClB"}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{ResourceLimitError as o,SchemaGenerationError as v2,SchemaValidationError as n}from"@schmock/core";var E="2.2.2";var w=1e4,M=10,b=3,F=3,H=100,k=0.05;import{base as m,en as s,Faker as c}from"@faker-js/faker";import{generate as h}from"json-schema-faker";function x(Q){let $=new c({locale:[s,m]});if(Q!==void 0)$.seed(Q);return $}async function _(Q,$){let Z=$??Math.floor(Math.random()*2147483647);return h(Q,{seed:Z,optionalsProbability:1,alwaysFakeOptionals:!0,useDefaultValue:!0,ignoreMissingRefs:!0,failOnInvalidTypes:!1,failOnInvalidFormat:!1,extensions:{faker:x($)}})}var g=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,b);if(Q.maxItems!==void 0)return Math.min(Q.maxItems,b);return b}function J(Q,$,Z,B,K){if(!$)return Q;if(typeof Q!=="object"||Q===null)return Q;let j=structuredClone(Q);for(let[z,X]of Object.entries($)){if(g.has(z))continue;if(z.includes("."))t(j,z,X,{params:Z,state:B,query:K});else if(typeof X==="object"&&X!==null&&!Array.isArray(X)){let q=X;if(j[z]&&typeof j[z]==="object")j[z]=J(j[z],q,Z,B,K);else j[z]=J({},q,Z,B,K)}else if(typeof X==="string"&&X.includes("{{"))j[z]=l(X,{params:Z,state:B,query:K});else j[z]=X}return j}function t(Q,$,Z,B){let K=$.split("."),j=Q;for(let X=0;X<K.length-1;X++){let q=K[X];if(g.has(q))return;if(!(q in j)||typeof j[q]!=="object"||j[q]===null)j[q]={};j=j[q]}let z=K[K.length-1];if(g.has(z))return;if(typeof Z==="string"&&Z.includes("{{"))j[z]=l(Z,B);else j[z]=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}],Q2=[{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}],$2=[{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}],B2=[{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}],Z2=[{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}],K2=[{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}],j2=[{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}],X2=[{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}],z2=[{keywords:["color","colour"],fakerMethod:"color.human",schemaType:"string",minScore:0.8},{keywords:["hex_color","hexcolor"],fakerMethod:"color.rgb",schemaType:"string",minScore:0.9}],q2=[{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}],W2=[{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}],U2=[{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}],V2=[{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}],Y2=[{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}],b2=[{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}],w2=[{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}],F2=[{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}],C2=[],G2=[{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}],H2=[{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}],J2=[{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}],I2=[{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}],M2=[{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,...Q2,...$2,...B2,...Z2,...K2,...j2,...X2,...z2,...q2,...W2,...U2,...V2,...Y2,...b2,...w2,...F2,...C2,...G2,...H2,...J2,...I2,...M2];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 P2(Q,$){let Z=Q.join(""),B=0;for(let K of $){let j=p(K),z=j.join("");if(Z===z)return 1;if(j.length>0&&j.every((X)=>Q.includes(X))){let q=j.length/Q.length>0.5?0.9:0.65;B=Math.max(B,q)}if(j.length>0&&j.length<=Q.length){if(Q.slice(-j.length).every((q,W)=>q===j[W]))B=Math.max(B,0.8)}if(z.length>=3&&Z.includes(z))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||K==="string"&&($.minLength!==void 0||$.maxLength!==void 0))return;let j=$.minimum!==void 0||$.maximum!==void 0||$.exclusiveMinimum!==void 0||$.exclusiveMaximum!==void 0,z=p(Q),X;for(let q of Z){if(j&&(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 W=P2(z,q.keywords);if(W>=q.minScore&&(!X||W>X.score))X={mapping:q,score:W}}if(K==="string"){if(z[z.length-1]==="id"&&z.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 V}from"@schmock/core";var f;function U(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}function C(Q,$="$"){if(!Q||typeof Q!=="object")throw new V($,"Schema must be a valid JSON Schema object");if(Object.keys(Q).length===0)throw new V($,"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 V($,`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 V(`${$}.properties`,"Properties must be an object mapping property names to schemas",'Use { "propertyName": { "type": "string" } } format');for(let[B,K]of Object.entries(Q.properties))if(typeof K==="object"&&K!==null){let j="faker"in K?String(K.faker):void 0;if(j)try{y(j)}catch(z){if(z instanceof V){let X=z.context,q="Invalid faker method",W;if(X&&typeof X==="object"){if("issue"in X&&typeof X.issue==="string")q=X.issue;if("suggestion"in X&&typeof X.suggestion==="string")W=X.suggestion}throw new V(`${$}.properties.${B}.faker`,q,W)}if(z instanceof Error)throw z;throw Error(String(z))}C(K,`${$}.properties.${B}`)}}if(Q.type==="array"){if(Q.items===null||Q.items===void 0)throw new V(`${$}.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 V(`${$}.items`,"Array items cannot be empty array","Provide at least one item schema");Q.items.forEach((B,K)=>{if(typeof B==="object"&&B!==null)C(B,`${$}.items[${K}]`)})}else if(typeof Q.items==="object"&&Q.items!==null)C(Q.items,`${$}.items`)}if($==="$"){if(R(Q))throw new V($,"Schema contains circular references which are not supported");if(Q.$ref==="#")throw new V($,"Self-referencing schemas are not supported");let B=O(Q);if(B>M)throw new L("schema_nesting_depth",M,B);if(B>=F)L2(Q,$);P(Q,$)}}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(U(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(U(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(U(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(U(K))Z=Math.max(Z,O(K,$+1))}return Z}function L2(Q,$){function Z(B,K){let j=B.type;if(Array.isArray(j)?j.includes("array"):j==="array"){let X=B.maxItems||b;if(K>=F&&X>=H)throw new L("deep_nesting_memory_risk",F*H,K*X);if(B.items){let q=Array.isArray(B.items)?B.items:[B.items];for(let W of q)if(U(W))Z(W,K+1)}return}if(j==="object"&&B.properties){for(let X of Object.values(B.properties))if(U(X))Z(X,K+1)}}Z(Q,0)}function P(Q,$){if(Q.type==="array"){if(Q.maxItems&&Q.maxItems>w)throw new L("array_max_items",w,Q.maxItems);let Z=O(Q),B=Q.maxItems||Q.minItems||b;if(Z>F&&B>H)throw new L("memory_estimation",F*H,Z*B)}if(Q.type==="object"&&Q.properties){for(let[Z,B]of Object.entries(Q.properties))if(U(B))P(B,`${$}.properties.${Z}`)}if(Q.type==="array"&&Q.items){if(Array.isArray(Q.items))Q.items.forEach((Z,B)=>{if(U(Z))P(Z,`${$}.items[${B}]`)});else if(U(Q.items))P(Q.items,`${$}.items`)}}function y(Q){let $=Q.split(".");if($.length<2)throw new V("$.faker",`Invalid faker method format: "${Q}"`,"Use format like 'person.firstName' or 'internet.email'");if(!f)f=x();let B=f;for(let K of $)if(B&&typeof B==="object"&&K in B)B=B[K];else throw new V("$.faker",`Invalid faker method: "${Q}"`,"Check faker.js documentation for valid methods");if(typeof B!=="function")throw new V("$.faker",`Invalid faker method: "${Q}" is not a function`,"Check faker.js documentation for valid methods")}function Y(Q){if(!Q||typeof Q!=="object")return Q;let $={...Q};if($.properties){$.properties={...$.properties};for(let[Z,B]of Object.entries($.properties))if(U(B))$.properties[Z]=O2(Z,B)}for(let Z of["allOf","anyOf","oneOf"]){let B=$[Z];if(Array.isArray(B))$[Z]=B.map((K)=>U(K)?Y(K):K)}if($.items){if(Array.isArray($.items))$.items=$.items.map((Z)=>U(Z)?Y(Z):Z);else if(U($.items))$.items=Y($.items)}if($.additionalProperties&&typeof $.additionalProperties==="object"&&!Array.isArray($.additionalProperties))$.additionalProperties=Y($.additionalProperties);return $}function O2(Q,$){let Z={...$};if(Z.faker){if(typeof Z.faker==="string")y(Z.faker);return Z}let B=Z.allOf||Z.anyOf||Z.oneOf;if(Z.properties||B||Z.items){let j=Y(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){let{fakerMethod:j,format:z,trueProbability:X,fakerArgs:q}=K.mapping;if(q)Z.faker={[j]:[q]};else Z.faker=j;if(z)Z.format=z;if(X!==void 0)Z.schmockTrueProbability=X}return Z}function a2(Q){return C(Q.schema),{name:"faker",version:E,async process($,Z){if(Z!==void 0&&Z!==null)return{context:$,response:Z};try{let B=await D2({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 v2($.path,B instanceof Error?B:Error(String(B)),Q.schema)}}}}async function D2(Q){let{schema:$,count:Z,overrides:B,params:K,state:j,query:z,seed:X}=Q;if(C($),$.type==="array"&&$.items){let I=S($,Z);if(I>w)throw new o("array_size",w,I);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 N=Y(D),A=[];for(let T=0;T<I;T++){let G=await _(N,X);G=v(G,N),G=J(G,B,K,j,z),A.push(G)}return A}let q=Y($),W=await _(q,X);return W=v(W,q),W=J(W,B,K,j,z),W}function v(Q,$){if(Q===null||Q===void 0||!$||typeof $!=="object")return Q;let Z=$;if(Z.schmockNullable===!0){if(Math.random()<k)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&&U(j))B[K]=v(B[K],j)}if(Array.isArray(Q)&&$.items&&U($.items))for(let B=0;B<Q.length;B++)Q[B]=v(Q[B],$.items);return Q}export{D2 as generateFromSchema,a2 as fakerPlugin};
1
+ import{ResourceLimitError as m,SchemaGenerationError as A0,SchemaValidationError as R0}from"@schmock/core";var E="2.3.0";var F=1e4,O=10,C=3,P=3,M=100,f=0.05;import{base as c,en as s,Faker as a}from"@faker-js/faker";import{generate as e}from"json-schema-faker";var Q0=2147483647;function R(Q){let $=new a({locale:[s,c]});if(Q!==void 0)$.seed(Q);return $}function k(Q){return Q??Math.floor(Math.random()*Q0)}function u(Q){let $=Q;return()=>{$+=1831565813;let Z=$;return Z=Math.imul(Z^Z>>>15,Z|1),Z^=Z+Math.imul(Z^Z>>>7,Z|61),((Z^Z>>>14)>>>0)/4294967296}}function b(Q){return typeof Q==="boolean"?Q:S(Q)}function _(Q){return Object.fromEntries(Object.entries(Q).map(([$,Z])=>[$,b(Z)]))}function S(Q){let $={};for(let[Z,B]of Object.entries(Q))$[Z]=B;if(Q.properties)$.properties=_(Q.properties);if(Q.definitions)$.definitions=_(Q.definitions);if(Q.$defs)$.$defs=_(Q.$defs);if(Q.patternProperties)$.patternProperties=_(Q.patternProperties);if(Array.isArray(Q.items))$.prefixItems=Q.items.map(b),$.items=Q.additionalItems===void 0?!0:b(Q.additionalItems),delete $.additionalItems;else if(Q.items!==void 0)$.items=b(Q.items);for(let Z of["allOf","anyOf","oneOf"]){let B=Q[Z];if(B)$[Z]=B.map(b)}if(Q.additionalProperties!==void 0)$.additionalProperties=b(Q.additionalProperties);for(let Z of["contains","not","if","then","else","propertyNames"]){let B=Q[Z];if(B!==void 0)$[Z]=b(B)}if(Q.dependencies)$.dependencies=Object.fromEntries(Object.entries(Q.dependencies).map(([Z,B])=>[Z,Array.isArray(B)?[...B]:b(B)]));return $}async function l(Q,$){let Z={seed:$,optionalsProbability:1,alwaysFakeOptionals:!0,useDefaultValue:!0,failOnInvalidTypes:!1,extensions:{faker:R($)}};return e(S(Q),Z)}var v=new Set(["__proto__","constructor","prototype"]);function z(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}function d(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,C);if(Q.maxItems!==void 0)return Math.min(Q.maxItems,C);if(Array.isArray(Q.items))return Q.items.length;return C}function L(Q,$,Z,B,K){if(!$)return Q;if(!z(Q))return Q;let j=structuredClone(Q);for(let[W,X]of Object.entries($)){if(v.has(W))continue;if(W.includes("."))$0(j,W,X,{params:Z,state:B,query:K});else if(z(X))if(z(j[W]))j[W]=L(j[W],X,Z,B,K);else j[W]=L({},X,Z,B,K);else if(typeof X==="string"&&X.includes("{{"))j[W]=o(X,{params:Z,state:B,query:K});else j[W]=X}return j}function $0(Q,$,Z,B){let K=$.split("."),j=Q;for(let X=0;X<K.length-1;X++){let q=K[X];if(v.has(q))return;let V=j[q];if(z(V))j=V;else{let w={};j[q]=w,j=w}}let W=K[K.length-1];if(v.has(W))return;if(typeof Z==="string"&&Z.includes("{{"))j[W]=o(Z,B);else j[W]=Z}function p(Q,$){let Z=$.trim().split("."),B=Q;for(let K of Z)if(z(B))B=B[K];else return;return B}function o(Q,$){let Z=Q.match(/^\{\{\s*([^}]+)\s*\}\}$/);if(Z){let B=p($,Z[1]);return B!==void 0?B:Q}return Q.replace(/\{\{\s*([^}]+)\s*\}\}/g,(B,K)=>{let j=p($,K);return j!==void 0?String(j):B})}var B0=[{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}],Z0=[{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}],K0=[{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}],j0=[{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}],X0=[{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}],W0=[{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}],q0=[{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}],U0=[{keywords:["company","organization","org","employer","brand","operator"],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}],V0=[{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}],Y0=[{keywords:["color","colour"],fakerMethod:"color.human",schemaType:"string",minScore:0.8},{keywords:["hex_color","hexcolor"],fakerMethod:"color.rgb",schemaType:"string",minScore:0.9}],b0=[{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}],H0=[{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}],C0=[{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}],G0=[{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}],I0=[{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}],F0=[{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}],P0=[{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}],J0=[],M0=[{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}],z0=[{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}],L0=[{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}],O0=[{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}],_0=[{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}],i=[...B0,...Z0,...K0,...j0,...X0,...W0,...q0,...U0,...V0,...Y0,...b0,...w0,...H0,...C0,...G0,...I0,...F0,...P0,...J0,...M0,...z0,...L0,...O0,..._0];function r(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 g0(Q,$){let Z=Q.join(""),B=0;for(let K of $){let j=r(K),W=j.join("");if(Z===W)return 1;if(j.length>0&&j.every((X)=>Q.includes(X))){let q=j.length/Q.length>0.5?0.9:0.65;B=Math.max(B,q)}if(j.length>0&&j.length<=Q.length){if(Q.slice(-j.length).every((q,V)=>q===j[V]))B=Math.max(B,0.8)}if(W.length>=3&&Z.includes(W))B=Math.max(B,0.7)}return B}function n(Q,$,Z=i){let B=typeof $.type==="string"?$.type:void 0;if(B==="string"&&$.format==="uuid")return{mapping:{keywords:["uuid"],fakerMethod:"string.uuid",schemaType:"string",minScore:0.5},score:1};if($.pattern||$.enum||"faker"in $&&$.faker||$.$ref||B==="string"&&($.minLength!==void 0||$.maxLength!==void 0))return;let K=$.minimum!==void 0||$.maximum!==void 0||$.exclusiveMinimum!==void 0||$.exclusiveMaximum!==void 0,j=r(Q),W;for(let X of Z){if(K&&(X.schemaType==="number"||X.schemaType==="integer"))continue;if(B==="object"||B==="array")continue;if(X.schemaType&&B&&X.schemaType!==B){if(!(X.schemaType==="number"&&B==="integer"||X.schemaType==="integer"&&B==="number"))continue}let q=g0(j,X.keywords);if(q>=X.minScore&&(!W||q>W.score))W={mapping:X,score:q}}if(B==="string"){if(j[j.length-1]==="id"&&j.length>1){if(!W||W.score<0.8)W={mapping:{keywords:["id"],fakerMethod:"string.uuid",schemaType:"string",minScore:0.5},score:0.8}}}return W}import{ResourceLimitError as x,SchemaValidationError as Y}from"@schmock/core";var N;function U(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}function J(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 Z=["object","array","string","number","integer","boolean","null"];if(Q.type&&typeof Q.type==="string"&&!Z.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[B,K]of Object.entries(Q.properties))if(typeof K==="object"&&K!==null){let j="faker"in K?String(K.faker):void 0;if(j)try{y(j)}catch(W){if(W instanceof Y){let X=W.context,q="Invalid faker method",V;if(X&&typeof X==="object"){if("issue"in X&&typeof X.issue==="string")q=X.issue;if("suggestion"in X&&typeof X.suggestion==="string")V=X.suggestion}throw new Y(`${$}.properties.${B}.faker`,q,V)}if(W instanceof Error)throw W;throw Error(String(W))}J(K,`${$}.properties.${B}`)}}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((B,K)=>{if(typeof B==="object"&&B!==null)J(B,`${$}.items[${K}]`)})}else if(typeof Q.items==="object"&&Q.items!==null)J(Q.items,`${$}.items`)}if($==="$"){if(T(Q))throw new Y($,"Schema contains circular references which are not supported");if(Q.$ref==="#")throw new Y($,"Self-referencing schemas are not supported");let B=D(Q);if(B>O)throw new x("schema_nesting_depth",O,B);if(B>=P)x0(Q,$);g(Q,$)}}function T(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(U(Z)){if(T(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(U(B)){if(T(B,$))return!0}}return $.delete(Q),!1}function D(Q,$=0){if($>O)return $;let Z=$;if(Q.type==="object"&&Q.properties){for(let B of Object.values(Q.properties))if(U(B))Z=Math.max(Z,D(B,$+1))}if(Q.type==="array"&&Q.items){let B=Array.isArray(Q.items)?Q.items:[Q.items];for(let K of B)if(U(K))Z=Math.max(Z,D(K,$+1))}return Z}function x0(Q,$){function Z(B,K){let j=B.type;if(Array.isArray(j)?j.includes("array"):j==="array"){let X=B.maxItems||C;if(K>=P&&X>=M)throw new x("deep_nesting_memory_risk",P*M,K*X);if(B.items){let q=Array.isArray(B.items)?B.items:[B.items];for(let V of q)if(U(V))Z(V,K+1)}return}if(j==="object"&&B.properties){for(let X of Object.values(B.properties))if(U(X))Z(X,K+1)}}Z(Q,0)}function g(Q,$){if(Q.type==="array"){if(Q.maxItems&&Q.maxItems>F)throw new x("array_max_items",F,Q.maxItems);let Z=D(Q),B=Q.maxItems||Q.minItems||C;if(Z>P&&B>M)throw new x("memory_estimation",P*M,Z*B)}if(Q.type==="object"&&Q.properties){for(let[Z,B]of Object.entries(Q.properties))if(U(B))g(B,`${$}.properties.${Z}`)}if(Q.type==="array"&&Q.items){if(Array.isArray(Q.items))Q.items.forEach((Z,B)=>{if(U(Z))g(Z,`${$}.items[${B}]`)});else if(U(Q.items))g(Q.items,`${$}.items`)}}function y(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(!N)N=R();let B=N;for(let K of $)if(B&&typeof B==="object"&&K in B)B=Reflect.get(B,K);else throw new Y("$.faker",`Invalid faker method: "${Q}"`,"Check faker.js documentation for valid methods");if(typeof B!=="function")throw new Y("$.faker",`Invalid faker method: "${Q}" is not a function`,"Check faker.js documentation for valid methods")}function t(Q){return Q.type==="string"&&Q.faker===void 0&&Q.format===void 0&&Q.pattern===void 0&&Q.enum===void 0&&Q.const===void 0&&Q.$ref===void 0&&Q.minLength===void 0&&Q.maxLength===void 0}function G(Q){if(!Q||typeof Q!=="object")return Q;let $={...Q};if($.properties){$.properties={...$.properties};for(let[Z,B]of Object.entries($.properties))if(U(B))$.properties[Z]=D0(Z,B)}for(let Z of["allOf","anyOf","oneOf"]){let B=$[Z];if(Array.isArray(B))$[Z]=B.map((K)=>U(K)?G(K):K)}if($.items){if(Array.isArray($.items))$.items=$.items.map((Z)=>U(Z)?G(Z):Z);else if(U($.items))$.items=G($.items)}if(U($.additionalProperties))$.additionalProperties=G($.additionalProperties);if(t($))$.faker="lorem.word";return $}function D0(Q,$){let Z={...$};if(Z.faker){if(typeof Z.faker==="string")y(Z.faker);return Z}let B=Z.allOf||Z.anyOf||Z.oneOf;if(Z.properties||B||Z.items){let j=G(Z);Object.assign(Z,j)}if(B)return Z;if(Z.const!==void 0||Z.enum)return Z;let K=n(Q,Z);if(K){let{fakerMethod:j,format:W,trueProbability:X,fakerArgs:q}=K.mapping;if(q)Z.faker={[j]:[q]};else Z.faker=j;if(W)Z.format=W;if(X!==void 0)Z.schmockTrueProbability=X}else if(t(Z))Z.faker="lorem.word";return Z}function v0(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}function Z1(Q){return J(Q.schema),{name:"faker",version:E,async process($,Z){if(Z!==void 0&&Z!==null)return{context:$,response:Z};try{let B=await N0({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 R0||B instanceof m)throw B;throw new A0($.path,B instanceof Error?B:Error(String(B)),Q.schema)}}}}async function N0(Q){let{schema:$,count:Z,overrides:B,params:K,state:j,query:W,seed:X}=Q;J($);let q=k(X),V=u(q),w=G($);if($.type==="array"&&$.items){let I=d($,Z,V);if(I>F)throw new m("array_size",F,I);w={...w,minItems:I,maxItems:I}}let H=await l(w,q);if(H=A(H,w,V),Array.isArray(H))return H.map((I)=>L(I,B,K,j,W));return H=L(H,B,K,j,W),H}function A(Q,$,Z){if(Q===null||Q===void 0||!$||typeof $!=="object")return Q;if("schmockNullable"in $&&$.schmockNullable===!0){if(Z()<f)return null}if($.type==="boolean"&&"schmockTrueProbability"in $&&typeof $.schmockTrueProbability==="number")return Z()<$.schmockTrueProbability;if(v0(Q)&&$.properties){for(let[B,K]of Object.entries($.properties))if(B in Q&&U(K))Q[B]=A(Q[B],K,Z)}if(Array.isArray(Q)&&Array.isArray($.items))for(let B=0;B<Q.length;B++){let K=$.items[B];if(K&&U(K))Q[B]=A(Q[B],K,Z)}else if(Array.isArray(Q)&&$.items&&U($.items))for(let B=0;B<Q.length;B++)Q[B]=A(Q[B],$.items,Z);return Q}export{N0 as generateFromSchema,Z1 as fakerPlugin};
@@ -1,13 +1,23 @@
1
1
  import { Faker } from "@faker-js/faker";
2
2
  import type { JSONSchema7 } from "json-schema";
3
+ import { type JsonSchema } from "json-schema-faker";
4
+ type JsfObjectSchema = Exclude<JsonSchema, boolean>;
3
5
  /**
4
6
  * Create isolated faker instance to avoid race conditions.
5
7
  * Each generation gets its own faker instance to ensure thread-safety.
6
8
  */
7
9
  export declare function createFakerInstance(seed?: number): Faker;
10
+ export declare function resolveGenerationSeed(seed?: number): number;
11
+ export declare function createSeededRandom(seed: number): () => number;
12
+ /**
13
+ * json-schema-faker consumes tuple schemas through the 2020-12 `prefixItems`
14
+ * keyword. Convert Draft 7 tuple `items` recursively at the library boundary.
15
+ */
16
+ export declare function normalizeSchemaForJsf(schema: JSONSchema7): JsfObjectSchema;
8
17
  /**
9
18
  * Generate data from a JSON schema using json-schema-faker 0.6.0 async API.
10
19
  * Stateless — each call is self-contained with its own faker instance and options.
11
20
  */
12
- export declare function generateWithJsf(schema: JSONSchema7, seed?: number): Promise<unknown>;
21
+ export declare function generateWithJsf(schema: JSONSchema7, seed: number): Promise<unknown>;
22
+ export {};
13
23
  //# sourceMappingURL=jsf-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsf-config.d.ts","sourceRoot":"","sources":["../src/jsf-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,SAMhD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAoBlB"}
1
+ {"version":3,"file":"jsf-config.d.ts","sourceRoot":"","sources":["../src/jsf-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAC;AACtE,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAG3B,KAAK,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,SAMhD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAS7D;AAqBD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,CA0E1E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAWlB"}
@@ -1,5 +1,6 @@
1
1
  import { base, en, Faker } from "@faker-js/faker";
2
2
  import { generate, } from "json-schema-faker";
3
+ const MAX_GENERATION_SEED = 2_147_483_647;
3
4
  /**
4
5
  * Create isolated faker instance to avoid race conditions.
5
6
  * Each generation gets its own faker instance to ensure thread-safety.
@@ -11,25 +12,106 @@ export function createFakerInstance(seed) {
11
12
  }
12
13
  return faker;
13
14
  }
15
+ export function resolveGenerationSeed(seed) {
16
+ return seed ?? Math.floor(Math.random() * MAX_GENERATION_SEED);
17
+ }
18
+ export function createSeededRandom(seed) {
19
+ let state = seed;
20
+ return () => {
21
+ state += 0x6d2b79f5;
22
+ let value = state;
23
+ value = Math.imul(value ^ (value >>> 15), value | 1);
24
+ value ^= value + Math.imul(value ^ (value >>> 7), value | 61);
25
+ return ((value ^ (value >>> 14)) >>> 0) / 4_294_967_296;
26
+ };
27
+ }
28
+ function normalizeDefinitionForJsf(definition) {
29
+ return typeof definition === "boolean"
30
+ ? definition
31
+ : normalizeSchemaForJsf(definition);
32
+ }
33
+ function normalizeDefinitionMap(definitions) {
34
+ return Object.fromEntries(Object.entries(definitions).map(([key, definition]) => [
35
+ key,
36
+ normalizeDefinitionForJsf(definition),
37
+ ]));
38
+ }
39
+ /**
40
+ * json-schema-faker consumes tuple schemas through the 2020-12 `prefixItems`
41
+ * keyword. Convert Draft 7 tuple `items` recursively at the library boundary.
42
+ */
43
+ export function normalizeSchemaForJsf(schema) {
44
+ const normalized = {};
45
+ for (const [key, value] of Object.entries(schema)) {
46
+ normalized[key] = value;
47
+ }
48
+ if (schema.properties) {
49
+ normalized.properties = normalizeDefinitionMap(schema.properties);
50
+ }
51
+ if (schema.definitions) {
52
+ normalized.definitions = normalizeDefinitionMap(schema.definitions);
53
+ }
54
+ if (schema.$defs) {
55
+ normalized.$defs = normalizeDefinitionMap(schema.$defs);
56
+ }
57
+ if (schema.patternProperties) {
58
+ normalized.patternProperties = normalizeDefinitionMap(schema.patternProperties);
59
+ }
60
+ if (Array.isArray(schema.items)) {
61
+ normalized.prefixItems = schema.items.map(normalizeDefinitionForJsf);
62
+ normalized.items =
63
+ schema.additionalItems === undefined
64
+ ? true
65
+ : normalizeDefinitionForJsf(schema.additionalItems);
66
+ delete normalized.additionalItems;
67
+ }
68
+ else if (schema.items !== undefined) {
69
+ normalized.items = normalizeDefinitionForJsf(schema.items);
70
+ }
71
+ for (const keyword of ["allOf", "anyOf", "oneOf"]) {
72
+ const definitions = schema[keyword];
73
+ if (definitions) {
74
+ normalized[keyword] = definitions.map(normalizeDefinitionForJsf);
75
+ }
76
+ }
77
+ if (schema.additionalProperties !== undefined) {
78
+ normalized.additionalProperties = normalizeDefinitionForJsf(schema.additionalProperties);
79
+ }
80
+ for (const keyword of [
81
+ "contains",
82
+ "not",
83
+ "if",
84
+ "then",
85
+ "else",
86
+ "propertyNames",
87
+ ]) {
88
+ const definition = schema[keyword];
89
+ if (definition !== undefined) {
90
+ normalized[keyword] = normalizeDefinitionForJsf(definition);
91
+ }
92
+ }
93
+ if (schema.dependencies) {
94
+ normalized.dependencies = Object.fromEntries(Object.entries(schema.dependencies).map(([key, dependency]) => [
95
+ key,
96
+ Array.isArray(dependency)
97
+ ? [...dependency]
98
+ : normalizeDefinitionForJsf(dependency),
99
+ ]));
100
+ }
101
+ return normalized;
102
+ }
14
103
  /**
15
104
  * Generate data from a JSON schema using json-schema-faker 0.6.0 async API.
16
105
  * Stateless — each call is self-contained with its own faker instance and options.
17
106
  */
18
107
  export async function generateWithJsf(schema, seed) {
19
- // When no seed is specified, generate a random seed to ensure different
20
- // results on each call. JSF 0.6.0 treats seed=undefined as deterministic.
21
- const effectiveSeed = seed ?? Math.floor(Math.random() * 2147483647);
22
- return generate(
23
- // JSONSchema7.items allows arrays but JsonSchema.items does not — structural
24
- // mismatch requires routing through `unknown`.
25
- schema, {
26
- seed: effectiveSeed,
108
+ const options = {
109
+ seed,
27
110
  optionalsProbability: 1.0,
28
111
  alwaysFakeOptionals: true,
29
112
  useDefaultValue: true,
30
- ignoreMissingRefs: true,
31
113
  failOnInvalidTypes: false,
32
- failOnInvalidFormat: false,
33
114
  extensions: { faker: createFakerInstance(seed) },
34
- });
115
+ };
116
+ return generate(normalizeSchemaForJsf(schema), options);
35
117
  }
@@ -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,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"}
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../src/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,GAAE,MAAM,MAAoB,GACjC,MAAM,CA4BR;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,CAoCT"}
package/dist/overrides.js CHANGED
@@ -1,5 +1,8 @@
1
1
  import { DEFAULT_ARRAY_COUNT } from "./constants.js";
2
2
  const DANGEROUS_KEYS = new Set(["__proto__", "constructor", "prototype"]);
3
+ function isRecord(value) {
4
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5
+ }
3
6
  /**
4
7
  * Determine number of items to generate for array schema
5
8
  * Prefers explicit count, then schema minItems/maxItems, with sane defaults
@@ -26,6 +29,9 @@ export function determineArrayCount(schema, explicitCount, random = Math.random)
26
29
  if (schema.maxItems !== undefined) {
27
30
  return Math.min(schema.maxItems, DEFAULT_ARRAY_COUNT);
28
31
  }
32
+ if (Array.isArray(schema.items)) {
33
+ return schema.items.length;
34
+ }
29
35
  return DEFAULT_ARRAY_COUNT;
30
36
  }
31
37
  /**
@@ -41,7 +47,7 @@ export function determineArrayCount(schema, explicitCount, random = Math.random)
41
47
  export function applyOverrides(data, overrides, params, state, query) {
42
48
  if (!overrides)
43
49
  return data;
44
- if (typeof data !== "object" || data === null)
50
+ if (!isRecord(data))
45
51
  return data;
46
52
  const result = structuredClone(data);
47
53
  for (const [key, value] of Object.entries(overrides)) {
@@ -53,16 +59,13 @@ export function applyOverrides(data, overrides, params, state, query) {
53
59
  }
54
60
  else {
55
61
  // Handle flat keys and nested objects
56
- if (typeof value === "object" &&
57
- value !== null &&
58
- !Array.isArray(value)) {
59
- const nested = value;
62
+ if (isRecord(value)) {
60
63
  // Recursively apply nested overrides
61
- if (result[key] && typeof result[key] === "object") {
62
- result[key] = applyOverrides(result[key], nested, params, state, query);
64
+ if (isRecord(result[key])) {
65
+ result[key] = applyOverrides(result[key], value, params, state, query);
63
66
  }
64
67
  else {
65
- result[key] = applyOverrides({}, nested, params, state, query);
68
+ result[key] = applyOverrides({}, value, params, state, query);
66
69
  }
67
70
  }
68
71
  else if (typeof value === "string" && value.includes("{{")) {
@@ -84,12 +87,15 @@ function setNestedProperty(obj, path, value, context) {
84
87
  const part = parts[i];
85
88
  if (DANGEROUS_KEYS.has(part))
86
89
  return;
87
- if (!(part in current) ||
88
- typeof current[part] !== "object" ||
89
- current[part] === null) {
90
- current[part] = {};
90
+ const next = current[part];
91
+ if (isRecord(next)) {
92
+ current = next;
93
+ }
94
+ else {
95
+ const nested = {};
96
+ current[part] = nested;
97
+ current = nested;
91
98
  }
92
- current = current[part];
93
99
  }
94
100
  // Set the final property
95
101
  const finalKey = parts[parts.length - 1];
@@ -106,7 +112,7 @@ function resolveTemplatePath(context, expression) {
106
112
  const parts = expression.trim().split(".");
107
113
  let result = context;
108
114
  for (const part of parts) {
109
- if (result && typeof result === "object") {
115
+ if (isRecord(result)) {
110
116
  result = result[part];
111
117
  }
112
118
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"schema-enhancement.d.ts","sourceRoot":"","sources":["../src/schema-enhancement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,WAAW,GAClB,WAAW,CAwDb"}
1
+ {"version":3,"file":"schema-enhancement.d.ts","sourceRoot":"","sources":["../src/schema-enhancement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyB/C,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,WAAW,GAClB,WAAW,CAwDb"}
@@ -1,5 +1,16 @@
1
1
  import { findBestMapping } from "./field-name-matcher.js";
2
2
  import { isJSONSchema7, validateFakerMethod } from "./validation.js";
3
+ function needsStringFallback(schema) {
4
+ return (schema.type === "string" &&
5
+ schema.faker === undefined &&
6
+ schema.format === undefined &&
7
+ schema.pattern === undefined &&
8
+ schema.enum === undefined &&
9
+ schema.const === undefined &&
10
+ schema.$ref === undefined &&
11
+ schema.minLength === undefined &&
12
+ schema.maxLength === undefined);
13
+ }
3
14
  export function enhanceSchemaWithSmartMapping(schema) {
4
15
  if (!schema || typeof schema !== "object") {
5
16
  return schema;
@@ -31,11 +42,12 @@ export function enhanceSchemaWithSmartMapping(schema) {
31
42
  }
32
43
  }
33
44
  // Recurse into additionalProperties
34
- if (enhanced.additionalProperties &&
35
- typeof enhanced.additionalProperties === "object" &&
36
- !Array.isArray(enhanced.additionalProperties)) {
45
+ if (isJSONSchema7(enhanced.additionalProperties)) {
37
46
  enhanced.additionalProperties = enhanceSchemaWithSmartMapping(enhanced.additionalProperties);
38
47
  }
48
+ if (needsStringFallback(enhanced)) {
49
+ enhanced.faker = "lorem.word";
50
+ }
39
51
  return enhanced;
40
52
  }
41
53
  function enhanceFieldSchema(fieldName, fieldSchema) {
@@ -85,5 +97,8 @@ function enhanceFieldSchema(fieldName, fieldSchema) {
85
97
  enhanced.schmockTrueProbability = trueProbability;
86
98
  }
87
99
  }
100
+ else if (needsStringFallback(enhanced)) {
101
+ enhanced.faker = "lorem.word";
102
+ }
88
103
  return enhanced;
89
104
  }
@@ -24,8 +24,8 @@ export declare const schemas: {
24
24
  };
25
25
  export declare const validators: {
26
26
  isFieldMapped: (fieldName: string, fieldType?: JSONSchema7["type"]) => Promise<boolean>;
27
- uniquenessRatio: (samples: any[]) => number;
28
- allMatch: (samples: any[], validator: (sample: any) => boolean) => boolean;
27
+ uniquenessRatio: (samples: unknown[]) => number;
28
+ allMatch: <T>(samples: T[], validator: (sample: T) => boolean) => boolean;
29
29
  appearsToBeFromCategory: (samples: string[], category: "email" | "name" | "phone" | "address" | "uuid" | "date") => boolean;
30
30
  };
31
31
  export declare const performance: {
@@ -34,24 +34,24 @@ export declare const performance: {
34
34
  duration: number;
35
35
  }>;
36
36
  measureMemory: (fn: () => void) => number;
37
- benchmark: (_name: string, fn: () => any, iterations?: number) => Promise<{
37
+ benchmark: (_name: string, fn: () => unknown | Promise<unknown>, iterations?: number) => Promise<{
38
38
  mean: number;
39
39
  min: number;
40
40
  max: number;
41
41
  }>;
42
42
  };
43
43
  export declare const generate: {
44
- samples: <T>(schema: JSONSchema7, count?: number, options?: any) => Promise<T[]>;
45
- withSeed: (schema: JSONSchema7, _seed?: number) => Promise<any>;
44
+ samples: (schema: JSONSchema7, count?: number, options?: Omit<Schmock.SchemaGenerationContext, "schema">) => Promise<unknown[]>;
45
+ withSeed: (schema: JSONSchema7, seed?: number) => Promise<unknown>;
46
46
  };
47
47
  export declare const stats: {
48
- distribution: (samples: any[]) => Map<any, number>;
49
- entropy: (samples: any[]) => number;
48
+ distribution: (samples: unknown[]) => Map<string, number>;
49
+ entropy: (samples: unknown[]) => number;
50
50
  };
51
51
  export declare const schemaTests: {
52
52
  expectValid: (schema: JSONSchema7) => Promise<void>;
53
- expectInvalid: (schema: any, errorMessage?: string | RegExp) => Promise<void>;
54
- expectSchemaError: (schema: any, path: string, issue?: string) => Promise<void>;
53
+ expectInvalid: (schema: JSONSchema7, errorMessage?: string | RegExp) => Promise<void>;
54
+ expectSchemaError: (schema: JSONSchema7, path: string, issue?: string) => Promise<void>;
55
55
  };
56
56
  export {};
57
57
  //# sourceMappingURL=test-utils.d.ts.map
@@ -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;+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"}
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;AAOD,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;+BAmDQ,OAAO,EAAE,KAAG,MAAM;eAMlC,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,KAAG,OAAO;uCAM5D,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,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,0BAEnC,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;sBAET,WAAW,4BAET,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,KACxD,OAAO,CAAC,OAAO,EAAE,CAAC;uBAQI,WAAW,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;CAGvE,CAAC;AAGF,eAAO,MAAM,KAAK;4BACQ,OAAO,EAAE,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;uBASpC,OAAO,EAAE,KAAG,MAAM;CActC,CAAC;AAGF,eAAO,MAAM,WAAW;0BACM,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC;4BAK7C,WAAW,iBACJ,MAAM,GAAG,MAAM,KAC7B,OAAO,CAAC,IAAI,CAAC;gCAWN,WAAW,QACb,MAAM,UACJ,MAAM,KACb,OAAO,CAAC,IAAI,CAAC;CAuBjB,CAAC"}