From 4b6657c2f32d1c54f080bc9dd1448fe656862667 Mon Sep 17 00:00:00 2001 From: Ben Coleman Date: Sun, 24 Jun 2018 18:35:06 +0100 Subject: [PATCH 1/4] New type definitions for obj-file-parser package --- types/obj-file-parser/index.d.ts | 36 +++++++++++++ .../obj-file-parser/obj-file-parser-tests.ts | 51 +++++++++++++++++++ types/obj-file-parser/tsconfig.json | 22 ++++++++ types/obj-file-parser/tslint.json | 1 + 4 files changed, 110 insertions(+) create mode 100644 types/obj-file-parser/index.d.ts create mode 100644 types/obj-file-parser/obj-file-parser-tests.ts create mode 100644 types/obj-file-parser/tsconfig.json create mode 100644 types/obj-file-parser/tslint.json diff --git a/types/obj-file-parser/index.d.ts b/types/obj-file-parser/index.d.ts new file mode 100644 index 0000000000..a60b967c7c --- /dev/null +++ b/types/obj-file-parser/index.d.ts @@ -0,0 +1,36 @@ +// Type definitions for obj-file-parser 0.5 +// Project: https://github.com/WesUnwin/obj-file-parser#readme +// Definitions by: Ben Coleman https://github.com/benc-uk +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + + +export default class Parser { + constructor(fileContents: any, defaultModelName?: any); + parse(): ObjFile; +} + +export interface ObjFile { + models: ObjModel[]; + materialLibraries: any[]; +} + +export class ObjModel { + name: string; + vertices: {x: number, y: number, z: number}[]; + textureCoords: {u: number, v: number, w: number}[]; + vertexNormals: {x: number, y: number, z: number}[]; + faces: Face[]; +} + +export class Face { + material: any; + group: string; + smoothingGroup: number; + vertices: FaceVertex[] +} + +export class FaceVertex { + vertexIndex: number; + textureCoordsIndex: number; + vertexNormalIndex: number; +} diff --git a/types/obj-file-parser/obj-file-parser-tests.ts b/types/obj-file-parser/obj-file-parser-tests.ts new file mode 100644 index 0000000000..b123098bfa --- /dev/null +++ b/types/obj-file-parser/obj-file-parser-tests.ts @@ -0,0 +1,51 @@ +import ObjFileParser, { ObjModel, ObjFile } from 'obj-file-parser' + +let testObjFile = ` +# cube.obj +# Example object + +g cube + +v 0.0 0.0 0.0 +v 0.0 0.0 1.0 +v 0.0 1.0 0.0 +v 0.0 1.0 1.0 +v 1.0 0.0 0.0 +v 1.0 0.0 1.0 +v 1.0 1.0 0.0 +v 1.0 1.0 1.0 + +vn 0.0 0.0 1.0 +vn 0.0 0.0 -1.0 +vn 0.0 1.0 0.0 +vn 0.0 -1.0 0.0 +vn 1.0 0.0 0.0 +vn -1.0 0.0 0.0 + +g cube-faces + +f 1//2 7//2 5//2 +f 1//2 3//2 7//2 +f 1//6 4//6 3//6 +f 1//6 2//6 4//6 +f 3//3 8//3 7//3 +f 3//3 4//3 8//3 +f 5//5 7//5 8//5 +f 5//5 8//5 6//5 +f 1//4 5//4 6//4 +f 1//4 6//4 2//4 +f 2//1 6//1 8//1 +f 2//1 8//1 4//1` + +// Create parser and load test OBJ +let parser = new ObjFileParser(testObjFile, 'test'); +let file = parser.parse(); +let model = file.models[0]; + +let name = model.name; // Prints "test" +let face = model.faces[0] // Prints faces object + +// gets { vertexIndex: 1, textureCoordsIndex: 0, vertexNormalIndex: 2 } +let vert = face.vertices[0]; +// gets { x: 0, y: 0, z: 1 } +let vertPoints = model.vertices[vert.vertexIndex]; \ No newline at end of file diff --git a/types/obj-file-parser/tsconfig.json b/types/obj-file-parser/tsconfig.json new file mode 100644 index 0000000000..53e324ae32 --- /dev/null +++ b/types/obj-file-parser/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "obj-file-parser-tests.ts" + ] +} diff --git a/types/obj-file-parser/tslint.json b/types/obj-file-parser/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/obj-file-parser/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } From 0e527870dbbfa5cc3dbafb08aecc1015e607b6d4 Mon Sep 17 00:00:00 2001 From: Ben Coleman Date: Sun, 24 Jun 2018 19:10:07 +0100 Subject: [PATCH 2/4] Fixed linting errors --- types/obj-file-parser/index.d.ts | 15 +++---- .../obj-file-parser/obj-file-parser-tests.ts | 44 +++++++++---------- types/obj-file-parser/tsconfig.json | 1 + 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/types/obj-file-parser/index.d.ts b/types/obj-file-parser/index.d.ts index a60b967c7c..b8eb270b5a 100644 --- a/types/obj-file-parser/index.d.ts +++ b/types/obj-file-parser/index.d.ts @@ -1,9 +1,8 @@ // Type definitions for obj-file-parser 0.5 -// Project: https://github.com/WesUnwin/obj-file-parser#readme -// Definitions by: Ben Coleman https://github.com/benc-uk +// Project: https://github.com/wesunwin/obj-file-parser +// Definitions by: Ben Coleman // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - export default class Parser { constructor(fileContents: any, defaultModelName?: any); parse(): ObjFile; @@ -16,17 +15,17 @@ export interface ObjFile { export class ObjModel { name: string; - vertices: {x: number, y: number, z: number}[]; - textureCoords: {u: number, v: number, w: number}[]; - vertexNormals: {x: number, y: number, z: number}[]; + vertices: number[]; + textureCoords: number[]; + vertexNormals: number[]; faces: Face[]; -} +} export class Face { material: any; group: string; smoothingGroup: number; - vertices: FaceVertex[] + vertices: FaceVertex[]; } export class FaceVertex { diff --git a/types/obj-file-parser/obj-file-parser-tests.ts b/types/obj-file-parser/obj-file-parser-tests.ts index b123098bfa..6dbf5f255a 100644 --- a/types/obj-file-parser/obj-file-parser-tests.ts +++ b/types/obj-file-parser/obj-file-parser-tests.ts @@ -1,11 +1,11 @@ -import ObjFileParser, { ObjModel, ObjFile } from 'obj-file-parser' +import ObjFileParser, { ObjModel, ObjFile } from 'obj-file-parser'; -let testObjFile = ` +const testObjFile = ` # cube.obj # Example object g cube - + v 0.0 0.0 0.0 v 0.0 0.0 1.0 v 0.0 1.0 0.0 @@ -21,31 +21,31 @@ vn 0.0 1.0 0.0 vn 0.0 -1.0 0.0 vn 1.0 0.0 0.0 vn -1.0 0.0 0.0 - + g cube-faces f 1//2 7//2 5//2 -f 1//2 3//2 7//2 -f 1//6 4//6 3//6 -f 1//6 2//6 4//6 -f 3//3 8//3 7//3 -f 3//3 4//3 8//3 -f 5//5 7//5 8//5 -f 5//5 8//5 6//5 -f 1//4 5//4 6//4 -f 1//4 6//4 2//4 -f 2//1 6//1 8//1 -f 2//1 8//1 4//1` +f 1//2 3//2 7//2 +f 1//6 4//6 3//6 +f 1//6 2//6 4//6 +f 3//3 8//3 7//3 +f 3//3 4//3 8//3 +f 5//5 7//5 8//5 +f 5//5 8//5 6//5 +f 1//4 5//4 6//4 +f 1//4 6//4 2//4 +f 2//1 6//1 8//1 +f 2//1 8//1 4//1`; // Create parser and load test OBJ -let parser = new ObjFileParser(testObjFile, 'test'); -let file = parser.parse(); -let model = file.models[0]; +const parser = new ObjFileParser(testObjFile, 'test'); +const file = parser.parse(); +const model = file.models[0]; -let name = model.name; // Prints "test" -let face = model.faces[0] // Prints faces object +const name = model.name; // Prints "test" +const face = model.faces[0]; // Prints faces object // gets { vertexIndex: 1, textureCoordsIndex: 0, vertexNormalIndex: 2 } -let vert = face.vertices[0]; +const vert = face.vertices[0]; // gets { x: 0, y: 0, z: 1 } -let vertPoints = model.vertices[vert.vertexIndex]; \ No newline at end of file +const vertPoints = model.vertices[vert.vertexIndex]; diff --git a/types/obj-file-parser/tsconfig.json b/types/obj-file-parser/tsconfig.json index 53e324ae32..22abf3d224 100644 --- a/types/obj-file-parser/tsconfig.json +++ b/types/obj-file-parser/tsconfig.json @@ -7,6 +7,7 @@ "noImplicitAny": true, "noImplicitThis": true, "strictNullChecks": true, + "strictFunctionTypes": true, "baseUrl": "../", "typeRoots": [ "../" From 9d1ae4c65e4d393f4fbe2c57000c4dee78d46e0b Mon Sep 17 00:00:00 2001 From: Ben Coleman Date: Sun, 24 Jun 2018 21:54:35 +0100 Subject: [PATCH 3/4] Fixed silly bug and better tests --- types/obj-file-parser/index.d.ts | 18 +++++++++++--- .../obj-file-parser/obj-file-parser-tests.ts | 24 +++++++++++-------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/types/obj-file-parser/index.d.ts b/types/obj-file-parser/index.d.ts index b8eb270b5a..1f33d32477 100644 --- a/types/obj-file-parser/index.d.ts +++ b/types/obj-file-parser/index.d.ts @@ -15,9 +15,9 @@ export interface ObjFile { export class ObjModel { name: string; - vertices: number[]; - textureCoords: number[]; - vertexNormals: number[]; + vertices: Vertex[]; + textureCoords: VertexTexture[]; + vertexNormals: Vertex[]; faces: Face[]; } @@ -33,3 +33,15 @@ export class FaceVertex { textureCoordsIndex: number; vertexNormalIndex: number; } + +export class Vertex { + x: number; + y: number; + z: number; +} + +export class VertexTexture { + u: number; + v: number; + w: number; +} diff --git a/types/obj-file-parser/obj-file-parser-tests.ts b/types/obj-file-parser/obj-file-parser-tests.ts index 6dbf5f255a..b0459b3c32 100644 --- a/types/obj-file-parser/obj-file-parser-tests.ts +++ b/types/obj-file-parser/obj-file-parser-tests.ts @@ -1,10 +1,10 @@ -import ObjFileParser, { ObjModel, ObjFile } from 'obj-file-parser'; +import ObjFileParser, { ObjModel, ObjFile, Vertex, Face, FaceVertex } from 'obj-file-parser'; const testObjFile = ` # cube.obj # Example object -g cube +o cube v 0.0 0.0 0.0 v 0.0 0.0 1.0 @@ -40,12 +40,16 @@ f 2//1 8//1 4//1`; // Create parser and load test OBJ const parser = new ObjFileParser(testObjFile, 'test'); const file = parser.parse(); -const model = file.models[0]; -const name = model.name; // Prints "test" -const face = model.faces[0]; // Prints faces object - -// gets { vertexIndex: 1, textureCoordsIndex: 0, vertexNormalIndex: 2 } -const vert = face.vertices[0]; -// gets { x: 0, y: 0, z: 1 } -const vertPoints = model.vertices[vert.vertexIndex]; +// get first model in file +const model: ObjModel = file.models[0]; +// gets object name +const name: string = model.name; +// gets first face in model +const face: Face = model.faces[0]; +// gets first vertex in face +const faceVert: FaceVertex = face.vertices[0]; +// gets vertex +const vertPoints: Vertex = model.vertices[faceVert.vertexIndex]; +// gets x value of vertex +const x = vertPoints.x; From d1e2fcdf69db6987b9d558f134b51c05cbbf51d8 Mon Sep 17 00:00:00 2001 From: Ben Coleman Date: Mon, 25 Jun 2018 09:13:16 +0100 Subject: [PATCH 4/4] Changed to class module template and default export --- types/obj-file-parser/index.d.ts | 82 ++++++++++--------- .../obj-file-parser/obj-file-parser-tests.ts | 10 +-- 2 files changed, 49 insertions(+), 43 deletions(-) diff --git a/types/obj-file-parser/index.d.ts b/types/obj-file-parser/index.d.ts index 1f33d32477..fcd48013f8 100644 --- a/types/obj-file-parser/index.d.ts +++ b/types/obj-file-parser/index.d.ts @@ -3,45 +3,53 @@ // Definitions by: Ben Coleman // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -export default class Parser { +export as namespace ObjFileParser; + +/* Class module */ +declare class ObjFileParser { constructor(fileContents: any, defaultModelName?: any); - parse(): ObjFile; + parse(): ObjFileParser.ObjFile; } -export interface ObjFile { - models: ObjModel[]; - materialLibraries: any[]; +/* Additional exported interfaces */ +declare namespace ObjFileParser { + interface ObjFile { + models: ObjModel[]; + materialLibraries: any[]; + } + + interface ObjModel { + name: string; + vertices: Vertex[]; + textureCoords: VertexTexture[]; + vertexNormals: Vertex[]; + faces: Face[]; + } + + interface Face { + material: any; + group: string; + smoothingGroup: number; + vertices: FaceVertex[]; + } + + interface FaceVertex { + vertexIndex: number; + textureCoordsIndex: number; + vertexNormalIndex: number; + } + + interface Vertex { + x: number; + y: number; + z: number; + } + + interface VertexTexture { + u: number; + v: number; + w: number; + } } -export class ObjModel { - name: string; - vertices: Vertex[]; - textureCoords: VertexTexture[]; - vertexNormals: Vertex[]; - faces: Face[]; -} - -export class Face { - material: any; - group: string; - smoothingGroup: number; - vertices: FaceVertex[]; -} - -export class FaceVertex { - vertexIndex: number; - textureCoordsIndex: number; - vertexNormalIndex: number; -} - -export class Vertex { - x: number; - y: number; - z: number; -} - -export class VertexTexture { - u: number; - v: number; - w: number; -} +export = ObjFileParser; diff --git a/types/obj-file-parser/obj-file-parser-tests.ts b/types/obj-file-parser/obj-file-parser-tests.ts index b0459b3c32..8d3cbd6c6a 100644 --- a/types/obj-file-parser/obj-file-parser-tests.ts +++ b/types/obj-file-parser/obj-file-parser-tests.ts @@ -1,5 +1,3 @@ -import ObjFileParser, { ObjModel, ObjFile, Vertex, Face, FaceVertex } from 'obj-file-parser'; - const testObjFile = ` # cube.obj # Example object @@ -42,14 +40,14 @@ const parser = new ObjFileParser(testObjFile, 'test'); const file = parser.parse(); // get first model in file -const model: ObjModel = file.models[0]; +const model: ObjFileParser.ObjModel = file.models[0]; // gets object name const name: string = model.name; // gets first face in model -const face: Face = model.faces[0]; +const face: ObjFileParser.Face = model.faces[0]; // gets first vertex in face -const faceVert: FaceVertex = face.vertices[0]; +const faceVert: ObjFileParser.FaceVertex = face.vertices[0]; // gets vertex -const vertPoints: Vertex = model.vertices[faceVert.vertexIndex]; +const vertPoints: ObjFileParser.Vertex = model.vertices[faceVert.vertexIndex]; // gets x value of vertex const x = vertPoints.x;