@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.
Files changed (134) hide show
  1. package/README.md +145 -2
  2. package/dist/cjs/core/airspace/index.js +14 -0
  3. package/dist/cjs/core/airspace/index.js.map +1 -0
  4. package/dist/cjs/core/airspace/validation-client.js +112 -0
  5. package/dist/cjs/core/airspace/validation-client.js.map +1 -0
  6. package/dist/cjs/core/formatters/index.js +41 -0
  7. package/dist/cjs/core/formatters/index.js.map +1 -0
  8. package/dist/cjs/core/geometry/circle.js +137 -0
  9. package/dist/cjs/core/geometry/circle.js.map +1 -0
  10. package/dist/cjs/core/geometry/index.js +26 -0
  11. package/dist/cjs/core/geometry/index.js.map +1 -0
  12. package/dist/cjs/core/geometry/operations.js +169 -0
  13. package/dist/cjs/core/geometry/operations.js.map +1 -0
  14. package/dist/cjs/core/geometry/polygon.js +183 -0
  15. package/dist/cjs/core/geometry/polygon.js.map +1 -0
  16. package/dist/cjs/core/index.js +29 -0
  17. package/dist/cjs/core/index.js.map +1 -0
  18. package/dist/cjs/core/transformers/index.js +33 -0
  19. package/dist/cjs/core/transformers/index.js.map +1 -0
  20. package/dist/cjs/core/utils/constants.js +124 -0
  21. package/dist/cjs/core/utils/constants.js.map +1 -0
  22. package/dist/cjs/core/utils/helpers.js +98 -0
  23. package/dist/cjs/core/utils/helpers.js.map +1 -0
  24. package/dist/cjs/core/utils/index.js +35 -0
  25. package/dist/cjs/core/utils/index.js.map +1 -0
  26. package/dist/cjs/core/utils/timezone.js +52 -0
  27. package/dist/cjs/core/utils/timezone.js.map +1 -0
  28. package/dist/cjs/core/validation/index.js +26 -0
  29. package/dist/cjs/core/validation/index.js.map +1 -0
  30. package/dist/cjs/core/validation/operator.validator.js +156 -0
  31. package/dist/cjs/core/validation/operator.validator.js.map +1 -0
  32. package/dist/cjs/index.js +32 -0
  33. package/dist/cjs/index.js.map +1 -0
  34. package/dist/cjs/react/hooks/index.js +41 -0
  35. package/dist/cjs/react/hooks/index.js.map +1 -0
  36. package/dist/cjs/react/index.js +20 -0
  37. package/dist/cjs/react/index.js.map +1 -0
  38. package/dist/cjs/types/airspace.types.js +22 -0
  39. package/dist/cjs/types/airspace.types.js.map +1 -0
  40. package/dist/cjs/types/authorization.types.js +3 -0
  41. package/dist/cjs/types/authorization.types.js.map +1 -0
  42. package/dist/cjs/types/geometry.types.js +4 -0
  43. package/dist/cjs/types/geometry.types.js.map +1 -0
  44. package/dist/cjs/types/index.js +7 -0
  45. package/dist/cjs/types/index.js.map +1 -0
  46. package/dist/esm/core/airspace/index.js +9 -0
  47. package/dist/esm/core/airspace/index.js.map +1 -0
  48. package/dist/esm/core/airspace/validation-client.js +107 -0
  49. package/dist/esm/core/airspace/validation-client.js.map +1 -0
  50. package/dist/esm/core/formatters/index.js +35 -0
  51. package/dist/esm/core/formatters/index.js.map +1 -0
  52. package/dist/esm/core/geometry/circle.js +98 -0
  53. package/dist/esm/core/geometry/circle.js.map +1 -0
  54. package/dist/esm/core/geometry/index.js +7 -0
  55. package/dist/esm/core/geometry/index.js.map +1 -0
  56. package/dist/esm/core/geometry/operations.js +125 -0
  57. package/dist/esm/core/geometry/operations.js.map +1 -0
  58. package/dist/esm/core/geometry/polygon.js +145 -0
  59. package/dist/esm/core/geometry/polygon.js.map +1 -0
  60. package/dist/esm/core/index.js +13 -0
  61. package/dist/esm/core/index.js.map +1 -0
  62. package/dist/esm/core/transformers/index.js +28 -0
  63. package/dist/esm/core/transformers/index.js.map +1 -0
  64. package/dist/esm/core/utils/constants.js +121 -0
  65. package/dist/esm/core/utils/constants.js.map +1 -0
  66. package/dist/esm/core/utils/helpers.js +83 -0
  67. package/dist/esm/core/utils/helpers.js.map +1 -0
  68. package/dist/esm/core/utils/index.js +7 -0
  69. package/dist/esm/core/utils/index.js.map +1 -0
  70. package/dist/esm/core/utils/timezone.js +47 -0
  71. package/dist/esm/core/utils/timezone.js.map +1 -0
  72. package/dist/esm/core/validation/index.js +10 -0
  73. package/dist/esm/core/validation/index.js.map +1 -0
  74. package/dist/esm/core/validation/operator.validator.js +150 -0
  75. package/dist/esm/core/validation/operator.validator.js.map +1 -0
  76. package/dist/esm/index.js +15 -0
  77. package/dist/esm/index.js.map +1 -0
  78. package/dist/esm/react/hooks/index.js +35 -0
  79. package/dist/esm/react/hooks/index.js.map +1 -0
  80. package/dist/esm/react/index.js +4 -0
  81. package/dist/esm/react/index.js.map +1 -0
  82. package/dist/esm/types/airspace.types.js +19 -0
  83. package/dist/esm/types/airspace.types.js.map +1 -0
  84. package/dist/esm/types/authorization.types.js +2 -0
  85. package/dist/esm/types/authorization.types.js.map +1 -0
  86. package/dist/esm/types/geometry.types.js +3 -0
  87. package/dist/esm/types/geometry.types.js.map +1 -0
  88. package/dist/esm/types/index.js +3 -0
  89. package/dist/esm/types/index.js.map +1 -0
  90. package/dist/types/core/airspace/index.d.ts +8 -0
  91. package/dist/types/core/airspace/index.d.ts.map +1 -0
  92. package/dist/types/core/airspace/validation-client.d.ts +86 -0
  93. package/dist/types/core/airspace/validation-client.d.ts.map +1 -0
  94. package/dist/types/core/formatters/index.d.ts +28 -0
  95. package/dist/types/core/formatters/index.d.ts.map +1 -0
  96. package/dist/types/core/geometry/circle.d.ts +33 -0
  97. package/dist/types/core/geometry/circle.d.ts.map +1 -0
  98. package/dist/types/core/geometry/index.d.ts +4 -0
  99. package/dist/types/core/geometry/index.d.ts.map +1 -0
  100. package/dist/types/core/geometry/operations.d.ts +72 -0
  101. package/dist/types/core/geometry/operations.d.ts.map +1 -0
  102. package/dist/types/core/geometry/polygon.d.ts +25 -0
  103. package/dist/types/core/geometry/polygon.d.ts.map +1 -0
  104. package/dist/types/core/index.d.ts +7 -0
  105. package/dist/types/core/index.d.ts.map +1 -0
  106. package/dist/types/core/transformers/index.d.ts +26 -0
  107. package/dist/types/core/transformers/index.d.ts.map +1 -0
  108. package/dist/types/core/utils/constants.d.ts +116 -0
  109. package/dist/types/core/utils/constants.d.ts.map +1 -0
  110. package/dist/types/core/utils/helpers.d.ts +53 -0
  111. package/dist/types/core/utils/helpers.d.ts.map +1 -0
  112. package/dist/types/core/utils/index.d.ts +4 -0
  113. package/dist/types/core/utils/index.d.ts.map +1 -0
  114. package/dist/types/core/utils/timezone.d.ts +23 -0
  115. package/dist/types/core/utils/timezone.d.ts.map +1 -0
  116. package/dist/types/core/validation/index.d.ts +9 -0
  117. package/dist/types/core/validation/index.d.ts.map +1 -0
  118. package/dist/types/core/validation/operator.validator.d.ts +35 -0
  119. package/dist/types/core/validation/operator.validator.d.ts.map +1 -0
  120. package/dist/types/index.d.ts +12 -0
  121. package/dist/types/index.d.ts.map +1 -0
  122. package/dist/types/react/hooks/index.d.ts +27 -0
  123. package/dist/types/react/hooks/index.d.ts.map +1 -0
  124. package/dist/types/react/index.d.ts +2 -0
  125. package/dist/types/react/index.d.ts.map +1 -0
  126. package/dist/types/types/airspace.types.d.ts +109 -0
  127. package/dist/types/types/airspace.types.d.ts.map +1 -0
  128. package/dist/types/types/authorization.types.d.ts +124 -0
  129. package/dist/types/types/authorization.types.d.ts.map +1 -0
  130. package/dist/types/types/geometry.types.d.ts +77 -0
  131. package/dist/types/types/geometry.types.d.ts.map +1 -0
  132. package/dist/types/types/index.d.ts +5 -0
  133. package/dist/types/types/index.d.ts.map +1 -0
  134. 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,sCAkCC;AAQD,0CAoGC;AAQD,4CAKC;AAtKD,iDAAmC;AAEnC,kDAAsE;AAEtE;;;;;;GAMG;AACH,SAAgB,aAAa,CAC3B,MAAgB,EAChB,UAA0B,EAAE;IAE5B,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAEjC,kBAAkB;IAClB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,mDAAmD;IACnD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpD,8BAA8B;IAC9B,IAAI,KAAK,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAE5C,6BAA6B;IAC7B,OAAO,CAAC,UAAU,GAAG;QACnB,YAAY,EAAE,SAAS;QACvB,UAAU,EAAE,MAAM,CAAC,MAAM;KAC1B,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,MAAgB;IAC9C,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAiC,EAAE,CAAC;IAElD,uBAAuB;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,+BAAmB,CAAC,UAAU,EAAE,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,8BAA8B,+BAAmB,CAAC,UAAU,SAAS;YAC9E,IAAI,EAAE,uBAAW,CAAC,sBAAsB;SACzC,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,MAAM,GAAG,+BAAmB,CAAC,UAAU,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,mCAAmC,+BAAmB,CAAC,UAAU,SAAS;YACnF,IAAI,EAAE,uBAAW,CAAC,uBAAuB;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,UAAU,CAAC,GAAG;gBACrB,OAAO,EAAE,SAAS,CAAC,0BAA0B;gBAC7C,IAAI,EAAE,uBAAW,CAAC,mBAAmB;aACtC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,6BAA6B;QAC7B,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,UAAU,CAAC,OAAO;gBACzB,OAAO,EAAE,4CAA4C,KAAK,CAAC,GAAG,GAAG;gBACjE,IAAI,EAAE,uBAAW,CAAC,mBAAmB;aACtC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,UAAU,CAAC,OAAO;gBACzB,OAAO,EAAE,+CAA+C,KAAK,CAAC,GAAG,GAAG;gBACpE,IAAI,EAAE,uBAAW,CAAC,mBAAmB;aACtC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,mCAAmC;QACnC,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,gCAAgC;gBACzC,IAAI,EAAE,uBAAW,CAAC,yBAAyB;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,iCAAiC;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC,uBAAuB;YAE9D,IAAI,+BAAmB,CAAC,QAAQ,IAAI,QAAQ,GAAG,+BAAmB,CAAC,QAAQ,EAAE,CAAC;gBAC5E,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,QAAQ;oBACf,OAAO,EAAE,yCAAyC,+BAAmB,CAAC,QAAQ,SAAS;oBACvF,IAAI,EAAE,uBAAW,CAAC,iBAAiB;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;YAC3G,IAAI,EAAE,uBAAW,CAAC,mBAAmB;SACtC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,OAAyB;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACpD,0EAA0E;IAC1E,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -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"}