@codexo/exojs-tiled 0.15.3 → 0.16.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 (84) hide show
  1. package/README.md +59 -66
  2. package/dist/esm/TiledLayer.d.ts +2 -1
  3. package/dist/esm/TiledLayer.d.ts.map +1 -0
  4. package/dist/esm/TiledLayer.js +106 -108
  5. package/dist/esm/TiledLayer.js.map +1 -1
  6. package/dist/esm/TiledMap.d.ts +35 -7
  7. package/dist/esm/TiledMap.d.ts.map +1 -0
  8. package/dist/esm/TiledMap.js +714 -589
  9. package/dist/esm/TiledMap.js.map +1 -1
  10. package/dist/esm/TiledObject.d.ts +7 -0
  11. package/dist/esm/TiledObject.d.ts.map +1 -0
  12. package/dist/esm/TiledObject.js +59 -51
  13. package/dist/esm/TiledObject.js.map +1 -1
  14. package/dist/esm/TiledTileset.d.ts +11 -4
  15. package/dist/esm/TiledTileset.d.ts.map +1 -0
  16. package/dist/esm/TiledTileset.js +81 -70
  17. package/dist/esm/TiledTileset.js.map +1 -1
  18. package/dist/esm/data.d.ts +25 -7
  19. package/dist/esm/data.d.ts.map +1 -0
  20. package/dist/esm/decodeLayerData.d.ts +2 -1
  21. package/dist/esm/decodeLayerData.d.ts.map +1 -0
  22. package/dist/esm/decodeLayerData.js +53 -92
  23. package/dist/esm/decodeLayerData.js.map +1 -1
  24. package/dist/esm/gid.d.ts +2 -1
  25. package/dist/esm/gid.d.ts.map +1 -0
  26. package/dist/esm/gid.js +15 -24
  27. package/dist/esm/gid.js.map +1 -1
  28. package/dist/esm/index.d.ts +1 -0
  29. package/dist/esm/index.d.ts.map +1 -0
  30. package/dist/esm/index.js +14 -12
  31. package/dist/esm/loadTiledMap.d.ts +11 -5
  32. package/dist/esm/loadTiledMap.d.ts.map +1 -0
  33. package/dist/esm/loadTiledMap.js +82 -91
  34. package/dist/esm/loadTiledMap.js.map +1 -1
  35. package/dist/esm/objectAlignment.d.ts +28 -0
  36. package/dist/esm/objectAlignment.d.ts.map +1 -0
  37. package/dist/esm/objectAlignment.js +79 -0
  38. package/dist/esm/objectAlignment.js.map +1 -0
  39. package/dist/esm/public.d.ts +17 -15
  40. package/dist/esm/public.d.ts.map +1 -0
  41. package/dist/esm/public.js +14 -0
  42. package/dist/esm/tileMapType.d.ts +31 -0
  43. package/dist/esm/tileMapType.d.ts.map +1 -0
  44. package/dist/esm/tileMapType.js +42 -0
  45. package/dist/esm/tileMapType.js.map +1 -0
  46. package/dist/esm/tiledBuildInfo.d.ts +1 -0
  47. package/dist/esm/tiledBuildInfo.d.ts.map +1 -0
  48. package/dist/esm/tiledBuildInfo.js +6 -4
  49. package/dist/esm/tiledBuildInfo.js.map +1 -1
  50. package/dist/esm/tiledExtension.d.ts +7 -6
  51. package/dist/esm/tiledExtension.d.ts.map +1 -0
  52. package/dist/esm/tiledExtension.js +23 -25
  53. package/dist/esm/tiledExtension.js.map +1 -1
  54. package/dist/esm/tiledOptions.d.ts +5 -4
  55. package/dist/esm/tiledOptions.d.ts.map +1 -0
  56. package/dist/esm/tiledOptions.js +11 -13
  57. package/dist/esm/tiledOptions.js.map +1 -1
  58. package/dist/esm/tiledSourceType.d.ts +24 -0
  59. package/dist/esm/tiledSourceType.d.ts.map +1 -0
  60. package/dist/esm/tiledSourceType.js +44 -0
  61. package/dist/esm/tiledSourceType.js.map +1 -0
  62. package/dist/esm/url.d.ts +2 -1
  63. package/dist/esm/url.d.ts.map +1 -0
  64. package/dist/esm/url.js +26 -37
  65. package/dist/esm/url.js.map +1 -1
  66. package/dist/esm/validate.d.ts +11 -10
  67. package/dist/esm/validate.d.ts.map +1 -0
  68. package/dist/esm/validate.js +485 -534
  69. package/dist/esm/validate.js.map +1 -1
  70. package/dist/esm/wangSets.d.ts +5 -4
  71. package/dist/esm/wangSets.d.ts.map +1 -0
  72. package/dist/esm/wangSets.js +90 -115
  73. package/dist/esm/wangSets.js.map +1 -1
  74. package/package.json +10 -18
  75. package/dist/esm/index.js.map +0 -1
  76. package/dist/esm/register.d.ts +0 -1
  77. package/dist/esm/register.js +0 -22
  78. package/dist/esm/register.js.map +0 -1
  79. package/dist/esm/tiledMapBinding.d.ts +0 -19
  80. package/dist/esm/tiledMapBinding.js +0 -31
  81. package/dist/esm/tiledMapBinding.js.map +0 -1
  82. package/dist/esm/tiledRuntimeMapBinding.d.ts +0 -29
  83. package/dist/esm/tiledRuntimeMapBinding.js +0 -42
  84. package/dist/esm/tiledRuntimeMapBinding.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sources":["../../../src/validate.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","names":[],"sources":["../../src/validate.ts"],"sourcesContent":["// Runtime validation for Tiled JSON (TMJ/TSJ) data. Every exported function\n// takes `unknown` (the result of `JSON.parse`) and either returns a typed,\n// validated `Tiled*Data` value or throws a {@link TiledFormatError}.\n//\n// There is no fall-through: an unrecognised shape, an unsupported encoding,\n// or an out-of-range value is always a thrown error carrying the source URL\n// and a JSON-path-like field path, never a silently-substituted default.\n\nimport type {\n TiledAnimationFrameData,\n TiledChunkData,\n TiledClassPropertyValueData,\n TiledGroupLayerData,\n TiledImageLayerData,\n TiledLayerData,\n TiledLayerDataBase,\n TiledMapData,\n TiledObjectAlignment,\n TiledObjectData,\n TiledObjectLayerData,\n TiledOrientation,\n TiledPointData,\n TiledPropertyData,\n TiledPropertyType,\n TiledRenderOrder,\n TiledTextData,\n TiledTileData,\n TiledTileLayerData,\n TiledTilesetData,\n TiledTilesetRefData,\n TiledWangColorData,\n TiledWangSetData,\n TiledWangTileData,\n} from './data';\nimport { TILED_OBJECT_ALIGNMENTS } from './objectAlignment';\n\n/**\n * Thrown when a Tiled JSON document does not match the expected shape.\n * `source` is the URL of the file being parsed; `path` is a JSON-path-like\n * pointer (e.g. `layers[2].objects[0].properties[1].value`) to the offending\n * value, or `''` for the document root.\n */\nexport class TiledFormatError extends Error {\n public readonly source: string;\n public readonly path: string;\n\n public constructor(source: string, path: string, message: string) {\n super(`Invalid Tiled data in \"${source}\" at ${path === '' ? '<root>' : path}: ${message}`);\n this.name = 'TiledFormatError';\n this.source = source;\n this.path = path;\n }\n}\n\n// ── Primitive helpers ───────────────────────────────────────────────────────\n\nconst describeValue = (value: unknown): string => {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'an array';\n return typeof value;\n};\n\nconst joinPath = (path: string, key: string | number): string => {\n if (typeof key === 'number') return `${path}[${key}]`;\n return path === '' ? key : `${path}.${key}`;\n};\n\nconst expectObject = (value: unknown, source: string, path: string): Record<string, unknown> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TiledFormatError(source, path, `expected an object, got ${describeValue(value)}`);\n }\n return value as Record<string, unknown>;\n};\n\nconst expectArray = (value: unknown, source: string, path: string): readonly unknown[] => {\n if (!Array.isArray(value)) {\n throw new TiledFormatError(source, path, `expected an array, got ${describeValue(value)}`);\n }\n return value;\n};\n\nconst expectString = (value: unknown, source: string, path: string): string => {\n if (typeof value !== 'string') {\n throw new TiledFormatError(source, path, `expected a string, got ${describeValue(value)}`);\n }\n return value;\n};\n\nconst expectNumber = (value: unknown, source: string, path: string): number => {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new TiledFormatError(source, path, `expected a finite number, got ${describeValue(value)}`);\n }\n return value;\n};\n\nconst expectInteger = (value: unknown, source: string, path: string): number => {\n const n = expectNumber(value, source, path);\n if (!Number.isInteger(n)) {\n throw new TiledFormatError(source, path, `expected an integer, got ${n}`);\n }\n return n;\n};\n\nconst expectNonNegativeInteger = (value: unknown, source: string, path: string): number => {\n const n = expectInteger(value, source, path);\n if (n < 0) {\n throw new TiledFormatError(source, path, `expected a non-negative integer, got ${n}`);\n }\n return n;\n};\n\nconst expectPositiveInteger = (value: unknown, source: string, path: string): number => {\n const n = expectInteger(value, source, path);\n if (n <= 0) {\n throw new TiledFormatError(source, path, `expected a positive integer, got ${n}`);\n }\n return n;\n};\n\nconst expectBoolean = (value: unknown, source: string, path: string): boolean => {\n if (typeof value !== 'boolean') {\n throw new TiledFormatError(source, path, `expected a boolean, got ${describeValue(value)}`);\n }\n return value;\n};\n\nconst optionalString = (obj: Record<string, unknown>, key: string, source: string, path: string): string | undefined => {\n const value = obj[key];\n return value === undefined ? undefined : expectString(value, source, joinPath(path, key));\n};\n\nconst optionalNumber = (obj: Record<string, unknown>, key: string, source: string, path: string): number | undefined => {\n const value = obj[key];\n return value === undefined ? undefined : expectNumber(value, source, joinPath(path, key));\n};\n\nconst optionalInteger = (obj: Record<string, unknown>, key: string, source: string, path: string): number | undefined => {\n const value = obj[key];\n return value === undefined ? undefined : expectInteger(value, source, joinPath(path, key));\n};\n\nconst optionalNonNegativeInteger = (obj: Record<string, unknown>, key: string, source: string, path: string): number | undefined => {\n const value = obj[key];\n return value === undefined ? undefined : expectNonNegativeInteger(value, source, joinPath(path, key));\n};\n\nconst optionalBoolean = (obj: Record<string, unknown>, key: string, source: string, path: string): boolean | undefined => {\n const value = obj[key];\n return value === undefined ? undefined : expectBoolean(value, source, joinPath(path, key));\n};\n\nconst mapArray = <T>(value: unknown, source: string, path: string, fn: (item: unknown, itemPath: string) => T): readonly T[] => {\n const arr = expectArray(value, source, path);\n return arr.map((item, i) => fn(item, joinPath(path, i)));\n};\n\nconst optionalMapArray = <T>(value: unknown, source: string, path: string, fn: (item: unknown, itemPath: string) => T): readonly T[] | undefined =>\n value === undefined ? undefined : mapArray(value, source, path, fn);\n\n// ── Custom properties ───────────────────────────────────────────────────────\n\nconst PROPERTY_TYPES: readonly TiledPropertyType[] = ['string', 'int', 'float', 'bool', 'color', 'file', 'object', 'class'];\n\nconst validateTiledClassPropertyValue = (raw: unknown, source: string, path: string): TiledClassPropertyValueData => {\n const obj = expectObject(raw, source, path);\n const result: Record<string, string | number | boolean | TiledClassPropertyValueData> = {};\n for (const [key, value] of Object.entries(obj)) {\n const memberPath = joinPath(path, key);\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n result[key] = value;\n } else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n result[key] = validateTiledClassPropertyValue(value, source, memberPath);\n } else {\n throw new TiledFormatError(source, memberPath, `expected a string, number, boolean, or nested object, got ${describeValue(value)}`);\n }\n }\n return result;\n};\n\n/** @internal */\nexport const validateTiledPropertyData = (raw: unknown, source: string, path: string): TiledPropertyData => {\n const obj = expectObject(raw, source, path);\n const name = expectString(obj.name, source, joinPath(path, 'name'));\n const typePath = joinPath(path, 'type');\n const typeName = obj.type === undefined ? 'string' : expectString(obj.type, source, typePath);\n\n if (!PROPERTY_TYPES.includes(typeName as TiledPropertyType)) {\n throw new TiledFormatError(source, typePath, `unknown property type \"${typeName}\"`);\n }\n\n const type = typeName as TiledPropertyType;\n const propertytype = optionalString(obj, 'propertytype', source, path);\n const valuePath = joinPath(path, 'value');\n let value: TiledPropertyData['value'];\n\n switch (type) {\n case 'string':\n case 'color':\n case 'file':\n value = expectString(obj.value, source, valuePath);\n break;\n case 'int':\n case 'float':\n case 'object':\n value = expectNumber(obj.value, source, valuePath);\n break;\n case 'bool':\n value = expectBoolean(obj.value, source, valuePath);\n break;\n case 'class':\n value = validateTiledClassPropertyValue(obj.value, source, valuePath);\n break;\n }\n\n return { name, type, propertytype, value };\n};\n\nconst validateTiledPropertiesArray = (value: unknown, source: string, path: string): readonly TiledPropertyData[] | undefined =>\n optionalMapArray(value, source, path, (item, itemPath) => validateTiledPropertyData(item, source, itemPath));\n\n// ── Points / animation frames ───────────────────────────────────────────────\n\nconst validateTiledPointData = (raw: unknown, source: string, path: string): TiledPointData => {\n const obj = expectObject(raw, source, path);\n return {\n x: expectNumber(obj.x, source, joinPath(path, 'x')),\n y: expectNumber(obj.y, source, joinPath(path, 'y')),\n };\n};\n\nconst validateTiledPointArray = (value: unknown, source: string, path: string): readonly TiledPointData[] =>\n mapArray(value, source, path, (item, itemPath) => validateTiledPointData(item, source, itemPath));\n\n/** @internal */\nexport const validateTiledAnimationFrameData = (raw: unknown, source: string, path: string): TiledAnimationFrameData => {\n const obj = expectObject(raw, source, path);\n return {\n tileid: expectNonNegativeInteger(obj.tileid, source, joinPath(path, 'tileid')),\n duration: expectNonNegativeInteger(obj.duration, source, joinPath(path, 'duration')),\n };\n};\n\n// ── Text objects ─────────────────────────────────────────────────────────────\n\nconst HALIGN_VALUES: ReadonlyArray<TiledTextData['halign']> = ['center', 'right', 'justify', 'left'];\nconst VALIGN_VALUES: ReadonlyArray<TiledTextData['valign']> = ['center', 'bottom', 'top'];\n\nconst validateTiledTextData = (raw: unknown, source: string, path: string): TiledTextData => {\n const obj = expectObject(raw, source, path);\n const text = expectString(obj.text, source, joinPath(path, 'text'));\n\n let halign: TiledTextData['halign'];\n if (obj.halign !== undefined) {\n const value = expectString(obj.halign, source, joinPath(path, 'halign'));\n if (!HALIGN_VALUES.includes(value as TiledTextData['halign'])) {\n throw new TiledFormatError(source, joinPath(path, 'halign'), `unknown horizontal alignment \"${value}\"`);\n }\n halign = value as TiledTextData['halign'];\n }\n\n let valign: TiledTextData['valign'];\n if (obj.valign !== undefined) {\n const value = expectString(obj.valign, source, joinPath(path, 'valign'));\n if (!VALIGN_VALUES.includes(value as TiledTextData['valign'])) {\n throw new TiledFormatError(source, joinPath(path, 'valign'), `unknown vertical alignment \"${value}\"`);\n }\n valign = value as TiledTextData['valign'];\n }\n\n return {\n text,\n bold: optionalBoolean(obj, 'bold', source, path),\n color: optionalString(obj, 'color', source, path),\n fontfamily: optionalString(obj, 'fontfamily', source, path),\n halign,\n italic: optionalBoolean(obj, 'italic', source, path),\n kerning: optionalBoolean(obj, 'kerning', source, path),\n pixelsize: optionalNonNegativeInteger(obj, 'pixelsize', source, path),\n strikeout: optionalBoolean(obj, 'strikeout', source, path),\n underline: optionalBoolean(obj, 'underline', source, path),\n valign,\n wrap: optionalBoolean(obj, 'wrap', source, path),\n };\n};\n\n// ── Objects ──────────────────────────────────────────────────────────────────\n\n/** @internal */\nexport const validateTiledObjectData = (raw: unknown, source: string, path: string): TiledObjectData => {\n const obj = expectObject(raw, source, path);\n\n return {\n id: expectNonNegativeInteger(obj.id, source, joinPath(path, 'id')),\n name: expectString(obj.name, source, joinPath(path, 'name')),\n // Tiled 1.9 renamed the object's `type` member to `class` and 1.10 renamed\n // it back, so a file written by either version carries only one of the two.\n // Requiring `type` would reject every 1.9-authored map outright.\n type: optionalString(obj, 'type', source, path) ?? '',\n class: optionalString(obj, 'class', source, path),\n x: expectNumber(obj.x, source, joinPath(path, 'x')),\n y: expectNumber(obj.y, source, joinPath(path, 'y')),\n width: expectNumber(obj.width, source, joinPath(path, 'width')),\n height: expectNumber(obj.height, source, joinPath(path, 'height')),\n rotation: expectNumber(obj.rotation, source, joinPath(path, 'rotation')),\n visible: expectBoolean(obj.visible, source, joinPath(path, 'visible')),\n gid: optionalNonNegativeInteger(obj, 'gid', source, path),\n point: optionalBoolean(obj, 'point', source, path),\n ellipse: optionalBoolean(obj, 'ellipse', source, path),\n polygon: obj.polygon === undefined ? undefined : validateTiledPointArray(obj.polygon, source, joinPath(path, 'polygon')),\n polyline: obj.polyline === undefined ? undefined : validateTiledPointArray(obj.polyline, source, joinPath(path, 'polyline')),\n text: obj.text === undefined ? undefined : validateTiledTextData(obj.text, source, joinPath(path, 'text')),\n template: optionalString(obj, 'template', source, path),\n properties: validateTiledPropertiesArray(obj.properties, source, joinPath(path, 'properties')),\n };\n};\n\n// ── Layers ───────────────────────────────────────────────────────────────────\n\nconst LAYER_TYPES = ['tilelayer', 'objectgroup', 'imagelayer', 'group'] as const;\nconst SUPPORTED_TILE_LAYER_ENCODINGS = new Set<string>(['csv']);\nconst DRAW_ORDERS: ReadonlyArray<NonNullable<TiledObjectLayerData['draworder']>> = ['topdown', 'index'];\n\nconst validateTiledLayerBase = (obj: Record<string, unknown>, source: string, path: string): TiledLayerDataBase => ({\n id: expectNonNegativeInteger(obj.id, source, joinPath(path, 'id')),\n name: expectString(obj.name, source, joinPath(path, 'name')),\n class: optionalString(obj, 'class', source, path),\n visible: expectBoolean(obj.visible, source, joinPath(path, 'visible')),\n opacity: expectNumber(obj.opacity, source, joinPath(path, 'opacity')),\n x: expectNumber(obj.x, source, joinPath(path, 'x')),\n y: expectNumber(obj.y, source, joinPath(path, 'y')),\n offsetx: optionalNumber(obj, 'offsetx', source, path),\n offsety: optionalNumber(obj, 'offsety', source, path),\n parallaxx: optionalNumber(obj, 'parallaxx', source, path),\n parallaxy: optionalNumber(obj, 'parallaxy', source, path),\n tintcolor: optionalString(obj, 'tintcolor', source, path),\n properties: validateTiledPropertiesArray(obj.properties, source, joinPath(path, 'properties')),\n});\n\nconst validateTiledGidArray = (value: unknown, source: string, path: string): readonly number[] =>\n mapArray(value, source, path, (item, itemPath) => expectNonNegativeInteger(item, source, itemPath));\n\nconst validateTiledChunkData = (raw: unknown, source: string, path: string): TiledChunkData => {\n const obj = expectObject(raw, source, path);\n return {\n x: expectInteger(obj.x, source, joinPath(path, 'x')),\n y: expectInteger(obj.y, source, joinPath(path, 'y')),\n width: expectPositiveInteger(obj.width, source, joinPath(path, 'width')),\n height: expectPositiveInteger(obj.height, source, joinPath(path, 'height')),\n data: validateTiledGidArray(obj.data, source, joinPath(path, 'data')),\n };\n};\n\nconst validateTiledTileLayerData = (obj: Record<string, unknown>, base: TiledLayerDataBase, source: string, path: string): TiledTileLayerData => {\n // Validation runs AFTER the async decode pass (`decodeLayerData.ts`), which\n // turns base64/gzip/zlib `data` into a plain GID array and strips these\n // markers. Reaching here with them still set means the data was not decoded\n // (e.g. validate was called directly) - reject rather than mis-parse.\n if (obj.compression !== undefined) {\n throw new TiledFormatError(\n source,\n joinPath(path, 'compression'),\n `compressed tile layer data is not supported (compression: ${JSON.stringify(obj.compression)})`,\n );\n }\n\n const encoding = obj.encoding;\n if (encoding !== undefined && !(typeof encoding === 'string' && SUPPORTED_TILE_LAYER_ENCODINGS.has(encoding))) {\n throw new TiledFormatError(\n source,\n joinPath(path, 'encoding'),\n `unsupported tile layer encoding ${JSON.stringify(encoding)} (only plain CSV/array data is supported)`,\n );\n }\n\n const width = expectNonNegativeInteger(obj.width, source, joinPath(path, 'width'));\n const height = expectNonNegativeInteger(obj.height, source, joinPath(path, 'height'));\n\n const hasData = obj.data !== undefined;\n const hasChunks = obj.chunks !== undefined;\n\n if (hasData === hasChunks) {\n throw new TiledFormatError(source, path, hasData ? 'tile layer has both \"data\" and \"chunks\"' : 'tile layer has neither \"data\" nor \"chunks\"');\n }\n\n return {\n ...base,\n type: 'tilelayer',\n width,\n height,\n data: hasData ? validateTiledGidArray(obj.data, source, joinPath(path, 'data')) : undefined,\n chunks: hasChunks ? mapArray(obj.chunks, source, joinPath(path, 'chunks'), (item, itemPath) => validateTiledChunkData(item, source, itemPath)) : undefined,\n };\n};\n\nconst validateTiledObjectLayerData = (obj: Record<string, unknown>, base: TiledLayerDataBase, source: string, path: string): TiledObjectLayerData => {\n let draworder: TiledObjectLayerData['draworder'];\n if (obj.draworder !== undefined) {\n const value = expectString(obj.draworder, source, joinPath(path, 'draworder'));\n if (!DRAW_ORDERS.includes(value as NonNullable<TiledObjectLayerData['draworder']>)) {\n throw new TiledFormatError(source, joinPath(path, 'draworder'), `unknown draw order \"${value}\"`);\n }\n draworder = value as TiledObjectLayerData['draworder'];\n }\n\n return {\n ...base,\n type: 'objectgroup',\n draworder,\n objects: mapArray(obj.objects, source, joinPath(path, 'objects'), (item, itemPath) => validateTiledObjectData(item, source, itemPath)),\n };\n};\n\nconst validateTiledImageLayerData = (obj: Record<string, unknown>, base: TiledLayerDataBase, source: string, path: string): TiledImageLayerData => ({\n ...base,\n type: 'imagelayer',\n image: obj.image === undefined ? '' : expectString(obj.image, source, joinPath(path, 'image')),\n repeatx: optionalBoolean(obj, 'repeatx', source, path),\n repeaty: optionalBoolean(obj, 'repeaty', source, path),\n});\n\nconst validateTiledGroupLayerData = (obj: Record<string, unknown>, base: TiledLayerDataBase, source: string, path: string): TiledGroupLayerData => ({\n ...base,\n type: 'group',\n layers: mapArray(obj.layers, source, joinPath(path, 'layers'), (item, itemPath) => validateTiledLayerData(item, source, itemPath)),\n});\n\n/** @internal */\nexport const validateTiledLayerData = (raw: unknown, source: string, path: string): TiledLayerData => {\n const obj = expectObject(raw, source, path);\n const type = expectString(obj.type, source, joinPath(path, 'type'));\n const base = validateTiledLayerBase(obj, source, path);\n\n switch (type) {\n case 'tilelayer':\n return validateTiledTileLayerData(obj, base, source, path);\n case 'objectgroup':\n return validateTiledObjectLayerData(obj, base, source, path);\n case 'imagelayer':\n return validateTiledImageLayerData(obj, base, source, path);\n case 'group':\n return validateTiledGroupLayerData(obj, base, source, path);\n default: {\n const known: readonly string[] = LAYER_TYPES;\n throw new TiledFormatError(source, joinPath(path, 'type'), `unknown layer type \"${type}\" (expected one of ${known.join(', ')})`);\n }\n }\n};\n\n/**\n * Walks a layer tree and ensures every tile layer's `data`/`chunks` choice\n * matches the map's `infinite` flag. Tiled itself is consistent across an\n * entire map; a mismatch indicates a hand-edited or corrupt file.\n * @internal\n */\nexport const checkTiledLayerInfiniteConsistency = (layers: readonly TiledLayerData[], infinite: boolean, source: string, path: string): void => {\n for (let i = 0; i < layers.length; i++) {\n const layer = layers[i];\n if (layer === undefined) continue;\n const layerPath = joinPath(path, i);\n\n if (layer.type === 'tilelayer') {\n const hasChunks = layer.chunks !== undefined;\n if (hasChunks !== infinite) {\n throw new TiledFormatError(\n source,\n layerPath,\n infinite ? 'tile layer is missing \"chunks\" on an infinite map' : 'tile layer has \"chunks\" on a finite map (expected \"data\")',\n );\n }\n } else if (layer.type === 'group') {\n checkTiledLayerInfiniteConsistency(layer.layers, infinite, source, joinPath(layerPath, 'layers'));\n }\n }\n};\n\n// ── Tile definitions ─────────────────────────────────────────────────────────\n\n/** @internal */\nexport const validateTiledTileData = (raw: unknown, source: string, path: string): TiledTileData => {\n const obj = expectObject(raw, source, path);\n\n let objectgroup: TiledObjectLayerData | undefined;\n if (obj.objectgroup !== undefined) {\n const objectgroupPath = joinPath(path, 'objectgroup');\n const layer = validateTiledLayerData(obj.objectgroup, source, objectgroupPath);\n if (layer.type !== 'objectgroup') {\n throw new TiledFormatError(source, objectgroupPath, `expected an \"objectgroup\" layer, got \"${layer.type}\"`);\n }\n objectgroup = layer;\n }\n\n return {\n id: expectNonNegativeInteger(obj.id, source, joinPath(path, 'id')),\n type: optionalString(obj, 'type', source, path),\n properties: validateTiledPropertiesArray(obj.properties, source, joinPath(path, 'properties')),\n animation: optionalMapArray(obj.animation, source, joinPath(path, 'animation'), (item, itemPath) =>\n validateTiledAnimationFrameData(item, source, itemPath),\n ),\n objectgroup,\n image: optionalString(obj, 'image', source, path),\n imagewidth: optionalNonNegativeInteger(obj, 'imagewidth', source, path),\n imageheight: optionalNonNegativeInteger(obj, 'imageheight', source, path),\n };\n};\n\n// ── Wangsets ─────────────────────────────────────────────────────────────────\n\nconst validateTiledWangColorData = (raw: unknown, source: string, path: string): TiledWangColorData => {\n const obj = expectObject(raw, source, path);\n return {\n name: expectString(obj.name, source, joinPath(path, 'name')),\n color: expectString(obj.color, source, joinPath(path, 'color')),\n tile: expectInteger(obj.tile, source, joinPath(path, 'tile')),\n probability: expectNumber(obj.probability, source, joinPath(path, 'probability')),\n };\n};\n\nconst validateTiledWangTileData = (raw: unknown, source: string, path: string): TiledWangTileData => {\n const obj = expectObject(raw, source, path);\n const tileid = expectNonNegativeInteger(obj.tileid, source, joinPath(path, 'tileid'));\n const wangid = mapArray(obj.wangid, source, joinPath(path, 'wangid'), (item, itemPath) => expectNonNegativeInteger(item, source, itemPath));\n return { tileid, wangid };\n};\n\nconst validateTiledWangSetData = (raw: unknown, source: string, path: string): TiledWangSetData => {\n const obj = expectObject(raw, source, path);\n return {\n name: expectString(obj.name, source, joinPath(path, 'name')),\n // type is accepted as any string - unknown values are treated as-is per spec\n type: expectString(obj.type, source, joinPath(path, 'type')),\n tile: expectInteger(obj.tile, source, joinPath(path, 'tile')),\n colors: mapArray(obj.colors, source, joinPath(path, 'colors'), (item, itemPath) => validateTiledWangColorData(item, source, itemPath)),\n wangtiles: mapArray(obj.wangtiles, source, joinPath(path, 'wangtiles'), (item, itemPath) => validateTiledWangTileData(item, source, itemPath)),\n properties: validateTiledPropertiesArray(obj.properties, source, joinPath(path, 'properties')),\n };\n};\n\nconst validateTiledWangSets = (value: unknown, source: string, path: string): readonly TiledWangSetData[] | undefined =>\n optionalMapArray(value, source, path, (item, itemPath) => validateTiledWangSetData(item, source, itemPath));\n\n// ── Tilesets ─────────────────────────────────────────────────────────────────\n\nconst validateTiledVersion = (value: unknown, source: string, path: string): string | number => {\n if (typeof value !== 'string' && typeof value !== 'number') {\n throw new TiledFormatError(source, path, `expected a string or number, got ${describeValue(value)}`);\n }\n return value;\n};\n\nconst validateTiledObjectAlignment = (obj: Record<string, unknown>, source: string, path: string): TiledObjectAlignment | undefined => {\n const value = obj.objectalignment;\n if (value === undefined) return undefined;\n\n const alignmentPath = joinPath(path, 'objectalignment');\n const name = expectString(value, source, alignmentPath);\n if (!TILED_OBJECT_ALIGNMENTS.includes(name as TiledObjectAlignment)) {\n throw new TiledFormatError(source, alignmentPath, `unknown object alignment \"${name}\" (expected one of ${TILED_OBJECT_ALIGNMENTS.join(', ')})`);\n }\n\n return name as TiledObjectAlignment;\n};\n\n/** @internal */\nexport const validateTiledTilesetData = (obj: Record<string, unknown>, source: string, path: string): TiledTilesetData => ({\n name: expectString(obj.name, source, joinPath(path, 'name')),\n class: optionalString(obj, 'class', source, path),\n tilewidth: expectPositiveInteger(obj.tilewidth, source, joinPath(path, 'tilewidth')),\n tileheight: expectPositiveInteger(obj.tileheight, source, joinPath(path, 'tileheight')),\n tilecount: expectNonNegativeInteger(obj.tilecount, source, joinPath(path, 'tilecount')),\n columns: expectNonNegativeInteger(obj.columns, source, joinPath(path, 'columns')),\n spacing: optionalNonNegativeInteger(obj, 'spacing', source, path),\n margin: optionalNonNegativeInteger(obj, 'margin', source, path),\n image: optionalString(obj, 'image', source, path),\n imagewidth: optionalNonNegativeInteger(obj, 'imagewidth', source, path),\n imageheight: optionalNonNegativeInteger(obj, 'imageheight', source, path),\n tileoffset: obj.tileoffset === undefined ? undefined : validateTiledPointData(obj.tileoffset, source, joinPath(path, 'tileoffset')),\n objectalignment: validateTiledObjectAlignment(obj, source, path),\n tiles: optionalMapArray(obj.tiles, source, joinPath(path, 'tiles'), (item, itemPath) => validateTiledTileData(item, source, itemPath)),\n wangsets: validateTiledWangSets(obj.wangsets, source, joinPath(path, 'wangsets')),\n properties: validateTiledPropertiesArray(obj.properties, source, joinPath(path, 'properties')),\n tiledversion: optionalString(obj, 'tiledversion', source, path),\n version: obj.version === undefined ? undefined : validateTiledVersion(obj.version, source, joinPath(path, 'version')),\n});\n\n/**\n * Validates one entry of a map's `tilesets` array: either `{ firstgid,\n * source }` (external `.tsj`) or `{ firstgid, ...embedded tileset fields }`.\n * @internal\n */\nexport const validateTiledTilesetRefData = (raw: unknown, source: string, path: string): TiledTilesetRefData => {\n const obj = expectObject(raw, source, path);\n const firstgid = expectPositiveInteger(obj.firstgid, source, joinPath(path, 'firstgid'));\n\n if ('source' in obj) {\n return { firstgid, source: expectString(obj.source, source, joinPath(path, 'source')) };\n }\n\n return { ...validateTiledTilesetData(obj, source, path), firstgid };\n};\n\n// ── Map ──────────────────────────────────────────────────────────────────────\n\nconst ORIENTATIONS: readonly TiledOrientation[] = ['orthogonal', 'isometric', 'staggered', 'hexagonal'];\nconst RENDER_ORDERS: readonly TiledRenderOrder[] = ['right-down', 'right-up', 'left-down', 'left-up'];\n\n/**\n * Validates the root of a `.tmj` file. Throws {@link TiledFormatError} on\n * any structural problem, including unsupported tile-layer encodings and\n * `infinite`/`data`/`chunks` inconsistencies.\n * @internal\n */\nexport const validateTiledMapData = (raw: unknown, source: string): TiledMapData => {\n const obj = expectObject(raw, source, '');\n\n const type = expectString(obj.type, source, 'type');\n if (type !== 'map') {\n throw new TiledFormatError(source, 'type', `expected \"map\", got \"${type}\"`);\n }\n\n const version = validateTiledVersion(obj.version, source, 'version');\n\n const orientationValue = expectString(obj.orientation, source, 'orientation');\n if (!ORIENTATIONS.includes(orientationValue as TiledOrientation)) {\n throw new TiledFormatError(source, 'orientation', `unknown orientation \"${orientationValue}\" (expected one of ${ORIENTATIONS.join(', ')})`);\n }\n const orientation = orientationValue as TiledOrientation;\n\n let renderorder: TiledRenderOrder | undefined;\n if (obj.renderorder !== undefined) {\n const value = expectString(obj.renderorder, source, 'renderorder');\n if (!RENDER_ORDERS.includes(value as TiledRenderOrder)) {\n throw new TiledFormatError(source, 'renderorder', `unknown render order \"${value}\" (expected one of ${RENDER_ORDERS.join(', ')})`);\n }\n renderorder = value as TiledRenderOrder;\n }\n\n const infinite = expectBoolean(obj.infinite, source, 'infinite');\n const layers = mapArray(obj.layers, source, 'layers', (item, itemPath) => validateTiledLayerData(item, source, itemPath));\n checkTiledLayerInfiniteConsistency(layers, infinite, source, 'layers');\n\n return {\n type: 'map',\n version,\n tiledversion: optionalString(obj, 'tiledversion', source, ''),\n class: optionalString(obj, 'class', source, ''),\n orientation,\n renderorder,\n width: expectNonNegativeInteger(obj.width, source, 'width'),\n height: expectNonNegativeInteger(obj.height, source, 'height'),\n tilewidth: expectPositiveInteger(obj.tilewidth, source, 'tilewidth'),\n tileheight: expectPositiveInteger(obj.tileheight, source, 'tileheight'),\n infinite,\n compressionlevel: optionalInteger(obj, 'compressionlevel', source, ''),\n nextlayerid: optionalNonNegativeInteger(obj, 'nextlayerid', source, ''),\n nextobjectid: optionalNonNegativeInteger(obj, 'nextobjectid', source, ''),\n backgroundcolor: optionalString(obj, 'backgroundcolor', source, ''),\n layers,\n tilesets: mapArray(obj.tilesets, source, 'tilesets', (item, itemPath) => validateTiledTilesetRefData(item, source, itemPath)),\n properties: validateTiledPropertiesArray(obj.properties, source, 'properties'),\n };\n};\n\n/**\n * Validates a standalone `.tsj` tileset file's root object.\n * @internal\n */\nexport const validateTiledTilesetFileData = (raw: unknown, source: string): TiledTilesetData =>\n validateTiledTilesetData(expectObject(raw, source, ''), source, '');\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ import type { TiledWangSetData } from './data';
6
6
  *
7
7
  * ## Supported types
8
8
  *
9
- * - **`'corner'`** Maps the four corner positions of each `wangtile` to the
9
+ * - **`'corner'`** - Maps the four corner positions of each `wangtile` to the
10
10
  * four corner bits of the 8-bit blob mask and returns a `WangSet` of type
11
11
  * `'blob'`. Only color index `> 0` in the Tiled wangid is treated as "this
12
12
  * terrain"; color index `0` means unset (not this terrain).
@@ -22,7 +22,7 @@ import type { TiledWangSetData } from './data';
22
22
  * the presence/absence of any color (> 0 = set) is used; which specific
23
23
  * color is set is ignored.
24
24
  *
25
- * - **`'edge'`** Maps the four edge positions to the 4-bit edge mask and
25
+ * - **`'edge'`** - Maps the four edge positions to the 4-bit edge mask and
26
26
  * returns a `WangSet` of type `'edge'`.
27
27
  *
28
28
  * Tiled edge wangid position → WangSet edge bit mapping:
@@ -31,7 +31,7 @@ import type { TiledWangSetData } from './data';
31
31
  * - `wangid[4]` (bottom) → bit 2 (value 4)
32
32
  * - `wangid[6]` (left) → bit 3 (value 8)
33
33
  *
34
- * - **`'mixed'` / unknown** Returns `null`; mixed wangsets interleave corner
34
+ * - **`'mixed'` / unknown** - Returns `null`; mixed wangsets interleave corner
35
35
  * and edge semantics in a way that cannot be faithfully represented by
36
36
  * a single blob or edge mask without additional heuristics.
37
37
  *
@@ -40,4 +40,5 @@ import type { TiledWangSetData } from './data';
40
40
  * tileset list (forwarded to {@link WangSet} as-is).
41
41
  * @returns A {@link WangSet}, or `null` when the wangset type is unsupported.
42
42
  */
43
- export declare function tiledWangSetToWangSet(wangSet: TiledWangSetData, tilesetIndex: number): WangSet | null;
43
+ export declare const tiledWangSetToWangSet: (wangSet: TiledWangSetData, tilesetIndex: number) => WangSet | null;
44
+ //# sourceMappingURL=wangSets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wangSets.d.ts","sourceRoot":"","sources":["../../src/wangSets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,gBAAgB,EAAE,cAAc,MAAM,KAAG,OAAO,GAAG,IAWjG,CAAC"}
@@ -1,127 +1,102 @@
1
- import { WangSet } from '@codexo/exojs-tilemap';
1
+ import { WangSet } from "@codexo/exojs-tilemap";
2
2
 
3
+ //#region src/wangSets.ts
3
4
  /**
4
- * Best-effort conversion of a {@link TiledWangSetData} to a runtime
5
- * {@link WangSet} from `@codexo/exojs-tilemap`.
6
- *
7
- * ## Supported types
8
- *
9
- * - **`'corner'`** Maps the four corner positions of each `wangtile` to the
10
- * four corner bits of the 8-bit blob mask and returns a `WangSet` of type
11
- * `'blob'`. Only color index `> 0` in the Tiled wangid is treated as "this
12
- * terrain"; color index `0` means unset (not this terrain).
13
- *
14
- * Tiled corner wangid position → WangSet blob bit mapping:
15
- * - `wangid[7]` (top-left) → bit 0 (value 1)
16
- * - `wangid[1]` (top-right) → bit 2 (value 4)
17
- * - `wangid[5]` (bottom-left) → bit 5 (value 32)
18
- * - `wangid[3]` (bottom-right) → bit 7 (value 128)
19
- *
20
- * This is a best-effort conversion accurate for the common **single-color**
21
- * corner terrain (blob-style). Multi-color terrains are accepted but only
22
- * the presence/absence of any color (> 0 = set) is used; which specific
23
- * color is set is ignored.
24
- *
25
- * - **`'edge'`** Maps the four edge positions to the 4-bit edge mask and
26
- * returns a `WangSet` of type `'edge'`.
27
- *
28
- * Tiled edge wangid position → WangSet edge bit mapping:
29
- * - `wangid[0]` (top) → bit 0 (value 1)
30
- * - `wangid[2]` (right) → bit 1 (value 2)
31
- * - `wangid[4]` (bottom) → bit 2 (value 4)
32
- * - `wangid[6]` (left) → bit 3 (value 8)
33
- *
34
- * - **`'mixed'` / unknown** Returns `null`; mixed wangsets interleave corner
35
- * and edge semantics in a way that cannot be faithfully represented by
36
- * a single blob or edge mask without additional heuristics.
37
- *
38
- * @param wangSet The raw {@link TiledWangSetData} parsed from a `.tsj` file.
39
- * @param tilesetIndex The index of the owning tileset within the layer's
40
- * tileset list (forwarded to {@link WangSet} as-is).
41
- * @returns A {@link WangSet}, or `null` when the wangset type is unsupported.
42
- */
43
- function tiledWangSetToWangSet(wangSet, tilesetIndex) {
44
- if (wangSet.type === 'corner') {
45
- return convertCornerWangSet(wangSet, tilesetIndex);
46
- }
47
- if (wangSet.type === 'edge') {
48
- return convertEdgeWangSet(wangSet, tilesetIndex);
49
- }
50
- // 'mixed' or any unknown type cannot be faithfully mapped.
51
- return null;
52
- }
53
- // ── Corner → blob ─────────────────────────────────────────────────────────────
54
- //
55
- // Tiled corner wangid positions (indices into the 8-element wangid array):
56
- // Index order: [top(0), topright(1), right(2), bottomright(3), bottom(4), bottomleft(5), left(6), topleft(7)]
57
- //
58
- // WangSet blob bitmask values (bit layout: bit0=TL, bit1=T, bit2=TR, bit3=L, bit4=R, bit5=BL, bit6=B, bit7=BR):
59
- // topleft → wangid[7] → blob bit 0 (value 1)
60
- // topright → wangid[1] → blob bit 2 (value 4)
61
- // bottomleft → wangid[5] → blob bit 5 (value 32)
62
- // bottomright → wangid[3] → blob bit 7 (value 128)
5
+ * Best-effort conversion of a {@link TiledWangSetData} to a runtime
6
+ * {@link WangSet} from `@codexo/exojs-tilemap`.
7
+ *
8
+ * ## Supported types
9
+ *
10
+ * - **`'corner'`** - Maps the four corner positions of each `wangtile` to the
11
+ * four corner bits of the 8-bit blob mask and returns a `WangSet` of type
12
+ * `'blob'`. Only color index `> 0` in the Tiled wangid is treated as "this
13
+ * terrain"; color index `0` means unset (not this terrain).
14
+ *
15
+ * Tiled corner wangid position → WangSet blob bit mapping:
16
+ * - `wangid[7]` (top-left) → bit 0 (value 1)
17
+ * - `wangid[1]` (top-right) → bit 2 (value 4)
18
+ * - `wangid[5]` (bottom-left) → bit 5 (value 32)
19
+ * - `wangid[3]` (bottom-right) → bit 7 (value 128)
20
+ *
21
+ * This is a best-effort conversion accurate for the common **single-color**
22
+ * corner terrain (blob-style). Multi-color terrains are accepted but only
23
+ * the presence/absence of any color (> 0 = set) is used; which specific
24
+ * color is set is ignored.
25
+ *
26
+ * - **`'edge'`** - Maps the four edge positions to the 4-bit edge mask and
27
+ * returns a `WangSet` of type `'edge'`.
28
+ *
29
+ * Tiled edge wangid position → WangSet edge bit mapping:
30
+ * - `wangid[0]` (top) → bit 0 (value 1)
31
+ * - `wangid[2]` (right) → bit 1 (value 2)
32
+ * - `wangid[4]` (bottom) → bit 2 (value 4)
33
+ * - `wangid[6]` (left) → bit 3 (value 8)
34
+ *
35
+ * - **`'mixed'` / unknown** - Returns `null`; mixed wangsets interleave corner
36
+ * and edge semantics in a way that cannot be faithfully represented by
37
+ * a single blob or edge mask without additional heuristics.
38
+ *
39
+ * @param wangSet The raw {@link TiledWangSetData} parsed from a `.tsj` file.
40
+ * @param tilesetIndex The index of the owning tileset within the layer's
41
+ * tileset list (forwarded to {@link WangSet} as-is).
42
+ * @returns A {@link WangSet}, or `null` when the wangset type is unsupported.
43
+ */
44
+ const tiledWangSetToWangSet = (wangSet, tilesetIndex) => {
45
+ if (wangSet.type === "corner") return convertCornerWangSet(wangSet, tilesetIndex);
46
+ if (wangSet.type === "edge") return convertEdgeWangSet(wangSet, tilesetIndex);
47
+ return null;
48
+ };
63
49
  const cornerIndexTopLeft = 7;
64
50
  const cornerIndexTopRight = 1;
65
51
  const cornerIndexBottomRight = 3;
66
52
  const cornerIndexBottomLeft = 5;
67
- const blobBitTopLeft = 1; // bit 0
68
- const blobBitTopRight = 4; // bit 2
69
- const blobBitBottomLeft = 32; // bit 5
70
- const blobBitBottomRight = 128; // bit 7
71
- function convertCornerWangSet(wangSet, tilesetIndex) {
72
- const blobMap = new Map();
73
- for (const wangTile of wangSet.wangtiles) {
74
- const id = wangTile.wangid;
75
- let mask = 0;
76
- if ((id[cornerIndexTopLeft] ?? 0) > 0)
77
- mask |= blobBitTopLeft;
78
- if ((id[cornerIndexTopRight] ?? 0) > 0)
79
- mask |= blobBitTopRight;
80
- if ((id[cornerIndexBottomLeft] ?? 0) > 0)
81
- mask |= blobBitBottomLeft;
82
- if ((id[cornerIndexBottomRight] ?? 0) > 0)
83
- mask |= blobBitBottomRight;
84
- // Last writer wins when two wangtiles produce the same mask
85
- // (shouldn't happen in well-formed data, but be lenient).
86
- blobMap.set(mask, wangTile.tileid);
87
- }
88
- return new WangSet({ tilesetIndex, blobMap, type: 'blob' });
89
- }
90
- // ── Edge → edge ───────────────────────────────────────────────────────────────
91
- //
92
- // Tiled edge wangid positions:
93
- // Index order: [top(0), topright(1), right(2), bottomright(3), bottom(4), bottomleft(5), left(6), topleft(7)]
94
- //
95
- // WangSet edge bitmask values (bit layout: bit0=T, bit1=R, bit2=B, bit3=L):
96
- // top → wangid[0] → edge bit 0 (value 1)
97
- // right → wangid[2] → edge bit 1 (value 2)
98
- // bottom → wangid[4] → edge bit 2 (value 4)
99
- // left → wangid[6] → edge bit 3 (value 8)
53
+ const blobBitTopLeft = 1;
54
+ const blobBitTopRight = 4;
55
+ const blobBitBottomLeft = 32;
56
+ const blobBitBottomRight = 128;
57
+ const convertCornerWangSet = (wangSet, tilesetIndex) => {
58
+ const blobMap = /* @__PURE__ */ new Map();
59
+ for (const wangTile of wangSet.wangtiles) {
60
+ const id = wangTile.wangid;
61
+ let mask = 0;
62
+ if ((id[cornerIndexTopLeft] ?? 0) > 0) mask |= blobBitTopLeft;
63
+ if ((id[cornerIndexTopRight] ?? 0) > 0) mask |= blobBitTopRight;
64
+ if ((id[cornerIndexBottomLeft] ?? 0) > 0) mask |= blobBitBottomLeft;
65
+ if ((id[cornerIndexBottomRight] ?? 0) > 0) mask |= blobBitBottomRight;
66
+ blobMap.set(mask, wangTile.tileid);
67
+ }
68
+ return new WangSet({
69
+ tilesetIndex,
70
+ blobMap,
71
+ type: "blob"
72
+ });
73
+ };
100
74
  const edgeIndexTop = 0;
101
75
  const edgeIndexRight = 2;
102
76
  const edgeIndexBottom = 4;
103
77
  const edgeIndexLeft = 6;
104
- const edgeBitTop = 1; // bit 0
105
- const edgeBitRight = 2; // bit 1
106
- const edgeBitBottom = 4; // bit 2
107
- const edgeBitLeft = 8; // bit 3
108
- function convertEdgeWangSet(wangSet, tilesetIndex) {
109
- const blobMap = new Map();
110
- for (const wangTile of wangSet.wangtiles) {
111
- const id = wangTile.wangid;
112
- let mask = 0;
113
- if ((id[edgeIndexTop] ?? 0) > 0)
114
- mask |= edgeBitTop;
115
- if ((id[edgeIndexRight] ?? 0) > 0)
116
- mask |= edgeBitRight;
117
- if ((id[edgeIndexBottom] ?? 0) > 0)
118
- mask |= edgeBitBottom;
119
- if ((id[edgeIndexLeft] ?? 0) > 0)
120
- mask |= edgeBitLeft;
121
- blobMap.set(mask, wangTile.tileid);
122
- }
123
- return new WangSet({ tilesetIndex, blobMap, type: 'edge' });
124
- }
78
+ const edgeBitTop = 1;
79
+ const edgeBitRight = 2;
80
+ const edgeBitBottom = 4;
81
+ const edgeBitLeft = 8;
82
+ const convertEdgeWangSet = (wangSet, tilesetIndex) => {
83
+ const blobMap = /* @__PURE__ */ new Map();
84
+ for (const wangTile of wangSet.wangtiles) {
85
+ const id = wangTile.wangid;
86
+ let mask = 0;
87
+ if ((id[edgeIndexTop] ?? 0) > 0) mask |= edgeBitTop;
88
+ if ((id[edgeIndexRight] ?? 0) > 0) mask |= edgeBitRight;
89
+ if ((id[edgeIndexBottom] ?? 0) > 0) mask |= edgeBitBottom;
90
+ if ((id[edgeIndexLeft] ?? 0) > 0) mask |= edgeBitLeft;
91
+ blobMap.set(mask, wangTile.tileid);
92
+ }
93
+ return new WangSet({
94
+ tilesetIndex,
95
+ blobMap,
96
+ type: "edge"
97
+ });
98
+ };
125
99
 
100
+ //#endregion
126
101
  export { tiledWangSetToWangSet };
127
- //# sourceMappingURL=wangSets.js.map
102
+ //# sourceMappingURL=wangSets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wangSets.js","sources":["../../../src/wangSets.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wangSets.js","names":[],"sources":["../../src/wangSets.ts"],"sourcesContent":["import { WangSet } from '@codexo/exojs-tilemap';\n\nimport type { TiledWangSetData } from './data';\n\n/**\n * Best-effort conversion of a {@link TiledWangSetData} to a runtime\n * {@link WangSet} from `@codexo/exojs-tilemap`.\n *\n * ## Supported types\n *\n * - **`'corner'`** - Maps the four corner positions of each `wangtile` to the\n * four corner bits of the 8-bit blob mask and returns a `WangSet` of type\n * `'blob'`. Only color index `> 0` in the Tiled wangid is treated as \"this\n * terrain\"; color index `0` means unset (not this terrain).\n *\n * Tiled corner wangid position → WangSet blob bit mapping:\n * - `wangid[7]` (top-left) → bit 0 (value 1)\n * - `wangid[1]` (top-right) → bit 2 (value 4)\n * - `wangid[5]` (bottom-left) → bit 5 (value 32)\n * - `wangid[3]` (bottom-right) → bit 7 (value 128)\n *\n * This is a best-effort conversion accurate for the common **single-color**\n * corner terrain (blob-style). Multi-color terrains are accepted but only\n * the presence/absence of any color (> 0 = set) is used; which specific\n * color is set is ignored.\n *\n * - **`'edge'`** - Maps the four edge positions to the 4-bit edge mask and\n * returns a `WangSet` of type `'edge'`.\n *\n * Tiled edge wangid position → WangSet edge bit mapping:\n * - `wangid[0]` (top) → bit 0 (value 1)\n * - `wangid[2]` (right) → bit 1 (value 2)\n * - `wangid[4]` (bottom) → bit 2 (value 4)\n * - `wangid[6]` (left) → bit 3 (value 8)\n *\n * - **`'mixed'` / unknown** - Returns `null`; mixed wangsets interleave corner\n * and edge semantics in a way that cannot be faithfully represented by\n * a single blob or edge mask without additional heuristics.\n *\n * @param wangSet The raw {@link TiledWangSetData} parsed from a `.tsj` file.\n * @param tilesetIndex The index of the owning tileset within the layer's\n * tileset list (forwarded to {@link WangSet} as-is).\n * @returns A {@link WangSet}, or `null` when the wangset type is unsupported.\n */\nexport const tiledWangSetToWangSet = (wangSet: TiledWangSetData, tilesetIndex: number): WangSet | null => {\n if (wangSet.type === 'corner') {\n return convertCornerWangSet(wangSet, tilesetIndex);\n }\n\n if (wangSet.type === 'edge') {\n return convertEdgeWangSet(wangSet, tilesetIndex);\n }\n\n // 'mixed' or any unknown type cannot be faithfully mapped.\n return null;\n};\n\n// ── Corner → blob ─────────────────────────────────────────────────────────────\n//\n// Tiled corner wangid positions (indices into the 8-element wangid array):\n// Index order: [top(0), topright(1), right(2), bottomright(3), bottom(4), bottomleft(5), left(6), topleft(7)]\n//\n// WangSet blob bitmask values (bit layout: bit0=TL, bit1=T, bit2=TR, bit3=L, bit4=R, bit5=BL, bit6=B, bit7=BR):\n// topleft → wangid[7] → blob bit 0 (value 1)\n// topright → wangid[1] → blob bit 2 (value 4)\n// bottomleft → wangid[5] → blob bit 5 (value 32)\n// bottomright → wangid[3] → blob bit 7 (value 128)\n\nconst cornerIndexTopLeft = 7;\nconst cornerIndexTopRight = 1;\nconst cornerIndexBottomRight = 3;\nconst cornerIndexBottomLeft = 5;\n\nconst blobBitTopLeft = 1; // bit 0\nconst blobBitTopRight = 4; // bit 2\nconst blobBitBottomLeft = 32; // bit 5\nconst blobBitBottomRight = 128; // bit 7\n\nconst convertCornerWangSet = (wangSet: TiledWangSetData, tilesetIndex: number): WangSet => {\n const blobMap = new Map<number, number>();\n\n for (const wangTile of wangSet.wangtiles) {\n const id = wangTile.wangid;\n let mask = 0;\n\n if ((id[cornerIndexTopLeft] ?? 0) > 0) mask |= blobBitTopLeft;\n if ((id[cornerIndexTopRight] ?? 0) > 0) mask |= blobBitTopRight;\n if ((id[cornerIndexBottomLeft] ?? 0) > 0) mask |= blobBitBottomLeft;\n if ((id[cornerIndexBottomRight] ?? 0) > 0) mask |= blobBitBottomRight;\n\n // Last writer wins when two wangtiles produce the same mask\n // (shouldn't happen in well-formed data, but be lenient).\n blobMap.set(mask, wangTile.tileid);\n }\n\n return new WangSet({ tilesetIndex, blobMap, type: 'blob' });\n};\n\n// ── Edge → edge ───────────────────────────────────────────────────────────────\n//\n// Tiled edge wangid positions:\n// Index order: [top(0), topright(1), right(2), bottomright(3), bottom(4), bottomleft(5), left(6), topleft(7)]\n//\n// WangSet edge bitmask values (bit layout: bit0=T, bit1=R, bit2=B, bit3=L):\n// top → wangid[0] → edge bit 0 (value 1)\n// right → wangid[2] → edge bit 1 (value 2)\n// bottom → wangid[4] → edge bit 2 (value 4)\n// left → wangid[6] → edge bit 3 (value 8)\n\nconst edgeIndexTop = 0;\nconst edgeIndexRight = 2;\nconst edgeIndexBottom = 4;\nconst edgeIndexLeft = 6;\n\nconst edgeBitTop = 1; // bit 0\nconst edgeBitRight = 2; // bit 1\nconst edgeBitBottom = 4; // bit 2\nconst edgeBitLeft = 8; // bit 3\n\nconst convertEdgeWangSet = (wangSet: TiledWangSetData, tilesetIndex: number): WangSet => {\n const blobMap = new Map<number, number>();\n\n for (const wangTile of wangSet.wangtiles) {\n const id = wangTile.wangid;\n let mask = 0;\n\n if ((id[edgeIndexTop] ?? 0) > 0) mask |= edgeBitTop;\n if ((id[edgeIndexRight] ?? 0) > 0) mask |= edgeBitRight;\n if ((id[edgeIndexBottom] ?? 0) > 0) mask |= edgeBitBottom;\n if ((id[edgeIndexLeft] ?? 0) > 0) mask |= edgeBitLeft;\n\n blobMap.set(mask, wangTile.tileid);\n }\n\n return new WangSet({ tilesetIndex, blobMap, type: 'edge' });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAa,yBAAyB,SAA2B,iBAAyC;CACxG,IAAI,QAAQ,SAAS,UACnB,OAAO,qBAAqB,SAAS,YAAY;CAGnD,IAAI,QAAQ,SAAS,QACnB,OAAO,mBAAmB,SAAS,YAAY;CAIjD,OAAO;AACT;AAaA,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,yBAAyB;AAC/B,MAAM,wBAAwB;AAE9B,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AACxB,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAE3B,MAAM,wBAAwB,SAA2B,iBAAkC;CACzF,MAAM,0BAAU,IAAI,IAAoB;CAExC,KAAK,MAAM,YAAY,QAAQ,WAAW;EACxC,MAAM,KAAK,SAAS;EACpB,IAAI,OAAO;EAEX,KAAK,GAAG,uBAAuB,KAAK,GAAG,QAAQ;EAC/C,KAAK,GAAG,wBAAwB,KAAK,GAAG,QAAQ;EAChD,KAAK,GAAG,0BAA0B,KAAK,GAAG,QAAQ;EAClD,KAAK,GAAG,2BAA2B,KAAK,GAAG,QAAQ;EAInD,QAAQ,IAAI,MAAM,SAAS,MAAM;CACnC;CAEA,OAAO,IAAI,QAAQ;EAAE;EAAc;EAAS,MAAM;CAAO,CAAC;AAC5D;AAaA,MAAM,eAAe;AACrB,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AACxB,MAAM,gBAAgB;AAEtB,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,gBAAgB;AACtB,MAAM,cAAc;AAEpB,MAAM,sBAAsB,SAA2B,iBAAkC;CACvF,MAAM,0BAAU,IAAI,IAAoB;CAExC,KAAK,MAAM,YAAY,QAAQ,WAAW;EACxC,MAAM,KAAK,SAAS;EACpB,IAAI,OAAO;EAEX,KAAK,GAAG,iBAAiB,KAAK,GAAG,QAAQ;EACzC,KAAK,GAAG,mBAAmB,KAAK,GAAG,QAAQ;EAC3C,KAAK,GAAG,oBAAoB,KAAK,GAAG,QAAQ;EAC5C,KAAK,GAAG,kBAAkB,KAAK,GAAG,QAAQ;EAE1C,QAAQ,IAAI,MAAM,SAAS,MAAM;CACnC;CAEA,OAAO,IAAI,QAAQ;EAAE;EAAc;EAAS,MAAM;CAAO,CAAC;AAC5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codexo/exojs-tiled",
3
- "version": "0.15.3",
3
+ "version": "0.16.0",
4
4
  "description": "Tiled map format asset extension for ExoJS.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,9 +8,7 @@
8
8
  "directory": "packages/exojs-tiled"
9
9
  },
10
10
  "type": "module",
11
- "sideEffects": [
12
- "./dist/esm/register.js"
13
- ],
11
+ "sideEffects": false,
14
12
  "main": "./dist/esm/index.js",
15
13
  "module": "./dist/esm/index.js",
16
14
  "types": "./dist/esm/index.d.ts",
@@ -20,11 +18,6 @@
20
18
  "import": "./dist/esm/index.js",
21
19
  "default": "./dist/esm/index.js"
22
20
  },
23
- "./register": {
24
- "types": "./dist/esm/register.d.ts",
25
- "import": "./dist/esm/register.js",
26
- "default": "./dist/esm/register.js"
27
- },
28
21
  "./package.json": "./package.json"
29
22
  },
30
23
  "files": [
@@ -33,23 +26,22 @@
33
26
  "LICENSE"
34
27
  ],
35
28
  "peerDependencies": {
36
- "@codexo/exojs": "0.15.x"
37
- },
38
- "dependencies": {
39
- "@codexo/exojs-tilemap": "0.15.3"
29
+ "@codexo/exojs": "0.16.x",
30
+ "@codexo/exojs-tilemap": "0.16.x"
40
31
  },
41
32
  "devDependencies": {
42
- "@codexo/exojs": "0.15.3",
43
- "@codexo/exojs-config": "0.0.0"
33
+ "@codexo/exojs-config": "0.0.0",
34
+ "@codexo/exojs-tilemap": "0.16.0",
35
+ "@codexo/exojs": "0.16.0"
44
36
  },
45
37
  "license": "MIT",
46
38
  "publishConfig": {
47
39
  "access": "public"
48
40
  },
49
41
  "scripts": {
50
- "build": "tsx ../../node_modules/rollup/dist/bin/rollup -c --environment EXOJS_ENV:production",
51
- "build:dev": "tsx ../../node_modules/rollup/dist/bin/rollup -c --environment EXOJS_ENV:development",
52
- "typecheck": "tsc --noEmit",
42
+ "build": "tsx ../../scripts/build-extension.ts",
43
+ "build:dev": "tsx ../../scripts/build-extension.ts --dev",
44
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
53
45
  "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
54
46
  "test": "vitest run --root ../.. --project=exojs-tiled"
55
47
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1 +0,0 @@
1
- export * from './public';
@@ -1,22 +0,0 @@
1
- import { ExtensionRegistry } from '@codexo/exojs/extensions';
2
- import { tiledExtension } from './tiledExtension.js';
3
- export { tiledBuildInfo } from './tiledBuildInfo.js';
4
- export { tiledMapBinding } from './tiledMapBinding.js';
5
- export { tiledRuntimeMapBinding } from './tiledRuntimeMapBinding.js';
6
- export { ObjectLayer, TILE_TRANSFORM_IDENTITY, TileLayer, TileLayerNode, TileMap, TileMapBand, TileMapNode, TileMapView, TileSet, WangSet, tilemapExtension } from '@codexo/exojs-tilemap';
7
- export { TiledGroupLayer, TiledImageLayer, TiledLayer, TiledObjectLayer, TiledTileLayer, createTiledLayer } from './TiledLayer.js';
8
- export { TiledMap } from './TiledMap.js';
9
- export { TiledObject } from './TiledObject.js';
10
- export { TiledTileset } from './TiledTileset.js';
11
- export { tiledWangSetToWangSet } from './wangSets.js';
12
- export { TiledFormatError } from './validate.js';
13
-
14
- // @codexo/exojs-tiled/register — explicit registration entry.
15
- // Importing this entry registers the default tiledExtension descriptor
16
- // in the global ExtensionRegistry. Subsequently constructed Applications
17
- // that use global defaults will receive the Tiled extension.
18
- // This is the only side-effectful entry in this package.
19
- ExtensionRegistry.register(tiledExtension);
20
-
21
- export { tiledExtension };
22
- //# sourceMappingURL=register.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"register.js","sources":["../../../src/register.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AAMA,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC;;;;"}
@@ -1,19 +0,0 @@
1
- import { TiledMap } from './TiledMap';
2
- import { type TiledLoadOptions } from './tiledOptions';
3
- /**
4
- * Declarative asset binding for {@link TiledMap}.
5
- *
6
- * Token-only: `loader.load(TiledMap, 'world.tmj')` resolves through this
7
- * binding, but no `extensions` are claimed, so a plain
8
- * `loader.load('world.tmj')` does not resolve to `TiledMap`. The `.tmj`
9
- * extension (and generic `.json` Tiled loading) is reserved for the
10
- * format-independent `TileMap` runtime asset binding.
11
- */
12
- export declare const tiledMapBinding: {
13
- type: typeof TiledMap;
14
- typeNames: string[];
15
- create(): {
16
- getIdentityKey(req: import("@codexo/exojs").AssetLoadRequest<TiledLoadOptions>): string;
17
- load(req: import("@codexo/exojs").AssetLoadRequest<TiledLoadOptions>, ctx: import("@codexo/exojs").AssetLoaderContext): Promise<TiledMap>;
18
- };
19
- };
@@ -1,31 +0,0 @@
1
- import { loadTiledMap } from './loadTiledMap.js';
2
- import { TiledMap } from './TiledMap.js';
3
- import { resolveTiledOptions } from './tiledOptions.js';
4
-
5
- /**
6
- * Declarative asset binding for {@link TiledMap}.
7
- *
8
- * Token-only: `loader.load(TiledMap, 'world.tmj')` resolves through this
9
- * binding, but no `extensions` are claimed, so a plain
10
- * `loader.load('world.tmj')` does not resolve to `TiledMap`. The `.tmj`
11
- * extension (and generic `.json` Tiled loading) is reserved for the
12
- * format-independent `TileMap` runtime asset binding.
13
- */
14
- const tiledMapBinding = {
15
- type: TiledMap,
16
- typeNames: ['tiledMap'],
17
- create() {
18
- return {
19
- getIdentityKey(req) {
20
- const o = resolveTiledOptions(req.options);
21
- return `${req.source}|${o.format}`;
22
- },
23
- async load(req, ctx) {
24
- return loadTiledMap(req.source, ctx);
25
- },
26
- };
27
- },
28
- };
29
-
30
- export { tiledMapBinding };
31
- //# sourceMappingURL=tiledMapBinding.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiledMapBinding.js","sources":["../../../src/tiledMapBinding.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAMA;;;;;;;;AAQG;AACI,MAAM,eAAe,GAAG;AAC7B,IAAA,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,MAAM,GAAA;QACJ,OAAO;AACL,YAAA,cAAc,CAAC,GAAG,EAAA;gBAChB,MAAM,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC1C,OAAO,CAAA,EAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAA,CAAE;YACpC,CAAC;AACD,YAAA,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,EAAA;gBACjB,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;YACtC,CAAC;SACiD;IACtD,CAAC;;;;;"}