@mapletip/data 0.2.0 → 0.5.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.
Files changed (43) hide show
  1. package/README.md +204 -2
  2. package/client/contract-compatibility.mjs +10 -0
  3. package/client/core.d.ts +5 -0
  4. package/client/core.js +10 -0
  5. package/client/items.d.ts +28 -5
  6. package/client/items.js +60 -8
  7. package/client/map-geography.d.ts +4 -0
  8. package/client/map-geography.js +2 -0
  9. package/client/maps.d.ts +22 -0
  10. package/client/maps.js +25 -0
  11. package/client/monster-client.d.ts +14 -1
  12. package/client/monster-client.js +55 -3
  13. package/client/monsters.d.ts +37 -8
  14. package/client/monsters.js +51 -0
  15. package/client/static-client.d.ts +7 -5
  16. package/client/static-client.js +3 -2
  17. package/client/static-domains.d.ts +8 -1
  18. package/client/static-domains.js +27 -3
  19. package/generated/item-browse-pack-2.d.ts +83 -1
  20. package/generated/item-browse-pack-2.validator.js +2 -2
  21. package/generated/item-related-entity-browse-1.d.ts +48 -0
  22. package/generated/item-related-entity-browse-1.validator.js +1 -0
  23. package/generated/map-catalog-2-1.d.ts +103 -0
  24. package/generated/map-catalog-2-1.validator.d.ts +18 -0
  25. package/generated/map-catalog-2-1.validator.js +1 -0
  26. package/generated/map-geography.d.ts +79 -0
  27. package/generated/map-geography.validator.d.ts +18 -0
  28. package/generated/map-geography.validator.js +1 -0
  29. package/generated/monster-catalog-2-1.d.ts +253 -0
  30. package/generated/monster-catalog-2-1.validator.js +17 -0
  31. package/generated/monster-catalog-2-2.d.ts +332 -0
  32. package/generated/monster-catalog-2-2.validator.js +17 -0
  33. package/generated/monster-catalog-2-3.d.ts +339 -0
  34. package/generated/monster-catalog-2-3.validator.js +17 -0
  35. package/generated/monster-drop-browse.d.ts +123 -0
  36. package/generated/monster-drop-browse.validator.js +17 -0
  37. package/generated/monster-location-browse-1-1.d.ts +79 -0
  38. package/generated/monster-location-browse-1-1.validator.js +17 -0
  39. package/generated/monster-location-browse.d.ts +69 -0
  40. package/generated/monster-location-browse.validator.js +17 -0
  41. package/generated/product-manifest.d.ts +23 -0
  42. package/generated/product-manifest.validator.js +1 -1
  43. package/package.json +38 -2
@@ -0,0 +1,17 @@
1
+ "use strict";export const validate = validate20;export default validate20;const schema31 = {"$schema":"https://json-schema.org/draft/2020-12/schema","title":"MonsterLocationBrowseV1","description":"One versioned build-scoped Monster location browse artifact.","type":"object","properties":{"contractVersion":{"type":"string","const":"1.0"},"format":{"type":"string","const":"mapletip.monster-location-browse"},"records":{"type":"object","additionalProperties":{"$ref":"#/$defs/MonsterLocationBrowseRecordV1"}},"scope":{"$ref":"#/$defs/BuildScope"}},"additionalProperties":false,"required":["format","contractVersion","scope","records"],"$defs":{"BuildScope":{"description":"Build scope specifying the game family and concrete build identity.","type":"object","properties":{"build_id":{"description":"Exact build identity (e.g., 'gms-v83', 'cw-cot2').","type":"string"},"family_id":{"description":"Family identity (e.g., 'gms', 'classic-world').","type":"string"}},"required":["family_id","build_id"]},"CatalogFact":{"description":"Compact catalog projection of [`FactState`]. It keeps the state and a\npositively observed value, retains the coverage witness for `absent`, and\nomits source attribution and explanatory metadata.","oneOf":[{"description":"A positively observed catalog value.","type":"object","properties":{"state":{"type":"string","const":"known"},"value":{"type":"string"}},"additionalProperties":false,"required":["state","value"]},{"description":"The value could not be established.","type":"object","properties":{"state":{"type":"string","const":"unknown"}},"additionalProperties":false,"required":["state"]},{"description":"No value was present under a source scope with complete coverage.","type":"object","properties":{"coverageKey":{"$ref":"#/$defs/CoverageKey"},"state":{"type":"string","const":"absent"}},"additionalProperties":false,"required":["state","coverageKey"]},{"description":"The producer cannot supply the fact.","type":"object","properties":{"state":{"type":"string","const":"unsupported"}},"additionalProperties":false,"required":["state"]}]},"CoverageKey":{"type":"string","minLength":1,"pattern":"\\S"},"MonsterLocationBrowseEntryV1":{"description":"One compact map entry for Monster location browsing; placement detail stays in packs.","type":"object","properties":{"mapKey":{"type":"string"},"mapName":{"$ref":"#/$defs/CatalogFact"},"mapSourceId":{"type":"string"},"placementCount":{"type":"integer","format":"uint","maximum":9007199254740991,"minimum":1},"regionCode":{"description":"Raw source classification, not a geographic region.","type":["string","null"]},"streetName":{"type":["string","null"]}},"additionalProperties":false,"required":["mapKey","mapSourceId","mapName","placementCount"]},"MonsterLocationBrowseRecordV1":{"description":"Location entries grouped under one Monster key.","type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/$defs/MonsterLocationBrowseEntryV1"}}},"additionalProperties":false,"required":["entries"]}}};const schema36 = {"description":"Build scope specifying the game family and concrete build identity.","type":"object","properties":{"build_id":{"description":"Exact build identity (e.g., 'gms-v83', 'cw-cot2').","type":"string"},"family_id":{"description":"Family identity (e.g., 'gms', 'classic-world').","type":"string"}},"required":["family_id","build_id"]};const schema32 = {"description":"Location entries grouped under one Monster key.","type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/$defs/MonsterLocationBrowseEntryV1"}}},"additionalProperties":false,"required":["entries"]};const schema33 = {"description":"One compact map entry for Monster location browsing; placement detail stays in packs.","type":"object","properties":{"mapKey":{"type":"string"},"mapName":{"$ref":"#/$defs/CatalogFact"},"mapSourceId":{"type":"string"},"placementCount":{"type":"integer","format":"uint","maximum":9007199254740991,"minimum":1},"regionCode":{"description":"Raw source classification, not a geographic region.","type":["string","null"]},"streetName":{"type":["string","null"]}},"additionalProperties":false,"required":["mapKey","mapSourceId","mapName","placementCount"]};const schema34 = {"description":"Compact catalog projection of [`FactState`]. It keeps the state and a\npositively observed value, retains the coverage witness for `absent`, and\nomits source attribution and explanatory metadata.","oneOf":[{"description":"A positively observed catalog value.","type":"object","properties":{"state":{"type":"string","const":"known"},"value":{"type":"string"}},"additionalProperties":false,"required":["state","value"]},{"description":"The value could not be established.","type":"object","properties":{"state":{"type":"string","const":"unknown"}},"additionalProperties":false,"required":["state"]},{"description":"No value was present under a source scope with complete coverage.","type":"object","properties":{"coverageKey":{"$ref":"#/$defs/CoverageKey"},"state":{"type":"string","const":"absent"}},"additionalProperties":false,"required":["state","coverageKey"]},{"description":"The producer cannot supply the fact.","type":"object","properties":{"state":{"type":"string","const":"unsupported"}},"additionalProperties":false,"required":["state"]}]};const schema35 = {"type":"string","minLength":1,"pattern":"\\S"};const func1 = function ucs2length(str) {
2
+ const len = str.length;
3
+ let length = 0;
4
+ let pos = 0;
5
+ let value;
6
+ while (pos < len) {
7
+ length++;
8
+ value = str.charCodeAt(pos++);
9
+ if (value >= 0xd800 && value <= 0xdbff && pos < len) {
10
+ // high surrogate, and there is a next character
11
+ value = str.charCodeAt(pos);
12
+ if ((value & 0xfc00) === 0xdc00)
13
+ pos++; // low surrogate
14
+ }
15
+ }
16
+ return length;
17
+ };const pattern4 = new RegExp("\\S", "u");function validate23(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate23.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}const _errs0 = errors;let valid0 = false;let passing0 = null;const _errs1 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.state === undefined){const err0 = {instancePath,schemaPath:"#/oneOf/0/required",keyword:"required",params:{missingProperty: "state"},message:"must have required property '"+"state"+"'"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.value === undefined){const err1 = {instancePath,schemaPath:"#/oneOf/0/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === "state") || (key0 === "value"))){const err2 = {instancePath,schemaPath:"#/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key0},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.state !== undefined){let data0 = data.state;if(typeof data0 !== "string"){const err3 = {instancePath:instancePath+"/state",schemaPath:"#/oneOf/0/properties/state/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if("known" !== data0){const err4 = {instancePath:instancePath+"/state",schemaPath:"#/oneOf/0/properties/state/const",keyword:"const",params:{allowedValue: "known"},message:"must be equal to constant"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.value !== undefined){if(typeof data.value !== "string"){const err5 = {instancePath:instancePath+"/value",schemaPath:"#/oneOf/0/properties/value/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}else {const err6 = {instancePath,schemaPath:"#/oneOf/0/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}var _valid0 = _errs1 === errors;if(_valid0){valid0 = true;passing0 = 0;var props0 = true;}const _errs8 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.state === undefined){const err7 = {instancePath,schemaPath:"#/oneOf/1/required",keyword:"required",params:{missingProperty: "state"},message:"must have required property '"+"state"+"'"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}for(const key1 in data){if(!(key1 === "state")){const err8 = {instancePath,schemaPath:"#/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key1},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.state !== undefined){let data2 = data.state;if(typeof data2 !== "string"){const err9 = {instancePath:instancePath+"/state",schemaPath:"#/oneOf/1/properties/state/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if("unknown" !== data2){const err10 = {instancePath:instancePath+"/state",schemaPath:"#/oneOf/1/properties/state/const",keyword:"const",params:{allowedValue: "unknown"},message:"must be equal to constant"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:"#/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}var _valid0 = _errs8 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 1];}else {if(_valid0){valid0 = true;passing0 = 1;if(props0 !== true){props0 = true;}}const _errs13 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.state === undefined){const err12 = {instancePath,schemaPath:"#/oneOf/2/required",keyword:"required",params:{missingProperty: "state"},message:"must have required property '"+"state"+"'"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if(data.coverageKey === undefined){const err13 = {instancePath,schemaPath:"#/oneOf/2/required",keyword:"required",params:{missingProperty: "coverageKey"},message:"must have required property '"+"coverageKey"+"'"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}for(const key2 in data){if(!((key2 === "coverageKey") || (key2 === "state"))){const err14 = {instancePath,schemaPath:"#/oneOf/2/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key2},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data.coverageKey !== undefined){let data3 = data.coverageKey;if(typeof data3 === "string"){if(func1(data3) < 1){const err15 = {instancePath:instancePath+"/coverageKey",schemaPath:"#/$defs/CoverageKey/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(!pattern4.test(data3)){const err16 = {instancePath:instancePath+"/coverageKey",schemaPath:"#/$defs/CoverageKey/pattern",keyword:"pattern",params:{pattern: "\\S"},message:"must match pattern \""+"\\S"+"\""};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}else {const err17 = {instancePath:instancePath+"/coverageKey",schemaPath:"#/$defs/CoverageKey/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data.state !== undefined){let data4 = data.state;if(typeof data4 !== "string"){const err18 = {instancePath:instancePath+"/state",schemaPath:"#/oneOf/2/properties/state/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if("absent" !== data4){const err19 = {instancePath:instancePath+"/state",schemaPath:"#/oneOf/2/properties/state/const",keyword:"const",params:{allowedValue: "absent"},message:"must be equal to constant"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}}else {const err20 = {instancePath,schemaPath:"#/oneOf/2/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}var _valid0 = _errs13 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 2];}else {if(_valid0){valid0 = true;passing0 = 2;if(props0 !== true){props0 = true;}}const _errs21 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.state === undefined){const err21 = {instancePath,schemaPath:"#/oneOf/3/required",keyword:"required",params:{missingProperty: "state"},message:"must have required property '"+"state"+"'"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}for(const key3 in data){if(!(key3 === "state")){const err22 = {instancePath,schemaPath:"#/oneOf/3/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key3},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}if(data.state !== undefined){let data5 = data.state;if(typeof data5 !== "string"){const err23 = {instancePath:instancePath+"/state",schemaPath:"#/oneOf/3/properties/state/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}if("unsupported" !== data5){const err24 = {instancePath:instancePath+"/state",schemaPath:"#/oneOf/3/properties/state/const",keyword:"const",params:{allowedValue: "unsupported"},message:"must be equal to constant"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}else {const err25 = {instancePath,schemaPath:"#/oneOf/3/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}var _valid0 = _errs21 === errors;if(_valid0 && valid0){valid0 = false;passing0 = [passing0, 3];}else {if(_valid0){valid0 = true;passing0 = 3;if(props0 !== true){props0 = true;}}}}}if(!valid0){const err26 = {instancePath,schemaPath:"#/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}else {errors = _errs0;if(vErrors !== null){if(_errs0){vErrors.length = _errs0;}else {vErrors = null;}}}validate23.errors = vErrors;evaluated0.props = props0;return errors === 0;}validate23.evaluated = {"dynamicProps":true,"dynamicItems":false};function validate22(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate22.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.mapKey === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "mapKey"},message:"must have required property '"+"mapKey"+"'"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.mapSourceId === undefined){const err1 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "mapSourceId"},message:"must have required property '"+"mapSourceId"+"'"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.mapName === undefined){const err2 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "mapName"},message:"must have required property '"+"mapName"+"'"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.placementCount === undefined){const err3 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "placementCount"},message:"must have required property '"+"placementCount"+"'"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key0 in data){if(!((((((key0 === "mapKey") || (key0 === "mapName")) || (key0 === "mapSourceId")) || (key0 === "placementCount")) || (key0 === "regionCode")) || (key0 === "streetName"))){const err4 = {instancePath,schemaPath:"#/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key0},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.mapKey !== undefined){if(typeof data.mapKey !== "string"){const err5 = {instancePath:instancePath+"/mapKey",schemaPath:"#/properties/mapKey/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.mapName !== undefined){if(!(validate23(data.mapName, {instancePath:instancePath+"/mapName",parentData:data,parentDataProperty:"mapName",rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}}if(data.mapSourceId !== undefined){if(typeof data.mapSourceId !== "string"){const err6 = {instancePath:instancePath+"/mapSourceId",schemaPath:"#/properties/mapSourceId/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.placementCount !== undefined){let data3 = data.placementCount;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){const err7 = {instancePath:instancePath+"/placementCount",schemaPath:"#/properties/placementCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if((typeof data3 == "number") && (isFinite(data3))){if(data3 > 9007199254740991 || isNaN(data3)){const err8 = {instancePath:instancePath+"/placementCount",schemaPath:"#/properties/placementCount/maximum",keyword:"maximum",params:{comparison: "<=", limit: 9007199254740991},message:"must be <= 9007199254740991"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data3 < 1 || isNaN(data3)){const err9 = {instancePath:instancePath+"/placementCount",schemaPath:"#/properties/placementCount/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}}if(data.regionCode !== undefined){let data4 = data.regionCode;if((typeof data4 !== "string") && (data4 !== null)){const err10 = {instancePath:instancePath+"/regionCode",schemaPath:"#/properties/regionCode/type",keyword:"type",params:{type: schema33.properties.regionCode.type},message:"must be string,null"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.streetName !== undefined){let data5 = data.streetName;if((typeof data5 !== "string") && (data5 !== null)){const err11 = {instancePath:instancePath+"/streetName",schemaPath:"#/properties/streetName/type",keyword:"type",params:{type: schema33.properties.streetName.type},message:"must be string,null"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}else {const err12 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}validate22.errors = vErrors;return errors === 0;}validate22.evaluated = {"props":true,"dynamicProps":false,"dynamicItems":false};function validate21(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate21.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.entries === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "entries"},message:"must have required property '"+"entries"+"'"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === "entries")){const err1 = {instancePath,schemaPath:"#/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key0},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.entries !== undefined){let data0 = data.entries;if(Array.isArray(data0)){const len0 = data0.length;for(let i0=0; i0<len0; i0++){if(!(validate22(data0[i0], {instancePath:instancePath+"/entries/" + i0,parentData:data0,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}}}else {const err2 = {instancePath:instancePath+"/entries",schemaPath:"#/properties/entries/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}}else {const err3 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}validate21.errors = vErrors;return errors === 0;}validate21.evaluated = {"props":true,"dynamicProps":false,"dynamicItems":false};function validate20(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate20.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.format === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "format"},message:"must have required property '"+"format"+"'"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.contractVersion === undefined){const err1 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "contractVersion"},message:"must have required property '"+"contractVersion"+"'"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.scope === undefined){const err2 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "scope"},message:"must have required property '"+"scope"+"'"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.records === undefined){const err3 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "records"},message:"must have required property '"+"records"+"'"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key0 in data){if(!((((key0 === "contractVersion") || (key0 === "format")) || (key0 === "records")) || (key0 === "scope"))){const err4 = {instancePath,schemaPath:"#/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key0},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.contractVersion !== undefined){let data0 = data.contractVersion;if(typeof data0 !== "string"){const err5 = {instancePath:instancePath+"/contractVersion",schemaPath:"#/properties/contractVersion/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if("1.0" !== data0){const err6 = {instancePath:instancePath+"/contractVersion",schemaPath:"#/properties/contractVersion/const",keyword:"const",params:{allowedValue: "1.0"},message:"must be equal to constant"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.format !== undefined){let data1 = data.format;if(typeof data1 !== "string"){const err7 = {instancePath:instancePath+"/format",schemaPath:"#/properties/format/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if("mapletip.monster-location-browse" !== data1){const err8 = {instancePath:instancePath+"/format",schemaPath:"#/properties/format/const",keyword:"const",params:{allowedValue: "mapletip.monster-location-browse"},message:"must be equal to constant"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.records !== undefined){let data2 = data.records;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){for(const key1 in data2){if(!(validate21(data2[key1], {instancePath:instancePath+"/records/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"),parentData:data2,parentDataProperty:key1,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate21.errors : vErrors.concat(validate21.errors);errors = vErrors.length;}}}else {const err9 = {instancePath:instancePath+"/records",schemaPath:"#/properties/records/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.scope !== undefined){let data4 = data.scope;if(data4 && typeof data4 == "object" && !Array.isArray(data4)){if(data4.family_id === undefined){const err10 = {instancePath:instancePath+"/scope",schemaPath:"#/$defs/BuildScope/required",keyword:"required",params:{missingProperty: "family_id"},message:"must have required property '"+"family_id"+"'"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(data4.build_id === undefined){const err11 = {instancePath:instancePath+"/scope",schemaPath:"#/$defs/BuildScope/required",keyword:"required",params:{missingProperty: "build_id"},message:"must have required property '"+"build_id"+"'"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(data4.build_id !== undefined){if(typeof data4.build_id !== "string"){const err12 = {instancePath:instancePath+"/scope/build_id",schemaPath:"#/$defs/BuildScope/properties/build_id/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data4.family_id !== undefined){if(typeof data4.family_id !== "string"){const err13 = {instancePath:instancePath+"/scope/family_id",schemaPath:"#/$defs/BuildScope/properties/family_id/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath:instancePath+"/scope",schemaPath:"#/$defs/BuildScope/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}}else {const err15 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}validate20.errors = vErrors;return errors === 0;}validate20.evaluated = {"props":true,"dynamicProps":false,"dynamicItems":false};
@@ -29,6 +29,10 @@ export interface ConnectedProductManifest {
29
29
  * Bounded detail packs with non-overlapping sorted key ranges.
30
30
  */
31
31
  detailPacks: PackDescriptor[];
32
+ /**
33
+ * Optional build-scoped Monster drop browse artifact.
34
+ */
35
+ dropBrowse?: PackDescriptor | null;
32
36
  /**
33
37
  * Optional bounded evidence packs for oversized drop/Quest collections.
34
38
  */
@@ -37,10 +41,18 @@ export interface ConnectedProductManifest {
37
41
  * Format identifier ('mapletip.product-manifest').
38
42
  */
39
43
  format: "mapletip.product-manifest";
44
+ /**
45
+ * Optional build-scoped Map geography model descriptor.
46
+ */
47
+ geography?: MapGeographyDescriptor | null;
40
48
  /**
41
49
  * Optional product-input identity metadata (required for local-D identity products).
42
50
  */
43
51
  identity?: ProductIdentityMetadata | null;
52
+ /**
53
+ * Optional build-scoped Monster location browse artifact.
54
+ */
55
+ locationBrowse?: PackDescriptor | null;
44
56
  /**
45
57
  * Contract-2.0 gzip-6 encoded target used to fill each record pack.
46
58
  */
@@ -50,6 +62,12 @@ export interface ConnectedProductManifest {
50
62
  * Product identifier ('monsters').
51
63
  */
52
64
  productId: string;
65
+ /**
66
+ * Lazy one-per-kind A-compact Items browse relationship rosters.
67
+ */
68
+ relatedEntityBrowsePacks?: {
69
+ [k: string]: PackDescriptor;
70
+ };
53
71
  /**
54
72
  * Bounded relationship packs with non-overlapping sorted key ranges.
55
73
  */
@@ -143,6 +161,11 @@ export interface PageDescriptor {
143
161
  recordKind: string;
144
162
  [k: string]: unknown | undefined;
145
163
  }
164
+ export interface MapGeographyDescriptor {
165
+ byteLength: number;
166
+ path: string;
167
+ sha256: string;
168
+ }
146
169
  /**
147
170
  * Product-input identity metadata carried only by the new local-D product envelope.
148
171
  */