@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 +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/textureAtlasDetect.d.ts +4 -0
- package/dist/textureAtlasDetect.d.ts.map +1 -1
- package/dist/textureAtlasDetect.js +43 -13
- package/dist/textureAtlasDetect.js.map +1 -1
- package/package.json +5 -4
- package/src/textureAtlasDetect.test.ts +37 -4
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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":"
|
|
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 =
|
|
25
|
-
|
|
24
|
+
_registry = createKeyedTable('TextureAtlasFormat', 'Unclaimed');
|
|
25
|
+
bindTextureAtlasFormat(TextureAtlasFormatKindAseprite, {
|
|
26
26
|
detect: detectAseprite,
|
|
27
27
|
parse: (content, atlas) => parseTextureAtlasAsepriteJson(content, atlas),
|
|
28
28
|
});
|
|
29
|
-
|
|
29
|
+
bindTextureAtlasFormat(TextureAtlasFormatKindLibgdxAtlas, {
|
|
30
30
|
detect: detectLibgdxAtlas,
|
|
31
31
|
parse: (content, atlas) => parseTextureAtlasLibgdxAtlas(content, atlas),
|
|
32
32
|
});
|
|
33
|
-
|
|
33
|
+
bindTextureAtlasFormat(TextureAtlasFormatKindStarling, {
|
|
34
34
|
detect: detectStarling,
|
|
35
35
|
parse: (content, atlas, options) => parseTextureAtlasStarlingXml(content, atlas, options),
|
|
36
36
|
});
|
|
37
|
-
|
|
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,
|
|
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()
|
|
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
|
|
130
|
-
if (
|
|
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
|
-
|
|
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":"
|
|
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.
|
|
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/
|
|
42
|
-
"@flighthq/
|
|
43
|
-
"@flighthq/
|
|
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
|
+
});
|