@loaders.gl/schema 3.1.3 → 4.0.0-alpha.5

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 (194) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/bundle.js.map +1 -0
  3. package/dist/category/common.d.ts +1 -2
  4. package/dist/category/common.d.ts.map +1 -1
  5. package/dist/category/common.js +2 -10
  6. package/dist/{es5/category → category}/common.js.map +0 -0
  7. package/dist/category/gis.js +2 -2
  8. package/dist/{es5/category → category}/gis.js.map +0 -0
  9. package/dist/category/image/image.d.ts +18 -0
  10. package/dist/category/image/image.d.ts.map +1 -0
  11. package/dist/category/image/image.js +2 -0
  12. package/dist/{esm/category/gis.js.map → category/image/image.js.map} +1 -1
  13. package/dist/category/mesh/convert-mesh.js +31 -37
  14. package/dist/category/mesh/convert-mesh.js.map +1 -0
  15. package/dist/category/mesh/deduce-mesh-schema.js +37 -57
  16. package/dist/category/mesh/deduce-mesh-schema.js.map +1 -0
  17. package/dist/category/mesh/mesh-to-arrow-table.d.ts +10 -0
  18. package/dist/category/mesh/mesh-to-arrow-table.d.ts.map +1 -1
  19. package/dist/category/mesh/mesh-to-arrow-table.js +15 -28
  20. package/dist/category/mesh/mesh-to-arrow-table.js.map +1 -0
  21. package/dist/category/mesh/mesh-types.js +2 -2
  22. package/dist/{es5/category → category}/mesh/mesh-types.js.map +0 -0
  23. package/dist/category/mesh/mesh-utils.js +35 -48
  24. package/dist/category/mesh/mesh-utils.js.map +1 -0
  25. package/dist/category/table/deduce-table-schema.js +39 -94
  26. package/dist/category/table/deduce-table-schema.js.map +1 -0
  27. package/dist/category/table/table-types.d.ts +1 -3
  28. package/dist/category/table/table-types.d.ts.map +1 -1
  29. package/dist/category/table/table-types.js +2 -2
  30. package/dist/{es5/category → category}/table/table-types.js.map +0 -0
  31. package/dist/category/texture/texture.d.ts +18 -0
  32. package/dist/category/texture/texture.d.ts.map +1 -0
  33. package/dist/category/texture/texture.js +2 -0
  34. package/dist/{esm/category/common.js.map → category/texture/texture.js.map} +1 -1
  35. package/dist/dist.min.js +15078 -208
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +13 -75
  39. package/dist/index.js.map +1 -0
  40. package/dist/lib/arrow/arrow-like-type-utils.js +31 -26
  41. package/dist/lib/arrow/arrow-like-type-utils.js.map +1 -0
  42. package/dist/lib/arrow/arrow-type-utils.d.ts +5 -0
  43. package/dist/lib/arrow/arrow-type-utils.d.ts.map +1 -1
  44. package/dist/lib/arrow/arrow-type-utils.js +20 -28
  45. package/dist/lib/arrow/arrow-type-utils.js.map +1 -0
  46. package/dist/lib/arrow/get-type-info.js +19 -23
  47. package/dist/lib/arrow/get-type-info.js.map +1 -0
  48. package/dist/lib/batches/base-table-batch-aggregator.js +68 -52
  49. package/dist/lib/batches/base-table-batch-aggregator.js.map +1 -0
  50. package/dist/lib/batches/columnar-table-batch-aggregator.js +92 -82
  51. package/dist/lib/batches/columnar-table-batch-aggregator.js.map +1 -0
  52. package/dist/lib/batches/row-table-batch-aggregator.js +88 -72
  53. package/dist/lib/batches/row-table-batch-aggregator.js.map +1 -0
  54. package/dist/lib/batches/table-batch-aggregator.js +2 -2
  55. package/dist/{es5/lib → lib}/batches/table-batch-aggregator.js.map +0 -0
  56. package/dist/lib/batches/table-batch-builder.js +166 -137
  57. package/dist/lib/batches/table-batch-builder.js.map +1 -0
  58. package/dist/lib/schema/impl/enum.js +48 -96
  59. package/dist/lib/schema/impl/enum.js.map +1 -0
  60. package/dist/lib/schema/impl/field.js +34 -31
  61. package/dist/lib/schema/impl/field.js.map +1 -0
  62. package/dist/lib/schema/impl/schema.js +81 -72
  63. package/dist/lib/schema/impl/schema.js.map +1 -0
  64. package/dist/lib/schema/impl/type.js +490 -454
  65. package/dist/lib/schema/impl/type.js.map +1 -0
  66. package/dist/lib/schema/schema.js +5 -90
  67. package/dist/lib/schema/schema.js.map +1 -0
  68. package/dist/lib/schema-utils/deduce-column-type.js +20 -89
  69. package/dist/lib/schema-utils/deduce-column-type.js.map +1 -0
  70. package/dist/lib/utils/assert.js +5 -11
  71. package/dist/lib/utils/assert.js.map +1 -0
  72. package/dist/lib/utils/async-queue.js +109 -82
  73. package/dist/lib/utils/async-queue.js.map +1 -0
  74. package/dist/lib/utils/row-utils.js +33 -31
  75. package/dist/lib/utils/row-utils.js.map +1 -0
  76. package/dist/types.js +2 -2
  77. package/dist/{es5/types.js.map → types.js.map} +0 -0
  78. package/package.json +6 -5
  79. package/src/category/common.ts +1 -2
  80. package/src/category/image/image.ts +19 -0
  81. package/src/category/mesh/convert-mesh.ts +6 -6
  82. package/src/category/mesh/mesh-to-arrow-table.ts +2 -4
  83. package/src/category/table/table-types.ts +1 -4
  84. package/src/category/texture/texture.ts +28 -0
  85. package/src/index.ts +6 -1
  86. package/src/lib/arrow/arrow-type-utils.ts +0 -2
  87. package/dist/es5/bundle.js +0 -7
  88. package/dist/es5/bundle.js.map +0 -1
  89. package/dist/es5/category/common.js +0 -2
  90. package/dist/es5/category/gis.js +0 -2
  91. package/dist/es5/category/mesh/convert-mesh.js +0 -43
  92. package/dist/es5/category/mesh/convert-mesh.js.map +0 -1
  93. package/dist/es5/category/mesh/deduce-mesh-schema.js +0 -54
  94. package/dist/es5/category/mesh/deduce-mesh-schema.js.map +0 -1
  95. package/dist/es5/category/mesh/mesh-to-arrow-table.js +0 -2
  96. package/dist/es5/category/mesh/mesh-to-arrow-table.js.map +0 -1
  97. package/dist/es5/category/mesh/mesh-types.js +0 -2
  98. package/dist/es5/category/mesh/mesh-utils.js +0 -47
  99. package/dist/es5/category/mesh/mesh-utils.js.map +0 -1
  100. package/dist/es5/category/table/deduce-table-schema.js +0 -58
  101. package/dist/es5/category/table/deduce-table-schema.js.map +0 -1
  102. package/dist/es5/category/table/table-types.js +0 -2
  103. package/dist/es5/index.js +0 -344
  104. package/dist/es5/index.js.map +0 -1
  105. package/dist/es5/lib/arrow/arrow-like-type-utils.js +0 -40
  106. package/dist/es5/lib/arrow/arrow-like-type-utils.js.map +0 -1
  107. package/dist/es5/lib/arrow/arrow-type-utils.js +0 -2
  108. package/dist/es5/lib/arrow/arrow-type-utils.js.map +0 -1
  109. package/dist/es5/lib/arrow/get-type-info.js +0 -33
  110. package/dist/es5/lib/arrow/get-type-info.js.map +0 -1
  111. package/dist/es5/lib/batches/base-table-batch-aggregator.js +0 -92
  112. package/dist/es5/lib/batches/base-table-batch-aggregator.js.map +0 -1
  113. package/dist/es5/lib/batches/columnar-table-batch-aggregator.js +0 -128
  114. package/dist/es5/lib/batches/columnar-table-batch-aggregator.js.map +0 -1
  115. package/dist/es5/lib/batches/row-table-batch-aggregator.js +0 -113
  116. package/dist/es5/lib/batches/row-table-batch-aggregator.js.map +0 -1
  117. package/dist/es5/lib/batches/table-batch-aggregator.js +0 -2
  118. package/dist/es5/lib/batches/table-batch-builder.js +0 -207
  119. package/dist/es5/lib/batches/table-batch-builder.js.map +0 -1
  120. package/dist/es5/lib/schema/impl/enum.js +0 -56
  121. package/dist/es5/lib/schema/impl/enum.js.map +0 -1
  122. package/dist/es5/lib/schema/impl/field.js +0 -56
  123. package/dist/es5/lib/schema/impl/field.js.map +0 -1
  124. package/dist/es5/lib/schema/impl/schema.js +0 -168
  125. package/dist/es5/lib/schema/impl/schema.js.map +0 -1
  126. package/dist/es5/lib/schema/impl/type.js +0 -927
  127. package/dist/es5/lib/schema/impl/type.js.map +0 -1
  128. package/dist/es5/lib/schema/schema.js +0 -236
  129. package/dist/es5/lib/schema/schema.js.map +0 -1
  130. package/dist/es5/lib/schema-utils/deduce-column-type.js +0 -32
  131. package/dist/es5/lib/schema-utils/deduce-column-type.js.map +0 -1
  132. package/dist/es5/lib/utils/assert.js +0 -13
  133. package/dist/es5/lib/utils/assert.js.map +0 -1
  134. package/dist/es5/lib/utils/async-queue.js +0 -213
  135. package/dist/es5/lib/utils/async-queue.js.map +0 -1
  136. package/dist/es5/lib/utils/row-utils.js +0 -44
  137. package/dist/es5/lib/utils/row-utils.js.map +0 -1
  138. package/dist/es5/types.js +0 -2
  139. package/dist/esm/bundle.js +0 -5
  140. package/dist/esm/bundle.js.map +0 -1
  141. package/dist/esm/category/common.js +0 -2
  142. package/dist/esm/category/gis.js +0 -2
  143. package/dist/esm/category/mesh/convert-mesh.js +0 -26
  144. package/dist/esm/category/mesh/convert-mesh.js.map +0 -1
  145. package/dist/esm/category/mesh/deduce-mesh-schema.js +0 -42
  146. package/dist/esm/category/mesh/deduce-mesh-schema.js.map +0 -1
  147. package/dist/esm/category/mesh/mesh-to-arrow-table.js +0 -2
  148. package/dist/esm/category/mesh/mesh-to-arrow-table.js.map +0 -1
  149. package/dist/esm/category/mesh/mesh-types.js +0 -2
  150. package/dist/esm/category/mesh/mesh-types.js.map +0 -1
  151. package/dist/esm/category/mesh/mesh-utils.js +0 -38
  152. package/dist/esm/category/mesh/mesh-utils.js.map +0 -1
  153. package/dist/esm/category/table/deduce-table-schema.js +0 -51
  154. package/dist/esm/category/table/deduce-table-schema.js.map +0 -1
  155. package/dist/esm/category/table/table-types.js +0 -2
  156. package/dist/esm/category/table/table-types.js.map +0 -1
  157. package/dist/esm/index.js +0 -13
  158. package/dist/esm/index.js.map +0 -1
  159. package/dist/esm/lib/arrow/arrow-like-type-utils.js +0 -32
  160. package/dist/esm/lib/arrow/arrow-like-type-utils.js.map +0 -1
  161. package/dist/esm/lib/arrow/arrow-type-utils.js +0 -2
  162. package/dist/esm/lib/arrow/arrow-type-utils.js.map +0 -1
  163. package/dist/esm/lib/arrow/get-type-info.js +0 -24
  164. package/dist/esm/lib/arrow/get-type-info.js.map +0 -1
  165. package/dist/esm/lib/batches/base-table-batch-aggregator.js +0 -74
  166. package/dist/esm/lib/batches/base-table-batch-aggregator.js.map +0 -1
  167. package/dist/esm/lib/batches/columnar-table-batch-aggregator.js +0 -100
  168. package/dist/esm/lib/batches/columnar-table-batch-aggregator.js.map +0 -1
  169. package/dist/esm/lib/batches/row-table-batch-aggregator.js +0 -95
  170. package/dist/esm/lib/batches/row-table-batch-aggregator.js.map +0 -1
  171. package/dist/esm/lib/batches/table-batch-aggregator.js +0 -2
  172. package/dist/esm/lib/batches/table-batch-aggregator.js.map +0 -1
  173. package/dist/esm/lib/batches/table-batch-builder.js +0 -182
  174. package/dist/esm/lib/batches/table-batch-builder.js.map +0 -1
  175. package/dist/esm/lib/schema/impl/enum.js +0 -49
  176. package/dist/esm/lib/schema/impl/enum.js.map +0 -1
  177. package/dist/esm/lib/schema/impl/field.js +0 -35
  178. package/dist/esm/lib/schema/impl/field.js.map +0 -1
  179. package/dist/esm/lib/schema/impl/schema.js +0 -92
  180. package/dist/esm/lib/schema/impl/schema.js.map +0 -1
  181. package/dist/esm/lib/schema/impl/type.js +0 -498
  182. package/dist/esm/lib/schema/impl/type.js.map +0 -1
  183. package/dist/esm/lib/schema/schema.js +0 -5
  184. package/dist/esm/lib/schema/schema.js.map +0 -1
  185. package/dist/esm/lib/schema-utils/deduce-column-type.js +0 -23
  186. package/dist/esm/lib/schema-utils/deduce-column-type.js.map +0 -1
  187. package/dist/esm/lib/utils/assert.js +0 -6
  188. package/dist/esm/lib/utils/assert.js.map +0 -1
  189. package/dist/esm/lib/utils/async-queue.js +0 -119
  190. package/dist/esm/lib/utils/async-queue.js.map +0 -1
  191. package/dist/esm/lib/utils/row-utils.js +0 -35
  192. package/dist/esm/lib/utils/row-utils.js.map +0 -1
  193. package/dist/esm/types.js +0 -2
  194. package/dist/esm/types.js.map +0 -1
@@ -1,83 +1,92 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const assert_1 = require("../../utils/assert");
4
- /**
5
- * ArrowJS `Schema` API-compatible class for row-based tables (returned from `DataTable`)
6
- * https://loaders.gl/arrowjs/docs/api-reference/schema
7
- */
8
- class Schema {
9
- constructor(fields, metadata) {
10
- (0, assert_1.assert)(Array.isArray(fields));
11
- checkNames(fields);
12
- // For kepler fields, create arrow compatible `Fields` that have kepler fields as `metadata`
13
- this.fields = fields;
14
- this.metadata = metadata || new Map();
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import { assert } from '../../utils/assert';
3
+ export default class Schema {
4
+ constructor(fields, metadata) {
5
+ _defineProperty(this, "fields", void 0);
6
+
7
+ _defineProperty(this, "metadata", void 0);
8
+
9
+ assert(Array.isArray(fields));
10
+ checkNames(fields);
11
+ this.fields = fields;
12
+ this.metadata = metadata || new Map();
13
+ }
14
+
15
+ compareTo(other) {
16
+ if (this.metadata !== other.metadata) {
17
+ return false;
15
18
  }
16
- // TODO - arrow only seems to compare fields, not metadata
17
- compareTo(other) {
18
- if (this.metadata !== other.metadata) {
19
- return false;
20
- }
21
- if (this.fields.length !== other.fields.length) {
22
- return false;
23
- }
24
- for (let i = 0; i < this.fields.length; ++i) {
25
- if (!this.fields[i].compareTo(other.fields[i])) {
26
- return false;
27
- }
28
- }
29
- return true;
19
+
20
+ if (this.fields.length !== other.fields.length) {
21
+ return false;
30
22
  }
31
- select(...columnNames) {
32
- // Ensure column names reference valid fields
33
- const nameMap = Object.create(null);
34
- for (const name of columnNames) {
35
- nameMap[name] = true;
36
- }
37
- const selectedFields = this.fields.filter((field) => nameMap[field.name]);
38
- return new Schema(selectedFields, this.metadata);
23
+
24
+ for (let i = 0; i < this.fields.length; ++i) {
25
+ if (!this.fields[i].compareTo(other.fields[i])) {
26
+ return false;
27
+ }
39
28
  }
40
- selectAt(...columnIndices) {
41
- // Ensure column indices reference valid fields
42
- const selectedFields = columnIndices.map((index) => this.fields[index]).filter(Boolean);
43
- return new Schema(selectedFields, this.metadata);
29
+
30
+ return true;
31
+ }
32
+
33
+ select(...columnNames) {
34
+ const nameMap = Object.create(null);
35
+
36
+ for (const name of columnNames) {
37
+ nameMap[name] = true;
44
38
  }
45
- assign(schemaOrFields) {
46
- let fields;
47
- let metadata = this.metadata;
48
- if (schemaOrFields instanceof Schema) {
49
- const otherSchema = schemaOrFields;
50
- fields = otherSchema.fields;
51
- metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);
52
- }
53
- else {
54
- fields = schemaOrFields;
55
- }
56
- // Create a merged list of fields, overwrite fields in place, new fields at end
57
- const fieldMap = Object.create(null);
58
- for (const field of this.fields) {
59
- fieldMap[field.name] = field;
60
- }
61
- for (const field of fields) {
62
- fieldMap[field.name] = field;
63
- }
64
- const mergedFields = Object.values(fieldMap);
65
- return new Schema(mergedFields, metadata);
39
+
40
+ const selectedFields = this.fields.filter(field => nameMap[field.name]);
41
+ return new Schema(selectedFields, this.metadata);
42
+ }
43
+
44
+ selectAt(...columnIndices) {
45
+ const selectedFields = columnIndices.map(index => this.fields[index]).filter(Boolean);
46
+ return new Schema(selectedFields, this.metadata);
47
+ }
48
+
49
+ assign(schemaOrFields) {
50
+ let fields;
51
+ let metadata = this.metadata;
52
+
53
+ if (schemaOrFields instanceof Schema) {
54
+ const otherSchema = schemaOrFields;
55
+ fields = otherSchema.fields;
56
+ metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);
57
+ } else {
58
+ fields = schemaOrFields;
66
59
  }
60
+
61
+ const fieldMap = Object.create(null);
62
+
63
+ for (const field of this.fields) {
64
+ fieldMap[field.name] = field;
65
+ }
66
+
67
+ for (const field of fields) {
68
+ fieldMap[field.name] = field;
69
+ }
70
+
71
+ const mergedFields = Object.values(fieldMap);
72
+ return new Schema(mergedFields, metadata);
73
+ }
74
+
67
75
  }
68
- exports.default = Schema;
69
- // Warn if any duplicated field names
76
+
70
77
  function checkNames(fields) {
71
- const usedNames = {};
72
- for (const field of fields) {
73
- if (usedNames[field.name]) {
74
- // eslint-disable-next-line
75
- console.warn('Schema: duplicated field name', field.name, field);
76
- }
77
- usedNames[field.name] = true;
78
+ const usedNames = {};
79
+
80
+ for (const field of fields) {
81
+ if (usedNames[field.name]) {
82
+ console.warn('Schema: duplicated field name', field.name, field);
78
83
  }
84
+
85
+ usedNames[field.name] = true;
86
+ }
79
87
  }
88
+
80
89
  function mergeMaps(m1, m2) {
81
- // @ts-ignore
82
- return new Map([...(m1 || new Map()), ...(m2 || new Map())]);
90
+ return new Map([...(m1 || new Map()), ...(m2 || new Map())]);
83
91
  }
92
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/schema/impl/schema.ts"],"names":["assert","Schema","constructor","fields","metadata","Array","isArray","checkNames","Map","compareTo","other","length","i","select","columnNames","nameMap","Object","create","name","selectedFields","filter","field","selectAt","columnIndices","map","index","Boolean","assign","schemaOrFields","otherSchema","mergeMaps","fieldMap","mergedFields","values","usedNames","console","warn","m1","m2"],"mappings":"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","sourcesContent":["import {assert} from '../../utils/assert';\nimport Field from './field';\n\nexport type SchemaMetadata = Map<string, any>;\n\n/**\n * ArrowJS `Schema` API-compatible class for row-based tables (returned from `DataTable`)\n * https://loaders.gl/arrowjs/docs/api-reference/schema\n */\nexport default class Schema {\n fields: Field[];\n // TODO - Arrow just allows Map<string, string>\n metadata: SchemaMetadata;\n\n constructor(fields: Field[], metadata?: SchemaMetadata) {\n assert(Array.isArray(fields));\n checkNames(fields);\n // For kepler fields, create arrow compatible `Fields` that have kepler fields as `metadata`\n this.fields = fields;\n this.metadata = metadata || new Map();\n }\n\n // TODO - arrow only seems to compare fields, not metadata\n compareTo(other: Schema): boolean {\n if (this.metadata !== other.metadata) {\n return false;\n }\n if (this.fields.length !== other.fields.length) {\n return false;\n }\n for (let i = 0; i < this.fields.length; ++i) {\n if (!this.fields[i].compareTo(other.fields[i])) {\n return false;\n }\n }\n return true;\n }\n\n select(...columnNames: string[]): Schema {\n // Ensure column names reference valid fields\n const nameMap = Object.create(null);\n for (const name of columnNames) {\n nameMap[name] = true;\n }\n const selectedFields = this.fields.filter((field) => nameMap[field.name]);\n return new Schema(selectedFields, this.metadata);\n }\n\n selectAt(...columnIndices: number[]): Schema {\n // Ensure column indices reference valid fields\n const selectedFields = columnIndices.map((index) => this.fields[index]).filter(Boolean);\n return new Schema(selectedFields, this.metadata);\n }\n\n assign(schemaOrFields: Schema | Field[]): Schema {\n let fields: Field[];\n let metadata: SchemaMetadata = this.metadata;\n\n if (schemaOrFields instanceof Schema) {\n const otherSchema = schemaOrFields;\n fields = otherSchema.fields;\n metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);\n } else {\n fields = schemaOrFields;\n }\n\n // Create a merged list of fields, overwrite fields in place, new fields at end\n const fieldMap: {[key: string]: Field} = Object.create(null);\n\n for (const field of this.fields) {\n fieldMap[field.name] = field;\n }\n\n for (const field of fields) {\n fieldMap[field.name] = field;\n }\n\n const mergedFields = Object.values(fieldMap);\n\n return new Schema(mergedFields, metadata);\n }\n}\n\n// Warn if any duplicated field names\nfunction checkNames(fields: Field[]): void {\n const usedNames: Record<string, boolean> = {};\n for (const field of fields) {\n if (usedNames[field.name]) {\n // eslint-disable-next-line\n console.warn('Schema: duplicated field name', field.name, field);\n }\n usedNames[field.name] = true;\n }\n}\n\nfunction mergeMaps<T>(m1: T, m2: T): T {\n // @ts-ignore\n return new Map([...(m1 || new Map()), ...(m2 || new Map())]);\n}\n"],"file":"schema.js"}