@walkthru-earth/objex-utils 1.2.0 → 1.2.1

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.
package/dist/index.cjs CHANGED
@@ -1357,6 +1357,11 @@ function buildEndpointFromTemplate(id, region) {
1357
1357
  if (!def?.endpointTemplate) return "";
1358
1358
  return def.endpointTemplate.replace("{region}", region);
1359
1359
  }
1360
+ function resolveProviderEndpoint(provider, region) {
1361
+ const def = PROVIDERS[provider];
1362
+ if (!def?.endpointTemplate) return "";
1363
+ return buildEndpointFromTemplate(provider, region || def.defaultRegion);
1364
+ }
1360
1365
  function buildProviderBaseUrl(provider, endpoint, bucket, region) {
1361
1366
  if (endpoint) {
1362
1367
  return `${endpoint.replace(/\/$/, "")}/${bucket}`;
@@ -1371,6 +1376,15 @@ function buildProviderBaseUrl(provider, endpoint, bucket, region) {
1371
1376
  function isGcsProvider(provider, endpoint) {
1372
1377
  return provider === "gcs" || !!endpoint && /storage\.googleapis\.com/i.test(endpoint);
1373
1378
  }
1379
+ function getAccessMode(conn) {
1380
+ if (conn.provider === "azure") return "sas-https";
1381
+ if (conn.anonymous) return "public-https";
1382
+ return "signed-s3";
1383
+ }
1384
+ function isPubliclyStreamable(conn) {
1385
+ const mode = getAccessMode(conn);
1386
+ return mode === "public-https" || mode === "sas-https";
1387
+ }
1374
1388
 
1375
1389
  // ../../src/lib/storage/url-adapter.ts
1376
1390
  var UrlAdapter = class {
@@ -1640,6 +1654,17 @@ function formatValue(value) {
1640
1654
  }
1641
1655
 
1642
1656
  // ../../src/lib/utils/export.ts
1657
+ function triggerDownload(content, filename, mimeType) {
1658
+ const blob = new Blob([content], { type: mimeType });
1659
+ const url = URL.createObjectURL(blob);
1660
+ const a = document.createElement("a");
1661
+ a.href = url;
1662
+ a.download = filename;
1663
+ document.body.appendChild(a);
1664
+ a.click();
1665
+ document.body.removeChild(a);
1666
+ URL.revokeObjectURL(url);
1667
+ }
1643
1668
  function formatCellValue(value) {
1644
1669
  if (value === null || value === void 0) return "";
1645
1670
  if (value instanceof Date) return value.toISOString();
@@ -1674,6 +1699,20 @@ function serializeToJson(columns, rows) {
1674
1699
  });
1675
1700
  return JSON.stringify(data, jsonReplacerBigInt, 2);
1676
1701
  }
1702
+ function exportToCsv(columns, rows, filename) {
1703
+ triggerDownload(
1704
+ serializeToCsv(columns, rows),
1705
+ filename.endsWith(".csv") ? filename : `${filename}.csv`,
1706
+ "text/csv;charset=utf-8;"
1707
+ );
1708
+ }
1709
+ function exportToJson(columns, rows, filename) {
1710
+ triggerDownload(
1711
+ serializeToJson(columns, rows),
1712
+ filename.endsWith(".json") ? filename : `${filename}.json`,
1713
+ "application/json"
1714
+ );
1715
+ }
1677
1716
 
1678
1717
  // ../../src/lib/utils/file-sort.ts
1679
1718
  function sortFileEntries(entries, config) {
@@ -3000,7 +3039,10 @@ var GEO_TYPE_KEYWORDS = [
3000
3039
  "geometrycollection",
3001
3040
  "sdo_geometry"
3002
3041
  ];
3003
- var GEO_NAME_HINTS = ["geom", "geometry", "geo_", "_geo", "wkb", "wkt", "shape", "spatial"];
3042
+ var GEO_NAME_HINTS = ["geom", "geometry", "wkb", "wkt", "shape", "spatial", "geo"];
3043
+ function tokenizeColumnName(name) {
3044
+ return name.replace(/([a-z])([A-Z])/g, "$1_$2").replace(/([a-z])([0-9])/g, "$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);
3045
+ }
3004
3046
  var GEOJSON_TYPES = [
3005
3047
  "Point",
3006
3048
  "LineString",
@@ -3030,14 +3072,14 @@ function findGeoColumn(schema) {
3030
3072
  if (GEO_NAMES.includes(f.name.toLowerCase())) return f.name;
3031
3073
  }
3032
3074
  for (const f of schema) {
3033
- const n = f.name.toLowerCase();
3075
+ const tokens = tokenizeColumnName(f.name);
3034
3076
  const t = f.type.toLowerCase();
3035
3077
  const isBinary = t.includes("blob") || t.includes("binary") || t.includes("bytea");
3036
- if (isBinary && GEO_NAME_HINTS.some((hint) => n.includes(hint))) return f.name;
3078
+ if (isBinary && tokens.some((tok) => GEO_NAME_HINTS.includes(tok))) return f.name;
3037
3079
  }
3038
3080
  for (const f of schema) {
3039
- const n = f.name.toLowerCase();
3040
- if (GEO_NAME_HINTS.some((hint) => n.includes(hint))) return f.name;
3081
+ const tokens = tokenizeColumnName(f.name);
3082
+ if (tokens.some((tok) => GEO_NAME_HINTS.includes(tok))) return f.name;
3041
3083
  }
3042
3084
  return null;
3043
3085
  }
@@ -3117,6 +3159,8 @@ exports.clampBounds = clampBounds;
3117
3159
  exports.classifyType = classifyType;
3118
3160
  exports.describeParseResult = describeParseResult;
3119
3161
  exports.escapeCsvField = escapeCsvField;
3162
+ exports.exportToCsv = exportToCsv;
3163
+ exports.exportToJson = exportToJson;
3120
3164
  exports.extractBounds = extractBounds;
3121
3165
  exports.extractEpsgFromGeoMeta = extractEpsgFromGeoMeta;
3122
3166
  exports.extractGeometryTypes = extractGeometryTypes;
@@ -3126,6 +3170,7 @@ exports.formatDate = formatDate;
3126
3170
  exports.formatFileSize = formatFileSize;
3127
3171
  exports.formatValue = formatValue;
3128
3172
  exports.generateHexDump = generateHexDump;
3173
+ exports.getAccessMode = getAccessMode;
3129
3174
  exports.getDuckDbReadFn = getDuckDbReadFn;
3130
3175
  exports.getFileExtension = getFileExtension;
3131
3176
  exports.getFileTypeInfo = getFileTypeInfo;
@@ -3137,6 +3182,7 @@ exports.handleLoadError = handleLoadError;
3137
3182
  exports.interpolateTemplates = interpolateTemplates;
3138
3183
  exports.isCloudNativeFormat = isCloudNativeFormat;
3139
3184
  exports.isGcsProvider = isGcsProvider;
3185
+ exports.isPubliclyStreamable = isPubliclyStreamable;
3140
3186
  exports.isQueryable = isQueryable;
3141
3187
  exports.jsonReplacerBigInt = jsonReplacerBigInt;
3142
3188
  exports.loadFromStorage = loadFromStorage;
@@ -3149,6 +3195,7 @@ exports.parseWKB = parseWKB;
3149
3195
  exports.persistToStorage = persistToStorage;
3150
3196
  exports.readParquetMetadata = readParquetMetadata;
3151
3197
  exports.resolveCloudUrl = resolveCloudUrl;
3198
+ exports.resolveProviderEndpoint = resolveProviderEndpoint;
3152
3199
  exports.safeClamp = safeClamp;
3153
3200
  exports.safeDecodeURIComponent = safeDecodeURIComponent;
3154
3201
  exports.serializeToCsv = serializeToCsv;