@graphty/graph-io 0.3.26 → 0.3.28

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 (150) hide show
  1. package/dist/chunks/{choose-BbJI55dx.js → choose-DrXtu_96.js} +2 -2
  2. package/dist/chunks/{choose-BbJI55dx.js.map → choose-DrXtu_96.js.map} +1 -1
  3. package/dist/chunks/{constants-BCsFsMj4.js → constants-ikG85dT8.js} +2 -2
  4. package/dist/chunks/{constants-BCsFsMj4.js.map → constants-ikG85dT8.js.map} +1 -1
  5. package/dist/chunks/{escape-D0g6NNUy.js → escape-D1HPTUrP.js} +10 -9
  6. package/dist/chunks/escape-D1HPTUrP.js.map +1 -0
  7. package/dist/chunks/{export-BTI4yQgy.js → export-CHd4tQE2.js} +4 -4
  8. package/dist/chunks/export-CHd4tQE2.js.map +1 -0
  9. package/dist/chunks/{exporter-Dxh231ZF.js → exporter-Cl021ZIE.js} +72 -48
  10. package/dist/chunks/exporter-Cl021ZIE.js.map +1 -0
  11. package/dist/chunks/{exporter-Cra2GYcN.js → exporter-D23CKNqF.js} +5 -5
  12. package/dist/chunks/exporter-D23CKNqF.js.map +1 -0
  13. package/dist/chunks/{exporter-tne475KK.js → exporter-DfWTgrti.js} +5 -5
  14. package/dist/chunks/exporter-DfWTgrti.js.map +1 -0
  15. package/dist/chunks/{exporter-BMqk5oxW.js → exporter-DhtW6FxK.js} +3 -3
  16. package/dist/chunks/{exporter-BMqk5oxW.js.map → exporter-DhtW6FxK.js.map} +1 -1
  17. package/dist/chunks/{importer-Bcl1d4xH.js → importer-B2W_58pz.js} +5 -5
  18. package/dist/chunks/importer-B2W_58pz.js.map +1 -0
  19. package/dist/chunks/{importer-90YWhJoF.js → importer-BSALvkui.js} +9 -9
  20. package/dist/chunks/importer-BSALvkui.js.map +1 -0
  21. package/dist/chunks/{importer-DfVu6j59.js → importer-BVRE--Un.js} +4 -4
  22. package/dist/chunks/importer-BVRE--Un.js.map +1 -0
  23. package/dist/chunks/{importer-BfIsp1f9.js → importer-BZB7iP9r.js} +35 -9
  24. package/dist/chunks/importer-BZB7iP9r.js.map +1 -0
  25. package/dist/chunks/{importer-DCjOvO7U.js → importer-CIAzt-wo.js} +6 -6
  26. package/dist/chunks/importer-CIAzt-wo.js.map +1 -0
  27. package/dist/chunks/{importer-Dku_VAIY.js → importer-DpEW5zeG.js} +4 -4
  28. package/dist/chunks/{importer-Dku_VAIY.js.map → importer-DpEW5zeG.js.map} +1 -1
  29. package/dist/chunks/{importer-C_TEA1zJ.js → importer-z_FL4VMb.js} +9 -9
  30. package/dist/chunks/importer-z_FL4VMb.js.map +1 -0
  31. package/dist/chunks/{json-elements-3tnyt5uZ.js → json-elements-BAmNBZok.js} +4 -4
  32. package/dist/chunks/json-elements-BAmNBZok.js.map +1 -0
  33. package/dist/chunks/{ontology-export-B9Tcf37D.js → ontology-export-Bab4eUA8.js} +2 -2
  34. package/dist/chunks/{ontology-export-B9Tcf37D.js.map → ontology-export-Bab4eUA8.js.map} +1 -1
  35. package/dist/chunks/{records-CQXT__mY.js → records-CdlvL4RO.js} +2 -2
  36. package/dist/chunks/{records-CQXT__mY.js.map → records-CdlvL4RO.js.map} +1 -1
  37. package/dist/chunks/{text-DmcUs5_Q.js → text-DzXjAiTl.js} +2 -2
  38. package/dist/chunks/{text-DmcUs5_Q.js.map → text-DzXjAiTl.js.map} +1 -1
  39. package/dist/csv.js +16 -6
  40. package/dist/csv.js.map +1 -1
  41. package/dist/cx.js +1 -1
  42. package/dist/cx2.js +2 -2
  43. package/dist/cys.js +1 -1
  44. package/dist/dot.js +1 -1
  45. package/dist/gexf.js +2 -2
  46. package/dist/gml.js +20 -11
  47. package/dist/gml.js.map +1 -1
  48. package/dist/graph-io.js +26 -26
  49. package/dist/graph-io.js.map +1 -1
  50. package/dist/graphml.js +2 -2
  51. package/dist/json.js +1 -1
  52. package/dist/neo4j.js +4 -4
  53. package/dist/neo4j.js.map +1 -1
  54. package/dist/obo.js +1 -1
  55. package/dist/pajek.js +1 -1
  56. package/dist/src/common/declared-types.d.ts.map +1 -1
  57. package/dist/src/common/declared-types.js +2 -2
  58. package/dist/src/common/declared-types.js.map +1 -1
  59. package/dist/src/common/escape.d.ts.map +1 -1
  60. package/dist/src/common/escape.js +6 -5
  61. package/dist/src/common/escape.js.map +1 -1
  62. package/dist/src/common/input.js.map +1 -1
  63. package/dist/src/common/json-elements.js +1 -1
  64. package/dist/src/common/json-elements.js.map +1 -1
  65. package/dist/src/common/lists.js +1 -1
  66. package/dist/src/common/lists.js.map +1 -1
  67. package/dist/src/common/xml.js +2 -2
  68. package/dist/src/common/xml.js.map +1 -1
  69. package/dist/src/common/zip.js.map +1 -1
  70. package/dist/src/formats/csv/exporter.js +1 -1
  71. package/dist/src/formats/csv/exporter.js.map +1 -1
  72. package/dist/src/formats/csv/importer.d.ts.map +1 -1
  73. package/dist/src/formats/csv/importer.js +20 -2
  74. package/dist/src/formats/csv/importer.js.map +1 -1
  75. package/dist/src/formats/cx/importer.js +2 -2
  76. package/dist/src/formats/cx/importer.js.map +1 -1
  77. package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
  78. package/dist/src/formats/cx2/exporter.js +84 -33
  79. package/dist/src/formats/cx2/exporter.js.map +1 -1
  80. package/dist/src/formats/cx2/importer.js +1 -1
  81. package/dist/src/formats/cx2/importer.js.map +1 -1
  82. package/dist/src/formats/cys/session.js +3 -3
  83. package/dist/src/formats/cys/session.js.map +1 -1
  84. package/dist/src/formats/dot/exporter.js +30 -4
  85. package/dist/src/formats/dot/exporter.js.map +1 -1
  86. package/dist/src/formats/dot/importer.js.map +1 -1
  87. package/dist/src/formats/gml/exporter.d.ts.map +1 -1
  88. package/dist/src/formats/gml/exporter.js +23 -6
  89. package/dist/src/formats/gml/exporter.js.map +1 -1
  90. package/dist/src/formats/gml/syntax.js +2 -2
  91. package/dist/src/formats/gml/syntax.js.map +1 -1
  92. package/dist/src/formats/json/dialect.js.map +1 -1
  93. package/dist/src/formats/neo4j/exporter.js +1 -1
  94. package/dist/src/formats/neo4j/exporter.js.map +1 -1
  95. package/dist/src/formats/pajek/exporter.js +1 -1
  96. package/dist/src/formats/pajek/exporter.js.map +1 -1
  97. package/dist/src/formats/pajek/importer.js.map +1 -1
  98. package/dist/src/formats/pajek/syntax.js +3 -3
  99. package/dist/src/formats/pajek/syntax.js.map +1 -1
  100. package/dist/src/formats/xgmml/exporter.js +1 -1
  101. package/dist/src/formats/xgmml/exporter.js.map +1 -1
  102. package/dist/src/formats/xgmml/values.js +1 -1
  103. package/dist/src/formats/xgmml/values.js.map +1 -1
  104. package/dist/src/registry.d.ts.map +1 -1
  105. package/dist/src/registry.js.map +1 -1
  106. package/dist/src/sniff.d.ts.map +1 -1
  107. package/dist/src/sniff.js.map +1 -1
  108. package/dist/src/types.d.ts.map +1 -1
  109. package/dist/src/types.js.map +1 -1
  110. package/dist/xgmml.js +2 -2
  111. package/package.json +2 -2
  112. package/src/common/declared-types.ts +3 -12
  113. package/src/common/escape.ts +6 -5
  114. package/src/common/input.ts +2 -2
  115. package/src/common/json-elements.ts +1 -1
  116. package/src/common/lists.ts +1 -1
  117. package/src/common/xml.ts +2 -2
  118. package/src/common/zip.ts +1 -1
  119. package/src/formats/csv/exporter.ts +1 -1
  120. package/src/formats/csv/importer.ts +21 -2
  121. package/src/formats/cx/importer.ts +2 -2
  122. package/src/formats/cx2/exporter.ts +124 -50
  123. package/src/formats/cx2/importer.ts +1 -1
  124. package/src/formats/cys/session.ts +3 -3
  125. package/src/formats/dot/exporter.ts +37 -4
  126. package/src/formats/dot/importer.ts +1 -1
  127. package/src/formats/gml/exporter.ts +24 -6
  128. package/src/formats/gml/syntax.ts +2 -2
  129. package/src/formats/json/dialect.ts +1 -1
  130. package/src/formats/neo4j/exporter.ts +2 -2
  131. package/src/formats/pajek/exporter.ts +1 -1
  132. package/src/formats/pajek/importer.ts +1 -1
  133. package/src/formats/pajek/syntax.ts +3 -3
  134. package/src/formats/xgmml/exporter.ts +1 -1
  135. package/src/formats/xgmml/values.ts +1 -1
  136. package/src/registry.ts +9 -10
  137. package/src/sniff.ts +2 -21
  138. package/src/types.ts +1 -7
  139. package/dist/chunks/escape-D0g6NNUy.js.map +0 -1
  140. package/dist/chunks/export-BTI4yQgy.js.map +0 -1
  141. package/dist/chunks/exporter-Cra2GYcN.js.map +0 -1
  142. package/dist/chunks/exporter-Dxh231ZF.js.map +0 -1
  143. package/dist/chunks/exporter-tne475KK.js.map +0 -1
  144. package/dist/chunks/importer-90YWhJoF.js.map +0 -1
  145. package/dist/chunks/importer-Bcl1d4xH.js.map +0 -1
  146. package/dist/chunks/importer-BfIsp1f9.js.map +0 -1
  147. package/dist/chunks/importer-C_TEA1zJ.js.map +0 -1
  148. package/dist/chunks/importer-DCjOvO7U.js.map +0 -1
  149. package/dist/chunks/importer-DfVu6j59.js.map +0 -1
  150. package/dist/chunks/json-elements-3tnyt5uZ.js.map +0 -1
package/dist/cx.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C, a, b, c, d } from "./chunks/importer-DCjOvO7U.js";
1
+ import { C, a, b, c, d } from "./chunks/importer-CIAzt-wo.js";
2
2
  export {
3
3
  C as CX_CAPABILITIES,
4
4
  a as CX_ISSUE,
package/dist/cx2.js CHANGED
@@ -1,5 +1,5 @@
1
- import { C, a, c } from "./chunks/exporter-Dxh231ZF.js";
2
- import { C as C2, c as c2 } from "./chunks/importer-DfVu6j59.js";
1
+ import { C, a, c } from "./chunks/exporter-Cl021ZIE.js";
2
+ import { C as C2, c as c2 } from "./chunks/importer-BVRE--Un.js";
3
3
  export {
4
4
  C as CX2_CAPABILITIES,
5
5
  C2 as CX2_ISSUE,
package/dist/cys.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C, a, b, c, d } from "./chunks/importer-90YWhJoF.js";
1
+ import { C, a, b, c, d } from "./chunks/importer-BSALvkui.js";
2
2
  export {
3
3
  C as CYS_CAPABILITIES,
4
4
  a as CYS_ISSUE,
package/dist/dot.js CHANGED
@@ -1,4 +1,4 @@
1
- import { D, a, d, b } from "./chunks/importer-BfIsp1f9.js";
1
+ import { D, a, d, b } from "./chunks/importer-BZB7iP9r.js";
2
2
  export {
3
3
  D as DOT_ISSUE,
4
4
  a as DOT_LOSS,
package/dist/gexf.js CHANGED
@@ -1,6 +1,6 @@
1
- import { bG as TIME_TEXT_ROLE, bH as TIME_TEXT_SUFFIX, al as resolveImportOptions, a8 as ImportReportBuilder, ao as reportSinkOptions, an as reportUnusedOptions, a4 as textChunks, E as EMPTY_INPUT_CODE, X as XML_SYNTAX_CODE, am as throwIfAborted, ar as IdCoercer, aq as DirectionResolver, f as STRAY_TEXT_CODE, N as NO_GRAPH_CODE, h as UNKNOWN_XML_ATTRIBUTE_CODE, l as MULTIPLE_GRAPHS_CODE, j as COUNT_MISMATCH_CODE, k as COUNT_HINT_CODE, o as DUPLICATE_ATTRIBUTE_CODE, aK as isWeightField, bI as declareAttribute, a1 as declareResolved, t as MISSING_ID_CODE, n as DUPLICATE_NODE_CODE, q as UNKNOWN_PARENT_CODE, ai as PARENT_CYCLE_CODE, s as MISSING_ENDPOINT_CODE, m as DUPLICATE_EDGE_ID_CODE, aL as parseWeightText, bJ as overflowsToInfinity, P as PRECISION_CODE, bK as parseDeclaredTemporal, bs as declareCompanion, bL as parseDeclaredValue, bM as losesPrecision, bN as parseTimeText, a3 as BAD_VALUE_CODE, bO as splitListText, g as UNKNOWN_ELEMENT_CODE, I as ID_MERGED_CODE, bP as timeTextCompanion, bQ as parseDecimalText, c as capabilities, L as LOSS, aE as sanitizeIds, p as pairFolding, e as explicitWeights, r as resolveExportOptions, a as checkCapabilities, bR as formatTimeValue, aa as formatF32, ab as formatF64, bS as mapDeclaredType, bT as joinListText, bU as formatTemporal, aG as formatInteger, b as plural, $ as agree, by as isCanonicalIntegerText, M as MIXED_DIRECTION_CODE, D as DIRECTION_FORCED_CODE, d as DIRECTION_REFUSED_CODE, S as SINK_OPTION_CODE, O as OPTION_IGNORED_CODE, R as ROLE_TAKEN_CODE, C as COLUMN_RENAMED_CODE, a_ as BAD_OPTIONS_CODE, B as BAD_DEFAULT_CODE, U as UNKNOWN_ATTR_TYPE_CODE, v as ENCODING_CONFLICT_CODE, w as UNKNOWN_ENCODING_CODE, x as ENCODING_FALLBACK_CODE, y as INVALID_ENCODING_CODE, z as INVALID_UTF8_CODE, A as COLUMN_TYPE_CODE, F as ELEMENT_ISSUE, G as INPUT_ISSUE } from "./chunks/export-BTI4yQgy.js";
1
+ import { bG as TIME_TEXT_ROLE, bH as TIME_TEXT_SUFFIX, al as resolveImportOptions, a8 as ImportReportBuilder, ao as reportSinkOptions, an as reportUnusedOptions, a4 as textChunks, E as EMPTY_INPUT_CODE, X as XML_SYNTAX_CODE, am as throwIfAborted, ar as IdCoercer, aq as DirectionResolver, f as STRAY_TEXT_CODE, N as NO_GRAPH_CODE, h as UNKNOWN_XML_ATTRIBUTE_CODE, l as MULTIPLE_GRAPHS_CODE, j as COUNT_MISMATCH_CODE, k as COUNT_HINT_CODE, o as DUPLICATE_ATTRIBUTE_CODE, aK as isWeightField, bI as declareAttribute, a1 as declareResolved, t as MISSING_ID_CODE, n as DUPLICATE_NODE_CODE, q as UNKNOWN_PARENT_CODE, ai as PARENT_CYCLE_CODE, s as MISSING_ENDPOINT_CODE, m as DUPLICATE_EDGE_ID_CODE, aL as parseWeightText, bJ as overflowsToInfinity, P as PRECISION_CODE, bK as parseDeclaredTemporal, bs as declareCompanion, bL as parseDeclaredValue, bM as losesPrecision, bN as parseTimeText, a3 as BAD_VALUE_CODE, bO as splitListText, g as UNKNOWN_ELEMENT_CODE, I as ID_MERGED_CODE, bP as timeTextCompanion, bQ as parseDecimalText, c as capabilities, L as LOSS, aE as sanitizeIds, p as pairFolding, e as explicitWeights, r as resolveExportOptions, a as checkCapabilities, bR as formatTimeValue, aa as formatF32, ab as formatF64, bS as mapDeclaredType, bT as joinListText, bU as formatTemporal, aG as formatInteger, b as plural, $ as agree, by as isCanonicalIntegerText, M as MIXED_DIRECTION_CODE, D as DIRECTION_FORCED_CODE, d as DIRECTION_REFUSED_CODE, S as SINK_OPTION_CODE, O as OPTION_IGNORED_CODE, R as ROLE_TAKEN_CODE, C as COLUMN_RENAMED_CODE, a_ as BAD_OPTIONS_CODE, B as BAD_DEFAULT_CODE, U as UNKNOWN_ATTR_TYPE_CODE, v as ENCODING_CONFLICT_CODE, w as UNKNOWN_ENCODING_CODE, x as ENCODING_FALLBACK_CODE, y as INVALID_ENCODING_CODE, z as INVALID_UTF8_CODE, A as COLUMN_TYPE_CODE, F as ELEMENT_ISSUE, G as INPUT_ISSUE } from "./chunks/export-CHd4tQE2.js";
2
2
  import { GraphFormatError, INVALID_INDEX, MAX_COUNT } from "@graphty/graph-format";
3
- import { t as tokenizeXml, f as xmlDeclaredEncoding, g as XmlEmptyInputError, X as XmlSyntaxError, s as sniffXmlText, l as localName, j as isWhitespace, x as xmlIllegalTextNotes, a as escapeXmlText, e as escapeXmlAttribute } from "./chunks/escape-D0g6NNUy.js";
3
+ import { t as tokenizeXml, f as xmlDeclaredEncoding, g as XmlEmptyInputError, X as XmlSyntaxError, s as sniffXmlText, l as localName, j as isWhitespace, x as xmlIllegalTextNotes, a as escapeXmlText, e as escapeXmlAttribute } from "./chunks/escape-D1HPTUrP.js";
4
4
  import { j as joinText, e as encodeChunks } from "./chunks/writer-DxjgHwSe.js";
5
5
  const GEXF_FORMAT = "gexf";
6
6
  const GEXF_NAMESPACES = {
package/dist/gml.js CHANGED
@@ -1,8 +1,8 @@
1
- import { ak as SYNTAX_CODE, b as plural, a as checkCapabilities, L as LOSS, p as pairFolding, $ as agree, c as capabilities, r as resolveExportOptions, ac as DictHeuristic, aG as formatInteger, bw as formatGmlReal, aE as sanitizeIds, bE as countMixedEdges, e as explicitWeights, bV as DICT_SAMPLE_ROWS, R as ROLE_TAKEN_CODE$1, aj as WIDENED_CODE$1, P as PRECISION_CODE$1, n as DUPLICATE_NODE_CODE$1, s as MISSING_ENDPOINT_CODE$1, t as MISSING_ID_CODE$1, l as MULTIPLE_GRAPHS_CODE, N as NO_GRAPH_CODE$1, al as resolveImportOptions, a8 as ImportReportBuilder, an as reportUnusedOptions, bC as readText, am as throwIfAborted, ao as reportSinkOptions, ap as graphChosen, ar as IdCoercer, aq as DirectionResolver, a0 as uniqueColumnName, C as COLUMN_RENAMED_CODE, as as weightFromValue, bW as reportWeightPrecision, aL as parseWeightText, a1 as declareResolved, M as MIXED_DIRECTION_CODE, D as DIRECTION_FORCED_CODE, d as DIRECTION_REFUSED_CODE, S as SINK_OPTION_CODE, O as OPTION_IGNORED_CODE, I as ID_MERGED_CODE, ae as AMBIGUOUS_GRAPH_NAME_CODE, af as GRAPH_NOT_FOUND_CODE, w as UNKNOWN_ENCODING_CODE, x as ENCODING_FALLBACK_CODE, y as INVALID_ENCODING_CODE, z as INVALID_UTF8_CODE, F as ELEMENT_ISSUE, G as INPUT_ISSUE } from "./chunks/export-BTI4yQgy.js";
1
+ import { ak as SYNTAX_CODE, b as plural, a as checkCapabilities, L as LOSS, p as pairFolding, $ as agree, c as capabilities, r as resolveExportOptions, ac as DictHeuristic, aG as formatInteger, bw as formatGmlReal, aE as sanitizeIds, bE as countMixedEdges, e as explicitWeights, bV as DICT_SAMPLE_ROWS, R as ROLE_TAKEN_CODE$1, aj as WIDENED_CODE$1, P as PRECISION_CODE$1, n as DUPLICATE_NODE_CODE$1, s as MISSING_ENDPOINT_CODE$1, t as MISSING_ID_CODE$1, l as MULTIPLE_GRAPHS_CODE, N as NO_GRAPH_CODE$1, al as resolveImportOptions, a8 as ImportReportBuilder, an as reportUnusedOptions, bC as readText, am as throwIfAborted, ao as reportSinkOptions, ap as graphChosen, ar as IdCoercer, aq as DirectionResolver, a0 as uniqueColumnName, C as COLUMN_RENAMED_CODE, as as weightFromValue, bW as reportWeightPrecision, aL as parseWeightText, a1 as declareResolved, M as MIXED_DIRECTION_CODE, D as DIRECTION_FORCED_CODE, d as DIRECTION_REFUSED_CODE, S as SINK_OPTION_CODE, O as OPTION_IGNORED_CODE, I as ID_MERGED_CODE, ae as AMBIGUOUS_GRAPH_NAME_CODE, af as GRAPH_NOT_FOUND_CODE, w as UNKNOWN_ENCODING_CODE, x as ENCODING_FALLBACK_CODE, y as INVALID_ENCODING_CODE, z as INVALID_UTF8_CODE, F as ELEMENT_ISSUE, G as INPUT_ISSUE } from "./chunks/export-CHd4tQE2.js";
2
2
  import { GraphFormatError, INVALID_INDEX } from "@graphty/graph-format";
3
- import { k as decodeGmlString, m as quoteGmlString } from "./chunks/escape-D0g6NNUy.js";
3
+ import { k as decodeGmlString, m as quoteGmlString } from "./chunks/escape-D1HPTUrP.js";
4
4
  import { j as joinText, e as encodeChunks } from "./chunks/writer-DxjgHwSe.js";
5
- import { i as importChosenGraph } from "./chunks/choose-BbJI55dx.js";
5
+ import { i as importChosenGraph } from "./chunks/choose-DrXtu_96.js";
6
6
  const TOKEN_WORD = 0;
7
7
  const TOKEN_INT = 1;
8
8
  const TOKEN_REAL = 2;
@@ -296,7 +296,7 @@ function numberOfText(text) {
296
296
  if (NON_FINITE_TEXT.test(text)) {
297
297
  const lower = text.toLowerCase();
298
298
  if (lower.endsWith("nan")) {
299
- return NaN;
299
+ return Number.NaN;
300
300
  }
301
301
  return lower.startsWith("-") ? -Infinity : Infinity;
302
302
  }
@@ -306,7 +306,7 @@ function isGmlKey(text) {
306
306
  return STRICT_KEY_TEXT.test(text);
307
307
  }
308
308
  function mangleGmlKey(text) {
309
- const body = text.replace(/[^0-9A-Za-z_]/g, "_");
309
+ const body = text.replaceAll(/\W/g, "_");
310
310
  return /^[A-Za-z]/.test(body) ? body : `x${body}`;
311
311
  }
312
312
  function parseRecord(tokens, open) {
@@ -473,17 +473,26 @@ function isTopLevel(column) {
473
473
  function versionText(text) {
474
474
  return NUMBER_TEXT.test(text) ? text : quoteGmlString(text);
475
475
  }
476
+ function labelRoleColumn(columns, label, used) {
477
+ if (label !== "node" && label !== "edge") {
478
+ return void 0;
479
+ }
480
+ const column = columns.find((c) => c.meta.role === "label");
481
+ if (column !== void 0) {
482
+ used.add("label");
483
+ }
484
+ return column;
485
+ }
476
486
  function selectColumns(table, reserved, label, plan, notes, filter = () => true) {
477
487
  const used = new Set(reserved);
478
488
  const out = [];
479
- for (const column of table) {
480
- if (!isWritten(column) || !filter(column)) {
481
- continue;
482
- }
483
- const preferred = preferredKey(column.meta);
489
+ const columns = [...table].filter((c) => isWritten(c) && filter(c));
490
+ const labelRole = labelRoleColumn(columns, label, used);
491
+ for (const column of columns) {
492
+ const preferred = column === labelRole ? "label" : preferredKey(column.meta);
484
493
  let key = preferred;
485
494
  const valid = isGmlKey(preferred);
486
- const taken = used.has(preferred);
495
+ const taken = column !== labelRole && used.has(preferred);
487
496
  if (!valid || taken) {
488
497
  const code = valid ? RESERVED_KEY_CODE : INVALID_KEY_CODE;
489
498
  let why = "is not a GML key";