@loaders.gl/schema 3.0.9 → 3.0.13

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 (34) 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 +19 -32
  8. package/dist/es5/lib/schema/impl/field.js.map +1 -1
  9. package/dist/es5/lib/schema/impl/schema.js +54 -119
  10. package/dist/es5/lib/schema/impl/schema.js.map +1 -1
  11. package/dist/es5/lib/schema/impl/type.js +375 -693
  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 +42 -53
  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 +71 -90
  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 +59 -70
  23. package/dist/es5/lib/table/row-table-batch-aggregator.js.map +1 -1
  24. package/dist/es5/lib/table/table-batch-builder.js +113 -133
  25. package/dist/es5/lib/table/table-batch-builder.js.map +1 -1
  26. package/dist/es5/lib/utils/async-queue.js +81 -164
  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/dist/esm/lib/schema/impl/field.js +1 -1
  31. package/dist/esm/lib/schema/impl/field.js.map +1 -1
  32. package/dist/esm/lib/schema/impl/type.js +7 -7
  33. package/dist/esm/lib/schema/impl/type.js.map +1 -1
  34. package/package.json +2 -2
@@ -7,25 +7,12 @@ 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
-
16
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
11
 
18
12
  var _assert = require("../../utils/assert");
19
13
 
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);
14
+ class Schema {
15
+ constructor(fields, metadata) {
29
16
  (0, _defineProperty2.default)(this, "fields", void 0);
30
17
  (0, _defineProperty2.default)(this, "metadata", void 0);
31
18
  (0, _assert.assert)(Array.isArray(fields));
@@ -34,135 +21,83 @@ var Schema = function () {
34
21
  this.metadata = metadata || new Map();
35
22
  }
36
23
 
37
- (0, _createClass2.default)(Schema, [{
38
- key: "compareTo",
39
- value: function compareTo(other) {
40
- if (this.metadata !== other.metadata) {
41
- return false;
42
- }
24
+ compareTo(other) {
25
+ if (this.metadata !== other.metadata) {
26
+ return false;
27
+ }
43
28
 
44
- if (this.fields.length !== other.fields.length) {
45
- return false;
46
- }
29
+ if (this.fields.length !== other.fields.length) {
30
+ return false;
31
+ }
47
32
 
48
- for (var i = 0; i < this.fields.length; ++i) {
49
- if (!this.fields[i].compareTo(other.fields[i])) {
50
- return false;
51
- }
33
+ for (let i = 0; i < this.fields.length; ++i) {
34
+ if (!this.fields[i].compareTo(other.fields[i])) {
35
+ return false;
52
36
  }
53
-
54
- return true;
55
37
  }
56
- }, {
57
- key: "select",
58
- value: function select() {
59
- var nameMap = Object.create(null);
60
38
 
61
- for (var _len = arguments.length, columnNames = new Array(_len), _key = 0; _key < _len; _key++) {
62
- columnNames[_key] = arguments[_key];
63
- }
39
+ return true;
40
+ }
64
41
 
65
- for (var _i = 0, _columnNames = columnNames; _i < _columnNames.length; _i++) {
66
- var name = _columnNames[_i];
67
- nameMap[name] = true;
68
- }
42
+ select(...columnNames) {
43
+ const nameMap = Object.create(null);
69
44
 
70
- var selectedFields = this.fields.filter(function (field) {
71
- return nameMap[field.name];
72
- });
73
- return new Schema(selectedFields, this.metadata);
45
+ for (const name of columnNames) {
46
+ nameMap[name] = true;
74
47
  }
75
- }, {
76
- key: "selectAt",
77
- value: function selectAt() {
78
- var _this = this;
79
48
 
80
- for (var _len2 = arguments.length, columnIndices = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
81
- columnIndices[_key2] = arguments[_key2];
82
- }
83
-
84
- var selectedFields = columnIndices.map(function (index) {
85
- return _this.fields[index];
86
- }).filter(Boolean);
87
- return new Schema(selectedFields, this.metadata);
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
- }
49
+ const selectedFields = this.fields.filter(field => nameMap[field.name]);
50
+ return new Schema(selectedFields, this.metadata);
51
+ }
102
52
 
103
- var fieldMap = Object.create(null);
53
+ selectAt(...columnIndices) {
54
+ const selectedFields = columnIndices.map(index => this.fields[index]).filter(Boolean);
55
+ return new Schema(selectedFields, this.metadata);
56
+ }
104
57
 
105
- var _iterator = _createForOfIteratorHelper(this.fields),
106
- _step;
58
+ assign(schemaOrFields) {
59
+ let fields;
60
+ let metadata = this.metadata;
107
61
 
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
- }
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;
68
+ }
118
69
 
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
- }
70
+ const fieldMap = Object.create(null);
132
71
 
133
- var mergedFields = Object.values(fieldMap);
134
- return new Schema(mergedFields, metadata);
72
+ for (const field of this.fields) {
73
+ fieldMap[field.name] = field;
135
74
  }
136
- }]);
137
- return Schema;
138
- }();
139
75
 
140
- exports.default = Schema;
76
+ for (const field of fields) {
77
+ fieldMap[field.name] = field;
78
+ }
141
79
 
142
- function checkNames(fields) {
143
- var usedNames = {};
80
+ const mergedFields = Object.values(fieldMap);
81
+ return new Schema(mergedFields, metadata);
82
+ }
144
83
 
145
- var _iterator3 = _createForOfIteratorHelper(fields),
146
- _step3;
84
+ }
147
85
 
148
- try {
149
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
150
- var field = _step3.value;
86
+ exports.default = Schema;
151
87
 
152
- if (usedNames[field.name]) {
153
- console.warn('Schema: duplicated field name', field.name, field);
154
- }
88
+ function checkNames(fields) {
89
+ const usedNames = {};
155
90
 
156
- usedNames[field.name] = true;
91
+ for (const field of fields) {
92
+ if (usedNames[field.name]) {
93
+ console.warn('Schema: duplicated field name', field.name, field);
157
94
  }
158
- } catch (err) {
159
- _iterator3.e(err);
160
- } finally {
161
- _iterator3.f();
95
+
96
+ usedNames[field.name] = true;
162
97
  }
163
98
  }
164
99
 
165
100
  function mergeMaps(m1, m2) {
166
- return new Map([].concat((0, _toConsumableArray2.default)(m1 || new Map()), (0, _toConsumableArray2.default)(m2 || new Map())));
101
+ return new Map([...(m1 || new Map()), ...(m2 || new Map())]);
167
102
  }
168
103
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
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":";;;;;;;;;;;;;;;;;AAAA;;;;;;;;IASqBA,M;AAKnB,kBAAYC,MAAZ,EAA6BC,QAA7B,EAAwD;AAAA;AAAA;AAAA;AACtD,wBAAOC,KAAK,CAACC,OAAN,CAAcH,MAAd,CAAP;AACAI,IAAAA,UAAU,CAACJ,MAAD,CAAV;AAEA,SAAKA,MAAL,GAAcA,MAAd;AACA,SAAKC,QAAL,GAAgBA,QAAQ,IAAI,IAAII,GAAJ,EAA5B;AACD;;;;WAGD,mBAAUC,KAAV,EAAkC;AAChC,UAAI,KAAKL,QAAL,KAAkBK,KAAK,CAACL,QAA5B,EAAsC;AACpC,eAAO,KAAP;AACD;;AACD,UAAI,KAAKD,MAAL,CAAYO,MAAZ,KAAuBD,KAAK,CAACN,MAAN,CAAaO,MAAxC,EAAgD;AAC9C,eAAO,KAAP;AACD;;AACD,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKR,MAAL,CAAYO,MAAhC,EAAwC,EAAEC,CAA1C,EAA6C;AAC3C,YAAI,CAAC,KAAKR,MAAL,CAAYQ,CAAZ,EAAeC,SAAf,CAAyBH,KAAK,CAACN,MAAN,CAAaQ,CAAb,CAAzB,CAAL,EAAgD;AAC9C,iBAAO,KAAP;AACD;AACF;;AACD,aAAO,IAAP;AACD;;;WAED,kBAAyC;AAEvC,UAAME,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAc,IAAd,CAAhB;;AAFuC,wCAA/BC,WAA+B;AAA/BA,QAAAA,WAA+B;AAAA;;AAGvC,sCAAmBA,WAAnB,kCAAgC;AAA3B,YAAMC,IAAI,mBAAV;AACHJ,QAAAA,OAAO,CAACI,IAAD,CAAP,GAAgB,IAAhB;AACD;;AACD,UAAMC,cAAc,GAAG,KAAKf,MAAL,CAAYgB,MAAZ,CAAmB,UAACC,KAAD;AAAA,eAAWP,OAAO,CAACO,KAAK,CAACH,IAAP,CAAlB;AAAA,OAAnB,CAAvB;AACA,aAAO,IAAIf,MAAJ,CAAWgB,cAAX,EAA2B,KAAKd,QAAhC,CAAP;AACD;;;WAED,oBAA6C;AAAA;;AAAA,yCAAjCiB,aAAiC;AAAjCA,QAAAA,aAAiC;AAAA;;AAE3C,UAAMH,cAAc,GAAGG,aAAa,CAACC,GAAd,CAAkB,UAACC,KAAD;AAAA,eAAW,KAAI,CAACpB,MAAL,CAAYoB,KAAZ,CAAX;AAAA,OAAlB,EAAiDJ,MAAjD,CAAwDK,OAAxD,CAAvB;AACA,aAAO,IAAItB,MAAJ,CAAWgB,cAAX,EAA2B,KAAKd,QAAhC,CAAP;AACD;;;WAED,gBAAOqB,cAAP,EAAiD;AAC/C,UAAItB,MAAJ;AACA,UAAIC,QAAwB,GAAG,KAAKA,QAApC;;AAEA,UAAIqB,cAAc,YAAYvB,MAA9B,EAAsC;AACpC,YAAMwB,WAAW,GAAGD,cAApB;AACAtB,QAAAA,MAAM,GAAGuB,WAAW,CAACvB,MAArB;AACAC,QAAAA,QAAQ,GAAGuB,SAAS,CAACA,SAAS,CAAC,IAAInB,GAAJ,EAAD,EAAY,KAAKJ,QAAjB,CAAV,EAAsCsB,WAAW,CAACtB,QAAlD,CAApB;AACD,OAJD,MAIO;AACLD,QAAAA,MAAM,GAAGsB,cAAT;AACD;;AAGD,UAAMG,QAAgC,GAAGd,MAAM,CAACC,MAAP,CAAc,IAAd,CAAzC;;AAb+C,iDAe3B,KAAKZ,MAfsB;AAAA;;AAAA;AAe/C,4DAAiC;AAAA,cAAtBiB,KAAsB;AAC/BQ,UAAAA,QAAQ,CAACR,KAAK,CAACH,IAAP,CAAR,GAAuBG,KAAvB;AACD;AAjB8C;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAmB3BjB,MAnB2B;AAAA;;AAAA;AAmB/C,+DAA4B;AAAA,cAAjBiB,MAAiB;AAC1BQ,UAAAA,QAAQ,CAACR,MAAK,CAACH,IAAP,CAAR,GAAuBG,MAAvB;AACD;AArB8C;AAAA;AAAA;AAAA;AAAA;;AAuB/C,UAAMS,YAAY,GAAGf,MAAM,CAACgB,MAAP,CAAcF,QAAd,CAArB;AAEA,aAAO,IAAI1B,MAAJ,CAAW2B,YAAX,EAAyBzB,QAAzB,CAAP;AACD;;;;;;;AAIH,SAASG,UAAT,CAAoBJ,MAApB,EAA4B;AAC1B,MAAM4B,SAAS,GAAG,EAAlB;;AAD0B,8CAEN5B,MAFM;AAAA;;AAAA;AAE1B,2DAA4B;AAAA,UAAjBiB,KAAiB;;AAC1B,UAAIW,SAAS,CAACX,KAAK,CAACH,IAAP,CAAb,EAA2B;AAEzBe,QAAAA,OAAO,CAACC,IAAR,CAAa,+BAAb,EAA8Cb,KAAK,CAACH,IAApD,EAA0DG,KAA1D;AACD;;AACDW,MAAAA,SAAS,CAACX,KAAK,CAACH,IAAP,CAAT,GAAwB,IAAxB;AACD;AARyB;AAAA;AAAA;AAAA;AAAA;AAS3B;;AAED,SAASU,SAAT,CAAsBO,EAAtB,EAA6BC,EAA7B,EAAuC;AAErC,SAAO,IAAI3B,GAAJ,4CAAa0B,EAAE,IAAI,IAAI1B,GAAJ,EAAnB,oCAAmC2B,EAAE,IAAI,IAAI3B,GAAJ,EAAzC,GAAP;AACD","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","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"}