@loaders.gl/obj 4.3.2 → 4.4.0-alpha.1

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.
@@ -0,0 +1,21 @@
1
+ import type { ArrowTable } from '@loaders.gl/schema';
2
+ /**
3
+ * Worker loader for OBJ - Point Cloud Data
4
+ */
5
+ export declare const OBJArrowLoader: {
6
+ readonly dataType: ArrowTable;
7
+ readonly batchType: never;
8
+ readonly worker: false;
9
+ readonly parse: (arrayBuffer: ArrayBuffer) => Promise<ArrowTable>;
10
+ readonly version: any;
11
+ readonly testText: (text: string) => boolean;
12
+ readonly options: {
13
+ readonly obj: {};
14
+ };
15
+ readonly name: "OBJ";
16
+ readonly id: "obj";
17
+ readonly module: "obj";
18
+ readonly extensions: ["obj"];
19
+ readonly mimeTypes: ["text/plain"];
20
+ };
21
+ //# sourceMappingURL=obj-arrow-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obj-arrow-loader.d.ts","sourceRoot":"","sources":["../src/obj-arrow-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAMnD;;GAEG;AACH,eAAO,MAAM,cAAc;uBAEI,UAAU;wBACpB,KAAK;;kCAEG,WAAW;;;;;;;;;;;CAMkC,CAAC"}
@@ -0,0 +1,21 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { OBJWorkerLoader } from "./obj-loader.js";
5
+ import { convertMeshToTable } from '@loaders.gl/schema-utils';
6
+ import { parseOBJ } from "./lib/parse-obj.js";
7
+ /**
8
+ * Worker loader for OBJ - Point Cloud Data
9
+ */
10
+ export const OBJArrowLoader = {
11
+ ...OBJWorkerLoader,
12
+ dataType: null,
13
+ batchType: null,
14
+ worker: false,
15
+ parse: async (arrayBuffer) => {
16
+ const text = new TextDecoder().decode(arrayBuffer);
17
+ const mesh = parseOBJ(text);
18
+ const arrowTable = convertMeshToTable(mesh, 'arrow-table');
19
+ return arrowTable;
20
+ }
21
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The OBJ geometry format
3
+ */
4
+ export declare const OBJFormat: {
5
+ readonly name: "OBJ";
6
+ readonly id: "obj";
7
+ readonly module: "obj";
8
+ readonly extensions: ["obj"];
9
+ readonly mimeTypes: ["text/plain"];
10
+ };
11
+ //# sourceMappingURL=obj-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obj-format.d.ts","sourceRoot":"","sources":["../src/obj-format.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;CAMK,CAAC"}
@@ -0,0 +1,13 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /**
5
+ * The OBJ geometry format
6
+ */
7
+ export const OBJFormat = {
8
+ name: 'OBJ',
9
+ id: 'obj',
10
+ module: 'obj',
11
+ extensions: ['obj'],
12
+ mimeTypes: ['text/plain']
13
+ };
@@ -1,5 +1,5 @@
1
1
  import type { LoaderOptions } from '@loaders.gl/loader-utils';
2
- import { Mesh } from '@loaders.gl/schema';
2
+ import type { Mesh } from '@loaders.gl/schema';
3
3
  export type OBJLoaderOptions = LoaderOptions & {
4
4
  obj?: {
5
5
  /** Override the URL to the worker bundle (by default loads from unpkg.com) */
@@ -9,21 +9,41 @@ export type OBJLoaderOptions = LoaderOptions & {
9
9
  /**
10
10
  * Worker loader for the OBJ geometry format
11
11
  */
12
- export declare const OBJLoader: {
12
+ export declare const OBJWorkerLoader: {
13
13
  readonly dataType: Mesh;
14
14
  readonly batchType: never;
15
+ readonly version: any;
16
+ readonly worker: true;
17
+ readonly testText: typeof testOBJFile;
18
+ readonly options: {
19
+ readonly obj: {};
20
+ };
15
21
  readonly name: "OBJ";
16
22
  readonly id: "obj";
17
23
  readonly module: "obj";
18
- readonly version: any;
19
- readonly worker: true;
20
24
  readonly extensions: ["obj"];
21
25
  readonly mimeTypes: ["text/plain"];
26
+ };
27
+ declare function testOBJFile(text: string): boolean;
28
+ /**
29
+ * Loader for the OBJ geometry format
30
+ */
31
+ export declare const OBJLoader: {
32
+ readonly parse: (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) => Promise<Mesh>;
33
+ readonly parseTextSync: (text: string, options?: OBJLoaderOptions) => Mesh;
34
+ readonly dataType: Mesh;
35
+ readonly batchType: never;
36
+ readonly version: any;
37
+ readonly worker: true;
22
38
  readonly testText: typeof testOBJFile;
23
39
  readonly options: {
24
40
  readonly obj: {};
25
41
  };
42
+ readonly name: "OBJ";
43
+ readonly id: "obj";
44
+ readonly module: "obj";
45
+ readonly extensions: ["obj"];
46
+ readonly mimeTypes: ["text/plain"];
26
47
  };
27
- declare function testOBJFile(text: string): boolean;
28
48
  export {};
29
49
  //# sourceMappingURL=obj-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"obj-loader.d.ts","sourceRoot":"","sources":["../src/obj-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAMxC,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;uBACS,IAAI;wBACd,KAAK;;;;;;;;;;;;CAagC,CAAC;AAE3D,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1C"}
1
+ {"version":3,"file":"obj-loader.d.ts","sourceRoot":"","sources":["../src/obj-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAQ7C,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;uBAGG,IAAI;wBACd,KAAK;;;;;;;;;;;;CAOgC,CAAC;AAE3D,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1C;AAID;;GAEG;AACH,eAAO,MAAM,SAAS;kCAEO,WAAW,YAAY,gBAAgB;mCAE5C,MAAM,YAAY,gBAAgB;uBAxB3B,IAAI;wBACd,KAAK;;;;;;;;;;;;CAwB0C,CAAC"}
@@ -1,19 +1,20 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { OBJFormat } from "./obj-format.js";
5
+ import { parseOBJ } from "./lib/parse-obj.js";
1
6
  // __VERSION__ is injected by babel-plugin-version-inline
2
7
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
3
- const VERSION = typeof "4.3.1" !== 'undefined' ? "4.3.1" : 'latest';
8
+ const VERSION = typeof "4.4.0-alpha.0" !== 'undefined' ? "4.4.0-alpha.0" : 'latest';
4
9
  /**
5
10
  * Worker loader for the OBJ geometry format
6
11
  */
7
- export const OBJLoader = {
12
+ export const OBJWorkerLoader = {
13
+ ...OBJFormat,
8
14
  dataType: null,
9
15
  batchType: null,
10
- name: 'OBJ',
11
- id: 'obj',
12
- module: 'obj',
13
16
  version: VERSION,
14
17
  worker: true,
15
- extensions: ['obj'],
16
- mimeTypes: ['text/plain'],
17
18
  testText: testOBJFile,
18
19
  options: {
19
20
  obj: {}
@@ -23,3 +24,12 @@ function testOBJFile(text) {
23
24
  // TODO - There could be comment line first
24
25
  return text[0] === 'v';
25
26
  }
27
+ // OBJLoader
28
+ /**
29
+ * Loader for the OBJ geometry format
30
+ */
31
+ export const OBJLoader = {
32
+ ...OBJWorkerLoader,
33
+ parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),
34
+ parseTextSync: (text, options) => parseOBJ(text, options)
35
+ };
@@ -199,7 +199,16 @@
199
199
  return await parser(data, { ...options }, context, loader);
200
200
  }
201
201
 
202
- // ../schema/src/lib/table/simple-table/data-type.ts
202
+ // src/obj-format.ts
203
+ var OBJFormat = {
204
+ name: "OBJ",
205
+ id: "obj",
206
+ module: "obj",
207
+ extensions: ["obj"],
208
+ mimeTypes: ["text/plain"]
209
+ };
210
+
211
+ // ../schema-utils/src/lib/schema/data-type.ts
203
212
  function getDataTypeFromValue(value, defaultNumberType = "float32") {
204
213
  if (value instanceof Date) {
205
214
  return "date-millisecond";
@@ -250,7 +259,7 @@
250
259
  }
251
260
  }
252
261
 
253
- // ../schema/src/lib/mesh/mesh-utils.ts
262
+ // ../schema-utils/src/lib/mesh/mesh-utils.ts
254
263
  function getMeshBoundingBox(attributes) {
255
264
  let minX = Infinity;
256
265
  let minY = Infinity;
@@ -741,17 +750,13 @@
741
750
  }
742
751
 
743
752
  // src/obj-loader.ts
744
- var VERSION = true ? "4.3.1" : "latest";
745
- var OBJLoader = {
753
+ var VERSION = true ? "4.4.0-alpha.0" : "latest";
754
+ var OBJWorkerLoader = {
755
+ ...OBJFormat,
746
756
  dataType: null,
747
757
  batchType: null,
748
- name: "OBJ",
749
- id: "obj",
750
- module: "obj",
751
758
  version: VERSION,
752
759
  worker: true,
753
- extensions: ["obj"],
754
- mimeTypes: ["text/plain"],
755
760
  testText: testOBJFile,
756
761
  options: {
757
762
  obj: {}
@@ -760,106 +765,12 @@
760
765
  function testOBJFile(text) {
761
766
  return text[0] === "v";
762
767
  }
763
-
764
- // src/lib/parse-mtl.ts
765
- var DELIMITER_PATTERN = /\s+/;
766
- function parseMTL(text, options) {
767
- const materials = [];
768
- let currentMaterial = { name: "placeholder" };
769
- const lines = text.split("\n");
770
- for (let line of lines) {
771
- line = line.trim();
772
- if (line.length === 0 || line.charAt(0) === "#") {
773
- continue;
774
- }
775
- const pos = line.indexOf(" ");
776
- let key = pos >= 0 ? line.substring(0, pos) : line;
777
- key = key.toLowerCase();
778
- let value = pos >= 0 ? line.substring(pos + 1) : "";
779
- value = value.trim();
780
- switch (key) {
781
- case "newmtl":
782
- currentMaterial = { name: value };
783
- materials.push(currentMaterial);
784
- break;
785
- case "ka":
786
- currentMaterial.ambientColor = parseColor(value);
787
- break;
788
- case "kd":
789
- currentMaterial.diffuseColor = parseColor(value);
790
- break;
791
- case "map_kd":
792
- currentMaterial.diffuseTextureUrl = value;
793
- break;
794
- case "ks":
795
- currentMaterial.specularColor = parseColor(value);
796
- break;
797
- case "map_ks":
798
- currentMaterial.specularTextureUrl = value;
799
- break;
800
- case "ke":
801
- currentMaterial.emissiveColor = parseColor(value);
802
- break;
803
- case "map_ke":
804
- currentMaterial.emissiveTextureUrl = value;
805
- break;
806
- case "ns":
807
- currentMaterial.shininess = parseFloat(value);
808
- break;
809
- case "map_ns":
810
- break;
811
- case "ni":
812
- currentMaterial.refraction = parseFloat(value);
813
- break;
814
- case "illum":
815
- currentMaterial.illumination = parseFloat(value);
816
- break;
817
- default:
818
- break;
819
- }
820
- }
821
- return materials;
822
- }
823
- function parseColor(value, options) {
824
- const rgb = value.split(DELIMITER_PATTERN, 3);
825
- const color = [
826
- parseFloat(rgb[0]),
827
- parseFloat(rgb[1]),
828
- parseFloat(rgb[2])
829
- ];
830
- return color;
831
- }
832
-
833
- // src/mtl-loader.ts
834
- var VERSION2 = true ? "4.3.1" : "latest";
835
- var MTLLoader = {
836
- dataType: null,
837
- batchType: null,
838
- name: "MTL",
839
- id: "mtl",
840
- module: "mtl",
841
- version: VERSION2,
842
- worker: true,
843
- extensions: ["mtl"],
844
- mimeTypes: ["text/plain"],
845
- testText: (text) => text.includes("newmtl"),
846
- options: {
847
- mtl: {}
848
- }
849
- };
850
-
851
- // src/index.ts
852
- var OBJLoader2 = {
853
- ...OBJLoader,
768
+ var OBJLoader = {
769
+ ...OBJWorkerLoader,
854
770
  parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),
855
771
  parseTextSync: (text, options) => parseOBJ(text, options)
856
772
  };
857
- var MTLLoader2 = {
858
- ...MTLLoader,
859
- parse: async (arrayBuffer, options) => parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
860
- parseTextSync: (text, options) => parseMTL(text, options?.mtl)
861
- };
862
773
 
863
774
  // src/workers/obj-worker.ts
864
- createLoaderWorker(OBJLoader2);
775
+ createLoaderWorker(OBJLoader);
865
776
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/obj",
3
- "version": "4.3.2",
3
+ "version": "4.4.0-alpha.1",
4
4
  "description": "Framework-independent loader for the OBJ format",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -42,11 +42,12 @@
42
42
  "build-worker": "esbuild src/workers/obj-worker.ts --bundle --outfile=dist/obj-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
43
43
  },
44
44
  "dependencies": {
45
- "@loaders.gl/loader-utils": "4.3.2",
46
- "@loaders.gl/schema": "4.3.2"
45
+ "@loaders.gl/loader-utils": "4.4.0-alpha.1",
46
+ "@loaders.gl/schema": "4.4.0-alpha.1",
47
+ "@loaders.gl/schema-utils": "4.4.0-alpha.1"
47
48
  },
48
49
  "peerDependencies": {
49
- "@loaders.gl/core": "^4.3.0"
50
+ "@loaders.gl/core": "4.4.0-alpha.0"
50
51
  },
51
- "gitHead": "b4203b8703f64a38d6f79a3113bc7bb51d45c93a"
52
+ "gitHead": "f1732de45907bd500bf4eedb4803beca8bf4bfb0"
52
53
  }
package/src/index.ts CHANGED
@@ -2,41 +2,15 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright vis.gl contributors
4
4
 
5
- import type {LoaderWithParser} from '@loaders.gl/loader-utils';
6
- import type {Mesh} from '@loaders.gl/schema';
7
- import {parseOBJ} from './lib/parse-obj';
8
- import type {OBJLoaderOptions} from './obj-loader';
9
- import {OBJLoader as OBJWorkerLoader} from './obj-loader';
10
-
11
- import type {MTLMaterial} from './lib/parse-mtl';
12
- import {parseMTL} from './lib/parse-mtl';
13
- import type {MTLLoaderOptions} from './mtl-loader';
14
- import {MTLLoader as MTLWorkerLoader} from './mtl-loader';
15
-
16
5
  // OBJLoader
17
6
 
7
+ export {OBJFormat} from './obj-format';
18
8
  export type {OBJLoaderOptions} from './obj-loader';
19
-
20
- export {OBJWorkerLoader};
21
-
22
- /**
23
- * Loader for the OBJ geometry format
24
- */
25
- export const OBJLoader = {
26
- ...OBJWorkerLoader,
27
- parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>
28
- parseOBJ(new TextDecoder().decode(arrayBuffer), options),
29
- parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)
30
- } as const satisfies LoaderWithParser<Mesh, never, OBJLoaderOptions>;
9
+ export {OBJWorkerLoader, OBJLoader} from './obj-loader';
10
+ export {OBJArrowLoader} from './obj-arrow-loader';
31
11
 
32
12
  // MTLLoader
33
13
 
34
- /**
35
- * Loader for the MTL material format
36
- */
37
- export const MTLLoader = {
38
- ...MTLWorkerLoader,
39
- parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>
40
- parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
41
- parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)
42
- } as const satisfies LoaderWithParser<MTLMaterial[], never, MTLLoaderOptions>;
14
+ export {MTLFormat} from './mtl-format';
15
+ export type {MTLLoaderOptions} from './mtl-loader';
16
+ export {MTLWorkerLoader, MTLLoader} from './mtl-loader';
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {Schema, SchemaMetadata, Field, MeshAttribute} from '@loaders.gl/schema';
6
- import {getDataTypeFromArray} from '@loaders.gl/schema';
6
+ import {getDataTypeFromArray} from '@loaders.gl/schema-utils';
7
7
 
8
8
  /** Get Mesh Schema */
9
9
  export function getOBJSchema(
@@ -1,9 +1,9 @@
1
1
  import type {Mesh, MeshAttributes} from '@loaders.gl/schema';
2
- import {getMeshBoundingBox} from '@loaders.gl/schema';
2
+ import {getMeshBoundingBox} from '@loaders.gl/schema-utils';
3
3
  import {parseOBJMeshes} from './parse-obj-meshes';
4
4
  import {getOBJSchema} from './get-obj-schema';
5
5
 
6
- export function parseOBJ(text, options): Mesh {
6
+ export function parseOBJ(text: string, options?): Mesh {
7
7
  const {meshes} = parseOBJMeshes(text);
8
8
 
9
9
  // @ts-expect-error
@@ -0,0 +1,17 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {Format} from '@loaders.gl/loader-utils';
6
+
7
+ /**
8
+ * The MTL material format
9
+ * A Wavefront .mtl file specifying materials
10
+ */
11
+ export const MTLFormat = {
12
+ name: 'MTL',
13
+ id: 'mtl',
14
+ module: 'mtl',
15
+ extensions: ['mtl'],
16
+ mimeTypes: ['text/plain']
17
+ } as const satisfies Format;
package/src/mtl-loader.ts CHANGED
@@ -1,8 +1,11 @@
1
1
  // loaders.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';
4
+
5
+ import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
5
6
  import type {MTLMaterial, ParseMTLOptions} from './lib/parse-mtl';
7
+ import {parseMTL} from './lib/parse-mtl';
8
+ import {MTLFormat} from './mtl-format';
6
9
 
7
10
  // __VERSION__ is injected by babel-plugin-version-inline
8
11
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
@@ -16,19 +19,28 @@ export type MTLLoaderOptions = LoaderOptions & {
16
19
  * Loader for the MTL material format
17
20
  * Parses a Wavefront .mtl file specifying materials
18
21
  */
19
- export const MTLLoader = {
22
+ export const MTLWorkerLoader = {
23
+ ...MTLFormat,
24
+
20
25
  dataType: null as unknown as MTLMaterial[],
21
26
  batchType: null as never,
22
27
 
23
- name: 'MTL',
24
- id: 'mtl',
25
- module: 'mtl',
26
28
  version: VERSION,
27
29
  worker: true,
28
- extensions: ['mtl'],
29
- mimeTypes: ['text/plain'],
30
30
  testText: (text: string): boolean => text.includes('newmtl'),
31
31
  options: {
32
32
  mtl: {}
33
33
  }
34
34
  } as const satisfies Loader<MTLMaterial[], never, LoaderOptions>;
35
+
36
+ // MTLLoader
37
+
38
+ /**
39
+ * Loader for the MTL material format
40
+ */
41
+ export const MTLLoader = {
42
+ ...MTLWorkerLoader,
43
+ parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>
44
+ parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
45
+ parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)
46
+ } as const satisfies LoaderWithParser<MTLMaterial[], never, MTLLoaderOptions>;
@@ -0,0 +1,26 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {LoaderWithParser} from '@loaders.gl/loader-utils';
6
+ import type {ArrowTable} from '@loaders.gl/schema';
7
+
8
+ import {OBJLoaderOptions, OBJWorkerLoader} from './obj-loader';
9
+ import {convertMeshToTable} from '@loaders.gl/schema-utils';
10
+ import {parseOBJ} from './lib/parse-obj';
11
+
12
+ /**
13
+ * Worker loader for OBJ - Point Cloud Data
14
+ */
15
+ export const OBJArrowLoader = {
16
+ ...OBJWorkerLoader,
17
+ dataType: null as unknown as ArrowTable,
18
+ batchType: null as never,
19
+ worker: false,
20
+ parse: async (arrayBuffer: ArrayBuffer) => {
21
+ const text = new TextDecoder().decode(arrayBuffer);
22
+ const mesh = parseOBJ(text);
23
+ const arrowTable = convertMeshToTable(mesh, 'arrow-table');
24
+ return arrowTable;
25
+ }
26
+ } as const satisfies LoaderWithParser<ArrowTable, never, OBJLoaderOptions>;
@@ -0,0 +1,16 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {Format} from '@loaders.gl/loader-utils';
6
+
7
+ /**
8
+ * The OBJ geometry format
9
+ */
10
+ export const OBJFormat = {
11
+ name: 'OBJ',
12
+ id: 'obj',
13
+ module: 'obj',
14
+ extensions: ['obj'],
15
+ mimeTypes: ['text/plain']
16
+ } as const satisfies Format;
package/src/obj-loader.ts CHANGED
@@ -1,5 +1,11 @@
1
- import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';
2
- import {Mesh} from '@loaders.gl/schema';
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {Loader, LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';
6
+ import type {Mesh} from '@loaders.gl/schema';
7
+ import {OBJFormat} from './obj-format';
8
+ import {parseOBJ} from './lib/parse-obj';
3
9
 
4
10
  // __VERSION__ is injected by babel-plugin-version-inline
5
11
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
@@ -15,17 +21,13 @@ export type OBJLoaderOptions = LoaderOptions & {
15
21
  /**
16
22
  * Worker loader for the OBJ geometry format
17
23
  */
18
- export const OBJLoader = {
24
+ export const OBJWorkerLoader = {
25
+ ...OBJFormat,
26
+
19
27
  dataType: null as unknown as Mesh,
20
28
  batchType: null as never,
21
-
22
- name: 'OBJ',
23
- id: 'obj',
24
- module: 'obj',
25
29
  version: VERSION,
26
30
  worker: true,
27
- extensions: ['obj'],
28
- mimeTypes: ['text/plain'],
29
31
  testText: testOBJFile,
30
32
  options: {
31
33
  obj: {}
@@ -36,3 +38,15 @@ function testOBJFile(text: string): boolean {
36
38
  // TODO - There could be comment line first
37
39
  return text[0] === 'v';
38
40
  }
41
+
42
+ // OBJLoader
43
+
44
+ /**
45
+ * Loader for the OBJ geometry format
46
+ */
47
+ export const OBJLoader = {
48
+ ...OBJWorkerLoader,
49
+ parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>
50
+ parseOBJ(new TextDecoder().decode(arrayBuffer), options),
51
+ parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)
52
+ } as const satisfies LoaderWithParser<Mesh, never, OBJLoaderOptions>;