@flightloop/sdk-frontend 0.0.0-stage → 1.0.0-qa.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/README.md +145 -2
- package/dist/cjs/core/airspace/index.js +14 -0
- package/dist/cjs/core/airspace/index.js.map +1 -0
- package/dist/cjs/core/airspace/validation-client.js +112 -0
- package/dist/cjs/core/airspace/validation-client.js.map +1 -0
- package/dist/cjs/core/formatters/index.js +41 -0
- package/dist/cjs/core/formatters/index.js.map +1 -0
- package/dist/cjs/core/geometry/circle.js +137 -0
- package/dist/cjs/core/geometry/circle.js.map +1 -0
- package/dist/cjs/core/geometry/index.js +26 -0
- package/dist/cjs/core/geometry/index.js.map +1 -0
- package/dist/cjs/core/geometry/operations.js +169 -0
- package/dist/cjs/core/geometry/operations.js.map +1 -0
- package/dist/cjs/core/geometry/polygon.js +183 -0
- package/dist/cjs/core/geometry/polygon.js.map +1 -0
- package/dist/cjs/core/index.js +29 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/core/transformers/index.js +33 -0
- package/dist/cjs/core/transformers/index.js.map +1 -0
- package/dist/cjs/core/utils/constants.js +124 -0
- package/dist/cjs/core/utils/constants.js.map +1 -0
- package/dist/cjs/core/utils/helpers.js +98 -0
- package/dist/cjs/core/utils/helpers.js.map +1 -0
- package/dist/cjs/core/utils/index.js +35 -0
- package/dist/cjs/core/utils/index.js.map +1 -0
- package/dist/cjs/core/utils/timezone.js +52 -0
- package/dist/cjs/core/utils/timezone.js.map +1 -0
- package/dist/cjs/core/validation/index.js +26 -0
- package/dist/cjs/core/validation/index.js.map +1 -0
- package/dist/cjs/core/validation/operator.validator.js +156 -0
- package/dist/cjs/core/validation/operator.validator.js.map +1 -0
- package/dist/cjs/index.js +32 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/react/hooks/index.js +41 -0
- package/dist/cjs/react/hooks/index.js.map +1 -0
- package/dist/cjs/react/index.js +20 -0
- package/dist/cjs/react/index.js.map +1 -0
- package/dist/cjs/types/airspace.types.js +22 -0
- package/dist/cjs/types/airspace.types.js.map +1 -0
- package/dist/cjs/types/authorization.types.js +3 -0
- package/dist/cjs/types/authorization.types.js.map +1 -0
- package/dist/cjs/types/geometry.types.js +4 -0
- package/dist/cjs/types/geometry.types.js.map +1 -0
- package/dist/cjs/types/index.js +7 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/esm/core/airspace/index.js +9 -0
- package/dist/esm/core/airspace/index.js.map +1 -0
- package/dist/esm/core/airspace/validation-client.js +107 -0
- package/dist/esm/core/airspace/validation-client.js.map +1 -0
- package/dist/esm/core/formatters/index.js +35 -0
- package/dist/esm/core/formatters/index.js.map +1 -0
- package/dist/esm/core/geometry/circle.js +98 -0
- package/dist/esm/core/geometry/circle.js.map +1 -0
- package/dist/esm/core/geometry/index.js +7 -0
- package/dist/esm/core/geometry/index.js.map +1 -0
- package/dist/esm/core/geometry/operations.js +125 -0
- package/dist/esm/core/geometry/operations.js.map +1 -0
- package/dist/esm/core/geometry/polygon.js +145 -0
- package/dist/esm/core/geometry/polygon.js.map +1 -0
- package/dist/esm/core/index.js +13 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/transformers/index.js +28 -0
- package/dist/esm/core/transformers/index.js.map +1 -0
- package/dist/esm/core/utils/constants.js +121 -0
- package/dist/esm/core/utils/constants.js.map +1 -0
- package/dist/esm/core/utils/helpers.js +83 -0
- package/dist/esm/core/utils/helpers.js.map +1 -0
- package/dist/esm/core/utils/index.js +7 -0
- package/dist/esm/core/utils/index.js.map +1 -0
- package/dist/esm/core/utils/timezone.js +47 -0
- package/dist/esm/core/utils/timezone.js.map +1 -0
- package/dist/esm/core/validation/index.js +10 -0
- package/dist/esm/core/validation/index.js.map +1 -0
- package/dist/esm/core/validation/operator.validator.js +150 -0
- package/dist/esm/core/validation/operator.validator.js.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/react/hooks/index.js +35 -0
- package/dist/esm/react/hooks/index.js.map +1 -0
- package/dist/esm/react/index.js +4 -0
- package/dist/esm/react/index.js.map +1 -0
- package/dist/esm/types/airspace.types.js +19 -0
- package/dist/esm/types/airspace.types.js.map +1 -0
- package/dist/esm/types/authorization.types.js +2 -0
- package/dist/esm/types/authorization.types.js.map +1 -0
- package/dist/esm/types/geometry.types.js +3 -0
- package/dist/esm/types/geometry.types.js.map +1 -0
- package/dist/esm/types/index.js +3 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/types/core/airspace/index.d.ts +8 -0
- package/dist/types/core/airspace/index.d.ts.map +1 -0
- package/dist/types/core/airspace/validation-client.d.ts +86 -0
- package/dist/types/core/airspace/validation-client.d.ts.map +1 -0
- package/dist/types/core/formatters/index.d.ts +28 -0
- package/dist/types/core/formatters/index.d.ts.map +1 -0
- package/dist/types/core/geometry/circle.d.ts +33 -0
- package/dist/types/core/geometry/circle.d.ts.map +1 -0
- package/dist/types/core/geometry/index.d.ts +4 -0
- package/dist/types/core/geometry/index.d.ts.map +1 -0
- package/dist/types/core/geometry/operations.d.ts +72 -0
- package/dist/types/core/geometry/operations.d.ts.map +1 -0
- package/dist/types/core/geometry/polygon.d.ts +25 -0
- package/dist/types/core/geometry/polygon.d.ts.map +1 -0
- package/dist/types/core/index.d.ts +7 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/types/core/transformers/index.d.ts +26 -0
- package/dist/types/core/transformers/index.d.ts.map +1 -0
- package/dist/types/core/utils/constants.d.ts +116 -0
- package/dist/types/core/utils/constants.d.ts.map +1 -0
- package/dist/types/core/utils/helpers.d.ts +53 -0
- package/dist/types/core/utils/helpers.d.ts.map +1 -0
- package/dist/types/core/utils/index.d.ts +4 -0
- package/dist/types/core/utils/index.d.ts.map +1 -0
- package/dist/types/core/utils/timezone.d.ts +23 -0
- package/dist/types/core/utils/timezone.d.ts.map +1 -0
- package/dist/types/core/validation/index.d.ts +9 -0
- package/dist/types/core/validation/index.d.ts.map +1 -0
- package/dist/types/core/validation/operator.validator.d.ts +35 -0
- package/dist/types/core/validation/operator.validator.d.ts.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/react/hooks/index.d.ts +27 -0
- package/dist/types/react/hooks/index.d.ts.map +1 -0
- package/dist/types/react/index.d.ts +2 -0
- package/dist/types/react/index.d.ts.map +1 -0
- package/dist/types/types/airspace.types.d.ts +109 -0
- package/dist/types/types/airspace.types.d.ts.map +1 -0
- package/dist/types/types/authorization.types.d.ts +124 -0
- package/dist/types/types/authorization.types.d.ts.map +1 -0
- package/dist/types/types/geometry.types.d.ts +77 -0
- package/dist/types/types/geometry.types.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +5 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/package.json +84 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../../../src/core/geometry/operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createPolygon = createPolygon;
|
|
37
|
+
exports.validatePolygon = validatePolygon;
|
|
38
|
+
exports.getPolygonPoints = getPolygonPoints;
|
|
39
|
+
const turf = __importStar(require("@turf/turf"));
|
|
40
|
+
const constants_1 = require("../utils/constants");
|
|
41
|
+
/**
|
|
42
|
+
* Create a polygon from an array of points
|
|
43
|
+
*
|
|
44
|
+
* @param points - Array of LatLng points
|
|
45
|
+
* @param options - Polygon creation options
|
|
46
|
+
* @returns GeoJSON Feature with Polygon geometry
|
|
47
|
+
*/
|
|
48
|
+
function createPolygon(points, options = {}) {
|
|
49
|
+
const { close = true } = options;
|
|
50
|
+
// Validate inputs
|
|
51
|
+
const validation = validatePolygon(points);
|
|
52
|
+
if (!validation.valid) {
|
|
53
|
+
throw new Error(`Invalid polygon parameters: ${validation.errors.map(e => e.message).join(', ')}`);
|
|
54
|
+
}
|
|
55
|
+
// Convert LatLng to GeoJSON coordinates [lng, lat]
|
|
56
|
+
const coordinates = points.map(p => [p.lng, p.lat]);
|
|
57
|
+
// Close the polygon if needed
|
|
58
|
+
if (close && coordinates.length > 0) {
|
|
59
|
+
const first = coordinates[0];
|
|
60
|
+
const last = coordinates[coordinates.length - 1];
|
|
61
|
+
if (first[0] !== last[0] || first[1] !== last[1]) {
|
|
62
|
+
coordinates.push([...first]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Create polygon using Turf.js
|
|
66
|
+
const polygon = turf.polygon([coordinates]);
|
|
67
|
+
// Add metadata to properties
|
|
68
|
+
polygon.properties = {
|
|
69
|
+
geometryType: 'polygon',
|
|
70
|
+
pointCount: points.length,
|
|
71
|
+
};
|
|
72
|
+
return polygon;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validate polygon parameters
|
|
76
|
+
*
|
|
77
|
+
* @param points - Array of LatLng points
|
|
78
|
+
* @returns Validation result
|
|
79
|
+
*/
|
|
80
|
+
function validatePolygon(points) {
|
|
81
|
+
const errors = [];
|
|
82
|
+
const warnings = [];
|
|
83
|
+
// Check minimum points
|
|
84
|
+
if (!Array.isArray(points) || points.length < constants_1.POLYGON_CONSTRAINTS.MIN_POINTS) {
|
|
85
|
+
errors.push({
|
|
86
|
+
field: 'points',
|
|
87
|
+
message: `Polygon must have at least ${constants_1.POLYGON_CONSTRAINTS.MIN_POINTS} points`,
|
|
88
|
+
code: constants_1.ERROR_CODES.POLYGON_TOO_FEW_POINTS,
|
|
89
|
+
});
|
|
90
|
+
return { valid: false, errors, warnings };
|
|
91
|
+
}
|
|
92
|
+
// Check maximum points
|
|
93
|
+
if (points.length > constants_1.POLYGON_CONSTRAINTS.MAX_POINTS) {
|
|
94
|
+
errors.push({
|
|
95
|
+
field: 'points',
|
|
96
|
+
message: `Polygon must not have more than ${constants_1.POLYGON_CONSTRAINTS.MAX_POINTS} points`,
|
|
97
|
+
code: constants_1.ERROR_CODES.POLYGON_TOO_MANY_POINTS,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// Validate each point
|
|
101
|
+
for (let i = 0; i < points.length; i++) {
|
|
102
|
+
const point = points[i];
|
|
103
|
+
if (!point || typeof point.lat !== 'number' || typeof point.lng !== 'number') {
|
|
104
|
+
errors.push({
|
|
105
|
+
field: `points[${i}]`,
|
|
106
|
+
message: `Point ${i} has invalid coordinates`,
|
|
107
|
+
code: constants_1.ERROR_CODES.INVALID_COORDINATES,
|
|
108
|
+
});
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Validate coordinate ranges
|
|
112
|
+
if (point.lat < -90 || point.lat > 90) {
|
|
113
|
+
errors.push({
|
|
114
|
+
field: `points[${i}].lat`,
|
|
115
|
+
message: `Latitude must be between -90 and 90 (got ${point.lat})`,
|
|
116
|
+
code: constants_1.ERROR_CODES.INVALID_COORDINATES,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (point.lng < -180 || point.lng > 180) {
|
|
120
|
+
errors.push({
|
|
121
|
+
field: `points[${i}].lng`,
|
|
122
|
+
message: `Longitude must be between -180 and 180 (got ${point.lng})`,
|
|
123
|
+
code: constants_1.ERROR_CODES.INVALID_COORDINATES,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// If basic validation failed, return early
|
|
128
|
+
if (errors.length > 0) {
|
|
129
|
+
return { valid: false, errors, warnings };
|
|
130
|
+
}
|
|
131
|
+
// Check for self-intersection
|
|
132
|
+
try {
|
|
133
|
+
const coordinates = points.map(p => [p.lng, p.lat]);
|
|
134
|
+
// Close the polygon for validation
|
|
135
|
+
coordinates.push([coordinates[0][0], coordinates[0][1]]);
|
|
136
|
+
const polygon = turf.polygon([coordinates]);
|
|
137
|
+
const kinks = turf.kinks(polygon);
|
|
138
|
+
if (kinks.features.length > 0) {
|
|
139
|
+
errors.push({
|
|
140
|
+
field: 'points',
|
|
141
|
+
message: 'Polygon has self-intersections',
|
|
142
|
+
code: constants_1.ERROR_CODES.POLYGON_SELF_INTERSECTING,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Check area if polygon is valid
|
|
146
|
+
if (errors.length === 0) {
|
|
147
|
+
const areaMeters = turf.area(polygon);
|
|
148
|
+
const areaFeet = areaMeters * 10.7639; // sq meters to sq feet
|
|
149
|
+
if (constants_1.POLYGON_CONSTRAINTS.MAX_AREA && areaFeet > constants_1.POLYGON_CONSTRAINTS.MAX_AREA) {
|
|
150
|
+
errors.push({
|
|
151
|
+
field: 'points',
|
|
152
|
+
message: `Polygon area exceeds maximum allowed (${constants_1.POLYGON_CONSTRAINTS.MAX_AREA} sq ft)`,
|
|
153
|
+
code: constants_1.ERROR_CODES.POLYGON_TOO_LARGE,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
errors.push({
|
|
160
|
+
field: 'points',
|
|
161
|
+
message: `Failed to validate polygon geometry: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
162
|
+
code: constants_1.ERROR_CODES.INVALID_COORDINATES,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
valid: errors.length === 0,
|
|
167
|
+
errors,
|
|
168
|
+
warnings,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get the points of a polygon geometry
|
|
173
|
+
*
|
|
174
|
+
* @param polygon - Polygon feature
|
|
175
|
+
* @returns Array of LatLng points
|
|
176
|
+
*/
|
|
177
|
+
function getPolygonPoints(polygon) {
|
|
178
|
+
const coordinates = polygon.geometry.coordinates[0];
|
|
179
|
+
// Remove the last point if it's a duplicate of the first (closed polygon)
|
|
180
|
+
const points = coordinates.slice(0, -1);
|
|
181
|
+
return points.map(coord => ({ lng: coord[0], lat: coord[1] }));
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=polygon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon.js","sourceRoot":"","sources":["../../../../src/core/geometry/polygon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
// ─── Geometry ────────────────────────────────────────────────────────────────
|
|
18
|
+
__exportStar(require("./geometry"), exports);
|
|
19
|
+
// ─── Airspace ────────────────────────────────────────────────────────────────
|
|
20
|
+
__exportStar(require("./airspace"), exports);
|
|
21
|
+
// ─── Validation ──────────────────────────────────────────────────────────────
|
|
22
|
+
__exportStar(require("./validation"), exports);
|
|
23
|
+
// ─── Formatters ──────────────────────────────────────────────────────────────
|
|
24
|
+
__exportStar(require("./formatters"), exports);
|
|
25
|
+
// ─── Transformers ────────────────────────────────────────────────────────────
|
|
26
|
+
__exportStar(require("./transformers"), exports);
|
|
27
|
+
// ─── Utils ───────────────────────────────────────────────────────────────────
|
|
28
|
+
__exportStar(require("./utils"), exports);
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gFAAgF;AAChF,6CAA2B;AAE3B,gFAAgF;AAChF,6CAA2B;AAE3B,gFAAgF;AAChF,+CAA6B;AAE7B,gFAAgF;AAChF,+CAA6B;AAE7B,gFAAgF;AAChF,iDAA+B;AAE/B,gFAAgF;AAChF,0CAAwB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Airspace feature transformers
|
|
4
|
+
*
|
|
5
|
+
* This module provides utilities to transform airspace features from various
|
|
6
|
+
* map data sources into the standardized SDK format.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.transformMapboxFeature = transformMapboxFeature;
|
|
10
|
+
exports.transformGenericGeoJSON = transformGenericGeoJSON;
|
|
11
|
+
exports.transformFeatures = transformFeatures;
|
|
12
|
+
/**
|
|
13
|
+
* Transform Mapbox vector tile features to standard format
|
|
14
|
+
* TODO: Implement in future iteration
|
|
15
|
+
*/
|
|
16
|
+
function transformMapboxFeature(_mapboxFeature, _layerId) {
|
|
17
|
+
throw new Error('Not implemented yet');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Transform generic GeoJSON features to standard format
|
|
21
|
+
* TODO: Implement in future iteration
|
|
22
|
+
*/
|
|
23
|
+
function transformGenericGeoJSON(_feature, _options) {
|
|
24
|
+
throw new Error('Not implemented yet');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Auto-detect and transform features from various sources
|
|
28
|
+
* TODO: Implement in future iteration
|
|
29
|
+
*/
|
|
30
|
+
function transformFeatures(_features, _source) {
|
|
31
|
+
throw new Error('Not implemented yet');
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/transformers/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAQH,wDAKC;AAMD,0DAQC;AAMD,8CAKC;AAlCD;;;GAGG;AACH,SAAgB,sBAAsB,CACpC,cAAmB,EACnB,QAAgB;IAEhB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,QAAa,EACb,QAGC;IAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,SAAgB,EAChB,OAAuC;IAEvC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LAANC authorization constraints and constants
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.STATUS_PRIORITY = exports.ADVISORY_PRIORITY_WEIGHTS = exports.ERROR_CODES = exports.UNIT_CONVERSIONS = exports.PROXIMITY_CONSTRAINTS = exports.FC_CONSTRAINTS = exports.POLYGON_CONSTRAINTS = exports.CIRCLE_CONSTRAINTS = exports.ALTITUDE_CONSTRAINTS = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Altitude constraints (feet AGL)
|
|
9
|
+
*/
|
|
10
|
+
exports.ALTITUDE_CONSTRAINTS = {
|
|
11
|
+
/** Maximum altitude for Part 107 operations */
|
|
12
|
+
MAX_PART_107: 400,
|
|
13
|
+
/** Maximum altitude for 44809 recreational operations */
|
|
14
|
+
MAX_44809: 400,
|
|
15
|
+
/** Minimum altitude */
|
|
16
|
+
MIN: 0,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Circle geometry constraints (feet)
|
|
20
|
+
*/
|
|
21
|
+
exports.CIRCLE_CONSTRAINTS = {
|
|
22
|
+
/** Minimum circle radius */
|
|
23
|
+
MIN_RADIUS: 10,
|
|
24
|
+
/** Maximum circle radius */
|
|
25
|
+
MAX_RADIUS: 3000,
|
|
26
|
+
/** Default number of steps for circle approximation */
|
|
27
|
+
DEFAULT_STEPS: 64,
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Polygon geometry constraints
|
|
31
|
+
*/
|
|
32
|
+
exports.POLYGON_CONSTRAINTS = {
|
|
33
|
+
/** Minimum number of polygon points */
|
|
34
|
+
MIN_POINTS: 3,
|
|
35
|
+
/** Maximum number of polygon points */
|
|
36
|
+
MAX_POINTS: 100,
|
|
37
|
+
/** Maximum polygon area (square feet) - TBD based on requirements */
|
|
38
|
+
MAX_AREA: 100000000,
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Further Coordination (FC) timing constraints
|
|
42
|
+
*/
|
|
43
|
+
exports.FC_CONSTRAINTS = {
|
|
44
|
+
/** Minimum lead time for FC requests (hours) */
|
|
45
|
+
MIN_HOURS: 72,
|
|
46
|
+
/** Maximum advance time for FC requests (days) */
|
|
47
|
+
MAX_DAYS: 90,
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Proximity search constraints
|
|
51
|
+
*/
|
|
52
|
+
exports.PROXIMITY_CONSTRAINTS = {
|
|
53
|
+
/** Proximity radius for nearby airspace (nautical miles) */
|
|
54
|
+
RADIUS_NM: 2,
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Unit conversion constants
|
|
58
|
+
*/
|
|
59
|
+
exports.UNIT_CONVERSIONS = {
|
|
60
|
+
/** Feet to meters */
|
|
61
|
+
FEET_TO_METERS: 0.3048,
|
|
62
|
+
/** Meters to feet */
|
|
63
|
+
METERS_TO_FEET: 3.28084,
|
|
64
|
+
/** Nautical miles to meters */
|
|
65
|
+
NM_TO_METERS: 1852,
|
|
66
|
+
/** Meters to nautical miles */
|
|
67
|
+
METERS_TO_NM: 1 / 1852,
|
|
68
|
+
/** Miles to meters */
|
|
69
|
+
MILES_TO_METERS: 1609.34,
|
|
70
|
+
/** Meters to miles */
|
|
71
|
+
METERS_TO_MILES: 1 / 1609.34,
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Validation error codes
|
|
75
|
+
*/
|
|
76
|
+
exports.ERROR_CODES = {
|
|
77
|
+
// Geometry errors
|
|
78
|
+
CIRCLE_RADIUS_TOO_SMALL: 'CIRCLE_RADIUS_TOO_SMALL',
|
|
79
|
+
CIRCLE_RADIUS_TOO_LARGE: 'CIRCLE_RADIUS_TOO_LARGE',
|
|
80
|
+
POLYGON_TOO_FEW_POINTS: 'POLYGON_TOO_FEW_POINTS',
|
|
81
|
+
POLYGON_TOO_MANY_POINTS: 'POLYGON_TOO_MANY_POINTS',
|
|
82
|
+
POLYGON_TOO_LARGE: 'POLYGON_TOO_LARGE',
|
|
83
|
+
POLYGON_SELF_INTERSECTING: 'POLYGON_SELF_INTERSECTING',
|
|
84
|
+
INVALID_COORDINATES: 'INVALID_COORDINATES',
|
|
85
|
+
// Altitude errors
|
|
86
|
+
ALTITUDE_TOO_LOW: 'ALTITUDE_TOO_LOW',
|
|
87
|
+
ALTITUDE_TOO_HIGH: 'ALTITUDE_TOO_HIGH',
|
|
88
|
+
ALTITUDE_EXCEEDS_CEILING: 'ALTITUDE_EXCEEDS_CEILING',
|
|
89
|
+
// DateTime errors
|
|
90
|
+
INVALID_DATETIME: 'INVALID_DATETIME',
|
|
91
|
+
INVALID_TIMEZONE: 'INVALID_TIMEZONE',
|
|
92
|
+
OPERATION_IN_PAST: 'OPERATION_IN_PAST',
|
|
93
|
+
FC_INSUFFICIENT_LEAD_TIME: 'FC_INSUFFICIENT_LEAD_TIME',
|
|
94
|
+
FC_TOO_FAR_IN_FUTURE: 'FC_TOO_FAR_IN_FUTURE',
|
|
95
|
+
DURATION_INVALID: 'DURATION_INVALID',
|
|
96
|
+
// Operator errors
|
|
97
|
+
INVALID_EMAIL: 'INVALID_EMAIL',
|
|
98
|
+
INVALID_PHONE: 'INVALID_PHONE',
|
|
99
|
+
INVALID_FAA_ID: 'INVALID_FAA_ID',
|
|
100
|
+
// General errors
|
|
101
|
+
REQUIRED_FIELD_MISSING: 'REQUIRED_FIELD_MISSING',
|
|
102
|
+
INVALID_OPERATION_TYPE: 'INVALID_OPERATION_TYPE',
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Advisory priority weights (higher = more critical)
|
|
106
|
+
*/
|
|
107
|
+
exports.ADVISORY_PRIORITY_WEIGHTS = {
|
|
108
|
+
critical: 5,
|
|
109
|
+
high: 4,
|
|
110
|
+
medium: 3,
|
|
111
|
+
low: 2,
|
|
112
|
+
info: 1,
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Authorization status priority (for determining overall status)
|
|
116
|
+
*/
|
|
117
|
+
exports.STATUS_PRIORITY = {
|
|
118
|
+
DNF: 5,
|
|
119
|
+
NOK: 4,
|
|
120
|
+
ALERT: 3,
|
|
121
|
+
CAUTION: 2,
|
|
122
|
+
OK: 1,
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/core/utils/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACU,QAAA,oBAAoB,GAAG;IAClC,+CAA+C;IAC/C,YAAY,EAAE,GAAG;IACjB,yDAAyD;IACzD,SAAS,EAAE,GAAG;IACd,uBAAuB;IACvB,GAAG,EAAE,CAAC;CACE,CAAC;AAEX;;GAEG;AACU,QAAA,kBAAkB,GAAG;IAChC,4BAA4B;IAC5B,UAAU,EAAE,EAAE;IACd,4BAA4B;IAC5B,UAAU,EAAE,IAAI;IAChB,uDAAuD;IACvD,aAAa,EAAE,EAAE;CACT,CAAC;AAEX;;GAEG;AACU,QAAA,mBAAmB,GAAG;IACjC,uCAAuC;IACvC,UAAU,EAAE,CAAC;IACb,uCAAuC;IACvC,UAAU,EAAE,GAAG;IACf,qEAAqE;IACrE,QAAQ,EAAE,SAAS;CACX,CAAC;AAEX;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,gDAAgD;IAChD,SAAS,EAAE,EAAE;IACb,kDAAkD;IAClD,QAAQ,EAAE,EAAE;CACJ,CAAC;AAEX;;GAEG;AACU,QAAA,qBAAqB,GAAG;IACnC,4DAA4D;IAC5D,SAAS,EAAE,CAAC;CACJ,CAAC;AAEX;;GAEG;AACU,QAAA,gBAAgB,GAAG;IAC9B,qBAAqB;IACrB,cAAc,EAAE,MAAM;IACtB,qBAAqB;IACrB,cAAc,EAAE,OAAO;IACvB,+BAA+B;IAC/B,YAAY,EAAE,IAAI;IAClB,+BAA+B;IAC/B,YAAY,EAAE,CAAC,GAAG,IAAI;IACtB,sBAAsB;IACtB,eAAe,EAAE,OAAO;IACxB,sBAAsB;IACtB,eAAe,EAAE,CAAC,GAAG,OAAO;CACpB,CAAC;AAEX;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB,kBAAkB;IAClB,uBAAuB,EAAE,yBAAyB;IAClD,uBAAuB,EAAE,yBAAyB;IAClD,sBAAsB,EAAE,wBAAwB;IAChD,uBAAuB,EAAE,yBAAyB;IAClD,iBAAiB,EAAE,mBAAmB;IACtC,yBAAyB,EAAE,2BAA2B;IACtD,mBAAmB,EAAE,qBAAqB;IAE1C,kBAAkB;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,iBAAiB,EAAE,mBAAmB;IACtC,wBAAwB,EAAE,0BAA0B;IAEpD,kBAAkB;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,iBAAiB,EAAE,mBAAmB;IACtC,yBAAyB,EAAE,2BAA2B;IACtD,oBAAoB,EAAE,sBAAsB;IAC5C,gBAAgB,EAAE,kBAAkB;IAEpC,kBAAkB;IAClB,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAEhC,iBAAiB;IACjB,sBAAsB,EAAE,wBAAwB;IAChD,sBAAsB,EAAE,wBAAwB;CACxC,CAAC;AAEX;;GAEG;AACU,QAAA,yBAAyB,GAAG;IACvC,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;CACC,CAAC;AAEX;;GAEG;AACU,QAAA,eAAe,GAAG;IAC7B,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,EAAE,EAAE,CAAC;CACG,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.feetToMeters = feetToMeters;
|
|
4
|
+
exports.metersToFeet = metersToFeet;
|
|
5
|
+
exports.nauticalMilesToMeters = nauticalMilesToMeters;
|
|
6
|
+
exports.metersToNauticalMiles = metersToNauticalMiles;
|
|
7
|
+
exports.milesToMeters = milesToMeters;
|
|
8
|
+
exports.metersToMiles = metersToMiles;
|
|
9
|
+
exports.isValidNumber = isValidNumber;
|
|
10
|
+
exports.isNonEmptyString = isNonEmptyString;
|
|
11
|
+
exports.generateId = generateId;
|
|
12
|
+
exports.deepClone = deepClone;
|
|
13
|
+
exports.roundTo = roundTo;
|
|
14
|
+
exports.formatNumber = formatNumber;
|
|
15
|
+
exports.clamp = clamp;
|
|
16
|
+
const constants_1 = require("./constants");
|
|
17
|
+
/**
|
|
18
|
+
* Convert feet to meters
|
|
19
|
+
*/
|
|
20
|
+
function feetToMeters(feet) {
|
|
21
|
+
return feet * constants_1.UNIT_CONVERSIONS.FEET_TO_METERS;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert meters to feet
|
|
25
|
+
*/
|
|
26
|
+
function metersToFeet(meters) {
|
|
27
|
+
return meters * constants_1.UNIT_CONVERSIONS.METERS_TO_FEET;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Convert nautical miles to meters
|
|
31
|
+
*/
|
|
32
|
+
function nauticalMilesToMeters(nm) {
|
|
33
|
+
return nm * constants_1.UNIT_CONVERSIONS.NM_TO_METERS;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Convert meters to nautical miles
|
|
37
|
+
*/
|
|
38
|
+
function metersToNauticalMiles(meters) {
|
|
39
|
+
return meters * constants_1.UNIT_CONVERSIONS.METERS_TO_NM;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Convert miles to meters
|
|
43
|
+
*/
|
|
44
|
+
function milesToMeters(miles) {
|
|
45
|
+
return miles * constants_1.UNIT_CONVERSIONS.MILES_TO_METERS;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Convert meters to miles
|
|
49
|
+
*/
|
|
50
|
+
function metersToMiles(meters) {
|
|
51
|
+
return meters * constants_1.UNIT_CONVERSIONS.METERS_TO_MILES;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if a value is a valid finite number
|
|
55
|
+
*/
|
|
56
|
+
function isValidNumber(value) {
|
|
57
|
+
return typeof value === 'number' && isFinite(value);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a string is non-empty
|
|
61
|
+
*/
|
|
62
|
+
function isNonEmptyString(value) {
|
|
63
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate a unique ID
|
|
67
|
+
*/
|
|
68
|
+
function generateId(prefix = '') {
|
|
69
|
+
const timestamp = Date.now().toString(36);
|
|
70
|
+
const randomStr = Math.random().toString(36).substring(2, 9);
|
|
71
|
+
return prefix ? `${prefix}_${timestamp}_${randomStr}` : `${timestamp}_${randomStr}`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Deep clone an object (simple implementation for GeoJSON)
|
|
75
|
+
*/
|
|
76
|
+
function deepClone(obj) {
|
|
77
|
+
return JSON.parse(JSON.stringify(obj));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Round a number to a specified number of decimal places
|
|
81
|
+
*/
|
|
82
|
+
function roundTo(value, decimals) {
|
|
83
|
+
const multiplier = Math.pow(10, decimals);
|
|
84
|
+
return Math.round(value * multiplier) / multiplier;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Format a number as a string with commas
|
|
88
|
+
*/
|
|
89
|
+
function formatNumber(value, decimals = 0) {
|
|
90
|
+
return value.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Clamp a value between min and max
|
|
94
|
+
*/
|
|
95
|
+
function clamp(value, min, max) {
|
|
96
|
+
return Math.min(Math.max(value, min), max);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/core/utils/helpers.ts"],"names":[],"mappings":";;AAKA,oCAEC;AAKD,oCAEC;AAKD,sDAEC;AAKD,sDAEC;AAKD,sCAEC;AAKD,sCAEC;AAKD,sCAEC;AAKD,4CAEC;AAKD,gCAIC;AAKD,8BAEC;AAKD,0BAGC;AAKD,oCAEC;AAKD,sBAEC;AA9FD,2CAA+C;AAE/C;;GAEG;AACH,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,GAAG,4BAAgB,CAAC,cAAc,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM,GAAG,4BAAgB,CAAC,cAAc,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,EAAU;IAC9C,OAAO,EAAE,GAAG,4BAAgB,CAAC,YAAY,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAc;IAClD,OAAO,MAAM,GAAG,4BAAgB,CAAC,YAAY,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK,GAAG,4BAAgB,CAAC,eAAe,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM,GAAG,4BAAgB,CAAC,eAAe,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,MAAM,GAAG,EAAE;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAI,GAAM;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAgB,OAAO,CAAC,KAAa,EAAE,QAAgB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,KAAa,EAAE,QAAQ,GAAG,CAAC;IACtD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCurrentTimeInTimezone = exports.isValidTimezone = exports.detectTimezone = exports.clamp = exports.formatNumber = exports.roundTo = exports.deepClone = exports.generateId = exports.isNonEmptyString = exports.isValidNumber = exports.metersToMiles = exports.milesToMeters = exports.metersToNauticalMiles = exports.nauticalMilesToMeters = exports.metersToFeet = exports.feetToMeters = exports.STATUS_PRIORITY = exports.ADVISORY_PRIORITY_WEIGHTS = exports.ERROR_CODES = exports.UNIT_CONVERSIONS = exports.PROXIMITY_CONSTRAINTS = exports.FC_CONSTRAINTS = exports.POLYGON_CONSTRAINTS = exports.CIRCLE_CONSTRAINTS = exports.ALTITUDE_CONSTRAINTS = void 0;
|
|
4
|
+
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
5
|
+
var constants_1 = require("./constants");
|
|
6
|
+
Object.defineProperty(exports, "ALTITUDE_CONSTRAINTS", { enumerable: true, get: function () { return constants_1.ALTITUDE_CONSTRAINTS; } });
|
|
7
|
+
Object.defineProperty(exports, "CIRCLE_CONSTRAINTS", { enumerable: true, get: function () { return constants_1.CIRCLE_CONSTRAINTS; } });
|
|
8
|
+
Object.defineProperty(exports, "POLYGON_CONSTRAINTS", { enumerable: true, get: function () { return constants_1.POLYGON_CONSTRAINTS; } });
|
|
9
|
+
Object.defineProperty(exports, "FC_CONSTRAINTS", { enumerable: true, get: function () { return constants_1.FC_CONSTRAINTS; } });
|
|
10
|
+
Object.defineProperty(exports, "PROXIMITY_CONSTRAINTS", { enumerable: true, get: function () { return constants_1.PROXIMITY_CONSTRAINTS; } });
|
|
11
|
+
Object.defineProperty(exports, "UNIT_CONVERSIONS", { enumerable: true, get: function () { return constants_1.UNIT_CONVERSIONS; } });
|
|
12
|
+
Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return constants_1.ERROR_CODES; } });
|
|
13
|
+
Object.defineProperty(exports, "ADVISORY_PRIORITY_WEIGHTS", { enumerable: true, get: function () { return constants_1.ADVISORY_PRIORITY_WEIGHTS; } });
|
|
14
|
+
Object.defineProperty(exports, "STATUS_PRIORITY", { enumerable: true, get: function () { return constants_1.STATUS_PRIORITY; } });
|
|
15
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
16
|
+
var helpers_1 = require("./helpers");
|
|
17
|
+
Object.defineProperty(exports, "feetToMeters", { enumerable: true, get: function () { return helpers_1.feetToMeters; } });
|
|
18
|
+
Object.defineProperty(exports, "metersToFeet", { enumerable: true, get: function () { return helpers_1.metersToFeet; } });
|
|
19
|
+
Object.defineProperty(exports, "nauticalMilesToMeters", { enumerable: true, get: function () { return helpers_1.nauticalMilesToMeters; } });
|
|
20
|
+
Object.defineProperty(exports, "metersToNauticalMiles", { enumerable: true, get: function () { return helpers_1.metersToNauticalMiles; } });
|
|
21
|
+
Object.defineProperty(exports, "milesToMeters", { enumerable: true, get: function () { return helpers_1.milesToMeters; } });
|
|
22
|
+
Object.defineProperty(exports, "metersToMiles", { enumerable: true, get: function () { return helpers_1.metersToMiles; } });
|
|
23
|
+
Object.defineProperty(exports, "isValidNumber", { enumerable: true, get: function () { return helpers_1.isValidNumber; } });
|
|
24
|
+
Object.defineProperty(exports, "isNonEmptyString", { enumerable: true, get: function () { return helpers_1.isNonEmptyString; } });
|
|
25
|
+
Object.defineProperty(exports, "generateId", { enumerable: true, get: function () { return helpers_1.generateId; } });
|
|
26
|
+
Object.defineProperty(exports, "deepClone", { enumerable: true, get: function () { return helpers_1.deepClone; } });
|
|
27
|
+
Object.defineProperty(exports, "roundTo", { enumerable: true, get: function () { return helpers_1.roundTo; } });
|
|
28
|
+
Object.defineProperty(exports, "formatNumber", { enumerable: true, get: function () { return helpers_1.formatNumber; } });
|
|
29
|
+
Object.defineProperty(exports, "clamp", { enumerable: true, get: function () { return helpers_1.clamp; } });
|
|
30
|
+
// ─── Timezone ────────────────────────────────────────────────────────────────
|
|
31
|
+
var timezone_1 = require("./timezone");
|
|
32
|
+
Object.defineProperty(exports, "detectTimezone", { enumerable: true, get: function () { return timezone_1.detectTimezone; } });
|
|
33
|
+
Object.defineProperty(exports, "isValidTimezone", { enumerable: true, get: function () { return timezone_1.isValidTimezone; } });
|
|
34
|
+
Object.defineProperty(exports, "getCurrentTimeInTimezone", { enumerable: true, get: function () { return timezone_1.getCurrentTimeInTimezone; } });
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/utils/index.ts"],"names":[],"mappings":";;;AAAA,gFAAgF;AAChF,yCAUqB;AATnB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AACnB,2GAAA,cAAc,OAAA;AACd,kHAAA,qBAAqB,OAAA;AACrB,6GAAA,gBAAgB,OAAA;AAChB,wGAAA,WAAW,OAAA;AACX,sHAAA,yBAAyB,OAAA;AACzB,4GAAA,eAAe,OAAA;AAGjB,gFAAgF;AAChF,qCAcmB;AAbjB,uGAAA,YAAY,OAAA;AACZ,uGAAA,YAAY,OAAA;AACZ,gHAAA,qBAAqB,OAAA;AACrB,gHAAA,qBAAqB,OAAA;AACrB,wGAAA,aAAa,OAAA;AACb,wGAAA,aAAa,OAAA;AACb,wGAAA,aAAa,OAAA;AACb,2GAAA,gBAAgB,OAAA;AAChB,qGAAA,UAAU,OAAA;AACV,oGAAA,SAAS,OAAA;AACT,kGAAA,OAAO,OAAA;AACP,uGAAA,YAAY,OAAA;AACZ,gGAAA,KAAK,OAAA;AAGP,gFAAgF;AAChF,uCAIoB;AAHlB,0GAAA,cAAc,OAAA;AACd,2GAAA,eAAe,OAAA;AACf,oHAAA,wBAAwB,OAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectTimezone = detectTimezone;
|
|
4
|
+
exports.isValidTimezone = isValidTimezone;
|
|
5
|
+
exports.getCurrentTimeInTimezone = getCurrentTimeInTimezone;
|
|
6
|
+
const geo_tz_1 = require("geo-tz");
|
|
7
|
+
/**
|
|
8
|
+
* Detect timezone from latitude/longitude coordinates
|
|
9
|
+
*
|
|
10
|
+
* @param lat - Latitude
|
|
11
|
+
* @param lng - Longitude
|
|
12
|
+
* @returns IANA timezone identifier (e.g., "America/New_York")
|
|
13
|
+
*/
|
|
14
|
+
function detectTimezone(lat, lng) {
|
|
15
|
+
try {
|
|
16
|
+
const timezones = (0, geo_tz_1.find)(lat, lng);
|
|
17
|
+
if (timezones && timezones.length > 0) {
|
|
18
|
+
return timezones[0];
|
|
19
|
+
}
|
|
20
|
+
// Fallback to UTC if no timezone found
|
|
21
|
+
return 'UTC';
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.warn('Failed to detect timezone:', error);
|
|
25
|
+
return 'UTC';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate IANA timezone identifier
|
|
30
|
+
*
|
|
31
|
+
* @param timezone - IANA timezone identifier
|
|
32
|
+
* @returns true if valid, false otherwise
|
|
33
|
+
*/
|
|
34
|
+
function isValidTimezone(timezone) {
|
|
35
|
+
try {
|
|
36
|
+
Intl.DateTimeFormat(undefined, { timeZone: timezone });
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get current time in a specific timezone
|
|
45
|
+
*
|
|
46
|
+
* @param timezone - IANA timezone identifier
|
|
47
|
+
* @returns ISO datetime string
|
|
48
|
+
*/
|
|
49
|
+
function getCurrentTimeInTimezone(timezone) {
|
|
50
|
+
return new Date().toLocaleString('en-US', { timeZone: timezone });
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=timezone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timezone.js","sourceRoot":"","sources":["../../../../src/core/utils/timezone.ts"],"names":[],"mappings":";;AASA,wCAYC;AAQD,0CAOC;AAQD,4DAEC;AA9CD,mCAA8B;AAE9B;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,GAAW,EAAE,GAAW;IACrD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,aAAI,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,uCAAuC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB,CAAC,QAAgB;IACvD,OAAO,IAAI,IAAI,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validation utilities for LAANC authorization
|
|
4
|
+
*
|
|
5
|
+
* This module provides basic format validation functions for operator information.
|
|
6
|
+
* Complex business logic validation (altitude, datetime, airspace) is now handled
|
|
7
|
+
* by the backend API.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
21
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
// Basic format validators (for immediate UI feedback)
|
|
25
|
+
__exportStar(require("./operator.validator"), exports);
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/validation/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;AAEH,sDAAsD;AACtD,uDAAqC"}
|