@loaders.gl/schema 3.0.13 → 3.0.14

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 (30) hide show
  1. package/dist/es5/bundle.js +2 -2
  2. package/dist/es5/bundle.js.map +1 -1
  3. package/dist/es5/category/mesh/mesh-utils.js +16 -16
  4. package/dist/es5/category/mesh/mesh-utils.js.map +1 -1
  5. package/dist/es5/index.js +46 -46
  6. package/dist/es5/lib/schema/impl/enum.js +1 -1
  7. package/dist/es5/lib/schema/impl/field.js +32 -19
  8. package/dist/es5/lib/schema/impl/field.js.map +1 -1
  9. package/dist/es5/lib/schema/impl/schema.js +119 -54
  10. package/dist/es5/lib/schema/impl/schema.js.map +1 -1
  11. package/dist/es5/lib/schema/impl/type.js +693 -375
  12. package/dist/es5/lib/schema/impl/type.js.map +1 -1
  13. package/dist/es5/lib/schema/index.js +36 -36
  14. package/dist/es5/lib/schema-utils/deduce-table-schema.js +9 -9
  15. package/dist/es5/lib/schema-utils/deduce-table-schema.js.map +1 -1
  16. package/dist/es5/lib/schema-utils/get-type-info.js +3 -3
  17. package/dist/es5/lib/schema-utils/get-type-info.js.map +1 -1
  18. package/dist/es5/lib/table/base-table-batch-aggregator.js +53 -42
  19. package/dist/es5/lib/table/base-table-batch-aggregator.js.map +1 -1
  20. package/dist/es5/lib/table/columnar-table-batch-aggregator.js +90 -71
  21. package/dist/es5/lib/table/columnar-table-batch-aggregator.js.map +1 -1
  22. package/dist/es5/lib/table/row-table-batch-aggregator.js +70 -59
  23. package/dist/es5/lib/table/row-table-batch-aggregator.js.map +1 -1
  24. package/dist/es5/lib/table/table-batch-builder.js +133 -113
  25. package/dist/es5/lib/table/table-batch-builder.js.map +1 -1
  26. package/dist/es5/lib/utils/async-queue.js +164 -81
  27. package/dist/es5/lib/utils/async-queue.js.map +1 -1
  28. package/dist/es5/lib/utils/row-utils.js +4 -4
  29. package/dist/es5/lib/utils/row-utils.js.map +1 -1
  30. package/package.json +2 -2
@@ -7,12 +7,25 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
10
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
17
 
12
18
  var _assert = require("../../utils/assert");
13
19
 
14
- class Schema {
15
- constructor(fields, metadata) {
20
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
21
+
22
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
23
+
24
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
25
+
26
+ var Schema = function () {
27
+ function Schema(fields, metadata) {
28
+ (0, _classCallCheck2.default)(this, Schema);
16
29
  (0, _defineProperty2.default)(this, "fields", void 0);
17
30
  (0, _defineProperty2.default)(this, "metadata", void 0);
18
31
  (0, _assert.assert)(Array.isArray(fields));
@@ -21,83 +34,135 @@ class Schema {
21
34
  this.metadata = metadata || new Map();
22
35
  }
23
36
 
24
- compareTo(other) {
25
- if (this.metadata !== other.metadata) {
26
- return false;
27
- }
28
-
29
- if (this.fields.length !== other.fields.length) {
30
- return false;
31
- }
32
-
33
- for (let i = 0; i < this.fields.length; ++i) {
34
- if (!this.fields[i].compareTo(other.fields[i])) {
37
+ (0, _createClass2.default)(Schema, [{
38
+ key: "compareTo",
39
+ value: function compareTo(other) {
40
+ if (this.metadata !== other.metadata) {
35
41
  return false;
36
42
  }
37
- }
38
43
 
39
- return true;
40
- }
44
+ if (this.fields.length !== other.fields.length) {
45
+ return false;
46
+ }
41
47
 
42
- select(...columnNames) {
43
- const nameMap = Object.create(null);
48
+ for (var i = 0; i < this.fields.length; ++i) {
49
+ if (!this.fields[i].compareTo(other.fields[i])) {
50
+ return false;
51
+ }
52
+ }
44
53
 
45
- for (const name of columnNames) {
46
- nameMap[name] = true;
54
+ return true;
47
55
  }
56
+ }, {
57
+ key: "select",
58
+ value: function select() {
59
+ var nameMap = Object.create(null);
48
60
 
49
- const selectedFields = this.fields.filter(field => nameMap[field.name]);
50
- return new Schema(selectedFields, this.metadata);
51
- }
52
-
53
- selectAt(...columnIndices) {
54
- const selectedFields = columnIndices.map(index => this.fields[index]).filter(Boolean);
55
- return new Schema(selectedFields, this.metadata);
56
- }
61
+ for (var _len = arguments.length, columnNames = new Array(_len), _key = 0; _key < _len; _key++) {
62
+ columnNames[_key] = arguments[_key];
63
+ }
57
64
 
58
- assign(schemaOrFields) {
59
- let fields;
60
- let metadata = this.metadata;
65
+ for (var _i = 0, _columnNames = columnNames; _i < _columnNames.length; _i++) {
66
+ var name = _columnNames[_i];
67
+ nameMap[name] = true;
68
+ }
61
69
 
62
- if (schemaOrFields instanceof Schema) {
63
- const otherSchema = schemaOrFields;
64
- fields = otherSchema.fields;
65
- metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);
66
- } else {
67
- fields = schemaOrFields;
70
+ var selectedFields = this.fields.filter(function (field) {
71
+ return nameMap[field.name];
72
+ });
73
+ return new Schema(selectedFields, this.metadata);
68
74
  }
75
+ }, {
76
+ key: "selectAt",
77
+ value: function selectAt() {
78
+ var _this = this;
69
79
 
70
- const fieldMap = Object.create(null);
80
+ for (var _len2 = arguments.length, columnIndices = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
81
+ columnIndices[_key2] = arguments[_key2];
82
+ }
71
83
 
72
- for (const field of this.fields) {
73
- fieldMap[field.name] = field;
84
+ var selectedFields = columnIndices.map(function (index) {
85
+ return _this.fields[index];
86
+ }).filter(Boolean);
87
+ return new Schema(selectedFields, this.metadata);
74
88
  }
89
+ }, {
90
+ key: "assign",
91
+ value: function assign(schemaOrFields) {
92
+ var fields;
93
+ var metadata = this.metadata;
94
+
95
+ if (schemaOrFields instanceof Schema) {
96
+ var otherSchema = schemaOrFields;
97
+ fields = otherSchema.fields;
98
+ metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);
99
+ } else {
100
+ fields = schemaOrFields;
101
+ }
75
102
 
76
- for (const field of fields) {
77
- fieldMap[field.name] = field;
78
- }
103
+ var fieldMap = Object.create(null);
79
104
 
80
- const mergedFields = Object.values(fieldMap);
81
- return new Schema(mergedFields, metadata);
82
- }
105
+ var _iterator = _createForOfIteratorHelper(this.fields),
106
+ _step;
83
107
 
84
- }
108
+ try {
109
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
110
+ var field = _step.value;
111
+ fieldMap[field.name] = field;
112
+ }
113
+ } catch (err) {
114
+ _iterator.e(err);
115
+ } finally {
116
+ _iterator.f();
117
+ }
118
+
119
+ var _iterator2 = _createForOfIteratorHelper(fields),
120
+ _step2;
121
+
122
+ try {
123
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
124
+ var _field = _step2.value;
125
+ fieldMap[_field.name] = _field;
126
+ }
127
+ } catch (err) {
128
+ _iterator2.e(err);
129
+ } finally {
130
+ _iterator2.f();
131
+ }
132
+
133
+ var mergedFields = Object.values(fieldMap);
134
+ return new Schema(mergedFields, metadata);
135
+ }
136
+ }]);
137
+ return Schema;
138
+ }();
85
139
 
86
140
  exports.default = Schema;
87
141
 
88
142
  function checkNames(fields) {
89
- const usedNames = {};
143
+ var usedNames = {};
90
144
 
91
- for (const field of fields) {
92
- if (usedNames[field.name]) {
93
- console.warn('Schema: duplicated field name', field.name, field);
94
- }
145
+ var _iterator3 = _createForOfIteratorHelper(fields),
146
+ _step3;
95
147
 
96
- usedNames[field.name] = true;
148
+ try {
149
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
150
+ var field = _step3.value;
151
+
152
+ if (usedNames[field.name]) {
153
+ console.warn('Schema: duplicated field name', field.name, field);
154
+ }
155
+
156
+ usedNames[field.name] = true;
157
+ }
158
+ } catch (err) {
159
+ _iterator3.e(err);
160
+ } finally {
161
+ _iterator3.f();
97
162
  }
98
163
  }
99
164
 
100
165
  function mergeMaps(m1, m2) {
101
- return new Map([...(m1 || new Map()), ...(m2 || new Map())]);
166
+ return new Map([].concat((0, _toConsumableArray2.default)(m1 || new Map()), (0, _toConsumableArray2.default)(m2 || new Map())));
102
167
  }
103
168
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/lib/schema/impl/schema.ts"],"names":["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) {\n const usedNames = {};\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"}
1
+ {"version":3,"sources":["../../../../../src/lib/schema/impl/schema.ts"],"names":["Schema","fields","metadata","Array","isArray","checkNames","Map","other","length","i","compareTo","nameMap","Object","create","columnNames","name","selectedFields","filter","field","columnIndices","map","index","Boolean","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) {\n const usedNames = {};\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"}