@flighthq/textureatlas-formats 0.3.0 → 0.3.1-next.1041.35b950c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { detectTextureAtlasFormat, getTextureAtlasFormat, parseTextureAtlas, parseTextureAtlasAsepriteDocument, parseTextureAtlasAsepriteJson, parseTextureAtlasLibgdxAtlas, parseTextureAtlasPackerDocument, parseTextureAtlasPackerJson, parseTextureAtlasStarlingXml, registerTextureAtlasFormat, } from './contract';
1
+ export { detectTextureAtlasFormat, getTextureAtlasFormat, getTextureAtlasFormatKinds, parseTextureAtlas, parseTextureAtlasAsepriteDocument, parseTextureAtlasAsepriteJson, parseTextureAtlasLibgdxAtlas, parseTextureAtlasPackerDocument, parseTextureAtlasPackerJson, parseTextureAtlasStarlingXml, registerTextureAtlasFormat, unregisterTextureAtlasFormat, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { detectTextureAtlasFormat, getTextureAtlasFormat, parseTextureAtlas, parseTextureAtlasAsepriteDocument, parseTextureAtlasAsepriteJson, parseTextureAtlasLibgdxAtlas, parseTextureAtlasPackerDocument, parseTextureAtlasPackerJson, parseTextureAtlasStarlingXml, registerTextureAtlasFormat, } from './contract';
1
+ export { detectTextureAtlasFormat, getTextureAtlasFormat, getTextureAtlasFormatKinds, parseTextureAtlas, parseTextureAtlasAsepriteDocument, parseTextureAtlasAsepriteJson, parseTextureAtlasLibgdxAtlas, parseTextureAtlasPackerDocument, parseTextureAtlasPackerJson, parseTextureAtlasStarlingXml, registerTextureAtlasFormat, unregisterTextureAtlasFormat, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,YAAY,CAAC"}
@@ -21,6 +21,8 @@ export declare function getTextureAtlasFormat(kind: TextureAtlasFormatKind): Rea
21
21
  detect: (content: string) => boolean;
22
22
  parse: (content: string, atlas: TextureAtlas, options: TextureAtlasParseOptions) => TextureAtlas;
23
23
  }> | null;
24
+ /** Return a sorted snapshot of every bound texture-atlas format kind. */
25
+ export declare function getTextureAtlasFormatKinds(): readonly TextureAtlasFormatKind[];
24
26
  /** Parse a texture-atlas descriptor into `atlas`, auto-detecting the format.
25
27
  *
26
28
  * Pass `formatKind` to skip detection when the format is already known. Returns `atlas` on success
@@ -40,4 +42,6 @@ export declare function registerTextureAtlasFormat(kind: TextureAtlasFormatKind,
40
42
  detect: (content: string) => boolean;
41
43
  parse: (content: string, atlas: TextureAtlas, options: TextureAtlasParseOptions) => TextureAtlas;
42
44
  }): void;
45
+ /** Remove a format binding, including a caller override of a built-in kind. */
46
+ export declare function unregisterTextureAtlasFormat(kind: TextureAtlasFormatKind): void;
43
47
  //# sourceMappingURL=textureAtlasDetect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textureAtlasDetect.d.ts","sourceRoot":"","sources":["../src/textureAtlasDetect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAsG/G;;;;;;;;;;;;8EAY8E;AAC9E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAOvF;AAED;;;uDAGuD;AACvD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,QAAQ,CAAC;IAC5E,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,wBAAwB,KAAK,YAAY,CAAC;CAClG,CAAC,GAAG,IAAI,CAER;AAED;;;;;gCAKgC;AAChC,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,EACnB,UAAU,CAAC,EAAE,sBAAsB,EACnC,OAAO,CAAC,EAAE,wBAAwB,GACjC,YAAY,GAAG,IAAI,CAMrB;AAED;;;;;;;sCAOsC;AACtC,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,sBAAsB,EAC5B,KAAK,EAAE;IACL,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,wBAAwB,KAAK,YAAY,CAAC;CAClG,GACA,IAAI,CAEN"}
1
+ {"version":3,"file":"textureAtlasDetect.d.ts","sourceRoot":"","sources":["../src/textureAtlasDetect.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAuGlC;;;;;;;;;;;;8EAY8E;AAC9E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAOvF;AAED;;;uDAGuD;AACvD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,QAAQ,CAAC;IAC5E,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,wBAAwB,KAAK,YAAY,CAAC;CAClG,CAAC,GAAG,IAAI,CAER;AAED,yEAAyE;AACzE,wBAAgB,0BAA0B,IAAI,SAAS,sBAAsB,EAAE,CAI9E;AAED;;;;;gCAKgC;AAChC,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,EACnB,UAAU,CAAC,EAAE,sBAAsB,EACnC,OAAO,CAAC,EAAE,wBAAwB,GACjC,YAAY,GAAG,IAAI,CAMrB;AAED;;;;;;;sCAOsC;AACtC,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,sBAAsB,EAC5B,KAAK,EAAE;IACL,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,wBAAwB,KAAK,YAAY,CAAC;CAClG,GACA,IAAI,CAEN;AAED,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAE/E"}
@@ -1,9 +1,9 @@
1
+ import { createKeyedTable, getRegistryTableEntry, getRegistryTableKeys, withRegistryTableEntry, withoutRegistryTableEntry, } from '@flighthq/registry/contract';
1
2
  import { TextureAtlasFormatKindAseprite, TextureAtlasFormatKindLibgdxAtlas, TextureAtlasFormatKindStarling, TextureAtlasFormatKindTexturePacker, } from '@flighthq/types/contract';
2
3
  import { parseTextureAtlasAsepriteJson } from './textureAtlasAsepriteParse';
3
4
  import { parseTextureAtlasLibgdxAtlas } from './textureAtlasLibgdxParse';
4
5
  import { parseTextureAtlasPackerJson } from './textureAtlasPackerParse';
5
6
  import { parseTextureAtlasStarlingXml } from './textureAtlasStarlingParse';
6
- let _registry = null;
7
7
  // Seeds the built-in formats.
8
8
  //
9
9
  // Unlike the sibling registry in `@flighthq/spritesheet-formats`, insertion order here is NOT
@@ -21,20 +21,20 @@ let _registry = null;
21
21
  function getRegistry() {
22
22
  if (_registry !== null)
23
23
  return _registry;
24
- _registry = new Map();
25
- _registry.set(TextureAtlasFormatKindAseprite, {
24
+ _registry = createKeyedTable('TextureAtlasFormat', 'Unclaimed');
25
+ bindTextureAtlasFormat(TextureAtlasFormatKindAseprite, {
26
26
  detect: detectAseprite,
27
27
  parse: (content, atlas) => parseTextureAtlasAsepriteJson(content, atlas),
28
28
  });
29
- _registry.set(TextureAtlasFormatKindLibgdxAtlas, {
29
+ bindTextureAtlasFormat(TextureAtlasFormatKindLibgdxAtlas, {
30
30
  detect: detectLibgdxAtlas,
31
31
  parse: (content, atlas) => parseTextureAtlasLibgdxAtlas(content, atlas),
32
32
  });
33
- _registry.set(TextureAtlasFormatKindStarling, {
33
+ bindTextureAtlasFormat(TextureAtlasFormatKindStarling, {
34
34
  detect: detectStarling,
35
35
  parse: (content, atlas, options) => parseTextureAtlasStarlingXml(content, atlas, options),
36
36
  });
37
- _registry.set(TextureAtlasFormatKindTexturePacker, {
37
+ bindTextureAtlasFormat(TextureAtlasFormatKindTexturePacker, {
38
38
  detect: detectTexturePacker,
39
39
  parse: (content, atlas, options) => parseTextureAtlasPackerJson(content, atlas, options),
40
40
  });
@@ -103,8 +103,8 @@ export function detectTextureAtlasFormat(content) {
103
103
  return null;
104
104
  if (content.trimStart() === '')
105
105
  return null;
106
- for (const [kind, entry] of getRegistry()) {
107
- if (entry.detect(content))
106
+ for (const [kind, registered] of getTextureAtlasFormatsInDetectionOrder()) {
107
+ if (registered.entry.detect(content))
108
108
  return kind;
109
109
  }
110
110
  return null;
@@ -114,7 +114,13 @@ export function detectTextureAtlasFormat(content) {
114
114
  * Useful for introspecting which formats are available, or for calling one format's detector or
115
115
  * parser directly without going through detection. */
116
116
  export function getTextureAtlasFormat(kind) {
117
- return getRegistry().get(kind) ?? null;
117
+ return getRegistryTableEntry(getRegistry(), kind)?.entry ?? null;
118
+ }
119
+ /** Return a sorted snapshot of every bound texture-atlas format kind. */
120
+ export function getTextureAtlasFormatKinds() {
121
+ const kinds = [];
122
+ getRegistryTableKeys(kinds, getRegistry());
123
+ return kinds;
118
124
  }
119
125
  /** Parse a texture-atlas descriptor into `atlas`, auto-detecting the format.
120
126
  *
@@ -126,10 +132,10 @@ export function parseTextureAtlas(content, atlas, formatKind, options) {
126
132
  const kind = formatKind ?? detectTextureAtlasFormat(content);
127
133
  if (kind === null || kind === undefined)
128
134
  return null;
129
- const entry = getRegistry().get(kind);
130
- if (entry === undefined)
135
+ const registered = getRegistryTableEntry(getRegistry(), kind);
136
+ if (registered === null)
131
137
  return null;
132
- return entry.parse(content, atlas, options ?? {});
138
+ return registered.entry.parse(content, atlas, options ?? {});
133
139
  }
134
140
  /** Register a custom texture-atlas format for `detectTextureAtlasFormat` and `parseTextureAtlas`.
135
141
  *
@@ -140,7 +146,29 @@ export function parseTextureAtlas(content, atlas, formatKind, options) {
140
146
  * detection does not depend on registration order today, and a broad custom detector is the one way
141
147
  * to reintroduce that dependence. */
142
148
  export function registerTextureAtlasFormat(kind, entry) {
143
- getRegistry().set(kind, entry);
149
+ bindTextureAtlasFormat(kind, entry);
150
+ }
151
+ /** Remove a format binding, including a caller override of a built-in kind. */
152
+ export function unregisterTextureAtlasFormat(kind) {
153
+ _registry = withoutRegistryTableEntry(getRegistry(), kind);
154
+ }
155
+ function bindTextureAtlasFormat(kind, entry) {
156
+ const registry = getRegistry();
157
+ const current = getRegistryTableEntry(registry, kind);
158
+ _registry = withRegistryTableEntry(registry, kind, {
159
+ entry,
160
+ order: current?.order ?? _nextFormatOrder++,
161
+ });
162
+ }
163
+ function getTextureAtlasFormatsInDetectionOrder() {
164
+ const formats = [];
165
+ for (const kind of getTextureAtlasFormatKinds()) {
166
+ const registered = getRegistryTableEntry(getRegistry(), kind);
167
+ if (registered !== null)
168
+ formats.push([kind, registered]);
169
+ }
170
+ formats.sort((a, b) => a[1].order - b[1].order);
171
+ return formats;
144
172
  }
145
173
  function firstFrame(frames) {
146
174
  if (Array.isArray(frames))
@@ -161,4 +189,6 @@ function readMetaApp(meta) {
161
189
  const app = meta.app;
162
190
  return typeof app === 'string' ? app : '';
163
191
  }
192
+ let _registry = null;
193
+ let _nextFormatOrder = 0;
164
194
  //# sourceMappingURL=textureAtlasDetect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textureAtlasDetect.js","sourceRoot":"","sources":["../src/textureAtlasDetect.ts"],"names":[],"mappings":"AACA,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,EACjC,8BAA8B,EAC9B,mCAAmC,GACpC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAU3E,IAAI,SAAS,GAA0B,IAAI,CAAC;AAE5C,8BAA8B;AAC9B,EAAE;AACF,8FAA8F;AAC9F,+EAA+E;AAC/E,kGAAkG;AAClG,oGAAoG;AACpG,mGAAmG;AACnG,iGAAiG;AACjG,uCAAuC;AACvC,EAAE;AACF,gGAAgG;AAChG,oGAAoG;AACpG,oGAAoG;AACpG,8BAA8B;AAC9B,SAAS,WAAW;IAClB,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACzC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,SAAS,CAAC,GAAG,CAAC,8BAA8B,EAAE;QAC5C,MAAM,EAAE,cAAc;QACtB,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC;KACzE,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,CAAC,iCAAiC,EAAE;QAC/C,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,4BAA4B,CAAC,OAAO,EAAE,KAAK,CAAC;KACxE,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,CAAC,8BAA8B,EAAE;QAC5C,MAAM,EAAE,cAAc;QACtB,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,4BAA4B,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;KAC1F,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,CAAC,mCAAmC,EAAE;QACjD,MAAM,EAAE,mBAAmB;QAC3B,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;KACzF,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACpC,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACpC,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACvF,OAAO,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpG,CAAC;AAED,oGAAoG;AACpG,sGAAsG;AACtG,yFAAyF;AACzF,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,8BAA8B,CAAC;AACvE,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,mCAAmC,CAAC;AAC5E,CAAC;AAED,iGAAiG;AACjG,oCAAoC;AACpC,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,MAAM,GAAG,GAAG,GAA2C,CAAC;IACxD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,8BAA8B,CAAC;IACpE,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,mCAAmC,CAAC;IAC5G,qGAAqG;IACrG,OAAO,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,mCAAmC,CAAC;AAC7G,CAAC;AAED;;;;;;;;;;;;8EAY8E;AAC9E,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;uDAGuD;AACvD,MAAM,UAAU,qBAAqB,CAAC,IAA4B;IAIhE,OAAO,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACzC,CAAC;AAED;;;;;gCAKgC;AAChC,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,KAAmB,EACnB,UAAmC,EACnC,OAAkC;IAElC,MAAM,IAAI,GAAG,UAAU,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;sCAOsC;AACtC,MAAM,UAAU,0BAA0B,CACxC,IAA4B,EAC5B,KAGC;IAED,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,MAAe;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAiC,CAAC;YAAE,OAAO,KAAK,CAAC;IACrF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAe;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAgC,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACvH,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,GAAG,GAAI,IAA0B,CAAC,GAAG,CAAC;IAC5C,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"textureAtlasDetect.js","sourceRoot":"","sources":["../src/textureAtlasDetect.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/textureatlas-formats",
3
- "version": "0.3.0",
3
+ "version": "0.3.1-next.1041.35b950c",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,9 +38,10 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/textureatlas": "0.3.0",
42
- "@flighthq/types": "0.3.0",
43
- "@flighthq/xml": "0.3.0"
41
+ "@flighthq/registry": "0.3.1-next.1041.35b950c",
42
+ "@flighthq/textureatlas": "0.3.1-next.1041.35b950c",
43
+ "@flighthq/types": "0.3.1-next.1041.35b950c",
44
+ "@flighthq/xml": "0.3.1-next.1041.35b950c"
44
45
  },
45
46
  "devDependencies": {
46
47
  "typescript": "^5.3.0"
@@ -11,8 +11,10 @@ import { describe, expect, it } from 'vitest';
11
11
  import {
12
12
  detectTextureAtlasFormat,
13
13
  getTextureAtlasFormat,
14
+ getTextureAtlasFormatKinds,
14
15
  parseTextureAtlas,
15
16
  registerTextureAtlasFormat,
17
+ unregisterTextureAtlasFormat,
16
18
  } from './textureAtlasDetect';
17
19
 
18
20
  const STARLING_XML = `<?xml version="1.0" encoding="UTF-8"?>
@@ -135,6 +137,24 @@ describe('getTextureAtlasFormat', () => {
135
137
  });
136
138
  });
137
139
 
140
+ describe('getTextureAtlasFormatKinds', () => {
141
+ it('enumerates sorted bound kinds and stops naming one after it is unregistered', () => {
142
+ const kind = 'zz.TestEnumeration' as TextureAtlasFormatKind;
143
+ registerTextureAtlasFormat(kind, { detect: () => false, parse: (_content, atlas) => atlas });
144
+ expect(getTextureAtlasFormatKinds()).toEqual([
145
+ TextureAtlasFormatKindAseprite,
146
+ TextureAtlasFormatKindLibgdxAtlas,
147
+ TextureAtlasFormatKindStarling,
148
+ TextureAtlasFormatKindTexturePacker,
149
+ kind,
150
+ ]);
151
+
152
+ unregisterTextureAtlasFormat(kind);
153
+
154
+ expect(getTextureAtlasFormatKinds()).not.toContain(kind);
155
+ });
156
+ });
157
+
138
158
  describe('never-throw policy under partial documents', () => {
139
159
  // The regression this pins: both JSON parsers guarded the JSON.parse failure and then dereferenced
140
160
  // `entry.frame` / `entry.spriteSourceSize` / `entry.sourceSize` blind one line later, so a document
@@ -264,10 +284,6 @@ describe('parseTextureAtlas', () => {
264
284
  describe('registerTextureAtlasFormat', () => {
265
285
  const CUSTOM = 'acme.Custom' as TextureAtlasFormatKind;
266
286
 
267
- // The registry is module state and there is no unregister, so the custom entry outlives each test.
268
- // That is safe here only because the kind is vendor-prefixed (it cannot collide with a built-in)
269
- // and its detector matches nothing but its own sentinel content — stated rather than assumed.
270
-
271
287
  it('makes a custom format detectable and parseable', () => {
272
288
  registerTextureAtlasFormat(CUSTOM, {
273
289
  detect: (content) => content.startsWith('ACME'),
@@ -279,6 +295,7 @@ describe('registerTextureAtlasFormat', () => {
279
295
  expect(detectTextureAtlasFormat('ACME v1')).toBe(CUSTOM);
280
296
  const atlas = createTextureAtlas();
281
297
  expect(parseTextureAtlas('ACME v1', atlas)).toBe(atlas);
298
+ unregisterTextureAtlasFormat(CUSTOM);
282
299
  expect(atlas.regions[0].name).toBe('custom');
283
300
  });
284
301
 
@@ -287,6 +304,7 @@ describe('registerTextureAtlasFormat', () => {
287
304
  const starling =
288
305
  '<TextureAtlas imagePath="a.png"><SubTexture name="a" x="0" y="0" width="1" height="1"/></TextureAtlas>';
289
306
  expect(detectTextureAtlasFormat(starling)).toBe(TextureAtlasFormatKindStarling);
307
+ unregisterTextureAtlasFormat(CUSTOM);
290
308
  });
291
309
  });
292
310
 
@@ -324,3 +342,18 @@ describe('registry', () => {
324
342
  }
325
343
  });
326
344
  });
345
+
346
+ describe('unregisterTextureAtlasFormat', () => {
347
+ it('removes a format from detection and direct resolution', () => {
348
+ const kind = 'acme.Removed' as TextureAtlasFormatKind;
349
+ registerTextureAtlasFormat(kind, {
350
+ detect: (content) => content.startsWith('REMOVED:'),
351
+ parse: (_content, atlas) => atlas,
352
+ });
353
+
354
+ unregisterTextureAtlasFormat(kind);
355
+
356
+ expect(detectTextureAtlasFormat('REMOVED: data')).toBeNull();
357
+ expect(getTextureAtlasFormat(kind)).toBeNull();
358
+ });
359
+ });