@math.gl/crs 4.2.0-alpha.5

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.
@@ -0,0 +1,610 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /** Syntax error containing a source offset and one-based line and column. */
5
+ export class WKTCRSSyntaxError extends SyntaxError {
6
+ /** Create a WKT syntax error at a source location. */
7
+ constructor(message, source, offset) {
8
+ const location = getSourceLocation(source, offset);
9
+ super(`${message} at ${location.line}:${location.column}`);
10
+ this.name = 'WKTCRSSyntaxError';
11
+ this.offset = offset;
12
+ this.line = location.line;
13
+ this.column = location.column;
14
+ }
15
+ }
16
+ /** Error thrown when strict WKT profile validation fails. */
17
+ export class WKTCRSValidationError extends Error {
18
+ /** Create an error from one or more validation issues. */
19
+ constructor(issues) {
20
+ super(issues[0]?.message || 'WKT validation failed');
21
+ this.name = 'WKTCRSValidationError';
22
+ this.issues = issues;
23
+ }
24
+ }
25
+ const NUMBER_PATTERN = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[Ee][+-]?\d+)?$/;
26
+ const KEYWORD_PATTERN = /^[A-Za-z][A-Za-z0-9_]*/;
27
+ const WKT1_ROOT_KEYWORDS = new Set([
28
+ 'COMPD_CS',
29
+ 'CONCAT_MT',
30
+ 'FITTED_CS',
31
+ 'GEOCCS',
32
+ 'GEOGCS',
33
+ 'INVERSE_MT',
34
+ 'LOCAL_CS',
35
+ 'PARAM_MT',
36
+ 'PASSTHROUGH_MT',
37
+ 'PROJCS',
38
+ 'VERT_CS'
39
+ ]);
40
+ const WKT1_KEYWORDS = new Set([
41
+ ...WKT1_ROOT_KEYWORDS,
42
+ 'AUTHORITY',
43
+ 'AXIS',
44
+ 'CONCAT_MT',
45
+ 'DATUM',
46
+ 'INVERSE_MT',
47
+ 'LOCAL_DATUM',
48
+ 'PARAMETER',
49
+ 'PARAM_MT',
50
+ 'PASSTHROUGH_MT',
51
+ 'PRIMEM',
52
+ 'PROJECTION',
53
+ 'SPHEROID',
54
+ 'TOWGS84',
55
+ 'UNIT',
56
+ 'VERT_DATUM'
57
+ ]);
58
+ const GDAL_WKT1_ROOT_KEYWORDS = new Set(WKT1_ROOT_KEYWORDS);
59
+ const GDAL_WKT1_KEYWORDS = new Set([...WKT1_KEYWORDS, 'EXTENSION']);
60
+ const ESRI_WKT1_ROOT_KEYWORDS = new Set([...WKT1_ROOT_KEYWORDS, 'COMPDCS', 'LOCALCS', 'VERTCS']);
61
+ const ESRI_WKT1_KEYWORDS = new Set([...WKT1_KEYWORDS, 'COMPDCS', 'LOCALCS', 'VDATUM', 'VERTCS']);
62
+ const WKT2_2015_ROOT_KEYWORDS = new Set([
63
+ 'BOUNDCRS',
64
+ 'COMPOUNDCRS',
65
+ 'COORDINATEOPERATION',
66
+ 'ENGCRS',
67
+ 'ENGINEERINGCRS',
68
+ 'GEODCRS',
69
+ 'GEODETICCRS',
70
+ 'PARAMETRICCRS',
71
+ 'PROJCRS',
72
+ 'PROJECTEDCRS',
73
+ 'TIMECRS',
74
+ 'VERTCRS',
75
+ 'VERTICALCRS'
76
+ ]);
77
+ const WKT2_2019_ROOT_KEYWORDS = new Set([
78
+ ...WKT2_2015_ROOT_KEYWORDS,
79
+ 'CONCATENATEDOPERATION',
80
+ 'COORDINATEMETADATA',
81
+ 'DERIVEDPROJCRS',
82
+ 'GEOGCRS',
83
+ 'GEOGRAPHICCRS',
84
+ 'POINTMOTIONOPERATION'
85
+ ]);
86
+ // WKT is intentionally represented as a generic syntax tree. This set supports strict profile
87
+ // checking without restricting tolerant parsing of vendor extensions.
88
+ const WKT2_KEYWORDS = new Set([
89
+ ...WKT2_2019_ROOT_KEYWORDS,
90
+ 'ABRIDGEDTRANSFORMATION',
91
+ 'ANCHOR',
92
+ 'ANGLEUNIT',
93
+ 'AREA',
94
+ 'AXIS',
95
+ 'BASEENGCRS',
96
+ 'BASEGEODCRS',
97
+ 'BASEGEOGCRS',
98
+ 'BASEPARAMCRS',
99
+ 'BASEPROJCRS',
100
+ 'BASETIMECRS',
101
+ 'BASEVERTCRS',
102
+ 'BBOX',
103
+ 'BEARING',
104
+ 'CALENDAR',
105
+ 'CITATION',
106
+ 'CONVERSION',
107
+ 'COORDEPOCH',
108
+ 'CS',
109
+ 'DATUM',
110
+ 'DERIVINGCONVERSION',
111
+ 'DYNAMIC',
112
+ 'EDATUM',
113
+ 'ELLIPSOID',
114
+ 'ENGINEERINGDATUM',
115
+ 'ENSEMBLE',
116
+ 'ENSEMBLEACCURACY',
117
+ 'EPOCH',
118
+ 'FRAMEEPOCH',
119
+ 'GEODETICDATUM',
120
+ 'GEOIDMODEL',
121
+ 'ID',
122
+ 'INTERPOLATIONCRS',
123
+ 'LENGTHUNIT',
124
+ 'MEMBER',
125
+ 'MERIDIAN',
126
+ 'METHOD',
127
+ 'MODEL',
128
+ 'OPERATIONACCURACY',
129
+ 'ORDER',
130
+ 'PARAMETER',
131
+ 'PARAMETERFILE',
132
+ 'PARAMETRICDATUM',
133
+ 'PARAMETRICUNIT',
134
+ 'PDATUM',
135
+ 'PRIMEM',
136
+ 'PRIMEMERIDIAN',
137
+ 'REMARK',
138
+ 'SCALEUNIT',
139
+ 'SCOPE',
140
+ 'SOURCECRS',
141
+ 'STEP',
142
+ 'TARGETCRS',
143
+ 'TDATUM',
144
+ 'TEMPORALQUANTITY',
145
+ 'TIMEEXTENT',
146
+ 'TIMEORIGIN',
147
+ 'TIMEUNIT',
148
+ 'TIMEDATUM',
149
+ 'TRIAXIAL',
150
+ 'TRF',
151
+ 'URI',
152
+ 'USAGE',
153
+ 'VDATUM',
154
+ 'VERSION',
155
+ 'VERTICALDATUM',
156
+ 'VERTICALEXTENT',
157
+ 'VELOCITYGRID',
158
+ 'VRF'
159
+ ]);
160
+ const WKT2_2019_ADDITION_KEYWORDS = new Set([
161
+ 'BASEGEOGCRS',
162
+ 'CALENDAR',
163
+ 'CONCATENATEDOPERATION',
164
+ 'COORDEPOCH',
165
+ 'COORDINATEMETADATA',
166
+ 'DERIVEDPROJCRS',
167
+ 'DYNAMIC',
168
+ 'ENSEMBLE',
169
+ 'ENSEMBLEACCURACY',
170
+ 'EPOCH',
171
+ 'FRAMEEPOCH',
172
+ 'GEOGCRS',
173
+ 'GEOGRAPHICCRS',
174
+ 'GEOIDMODEL',
175
+ 'MEMBER',
176
+ 'MODEL',
177
+ 'POINTMOTIONOPERATION',
178
+ 'STEP',
179
+ 'TEMPORALQUANTITY',
180
+ 'TRF',
181
+ 'TRIAXIAL',
182
+ 'VELOCITYGRID',
183
+ 'VRF'
184
+ ]);
185
+ const WKT2_2015_KEYWORDS = new Set([...WKT2_KEYWORDS].filter(keyword => !WKT2_2019_ADDITION_KEYWORDS.has(keyword)));
186
+ const PROFILE_ROOT_KEYWORDS = {
187
+ wkt1: WKT1_ROOT_KEYWORDS,
188
+ gdal: GDAL_WKT1_ROOT_KEYWORDS,
189
+ esri: ESRI_WKT1_ROOT_KEYWORDS,
190
+ 'wkt2:2015': WKT2_2015_ROOT_KEYWORDS,
191
+ 'wkt2:2019': WKT2_2019_ROOT_KEYWORDS
192
+ };
193
+ const PROFILE_KEYWORDS = {
194
+ wkt1: WKT1_KEYWORDS,
195
+ gdal: GDAL_WKT1_KEYWORDS,
196
+ esri: ESRI_WKT1_KEYWORDS,
197
+ 'wkt2:2015': WKT2_2015_KEYWORDS,
198
+ 'wkt2:2019': WKT2_KEYWORDS
199
+ };
200
+ /** Parse WKT1, WKT2, or a compatible vendor WKT serialization. */
201
+ export function parseWKTCRS(text, options) {
202
+ const parser = new WKTParser(text);
203
+ const ast = { type: 'wkt-crs', root: parser.parse() };
204
+ if (options?.strict) {
205
+ const issues = validateWKTCRS(ast, {
206
+ profile: options.profile,
207
+ allowExtensions: false
208
+ });
209
+ if (issues.length > 0) {
210
+ throw new WKTCRSValidationError(issues);
211
+ }
212
+ }
213
+ return ast;
214
+ }
215
+ /** Encode a WKT syntax tree without changing value lexemes or keyword spelling. */
216
+ export function encodeWKTCRS(ast, options) {
217
+ if (!ast || ast.type !== 'wkt-crs' || ast.root?.type !== 'node') {
218
+ throw new TypeError('encodeWKTCRS expects a WKTCRSAst');
219
+ }
220
+ const format = options?.format || 'compact';
221
+ const indent = options?.indent ?? 2;
222
+ if (!Number.isInteger(indent) || indent < 0) {
223
+ throw new RangeError('WKT indentation must be a non-negative integer');
224
+ }
225
+ validateEncodableNode(ast.root);
226
+ return encodeNode(ast.root, format, indent, 0);
227
+ }
228
+ /** Validate root keywords, known profile keywords, and unambiguous value shapes. */
229
+ export function validateWKTCRS(ast, options) {
230
+ if (!ast || ast.type !== 'wkt-crs' || ast.root?.type !== 'node') {
231
+ throw new TypeError('validateWKTCRS expects a WKTCRSAst');
232
+ }
233
+ const profile = resolveProfile(ast.root.keyword, options?.profile || 'auto');
234
+ const rootKeywords = PROFILE_ROOT_KEYWORDS[profile];
235
+ const knownKeywords = PROFILE_KEYWORDS[profile];
236
+ const issues = [];
237
+ const rootKeyword = ast.root.keyword.toUpperCase();
238
+ if (!rootKeywords.has(rootKeyword)) {
239
+ issues.push({
240
+ code: 'invalid-root',
241
+ message: `${ast.root.keyword} is not a ${profile} root keyword`,
242
+ path: [],
243
+ keyword: ast.root.keyword
244
+ });
245
+ }
246
+ visitNode(ast.root, [], node => {
247
+ const keyword = node.node.keyword.toUpperCase();
248
+ if (!options?.allowExtensions && !knownKeywords.has(keyword)) {
249
+ issues.push({
250
+ code: 'unknown-keyword',
251
+ message: `${node.node.keyword} is not defined by the ${profile} profile`,
252
+ path: node.path,
253
+ keyword: node.node.keyword
254
+ });
255
+ }
256
+ if (node.node.values.length === 0) {
257
+ issues.push({
258
+ code: 'empty-node',
259
+ message: `${node.node.keyword} must contain at least one value`,
260
+ path: node.path,
261
+ keyword: node.node.keyword
262
+ });
263
+ }
264
+ const grammarMessage = validateNodeValues(node.node);
265
+ if (grammarMessage) {
266
+ issues.push({
267
+ code: 'invalid-value',
268
+ message: grammarMessage,
269
+ path: node.path,
270
+ keyword: node.node.keyword
271
+ });
272
+ }
273
+ });
274
+ return issues;
275
+ }
276
+ class WKTParser {
277
+ constructor(source) {
278
+ this.offset = 0;
279
+ this.source = source;
280
+ }
281
+ parse() {
282
+ this.skipWhitespace();
283
+ const root = this.parseNode();
284
+ this.skipWhitespace();
285
+ if (this.offset !== this.source.length) {
286
+ this.fail('Unexpected content after WKT root');
287
+ }
288
+ return root;
289
+ }
290
+ parseNode() {
291
+ const keyword = this.parseKeyword();
292
+ return this.parseNodeAfterKeyword(keyword);
293
+ }
294
+ parseNodeAfterKeyword(keyword) {
295
+ this.skipWhitespace();
296
+ const opening = this.source[this.offset];
297
+ if (opening !== '[' && opening !== '(') {
298
+ this.fail(`Expected '[' or '(' after ${keyword}`);
299
+ }
300
+ this.offset++;
301
+ const delimiter = opening === '[' ? 'bracket' : 'parenthesis';
302
+ const closing = opening === '[' ? ']' : ')';
303
+ const values = [];
304
+ this.skipWhitespace();
305
+ if (this.source[this.offset] === closing) {
306
+ this.offset++;
307
+ return { type: 'node', keyword, delimiter, values };
308
+ }
309
+ while (this.offset < this.source.length) {
310
+ values.push(this.parseValue());
311
+ this.skipWhitespace();
312
+ const character = this.source[this.offset];
313
+ if (character === ',') {
314
+ this.offset++;
315
+ this.skipWhitespace();
316
+ if (this.source[this.offset] === closing) {
317
+ this.fail('Expected a WKT value after comma');
318
+ }
319
+ continue;
320
+ }
321
+ if (character === closing) {
322
+ this.offset++;
323
+ return { type: 'node', keyword, delimiter, values };
324
+ }
325
+ if (character === ']' || character === ')') {
326
+ this.fail(`Expected '${closing}' to close ${keyword}`);
327
+ }
328
+ this.fail(`Expected ',' or '${closing}' in ${keyword}`);
329
+ }
330
+ this.fail(`Unterminated ${keyword} node`);
331
+ }
332
+ parseValue() {
333
+ this.skipWhitespace();
334
+ const character = this.source[this.offset];
335
+ if (character === '"') {
336
+ return this.parseString();
337
+ }
338
+ const start = this.offset;
339
+ while (this.offset < this.source.length && !/[\s,\[\]()]/.test(this.source[this.offset])) {
340
+ this.offset++;
341
+ }
342
+ if (start === this.offset) {
343
+ this.fail('Expected a WKT value');
344
+ }
345
+ const value = this.source.slice(start, this.offset);
346
+ this.skipWhitespace();
347
+ if (this.source[this.offset] === '[' || this.source[this.offset] === '(') {
348
+ if (!/^[A-Za-z][A-Za-z0-9_]*$/.test(value)) {
349
+ this.fail(`Invalid WKT keyword '${value}'`);
350
+ }
351
+ return this.parseNodeAfterKeyword(value);
352
+ }
353
+ if (NUMBER_PATTERN.test(value)) {
354
+ return { type: 'number', value: Number(value), raw: value };
355
+ }
356
+ return { type: 'enumeration', value };
357
+ }
358
+ parseKeyword() {
359
+ const match = this.source.slice(this.offset).match(KEYWORD_PATTERN);
360
+ if (!match) {
361
+ this.fail('Expected a WKT keyword');
362
+ }
363
+ this.offset += match[0].length;
364
+ return match[0];
365
+ }
366
+ parseString() {
367
+ this.offset++;
368
+ let value = '';
369
+ while (this.offset < this.source.length) {
370
+ const character = this.source[this.offset++];
371
+ if (character === '"') {
372
+ if (this.source[this.offset] === '"') {
373
+ value += '"';
374
+ this.offset++;
375
+ continue;
376
+ }
377
+ return { type: 'string', value };
378
+ }
379
+ value += character;
380
+ }
381
+ this.fail('Unterminated WKT string');
382
+ }
383
+ skipWhitespace() {
384
+ while (this.offset < this.source.length && /\s/.test(this.source[this.offset])) {
385
+ this.offset++;
386
+ }
387
+ }
388
+ fail(message) {
389
+ throw new WKTCRSSyntaxError(message, this.source, this.offset);
390
+ }
391
+ }
392
+ function encodeNode(node, format, indent, depth) {
393
+ const opening = node.delimiter === 'bracket' ? '[' : '(';
394
+ const closing = node.delimiter === 'bracket' ? ']' : ')';
395
+ if (node.values.length === 0) {
396
+ return `${node.keyword}${opening}${closing}`;
397
+ }
398
+ if (format === 'compact') {
399
+ return `${node.keyword}${opening}${node.values
400
+ .map(value => encodeValue(value, format, indent, depth + 1))
401
+ .join(',')}${closing}`;
402
+ }
403
+ const indentation = ' '.repeat(indent * (depth + 1));
404
+ const closingIndentation = ' '.repeat(indent * depth);
405
+ const values = node.values
406
+ .map(value => `${indentation}${encodeValue(value, format, indent, depth + 1)}`)
407
+ .join(',\n');
408
+ return `${node.keyword}${opening}\n${values}\n${closingIndentation}${closing}`;
409
+ }
410
+ function encodeValue(value, format, indent, depth) {
411
+ switch (value.type) {
412
+ case 'node':
413
+ return encodeNode(value, format, indent, depth);
414
+ case 'string':
415
+ return `"${value.value.replace(/"/g, '""')}"`;
416
+ case 'number':
417
+ return value.raw;
418
+ case 'enumeration':
419
+ return value.value;
420
+ default:
421
+ throw new TypeError('Invalid WKT value type');
422
+ }
423
+ }
424
+ function validateEncodableNode(node) {
425
+ if (!/^[A-Za-z][A-Za-z0-9_]*$/.test(node.keyword)) {
426
+ throw new TypeError(`Invalid WKT keyword: ${node.keyword}`);
427
+ }
428
+ if (node.delimiter !== 'bracket' && node.delimiter !== 'parenthesis') {
429
+ throw new TypeError(`Invalid WKT delimiter: ${node.delimiter}`);
430
+ }
431
+ if (!Array.isArray(node.values)) {
432
+ throw new TypeError(`Invalid WKT values for ${node.keyword}`);
433
+ }
434
+ for (const value of node.values) {
435
+ if (!value || typeof value !== 'object') {
436
+ throw new TypeError(`Invalid WKT value in ${node.keyword}`);
437
+ }
438
+ switch (value.type) {
439
+ case 'node':
440
+ validateEncodableNode(value);
441
+ break;
442
+ case 'string':
443
+ if (typeof value.value !== 'string') {
444
+ throw new TypeError(`Invalid WKT string in ${node.keyword}`);
445
+ }
446
+ break;
447
+ case 'number':
448
+ if (typeof value.raw !== 'string' || !NUMBER_PATTERN.test(value.raw)) {
449
+ throw new TypeError(`Invalid WKT number lexeme: ${value.raw}`);
450
+ }
451
+ break;
452
+ case 'enumeration':
453
+ if (typeof value.value !== 'string' || !value.value || /[\s,\[\]()"]/.test(value.value)) {
454
+ throw new TypeError(`Invalid WKT enumeration: ${value.value}`);
455
+ }
456
+ break;
457
+ default:
458
+ throw new TypeError(`Invalid WKT value in ${node.keyword}`);
459
+ }
460
+ }
461
+ }
462
+ function resolveProfile(rootKeyword, profile) {
463
+ if (profile !== 'auto') {
464
+ return profile;
465
+ }
466
+ return WKT1_ROOT_KEYWORDS.has(rootKeyword.toUpperCase()) ? 'wkt1' : 'wkt2:2019';
467
+ }
468
+ function validateNodeValues(node) {
469
+ const keyword = node.keyword.toUpperCase();
470
+ const values = node.values;
471
+ const typeAt = (index, ...types) => Boolean(values[index] && types.includes(values[index].type));
472
+ const exact = (length, ...types) => values.length === length && types.every((type, index) => typeAt(index, type));
473
+ if ([
474
+ 'ANGLEUNIT',
475
+ 'LENGTHUNIT',
476
+ 'PARAMETRICUNIT',
477
+ 'SCALEUNIT',
478
+ 'TIMEUNIT',
479
+ 'TEMPORALQUANTITY',
480
+ 'UNIT'
481
+ ].includes(keyword) &&
482
+ !(values.length >= 2 && typeAt(0, 'string') && typeAt(1, 'number'))) {
483
+ return `${node.keyword} must start with a quoted name and numeric conversion factor`;
484
+ }
485
+ if (keyword === 'CS' && !exact(2, 'enumeration', 'number')) {
486
+ return `${node.keyword} must contain a coordinate-system type and dimension`;
487
+ }
488
+ if (keyword === 'BBOX' && !exact(4, 'number', 'number', 'number', 'number')) {
489
+ return `${node.keyword} must contain four numeric bounds`;
490
+ }
491
+ if ([
492
+ 'ENSEMBLEACCURACY',
493
+ 'EPOCH',
494
+ 'COORDEPOCH',
495
+ 'FRAMEEPOCH',
496
+ 'OPERATIONACCURACY',
497
+ 'ORDER'
498
+ ].includes(keyword) &&
499
+ !exact(1, 'number')) {
500
+ return `${node.keyword} must contain one number`;
501
+ }
502
+ if (['ANCHOR', 'AREA', 'CALENDAR', 'CITATION', 'REMARK', 'SCOPE', 'URI', 'VERSION'].includes(keyword) &&
503
+ !exact(1, 'string')) {
504
+ return `${node.keyword} must contain one quoted string`;
505
+ }
506
+ if (['ELLIPSOID', 'SPHEROID', 'TRIAXIAL'].includes(keyword) &&
507
+ !(values.length >= 3 && typeAt(0, 'string') && typeAt(1, 'number') && typeAt(2, 'number'))) {
508
+ return `${node.keyword} must start with a quoted name and numeric ellipsoid axes`;
509
+ }
510
+ if (['PARAMETER'].includes(keyword) &&
511
+ !(values.length >= 2 && typeAt(0, 'string') && typeAt(1, 'number'))) {
512
+ return `${node.keyword} must start with a quoted name and numeric value`;
513
+ }
514
+ if (keyword === 'PARAMETERFILE' && !exact(2, 'string', 'string')) {
515
+ return `${node.keyword} must contain a quoted name and file name`;
516
+ }
517
+ if (['AUTHORITY', 'ID'].includes(keyword) &&
518
+ !(values.length >= 2 && typeAt(0, 'string') && typeAt(1, 'string', 'number'))) {
519
+ return `${node.keyword} must start with a quoted authority and identifier`;
520
+ }
521
+ if (['AXIS'].includes(keyword) &&
522
+ !(values.length >= 2 && typeAt(0, 'string') && typeAt(1, 'enumeration'))) {
523
+ return `${node.keyword} must start with a quoted name and axis direction`;
524
+ }
525
+ if (['METHOD', 'PROJECTION'].includes(keyword) && !(values.length >= 1 && typeAt(0, 'string'))) {
526
+ return `${node.keyword} must start with a quoted name`;
527
+ }
528
+ if (keyword === 'TIMEEXTENT') {
529
+ const isTemporalValue = (index) => typeAt(index, 'enumeration', 'string');
530
+ if (values.length !== 2 || !isTemporalValue(0) || !isTemporalValue(1)) {
531
+ return `${node.keyword} must contain two date-time or quoted values`;
532
+ }
533
+ }
534
+ if (keyword === 'VERTICALEXTENT') {
535
+ if (values.length < 2 ||
536
+ values.length > 3 ||
537
+ !typeAt(0, 'number') ||
538
+ !typeAt(1, 'number') ||
539
+ (values.length === 3 && !typeAt(2, 'node'))) {
540
+ return `${node.keyword} must contain two numeric bounds and an optional unit`;
541
+ }
542
+ }
543
+ if (keyword === 'COORDINATEMETADATA') {
544
+ if (values.length < 1 ||
545
+ values.length > 2 ||
546
+ !typeAt(0, 'node') ||
547
+ (values.length === 2 &&
548
+ (!typeAt(1, 'node') ||
549
+ !['EPOCH', 'COORDEPOCH'].includes(values[1].keyword.toUpperCase())))) {
550
+ return `${node.keyword} must contain a CRS and an optional coordinate epoch`;
551
+ }
552
+ }
553
+ if (keyword === 'BOUNDCRS') {
554
+ const childKeywords = values
555
+ .slice(0, 3)
556
+ .map(value => (value.type === 'node' ? value.keyword.toUpperCase() : ''));
557
+ if (childKeywords[0] !== 'SOURCECRS' ||
558
+ childKeywords[1] !== 'TARGETCRS' ||
559
+ childKeywords[2] !== 'ABRIDGEDTRANSFORMATION') {
560
+ return `${node.keyword} must start with SOURCECRS, TARGETCRS, and ABRIDGEDTRANSFORMATION`;
561
+ }
562
+ }
563
+ if ([
564
+ 'COMPOUNDCRS',
565
+ 'CONCATENATEDOPERATION',
566
+ 'COORDINATEOPERATION',
567
+ 'DERIVEDPROJCRS',
568
+ 'ENGCRS',
569
+ 'ENGINEERINGCRS',
570
+ 'GEODCRS',
571
+ 'GEODETICCRS',
572
+ 'GEOGCRS',
573
+ 'GEOGRAPHICCRS',
574
+ 'PARAMETRICCRS',
575
+ 'POINTMOTIONOPERATION',
576
+ 'PROJCRS',
577
+ 'PROJECTEDCRS',
578
+ 'TIMECRS',
579
+ 'VERTCRS',
580
+ 'VERTICALCRS'
581
+ ].includes(keyword) &&
582
+ !typeAt(0, 'string')) {
583
+ return `${node.keyword} must start with a quoted name`;
584
+ }
585
+ return null;
586
+ }
587
+ function visitNode(node, path, visitor) {
588
+ visitor({ node, path });
589
+ for (let index = 0; index < node.values.length; index++) {
590
+ const value = node.values[index];
591
+ if (value.type === 'node') {
592
+ visitNode(value, [...path, index], visitor);
593
+ }
594
+ }
595
+ }
596
+ function getSourceLocation(source, offset) {
597
+ let line = 1;
598
+ let column = 1;
599
+ for (let index = 0; index < offset && index < source.length; index++) {
600
+ if (source[index] === '\n') {
601
+ line++;
602
+ column = 1;
603
+ }
604
+ else {
605
+ column++;
606
+ }
607
+ }
608
+ return { line, column };
609
+ }
610
+ //# sourceMappingURL=wkt-crs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wkt-crs.js","sourceRoot":"","sources":["../src/wkt-crs.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@math.gl/crs",
3
+ "description": "Standards-based coordinate reference system types for math.gl",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "version": "4.2.0-alpha.5",
10
+ "keywords": [
11
+ "geospatial",
12
+ "coordinate reference system",
13
+ "CRS",
14
+ "WKT",
15
+ "PROJJSON"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/visgl/math.gl.git"
20
+ },
21
+ "types": "dist/index.d.ts",
22
+ "main": "dist/index.cjs",
23
+ "module": "dist/index.js",
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js",
28
+ "require": "./dist/index.cjs"
29
+ },
30
+ "./projjson.schema.json": "./schemas/projjson.schema.json"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "src",
35
+ "schemas",
36
+ "README.md"
37
+ ],
38
+ "sideEffects": false,
39
+ "gitHead": "9c13785761867748e2edb167b5f2749dce803039"
40
+ }