@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 +52 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -1
- package/dist/index.d.ts +42 -1
- package/dist/index.js +48 -6
- package/dist/index.js.map +1 -1
- package/docs/cog.md +14 -225
- package/docs/storage.md +2 -0
- package/package.json +9 -4
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", "
|
|
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
|
|
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 &&
|
|
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
|
|
3040
|
-
if (
|
|
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;
|