tempest-react-sdk 0.18.0 → 0.19.0

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 (249) hide show
  1. package/bin/tempest.mjs +445 -35
  2. package/dist/AC-Brw7ZrEs.cjs +2 -0
  3. package/dist/AC-Brw7ZrEs.cjs.map +1 -0
  4. package/dist/AC-DLl3Z4oj.js +12 -0
  5. package/dist/AC-DLl3Z4oj.js.map +1 -0
  6. package/dist/AL-DPGoZjht.cjs +2 -0
  7. package/dist/AL-DPGoZjht.cjs.map +1 -0
  8. package/dist/AL-gswGaWlj.js +12 -0
  9. package/dist/AL-gswGaWlj.js.map +1 -0
  10. package/dist/AM-QN1eL4Tn.js +12 -0
  11. package/dist/AM-QN1eL4Tn.js.map +1 -0
  12. package/dist/AM-VqNWvsI-.cjs +2 -0
  13. package/dist/AM-VqNWvsI-.cjs.map +1 -0
  14. package/dist/AP-CPvBa_FK.cjs +2 -0
  15. package/dist/AP-CPvBa_FK.cjs.map +1 -0
  16. package/dist/AP-CRAbh1js.js +12 -0
  17. package/dist/AP-CRAbh1js.js.map +1 -0
  18. package/dist/BA-CKy_HnnV.js +12 -0
  19. package/dist/BA-CKy_HnnV.js.map +1 -0
  20. package/dist/BA-DoMQ6slK.cjs +2 -0
  21. package/dist/BA-DoMQ6slK.cjs.map +1 -0
  22. package/dist/CE-Ca-XMDFW.js +12 -0
  23. package/dist/CE-Ca-XMDFW.js.map +1 -0
  24. package/dist/CE-as-pGPQa.cjs +2 -0
  25. package/dist/CE-as-pGPQa.cjs.map +1 -0
  26. package/dist/DF-8kzFoovF.js +12 -0
  27. package/dist/DF-8kzFoovF.js.map +1 -0
  28. package/dist/DF-Wr8WNxSX.cjs +2 -0
  29. package/dist/DF-Wr8WNxSX.cjs.map +1 -0
  30. package/dist/ES-B4uWNG6s.js +12 -0
  31. package/dist/ES-B4uWNG6s.js.map +1 -0
  32. package/dist/ES-wKVjD_TM.cjs +2 -0
  33. package/dist/ES-wKVjD_TM.cjs.map +1 -0
  34. package/dist/GO-D4m4rOqy.cjs +2 -0
  35. package/dist/GO-D4m4rOqy.cjs.map +1 -0
  36. package/dist/GO-DuaAgIfo.js +12 -0
  37. package/dist/GO-DuaAgIfo.js.map +1 -0
  38. package/dist/MA-BmaUZZKe.cjs +2 -0
  39. package/dist/MA-BmaUZZKe.cjs.map +1 -0
  40. package/dist/MA-wOyPxG_M.js +12 -0
  41. package/dist/MA-wOyPxG_M.js.map +1 -0
  42. package/dist/MG-BYsqJd-S.js +12 -0
  43. package/dist/MG-BYsqJd-S.js.map +1 -0
  44. package/dist/MG-BchdfJXp.cjs +2 -0
  45. package/dist/MG-BchdfJXp.cjs.map +1 -0
  46. package/dist/MS-DZkgtN_7.js +12 -0
  47. package/dist/MS-DZkgtN_7.js.map +1 -0
  48. package/dist/MS-Dz9lDw37.cjs +2 -0
  49. package/dist/MS-Dz9lDw37.cjs.map +1 -0
  50. package/dist/MT-BkVchoah.cjs +2 -0
  51. package/dist/MT-BkVchoah.cjs.map +1 -0
  52. package/dist/MT-GmMwFWw2.js +12 -0
  53. package/dist/MT-GmMwFWw2.js.map +1 -0
  54. package/dist/PA-C2FpT6Ew.cjs +2 -0
  55. package/dist/PA-C2FpT6Ew.cjs.map +1 -0
  56. package/dist/PA-DgyDzDFi.js +12 -0
  57. package/dist/PA-DgyDzDFi.js.map +1 -0
  58. package/dist/PB-BGkzbQup.cjs +2 -0
  59. package/dist/PB-BGkzbQup.cjs.map +1 -0
  60. package/dist/PB-D-6NE6KM.js +12 -0
  61. package/dist/PB-D-6NE6KM.js.map +1 -0
  62. package/dist/PE-D8V7gWY-.cjs +2 -0
  63. package/dist/PE-D8V7gWY-.cjs.map +1 -0
  64. package/dist/PE-vqm-t7Nh.js +12 -0
  65. package/dist/PE-vqm-t7Nh.js.map +1 -0
  66. package/dist/PI-CILuGJlW.js +12 -0
  67. package/dist/PI-CILuGJlW.js.map +1 -0
  68. package/dist/PI-dJYCbXQM.cjs +2 -0
  69. package/dist/PI-dJYCbXQM.cjs.map +1 -0
  70. package/dist/PR-DN8AV__r.js +12 -0
  71. package/dist/PR-DN8AV__r.js.map +1 -0
  72. package/dist/PR-P17oBdNH.cjs +2 -0
  73. package/dist/PR-P17oBdNH.cjs.map +1 -0
  74. package/dist/RJ-Bccz05Em.js +12 -0
  75. package/dist/RJ-Bccz05Em.js.map +1 -0
  76. package/dist/RJ-Budqx7QP.cjs +2 -0
  77. package/dist/RJ-Budqx7QP.cjs.map +1 -0
  78. package/dist/RN-DLcJBxo3.cjs +2 -0
  79. package/dist/RN-DLcJBxo3.cjs.map +1 -0
  80. package/dist/RN-DTqFP-Nm.js +12 -0
  81. package/dist/RN-DTqFP-Nm.js.map +1 -0
  82. package/dist/RO-BCC54UTU.js +12 -0
  83. package/dist/RO-BCC54UTU.js.map +1 -0
  84. package/dist/RO-B_IDyci4.cjs +2 -0
  85. package/dist/RO-B_IDyci4.cjs.map +1 -0
  86. package/dist/RR-CDGUEyla.cjs +2 -0
  87. package/dist/RR-CDGUEyla.cjs.map +1 -0
  88. package/dist/RR-OCnI_XpU.js +12 -0
  89. package/dist/RR-OCnI_XpU.js.map +1 -0
  90. package/dist/RS-DiBeY_u5.cjs +2 -0
  91. package/dist/RS-DiBeY_u5.cjs.map +1 -0
  92. package/dist/RS-Dy7gBbbH.js +12 -0
  93. package/dist/RS-Dy7gBbbH.js.map +1 -0
  94. package/dist/SC-CEMoj8g2.cjs +2 -0
  95. package/dist/SC-CEMoj8g2.cjs.map +1 -0
  96. package/dist/SC-trCqQDXz.js +12 -0
  97. package/dist/SC-trCqQDXz.js.map +1 -0
  98. package/dist/SE-DAfFbZcK.cjs +2 -0
  99. package/dist/SE-DAfFbZcK.cjs.map +1 -0
  100. package/dist/SE-DBdfSrGk.js +12 -0
  101. package/dist/SE-DBdfSrGk.js.map +1 -0
  102. package/dist/SP-Cse4d68i.cjs +2 -0
  103. package/dist/SP-Cse4d68i.cjs.map +1 -0
  104. package/dist/SP-qPZjJDOT.js +12 -0
  105. package/dist/SP-qPZjJDOT.js.map +1 -0
  106. package/dist/TO-CZtMDVug.js +12 -0
  107. package/dist/TO-CZtMDVug.js.map +1 -0
  108. package/dist/TO-Dwi5zIyF.cjs +2 -0
  109. package/dist/TO-Dwi5zIyF.cjs.map +1 -0
  110. package/dist/br-centroids--O7-1KXz.cjs +2 -0
  111. package/dist/br-centroids--O7-1KXz.cjs.map +1 -0
  112. package/dist/br-centroids-IHN7PIzD.js +10 -0
  113. package/dist/br-centroids-IHN7PIzD.js.map +1 -0
  114. package/dist/br-geo-BYynYOwK.cjs +2 -0
  115. package/dist/br-geo-BYynYOwK.cjs.map +1 -0
  116. package/dist/br-geo-DFRuvjuU.js +8 -0
  117. package/dist/br-geo-DFRuvjuU.js.map +1 -0
  118. package/dist/br.cjs +1 -1
  119. package/dist/br.cjs.map +1 -1
  120. package/dist/br.d.ts +334 -6
  121. package/dist/br.js +769 -368
  122. package/dist/br.js.map +1 -1
  123. package/dist/projection-CILVBdpd.cjs +2 -0
  124. package/dist/projection-CILVBdpd.cjs.map +1 -0
  125. package/dist/projection-Wnqr_svy.js +215 -0
  126. package/dist/projection-Wnqr_svy.js.map +1 -0
  127. package/dist/styles.css +1 -1
  128. package/dist/tempest-react-sdk.cjs +3 -3
  129. package/dist/tempest-react-sdk.cjs.map +1 -1
  130. package/dist/tempest-react-sdk.d.ts +21 -1
  131. package/dist/tempest-react-sdk.js +2790 -2848
  132. package/dist/tempest-react-sdk.js.map +1 -1
  133. package/package.json +2 -1
  134. package/dist/AC-BQUmmKrw.cjs +0 -2
  135. package/dist/AC-BQUmmKrw.cjs.map +0 -1
  136. package/dist/AC-DOvYXax1.js +0 -12
  137. package/dist/AC-DOvYXax1.js.map +0 -1
  138. package/dist/AL-DH1wKIxj.js +0 -12
  139. package/dist/AL-DH1wKIxj.js.map +0 -1
  140. package/dist/AL-oN2X02DP.cjs +0 -2
  141. package/dist/AL-oN2X02DP.cjs.map +0 -1
  142. package/dist/AM-Cn_JOc_u.cjs +0 -2
  143. package/dist/AM-Cn_JOc_u.cjs.map +0 -1
  144. package/dist/AM-D-l4ioxq.js +0 -12
  145. package/dist/AM-D-l4ioxq.js.map +0 -1
  146. package/dist/AP-B8H3590m.cjs +0 -2
  147. package/dist/AP-B8H3590m.cjs.map +0 -1
  148. package/dist/AP-pl_IXUrz.js +0 -12
  149. package/dist/AP-pl_IXUrz.js.map +0 -1
  150. package/dist/BA-DsPuESbp.cjs +0 -2
  151. package/dist/BA-DsPuESbp.cjs.map +0 -1
  152. package/dist/BA-HvFNaSvC.js +0 -12
  153. package/dist/BA-HvFNaSvC.js.map +0 -1
  154. package/dist/CE-BhzlM8v8.cjs +0 -2
  155. package/dist/CE-BhzlM8v8.cjs.map +0 -1
  156. package/dist/CE-C4VCDB2_.js +0 -12
  157. package/dist/CE-C4VCDB2_.js.map +0 -1
  158. package/dist/DF-CdR_I7qu.cjs +0 -2
  159. package/dist/DF-CdR_I7qu.cjs.map +0 -1
  160. package/dist/DF-DCepvNQG.js +0 -12
  161. package/dist/DF-DCepvNQG.js.map +0 -1
  162. package/dist/ES-BNECOgN8.js +0 -12
  163. package/dist/ES-BNECOgN8.js.map +0 -1
  164. package/dist/ES-CzZdWdcw.cjs +0 -2
  165. package/dist/ES-CzZdWdcw.cjs.map +0 -1
  166. package/dist/GO-CTgkFwbh.js +0 -12
  167. package/dist/GO-CTgkFwbh.js.map +0 -1
  168. package/dist/GO-VqQUIkMG.cjs +0 -2
  169. package/dist/GO-VqQUIkMG.cjs.map +0 -1
  170. package/dist/MA-CwpNlEs4.cjs +0 -2
  171. package/dist/MA-CwpNlEs4.cjs.map +0 -1
  172. package/dist/MA-DC3zmbpX.js +0 -12
  173. package/dist/MA-DC3zmbpX.js.map +0 -1
  174. package/dist/MG-DLTyPn6U.js +0 -12
  175. package/dist/MG-DLTyPn6U.js.map +0 -1
  176. package/dist/MG-P3ePmTdM.cjs +0 -2
  177. package/dist/MG-P3ePmTdM.cjs.map +0 -1
  178. package/dist/MS-Crc916be.js +0 -12
  179. package/dist/MS-Crc916be.js.map +0 -1
  180. package/dist/MS-MikLSXO-.cjs +0 -2
  181. package/dist/MS-MikLSXO-.cjs.map +0 -1
  182. package/dist/MT-BzUTgqTr.cjs +0 -2
  183. package/dist/MT-BzUTgqTr.cjs.map +0 -1
  184. package/dist/MT-DEqs4lmz.js +0 -12
  185. package/dist/MT-DEqs4lmz.js.map +0 -1
  186. package/dist/PA-BmFg98qS.cjs +0 -2
  187. package/dist/PA-BmFg98qS.cjs.map +0 -1
  188. package/dist/PA-DCJkLLiT.js +0 -12
  189. package/dist/PA-DCJkLLiT.js.map +0 -1
  190. package/dist/PB-_6qWqUQe.js +0 -12
  191. package/dist/PB-_6qWqUQe.js.map +0 -1
  192. package/dist/PB-cCwnP4jh.cjs +0 -2
  193. package/dist/PB-cCwnP4jh.cjs.map +0 -1
  194. package/dist/PE-BCeDGzmC.cjs +0 -2
  195. package/dist/PE-BCeDGzmC.cjs.map +0 -1
  196. package/dist/PE-DhAJD50w.js +0 -12
  197. package/dist/PE-DhAJD50w.js.map +0 -1
  198. package/dist/PI-8mJVmMWn.cjs +0 -2
  199. package/dist/PI-8mJVmMWn.cjs.map +0 -1
  200. package/dist/PI-BBpuVgnF.js +0 -12
  201. package/dist/PI-BBpuVgnF.js.map +0 -1
  202. package/dist/PR-Ck8PsNQr.cjs +0 -2
  203. package/dist/PR-Ck8PsNQr.cjs.map +0 -1
  204. package/dist/PR-DIU_pEzX.js +0 -12
  205. package/dist/PR-DIU_pEzX.js.map +0 -1
  206. package/dist/RJ-BM_31L8v.js +0 -12
  207. package/dist/RJ-BM_31L8v.js.map +0 -1
  208. package/dist/RJ-RO2nzm45.cjs +0 -2
  209. package/dist/RJ-RO2nzm45.cjs.map +0 -1
  210. package/dist/RN-CGDsj5y7.cjs +0 -2
  211. package/dist/RN-CGDsj5y7.cjs.map +0 -1
  212. package/dist/RN-Cb6kQMBf.js +0 -12
  213. package/dist/RN-Cb6kQMBf.js.map +0 -1
  214. package/dist/RO-DQlMmLkh.js +0 -12
  215. package/dist/RO-DQlMmLkh.js.map +0 -1
  216. package/dist/RO-bBzN2q3e.cjs +0 -2
  217. package/dist/RO-bBzN2q3e.cjs.map +0 -1
  218. package/dist/RR-27xmMYjp.cjs +0 -2
  219. package/dist/RR-27xmMYjp.cjs.map +0 -1
  220. package/dist/RR-DT5Iz7pA.js +0 -12
  221. package/dist/RR-DT5Iz7pA.js.map +0 -1
  222. package/dist/RS-Ax08xnx2.cjs +0 -2
  223. package/dist/RS-Ax08xnx2.cjs.map +0 -1
  224. package/dist/RS-Be6-eibq.js +0 -12
  225. package/dist/RS-Be6-eibq.js.map +0 -1
  226. package/dist/SC-CR4B6n9K.js +0 -12
  227. package/dist/SC-CR4B6n9K.js.map +0 -1
  228. package/dist/SC-D7CvUmBl.cjs +0 -2
  229. package/dist/SC-D7CvUmBl.cjs.map +0 -1
  230. package/dist/SE-DYnzRCQV.js +0 -12
  231. package/dist/SE-DYnzRCQV.js.map +0 -1
  232. package/dist/SE-fXsuEuvK.cjs +0 -2
  233. package/dist/SE-fXsuEuvK.cjs.map +0 -1
  234. package/dist/SP-Cks7QGPk.cjs +0 -2
  235. package/dist/SP-Cks7QGPk.cjs.map +0 -1
  236. package/dist/SP-D7R54yvO.js +0 -12
  237. package/dist/SP-D7R54yvO.js.map +0 -1
  238. package/dist/TO-CWXJNpx2.js +0 -12
  239. package/dist/TO-CWXJNpx2.js.map +0 -1
  240. package/dist/TO-DyvJcNhT.cjs +0 -2
  241. package/dist/TO-DyvJcNhT.cjs.map +0 -1
  242. package/dist/br-geo-Q_VQpVMX.js +0 -8
  243. package/dist/br-geo-Q_VQpVMX.js.map +0 -1
  244. package/dist/br-geo-rADqOFQL.cjs +0 -2
  245. package/dist/br-geo-rADqOFQL.cjs.map +0 -1
  246. package/dist/projection-C2VXUKZJ.js +0 -124
  247. package/dist/projection-C2VXUKZJ.js.map +0 -1
  248. package/dist/projection-CkMNK7HA.cjs +0 -2
  249. package/dist/projection-CkMNK7HA.cjs.map +0 -1
package/bin/tempest.mjs CHANGED
@@ -7,7 +7,7 @@
7
7
  // tempest format [paths…] Prettier --write
8
8
  // tempest --help | --version
9
9
  import { spawnSync } from "node:child_process";
10
- import { existsSync, readFileSync } from "node:fs";
10
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
11
11
  import { mkdir, writeFile } from "node:fs/promises";
12
12
  import { dirname, join, resolve } from "node:path";
13
13
  import { fileURLToPath } from "node:url";
@@ -81,11 +81,175 @@ function firstExisting(paths) {
81
81
  return paths.find((p) => existsSync(join(ROOT, p))) ?? null;
82
82
  }
83
83
 
84
+ /** Version string from an installed package's package.json, or null. */
85
+ function installedVersion(name) {
86
+ return readJSON(join(ROOT, "node_modules", name, "package.json"))?.version ?? null;
87
+ }
88
+
89
+ /** Major version number from a semver string, or null. */
90
+ function major(version) {
91
+ if (!version) return null;
92
+ const m = /(\d+)\./.exec(String(version).replace(/^[^\d]*/, ""));
93
+ return m ? Number(m[1]) : null;
94
+ }
95
+
96
+ /**
97
+ * True when `name` has a **nested** copy under tempest-react-sdk — meaning two
98
+ * physical instances load at runtime. Silent killer for React (invalid-hook /
99
+ * dispatcher null) and for context-based libs (react-query, zustand, RHF,
100
+ * router): providers and consumers end up in different module instances.
101
+ */
102
+ function nestedDupe(name) {
103
+ return existsSync(join(ROOT, "node_modules", "tempest-react-sdk", "node_modules", name));
104
+ }
105
+
106
+ /**
107
+ * Recursively collect source text (bounded) to scan for import usage, and note
108
+ * whether any test file exists. Returns `{ text, hasTests }`.
109
+ */
110
+ function scanSources() {
111
+ const roots = ["src", "app"].map((d) => join(ROOT, d)).filter(existsSync);
112
+ let text = "";
113
+ let hasTests = false;
114
+ let budget = 4000; // file cap — keep the doctor fast on big trees
115
+ const exts = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs"]);
116
+ const walk = (dir) => {
117
+ if (budget <= 0) return;
118
+ let entries;
119
+ try {
120
+ entries = readdirSync(dir, { withFileTypes: true });
121
+ } catch {
122
+ return;
123
+ }
124
+ for (const e of entries) {
125
+ if (budget <= 0) return;
126
+ if (e.name === "node_modules" || e.name.startsWith(".")) continue;
127
+ const full = join(dir, e.name);
128
+ if (e.isDirectory()) walk(full);
129
+ else if (exts.has(e.name.slice(e.name.lastIndexOf(".")))) {
130
+ budget -= 1;
131
+ if (/\.(test|spec)\./.test(e.name)) hasTests = true;
132
+ try {
133
+ text += readFileSync(full, "utf8");
134
+ } catch {
135
+ /* ignore */
136
+ }
137
+ }
138
+ }
139
+ };
140
+ roots.forEach(walk);
141
+ return { text, hasTests };
142
+ }
143
+
144
+ /** File mtime in ms, or 0 if unreadable. */
145
+ function mtimeMs(path) {
146
+ try {
147
+ return statSync(path).mtimeMs;
148
+ } catch {
149
+ return 0;
150
+ }
151
+ }
152
+
153
+ /** npm's published latest for a package (best-effort, short timeout). */
154
+ function npmLatest(name) {
155
+ try {
156
+ const res = spawnSync("npm", ["view", name, "version"], {
157
+ encoding: "utf8",
158
+ timeout: 2500,
159
+ });
160
+ const v = (res.stdout ?? "").trim();
161
+ return /^\d+\.\d+\.\d+/.test(v) ? v : null;
162
+ } catch {
163
+ return null;
164
+ }
165
+ }
166
+
167
+ /** Matches a real `import … from "tempest-react-sdk/<sub>"` (any quote style). */
168
+ function importsSubpath(src, sub) {
169
+ return new RegExp(`from\\s*["']tempest-react-sdk/${sub}["']`).test(src);
170
+ }
171
+
172
+ // Vite's built-in `import.meta.env` keys — these don't need the VITE_ prefix.
173
+ const BUILTIN_ENV = new Set(["MODE", "DEV", "PROD", "BASE_URL", "SSR"]);
174
+
175
+ /**
176
+ * `import.meta.env.X` references in source that are neither built-ins nor
177
+ * `VITE_`-prefixed — Vite strips them, so they're `undefined` in the browser.
178
+ */
179
+ function envPrefixIssues(src) {
180
+ const found = new Set();
181
+ const re = /import\.meta\.env\.([A-Za-z_$][\w$]*)/g;
182
+ let m;
183
+ while ((m = re.exec(src))) {
184
+ const key = m[1];
185
+ if (!BUILTIN_ENV.has(key) && !key.startsWith("VITE_")) found.add(key);
186
+ }
187
+ return [...found];
188
+ }
189
+
190
+ /** Package-manager lockfiles present in the project root. */
191
+ function lockfiles() {
192
+ return [
193
+ ["package-lock.json", "npm"],
194
+ ["yarn.lock", "yarn"],
195
+ ["pnpm-lock.yaml", "pnpm"],
196
+ ["bun.lockb", "bun"],
197
+ ].filter(([f]) => existsSync(join(ROOT, f)));
198
+ }
199
+
200
+ /** Declared deps whose folder is missing from node_modules (install drift). */
201
+ function missingInstalled(deps) {
202
+ return Object.keys(deps).filter((name) => {
203
+ const spec = String(deps[name]);
204
+ if (spec.startsWith("workspace:")) return false;
205
+ return !existsSync(join(ROOT, "node_modules", name));
206
+ });
207
+ }
208
+
209
+ /** True when `.gitignore` has a line that ignores `.env`. */
210
+ function envIsGitignored() {
211
+ try {
212
+ const lines = readFileSync(join(ROOT, ".gitignore"), "utf8").split(/\r?\n/);
213
+ return lines.some((l) => {
214
+ const s = l.trim();
215
+ return s === ".env" || s === ".env*" || s === "*.local" || s === ".env.local";
216
+ });
217
+ } catch {
218
+ return false;
219
+ }
220
+ }
221
+
222
+ // Optional peer deps required only when the matching subpath/feature is used.
223
+ // Matchers target real import statements / JSX props, not incidental mentions.
224
+ const OPTIONAL_PEERS = [
225
+ { peer: "recharts", used: (s) => importsSubpath(s, "charts"), why: "charts" },
226
+ { peer: "@tiptap/react", used: (s) => importsSubpath(s, "editor"), why: "editor" },
227
+ { peer: "onnxruntime-web", used: (s) => importsSubpath(s, "vision"), why: "vision" },
228
+ {
229
+ peer: "leaflet",
230
+ // Only when a TrajectoryMap actually receives a tileUrl prop.
231
+ used: (s) => /<TrajectoryMap[^>]*\stileUrl\s*=/.test(s),
232
+ why: "TrajectoryMap tiles",
233
+ },
234
+ ];
235
+
236
+ // SDK child-deps that hold module-level state / React context — a second
237
+ // instance silently breaks them (two QueryClients, two RHF contexts, etc.).
238
+ const STATEFUL_DEPS = [
239
+ "react",
240
+ "react-dom",
241
+ "@tanstack/react-query",
242
+ "zustand",
243
+ "react-hook-form",
244
+ "react-router-dom",
245
+ ];
246
+
84
247
  function doctor() {
85
248
  const checks = [];
86
249
  const pkg = readJSON(join(ROOT, "package.json"));
87
250
 
88
- // Node
251
+ // ── Environment ─────────────────────────────────────────────────────────
252
+ checks.push(["section", "Environment"]);
89
253
  const [maj, min] = process.versions.node.split(".").map(Number);
90
254
  const nodeOk = maj > 20 || (maj === 20 && min >= 19);
91
255
  checks.push([
@@ -93,40 +257,215 @@ function doctor() {
93
257
  `Node ${process.versions.node}`,
94
258
  nodeOk ? "" : "requires >= 20.19",
95
259
  ]);
260
+ // Even majors are Node LTS lines; odd majors (21, 23…) aren't — avoid in prod.
261
+ if (nodeOk && maj % 2 === 1) {
262
+ checks.push([
263
+ "warn",
264
+ `Node ${maj} is not an LTS line`,
265
+ "odd majors aren't LTS — prefer an even major (20, 22…) for production",
266
+ ]);
267
+ }
268
+ checks.push(["info", `tempest CLI v${selfVersion()}`]);
96
269
 
97
- // package.json
98
270
  if (!pkg) {
99
271
  checks.push(["fail", "package.json", "not found — run inside your project root"]);
100
272
  return report(checks);
101
273
  }
102
- checks.push(["ok", "package.json found"]);
103
274
 
104
- // SDK dependency + installed
105
275
  const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
276
+ const { text: src, hasTests } = scanSources();
277
+
278
+ // Toolchain versions.
279
+ const tsV = installedVersion("typescript");
280
+ if (tsV)
281
+ checks.push(
282
+ (major(tsV) ?? 0) >= 5
283
+ ? ["ok", "TypeScript", `v${tsV}`]
284
+ : ["warn", "TypeScript", `v${tsV} — SDK targets 5.x`],
285
+ );
286
+ const viteV = installedVersion("vite");
287
+ if (viteV)
288
+ checks.push(
289
+ (major(viteV) ?? 0) >= 5
290
+ ? ["ok", "Vite", `v${viteV}`]
291
+ : ["warn", "Vite", `v${viteV} — SDK targets 5/6/7`],
292
+ );
293
+
294
+ // Node satisfies package.json engines.node's lower bound, if declared.
295
+ const engineNode = pkg.engines?.node;
296
+ const reqMajor = engineNode ? major(engineNode) : null;
297
+ if (reqMajor !== null && maj < reqMajor) {
298
+ checks.push([
299
+ "warn",
300
+ "engines.node",
301
+ `package.json wants "${engineNode}" but you're on ${process.versions.node}`,
302
+ ]);
303
+ }
304
+
305
+ // ── Project ─────────────────────────────────────────────────────────────
306
+ checks.push(["section", "Project"]);
307
+ checks.push(["ok", "package.json found"]);
308
+ const sdkInstalled = installedVersion("tempest-react-sdk");
106
309
  checks.push(
107
310
  deps["tempest-react-sdk"]
108
311
  ? ["ok", "tempest-react-sdk in dependencies", deps["tempest-react-sdk"]]
109
- : [
110
- "fail",
111
- "tempest-react-sdk in dependencies",
112
- "add it: npm install tempest-react-sdk",
113
- ],
312
+ : ["fail", "tempest-react-sdk in dependencies", "npm install tempest-react-sdk"],
114
313
  );
115
314
  checks.push(
116
- existsSync(join(ROOT, "node_modules", "tempest-react-sdk"))
117
- ? ["ok", "tempest-react-sdk installed"]
315
+ sdkInstalled
316
+ ? ["ok", "tempest-react-sdk installed", `v${sdkInstalled}`]
118
317
  : ["fail", "tempest-react-sdk installed", "run npm install"],
119
318
  );
120
-
121
- // React peers
122
- const hasReact = deps.react && deps["react-dom"];
319
+ const reactV = installedVersion("react");
123
320
  checks.push(
124
- hasReact
125
- ? ["ok", "react + react-dom present"]
321
+ deps.react && deps["react-dom"]
322
+ ? ["ok", "react + react-dom present", reactV ? `v${reactV}` : ""]
126
323
  : ["fail", "react + react-dom present", "install react react-dom"],
127
324
  );
325
+ if (reactV && (major(reactV) ?? 0) < 18) {
326
+ checks.push(["warn", "react version", `v${reactV} — SDK requires React 18 or 19`]);
327
+ }
328
+
329
+ // ── Dependency health (silent bugs) ──────────────────────────────────────
330
+ checks.push(["section", "Dependency health"]);
331
+
332
+ // Duplicate / nested instances. Skipped when the SDK is a local file:/link:
333
+ // dependency — its dev node_modules is expected and not shipped to real installs.
334
+ const sdkSpec = String(deps["tempest-react-sdk"] ?? "");
335
+ const linked = sdkSpec.startsWith("file:") || sdkSpec.startsWith("link:");
336
+ if (linked) {
337
+ checks.push(["info", "SDK is a local link", "skipping duplicate-instance check"]);
338
+ } else {
339
+ const dupes = STATEFUL_DEPS.filter(nestedDupe);
340
+ checks.push(
341
+ dupes.length === 0
342
+ ? ["ok", "single instance of React & stateful deps"]
343
+ : [
344
+ "warn",
345
+ `duplicate instance: ${dupes.join(", ")}`,
346
+ "nested copy under tempest-react-sdk — run `npm dedupe` or align versions; two instances break hooks/context",
347
+ ],
348
+ );
349
+ }
350
+
351
+ // Declared-but-not-installed (package.json ↔ node_modules drift).
352
+ const missing = missingInstalled(deps);
353
+ if (missing.length > 0) {
354
+ const shown = missing.slice(0, 8).join(", ");
355
+ checks.push([
356
+ "warn",
357
+ `${missing.length} dependency(ies) not installed`,
358
+ `${shown}${missing.length > 8 ? ", …" : ""} — run npm install`,
359
+ ]);
360
+ } else {
361
+ checks.push(["ok", "all declared dependencies installed"]);
362
+ }
363
+
364
+ // App's own peerDependencies unmet.
365
+ const peerDeps = Object.keys(pkg.peerDependencies ?? {});
366
+ const unmetPeers = peerDeps.filter((name) => !installedVersion(name));
367
+ if (unmetPeers.length > 0) {
368
+ checks.push([
369
+ "warn",
370
+ `${unmetPeers.length} peerDependency(ies) unmet`,
371
+ `${unmetPeers.slice(0, 8).join(", ")} — install them or document as optional`,
372
+ ]);
373
+ }
374
+
375
+ // @types/react major vs react major.
376
+ const typesReact = installedVersion("@types/react");
377
+ if (typesReact && reactV) {
378
+ checks.push(
379
+ major(typesReact) === major(reactV)
380
+ ? ["ok", "@types/react matches react", `v${major(reactV)}`]
381
+ : [
382
+ "warn",
383
+ "@types/react mismatch",
384
+ `@types/react v${major(typesReact)} vs react v${major(reactV)} — align them`,
385
+ ],
386
+ );
387
+ }
388
+
389
+ // Optional peers for used subpaths.
390
+ for (const { peer, used, why } of OPTIONAL_PEERS) {
391
+ if (used(src) && !installedVersion(peer)) {
392
+ checks.push([
393
+ "warn",
394
+ `${peer} missing (used by ${why})`,
395
+ `you import ${why} but ${peer} isn't installed — npm i ${peer}`,
396
+ ]);
397
+ }
398
+ }
399
+
400
+ // SDK up to date (online, best-effort).
401
+ if (sdkInstalled) {
402
+ const latest = npmLatest("tempest-react-sdk");
403
+ if (latest && latest !== sdkInstalled) {
404
+ const behind = (major(latest) ?? 0) > (major(sdkInstalled) ?? 0);
405
+ checks.push([
406
+ behind ? "warn" : "info",
407
+ "tempest-react-sdk update available",
408
+ `installed v${sdkInstalled} · latest v${latest}`,
409
+ ]);
410
+ } else if (latest) {
411
+ checks.push(["ok", "tempest-react-sdk up to date", `v${latest}`]);
412
+ }
413
+ }
414
+
415
+ // ── TypeScript ────────────────────────────────────────────────────────────
416
+ const tsc = readJSON(join(ROOT, "tsconfig.json"));
417
+ if (tsc) {
418
+ checks.push(["section", "TypeScript"]);
419
+ const co = tsc.compilerOptions ?? {};
420
+ checks.push(
421
+ co.paths?.["@/*"]
422
+ ? ["ok", 'tsconfig "@/*" alias']
423
+ : ["warn", 'tsconfig "@/*" alias', 'add "paths": { "@/*": ["./src/*"] }'],
424
+ );
425
+ const mr = String(co.moduleResolution ?? "").toLowerCase();
426
+ checks.push(
427
+ ["bundler", "node16", "nodenext"].includes(mr)
428
+ ? ["ok", `moduleResolution: ${co.moduleResolution}`]
429
+ : [
430
+ "warn",
431
+ `moduleResolution: ${co.moduleResolution ?? "(unset)"}`,
432
+ 'use "bundler" — otherwise subpath types (tempest-react-sdk/br, /charts…) won\'t resolve',
433
+ ],
434
+ );
435
+ checks.push(
436
+ String(co.jsx ?? "").toLowerCase() === "react-jsx"
437
+ ? ["ok", 'jsx: "react-jsx"']
438
+ : ["warn", `jsx: ${co.jsx ?? "(unset)"}`, 'set "jsx": "react-jsx"'],
439
+ );
440
+ checks.push(
441
+ co.strict === true
442
+ ? ["ok", "strict mode on"]
443
+ : ["warn", "strict mode off", 'enable "strict": true to catch silent type bugs'],
444
+ );
445
+ if (co.skipLibCheck === false) {
446
+ checks.push([
447
+ "warn",
448
+ "skipLibCheck disabled",
449
+ 'set "skipLibCheck": true — avoids type errors leaking from dependencies',
450
+ ]);
451
+ }
452
+ // Tests present but tsconfig restricts `types` and omits vitest globals.
453
+ if (
454
+ hasTests &&
455
+ installedVersion("vitest") &&
456
+ Array.isArray(co.types) &&
457
+ !co.types.some((t) => /vitest/.test(t))
458
+ ) {
459
+ checks.push([
460
+ "warn",
461
+ "vitest globals not in tsconfig types",
462
+ 'tests exist but "types" omits vitest — add "vitest/globals" so tsc sees describe/it/expect',
463
+ ]);
464
+ }
465
+ }
128
466
 
129
- // Vite config + createViteConfig
467
+ // ── Integration ───────────────────────────────────────────────────────────
468
+ checks.push(["section", "Integration"]);
130
469
  const viteCfg = firstExisting(["vite.config.ts", "vite.config.js", "vite.config.mjs"]);
131
470
  if (!viteCfg) {
132
471
  checks.push(["warn", "vite config", "no vite.config.* found"]);
@@ -136,18 +475,17 @@ function doctor() {
136
475
  ? ["ok", `${viteCfg} uses createViteConfig`]
137
476
  : ["warn", `${viteCfg}`, "not using createViteConfig from tempest-react-sdk/vite"],
138
477
  );
478
+ // React plugin is required for JSX/Fast Refresh in a Vite React app.
479
+ checks.push(
480
+ installedVersion("@vitejs/plugin-react")
481
+ ? ["ok", "@vitejs/plugin-react installed"]
482
+ : [
483
+ "warn",
484
+ "@vitejs/plugin-react",
485
+ "not installed — Vite needs it for JSX/Fast Refresh (npm i -D @vitejs/plugin-react)",
486
+ ],
487
+ );
139
488
  }
140
-
141
- // tsconfig @ alias
142
- const tsc = readJSON(join(ROOT, "tsconfig.json"));
143
- const paths = tsc?.compilerOptions?.paths ?? {};
144
- checks.push(
145
- paths["@/*"]
146
- ? ["ok", 'tsconfig "@/*" alias']
147
- : ["warn", 'tsconfig "@/*" alias', 'add "paths": { "@/*": ["./src/*"] }'],
148
- );
149
-
150
- // styles.css imported at entry
151
489
  const entry = firstExisting(["src/main.tsx", "src/main.ts", "src/index.tsx", "src/index.ts"]);
152
490
  if (entry) {
153
491
  checks.push(
@@ -158,8 +496,18 @@ function doctor() {
158
496
  } else {
159
497
  checks.push(["warn", "app entry", "no src/main.tsx found"]);
160
498
  }
499
+ // styles.css should be imported once — duplicates re-inject the whole sheet.
500
+ const stylesImports = (src.match(/tempest-react-sdk\/styles\.css/g) ?? []).length;
501
+ if (stylesImports > 1) {
502
+ checks.push([
503
+ "warn",
504
+ `styles.css imported ${stylesImports}×`,
505
+ "import it once at the app entry — duplicate imports ship the stylesheet repeatedly",
506
+ ]);
507
+ }
161
508
 
162
- // tooling
509
+ // ── Tooling ────────────────────────────────────────────────────────────────
510
+ checks.push(["section", "Tooling"]);
163
511
  checks.push(
164
512
  firstExisting(["eslint.config.js", "eslint.config.mjs", ".eslintrc.cjs", ".eslintrc.json"])
165
513
  ? ["ok", "ESLint config present"]
@@ -176,17 +524,79 @@ function doctor() {
176
524
  : ["warn", "prettier installed", "npm i -D prettier"],
177
525
  );
178
526
 
179
- // .env
180
- if (existsSync(join(ROOT, ".env"))) checks.push(["ok", ".env present"]);
181
- else if (existsSync(join(ROOT, ".env.example")))
527
+ // Lockfile / package manager.
528
+ const locks = lockfiles();
529
+ if (locks.length === 0) {
530
+ checks.push([
531
+ "warn",
532
+ "no lockfile",
533
+ "commit a lockfile (package-lock.json) for reproducible installs",
534
+ ]);
535
+ } else if (locks.length > 1) {
536
+ checks.push([
537
+ "warn",
538
+ `multiple lockfiles: ${locks.map(([, pm]) => pm).join(", ")}`,
539
+ "pick one package manager — mixed lockfiles drift out of sync",
540
+ ]);
541
+ } else {
542
+ checks.push(["ok", `lockfile (${locks[0][1]})`]);
543
+ // package.json edited after the lockfile → likely out of sync.
544
+ const lockFile = locks[0][0];
545
+ if (mtimeMs(join(ROOT, "package.json")) > mtimeMs(join(ROOT, lockFile)) + 1000) {
546
+ checks.push([
547
+ "warn",
548
+ "lockfile may be stale",
549
+ `package.json is newer than ${lockFile} — run npm install to sync it`,
550
+ ]);
551
+ }
552
+ }
553
+
554
+ // ── Env & secrets ────────────────────────────────────────────────────────
555
+ checks.push(["section", "Env & secrets"]);
556
+ const hasEnv = existsSync(join(ROOT, ".env"));
557
+ if (hasEnv) {
558
+ checks.push(
559
+ envIsGitignored()
560
+ ? ["ok", ".env is git-ignored"]
561
+ : [
562
+ "warn",
563
+ ".env NOT git-ignored",
564
+ "secrets can be committed — add `.env` to .gitignore now",
565
+ ],
566
+ );
567
+ } else if (existsSync(join(ROOT, ".env.example"))) {
182
568
  checks.push(["warn", ".env", "only .env.example — copy it: cp .env.example .env"]);
569
+ }
570
+ const envIssues = envPrefixIssues(src);
571
+ if (envIssues.length > 0) {
572
+ const shown = envIssues.slice(0, 6).join(", ");
573
+ checks.push([
574
+ "warn",
575
+ "client env without VITE_ prefix",
576
+ `${shown}${envIssues.length > 6 ? ", …" : ""} — Vite only exposes VITE_* to the browser; these are undefined at runtime`,
577
+ ]);
578
+ } else {
579
+ checks.push(["ok", "client env vars use the VITE_ prefix"]);
580
+ }
183
581
 
184
582
  return report(checks);
185
583
  }
186
584
 
187
585
  function report(checks) {
188
- console.log(`\n${c.bold}${c.cyan}tempest doctor${c.reset} ${c.dim}(${ROOT})${c.reset}\n`);
189
- for (const [status, label, detail] of checks) console.log(fmt(status, label, detail));
586
+ console.log(`\n${c.bold}${c.cyan}tempest doctor${c.reset} ${c.dim}(${ROOT})${c.reset}`);
587
+ for (const entry of checks) {
588
+ if (entry[0] === "section") {
589
+ console.log(`\n${c.bold}${entry[1]}${c.reset}`);
590
+ continue;
591
+ }
592
+ if (entry[0] === "info") {
593
+ console.log(
594
+ ` [${c.cyan}i${c.reset}] ${entry[1]}${entry[2] ? ` ${c.dim}— ${entry[2]}${c.reset}` : ""}`,
595
+ );
596
+ continue;
597
+ }
598
+ console.log(fmt(entry[0], entry[1], entry[2]));
599
+ }
190
600
  const fails = checks.filter((x) => x[0] === "fail").length;
191
601
  const warns = checks.filter((x) => x[0] === "warn").length;
192
602
  console.log("");
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="FeatureCollection",o="AC",t=JSON.parse('[{"type":"Feature","properties":{"id":"1200013","name":"Acrelândia","centroid":[-66.9475,-9.9347]},"geometry":{"type":"Polygon","coordinates":[[[-67.133,-9.676],[-66.619,-9.894],[-66.638,-9.952],[-66.657,-9.936],[-66.838,-10.083],[-66.873,-10.081],[-66.998,-10.232],[-67.076,-10.196],[-67.077,-10.091],[-67.099,-10.103],[-67.125,-9.971],[-67.091,-9.957],[-67.193,-9.704],[-67.133,-9.676]]]}},{"type":"Feature","properties":{"id":"1200054","name":"Assis Brasil","centroid":[-70.0041,-10.781]},"geometry":{"type":"Polygon","coordinates":[[[-69.588,-10.371],[-69.542,-10.418],[-69.511,-10.557],[-69.671,-10.731],[-69.757,-10.743],[-69.778,-10.782],[-69.657,-10.863],[-69.552,-10.873],[-69.485,-10.794],[-69.498,-10.7],[-69.422,-10.691],[-69.39,-10.826],[-69.428,-10.937],[-69.737,-10.974],[-69.769,-10.93],[-69.934,-10.922],[-70.159,-11.041],[-70.307,-11.07],[-70.437,-11.039],[-70.53,-10.935],[-70.621,-11],[-70.602,-10.697],[-70.381,-10.73],[-70.282,-10.691],[-70.255,-10.713],[-70.224,-10.676],[-70.207,-10.703],[-69.992,-10.57],[-69.832,-10.538],[-69.785,-10.461],[-69.687,-10.435],[-69.682,-10.41],[-69.648,-10.428],[-69.588,-10.371]]]}},{"type":"Feature","properties":{"id":"1200104","name":"Brasiléia","centroid":[-69.2092,-10.7465]},"geometry":{"type":"Polygon","coordinates":[[[-69.129,-10.402],[-69.165,-10.502],[-69.081,-10.579],[-68.904,-10.58],[-68.975,-10.771],[-68.907,-10.777],[-68.835,-10.74],[-68.784,-10.869],[-68.687,-10.937],[-68.743,-11.016],[-68.788,-11.015],[-68.792,-10.991],[-68.912,-11.022],[-69.072,-10.966],[-69.413,-10.938],[-69.393,-10.732],[-69.422,-10.691],[-69.498,-10.7],[-69.485,-10.794],[-69.552,-10.873],[-69.657,-10.863],[-69.778,-10.782],[-69.757,-10.743],[-69.671,-10.731],[-69.55,-10.614],[-69.508,-10.505],[-69.342,-10.485],[-69.149,-10.385],[-69.129,-10.402]]]}},{"type":"Feature","properties":{"id":"1200138","name":"Bujari","centroid":[-68.1755,-9.6136]},"geometry":{"type":"Polygon","coordinates":[[[-68.22,-9.242],[-67.974,-9.353],[-68.048,-9.352],[-68.059,-9.417],[-68.019,-9.47],[-68.089,-9.554],[-67.909,-9.709],[-67.804,-9.747],[-67.83,-9.87],[-67.867,-9.841],[-67.976,-9.847],[-68.152,-9.96],[-68.3,-9.794],[-68.38,-9.782],[-68.442,-9.827],[-68.427,-9.711],[-68.455,-9.624],[-68.411,-9.521],[-68.33,-9.44],[-68.401,-9.324],[-68.22,-9.242]]]}},{"type":"Feature","properties":{"id":"1200179","name":"Capixaba","centroid":[-67.8337,-10.4752]},"geometry":{"type":"Polygon","coordinates":[[[-67.773,-10.242],[-67.689,-10.354],[-67.637,-10.363],[-67.68,-10.391],[-67.696,-10.453],[-67.587,-10.51],[-67.729,-10.713],[-67.864,-10.641],[-68.002,-10.648],[-68.016,-10.602],[-67.983,-10.593],[-68.064,-10.425],[-67.999,-10.316],[-67.847,-10.287],[-67.804,-10.198],[-67.773,-10.242]]]}},{"type":"Feature","properties":{"id":"1200203","name":"Cruzeiro do Sul","centroid":[-72.7626,-7.9748]},"geometry":{"type":"Polygon","coordinates":[[[-71.989,-7.673],[-72.017,-7.798],[-72.219,-7.974],[-72.265,-8.222],[-72.302,-8.208],[-72.408,-8.258],[-72.556,-8.187],[-72.634,-8.185],[-72.68,-8.226],[-72.794,-8.2],[-72.808,-8.122],[-72.999,-8.223],[-73.101,-8.341],[-73.331,-8.474],[-73.39,-8.469],[-73.413,-8.411],[-73.517,-8.37],[-73.537,-8.27],[-73.594,-8.206],[-73.583,-8.128],[-73.63,-8.051],[-73.397,-8.029],[-73.374,-7.987],[-73.321,-7.992],[-73.169,-7.893],[-73.092,-7.884],[-73.116,-7.923],[-73.097,-7.941],[-72.948,-7.943],[-72.616,-7.813],[-72.646,-7.786],[-72.609,-7.78],[-72.642,-7.772],[-72.644,-7.676],[-72.731,-7.724],[-72.86,-7.675],[-72.783,-7.661],[-72.862,-7.58],[-72.901,-7.437],[-72.584,-7.552],[-71.957,-7.625],[-71.989,-7.673]]]}},{"type":"Feature","properties":{"id":"1200252","name":"Epitaciolândia","centroid":[-68.6216,-10.889]},"geometry":{"type":"Polygon","coordinates":[[[-68.648,-10.614],[-68.644,-10.654],[-68.532,-10.721],[-68.558,-10.778],[-68.403,-10.857],[-68.423,-10.934],[-68.389,-11.041],[-68.432,-11.031],[-68.543,-11.11],[-68.716,-11.145],[-68.766,-11.049],[-68.687,-10.937],[-68.784,-10.869],[-68.835,-10.74],[-68.808,-10.671],[-68.648,-10.614]]]}},{"type":"Feature","properties":{"id":"1200302","name":"Feijó","centroid":[-70.7452,-8.928]},"geometry":{"type":"Polygon","coordinates":[[[-69.989,-7.901],[-69.444,-8.366],[-69.575,-8.636],[-69.758,-8.782],[-69.847,-8.948],[-70.365,-8.982],[-70.439,-9.088],[-70.54,-9.16],[-70.677,-9.373],[-70.791,-9.449],[-70.863,-9.457],[-71.045,-9.642],[-71.1,-9.749],[-71.077,-9.828],[-71.163,-9.876],[-71.211,-9.967],[-71.308,-9.992],[-71.349,-9.974],[-71.376,-10.001],[-72.199,-10],[-72.154,-9.884],[-72.178,-9.822],[-72.111,-9.763],[-71.929,-9.722],[-71.836,-9.622],[-71.792,-9.486],[-71.724,-9.426],[-71.7,-9.267],[-71.615,-9.188],[-71.598,-9.024],[-71.527,-8.909],[-71.459,-8.867],[-71.373,-8.895],[-71.29,-8.84],[-71.242,-8.855],[-71.122,-8.764],[-71.078,-8.778],[-70.921,-8.6],[-70.858,-8.67],[-70.742,-8.609],[-70.688,-8.523],[-70.702,-8.477],[-70.653,-8.466],[-70.68,-8.383],[-70.625,-8.341],[-70.633,-8.311],[-70.564,-8.215],[-70.567,-8.043],[-70.586,-7.997],[-70.636,-7.976],[-70.645,-7.911],[-70.6,-7.894],[-70.547,-7.809],[-70.052,-7.847],[-69.989,-7.901]]]}},{"type":"Feature","properties":{"id":"1200328","name":"Jordão","centroid":[-71.9048,-9.2422]},"geometry":{"type":"Polygon","coordinates":[[[-71.559,-8.656],[-71.542,-8.738],[-71.616,-8.858],[-71.482,-8.883],[-71.574,-8.962],[-71.615,-9.188],[-71.7,-9.267],[-71.724,-9.426],[-71.792,-9.486],[-71.836,-9.622],[-71.929,-9.722],[-71.992,-9.717],[-72.039,-9.767],[-72.035,-9.743],[-72.153,-9.797],[-72.244,-9.766],[-72.271,-9.743],[-72.246,-9.654],[-72.254,-9.612],[-72.288,-9.601],[-72.283,-9.54],[-72.345,-9.545],[-72.371,-9.509],[-72.299,-9.504],[-72.156,-9.383],[-72.045,-9.203],[-72.063,-9.179],[-72.028,-8.973],[-72.081,-8.854],[-71.968,-8.778],[-71.811,-8.83],[-71.713,-8.722],[-71.559,-8.656]]]}},{"type":"Feature","properties":{"id":"1200336","name":"Mâncio Lima","centroid":[-73.4359,-7.5051]},"geometry":{"type":"Polygon","coordinates":[[[-73.12,-7.358],[-72.901,-7.437],[-72.862,-7.58],[-72.783,-7.661],[-72.946,-7.689],[-73.039,-7.665],[-73.183,-7.725],[-73.256,-7.791],[-73.307,-7.778],[-73.331,-7.711],[-73.443,-7.772],[-73.544,-7.715],[-73.675,-7.74],[-73.692,-7.768],[-73.822,-7.718],[-73.991,-7.536],[-73.948,-7.527],[-73.92,-7.466],[-73.959,-7.346],[-73.87,-7.379],[-73.83,-7.337],[-73.756,-7.347],[-73.7,-7.304],[-73.714,-7.234],[-73.801,-7.111],[-73.12,-7.358]]]}},{"type":"Feature","properties":{"id":"1200344","name":"Manoel Urbano","centroid":[-69.855,-9.3816]},"geometry":{"type":"Polygon","coordinates":[[[-68.941,-8.836],[-69.082,-8.905],[-69.111,-8.955],[-69.201,-8.956],[-69.256,-9.053],[-69.349,-9.046],[-69.458,-9.145],[-69.691,-9.23],[-69.77,-9.339],[-69.797,-9.334],[-69.784,-9.38],[-69.861,-9.439],[-69.977,-9.782],[-70.039,-9.866],[-70.043,-9.99],[-70.136,-10.194],[-70.227,-10.292],[-70.256,-10.425],[-70.625,-10.425],[-70.624,-10.075],[-70.445,-9.942],[-70.153,-9.558],[-70.028,-9.523],[-70.331,-9.396],[-70.299,-9.338],[-70.21,-9.276],[-70.051,-9.289],[-69.957,-9.23],[-69.91,-9.246],[-69.904,-9.213],[-69.85,-9.196],[-69.848,-9.14],[-69.796,-9.112],[-69.865,-8.957],[-69.758,-8.782],[-69.575,-8.636],[-69.444,-8.366],[-68.922,-8.813],[-68.941,-8.836]]]}},{"type":"Feature","properties":{"id":"1200351","name":"Marechal Thaumaturgo","centroid":[-72.5543,-9.1]},"geometry":{"type":"Polygon","coordinates":[[[-72.693,-8.696],[-72.683,-8.749],[-72.637,-8.773],[-72.495,-8.778],[-72.466,-8.754],[-72.36,-8.782],[-72.214,-8.701],[-72.144,-8.712],[-72.125,-8.828],[-72.044,-8.9],[-72.045,-9.203],[-72.156,-9.383],[-72.299,-9.504],[-72.437,-9.476],[-72.546,-9.491],[-72.75,-9.41],[-73.212,-9.411],[-73.102,-9.306],[-73.078,-9.237],[-73.008,-9.215],[-73.018,-9.177],[-72.944,-9.097],[-72.942,-8.987],[-73.022,-8.893],[-73.045,-8.903],[-73.111,-8.758],[-72.924,-8.762],[-72.75,-8.717],[-72.728,-8.672],[-72.693,-8.696]]]}},{"type":"Feature","properties":{"id":"1200385","name":"Plácido de Castro","centroid":[-67.3421,-10.2474]},"geometry":{"type":"Polygon","coordinates":[[[-67.125,-9.971],[-67.099,-10.103],[-67.077,-10.091],[-67.076,-10.196],[-67.002,-10.217],[-67.011,-10.254],[-67.131,-10.293],[-67.169,-10.337],[-67.315,-10.319],[-67.311,-10.376],[-67.407,-10.374],[-67.413,-10.427],[-67.518,-10.491],[-67.597,-10.51],[-67.696,-10.453],[-67.612,-10.298],[-67.502,-10.26],[-67.425,-10.096],[-67.125,-9.971]]]}},{"type":"Feature","properties":{"id":"1200807","name":"Porto Acre","centroid":[-67.6976,-9.6319]},"geometry":{"type":"Polygon","coordinates":[[[-68.021,-9.349],[-67.517,-9.56],[-67.324,-9.592],[-67.335,-9.724],[-67.436,-9.837],[-67.447,-9.914],[-67.517,-9.906],[-67.53,-9.855],[-67.581,-9.824],[-67.601,-9.865],[-67.71,-9.836],[-67.703,-9.787],[-67.744,-9.74],[-67.796,-9.779],[-68.089,-9.554],[-68.022,-9.481],[-68.062,-9.39],[-68.021,-9.349]]]}},{"type":"Feature","properties":{"id":"1200393","name":"Porto Walter","centroid":[-72.7188,-8.4884]},"geometry":{"type":"Polygon","coordinates":[[[-72.808,-8.122],[-72.794,-8.2],[-72.68,-8.226],[-72.634,-8.185],[-72.556,-8.187],[-72.408,-8.258],[-72.302,-8.208],[-72.265,-8.222],[-72.266,-8.261],[-72.226,-8.281],[-72.266,-8.391],[-72.232,-8.41],[-72.201,-8.552],[-72.23,-8.599],[-72.214,-8.701],[-72.36,-8.782],[-72.466,-8.754],[-72.495,-8.778],[-72.637,-8.773],[-72.728,-8.672],[-72.773,-8.727],[-73.06,-8.765],[-73.111,-8.758],[-73.15,-8.684],[-73.24,-8.666],[-73.287,-8.619],[-73.306,-8.472],[-73.331,-8.474],[-73.101,-8.341],[-72.999,-8.223],[-72.808,-8.122]]]}},{"type":"Feature","properties":{"id":"1200401","name":"Rio Branco","centroid":[-68.3686,-10.0666]},"geometry":{"type":"Polygon","coordinates":[[[-68.584,-9.539],[-68.514,-9.589],[-68.418,-9.545],[-68.455,-9.624],[-68.427,-9.711],[-68.442,-9.827],[-68.38,-9.782],[-68.3,-9.794],[-68.152,-9.96],[-67.976,-9.847],[-67.867,-9.841],[-67.83,-9.87],[-67.827,-9.782],[-67.744,-9.74],[-67.703,-9.787],[-67.71,-9.836],[-67.601,-9.865],[-67.581,-9.824],[-67.53,-9.855],[-67.482,-9.927],[-67.49,-9.997],[-67.581,-10.069],[-67.62,-10.048],[-67.671,-10.102],[-67.82,-10.089],[-67.818,-10.267],[-67.999,-10.316],[-68.041,-10.389],[-68.097,-10.364],[-68.207,-10.375],[-68.314,-10.418],[-68.388,-10.38],[-68.351,-10.332],[-68.416,-10.307],[-68.453,-10.183],[-68.496,-10.254],[-68.642,-10.306],[-68.713,-10.384],[-69.149,-10.385],[-69.342,-10.485],[-69.364,-10.463],[-69.311,-10.364],[-69.121,-10.269],[-69.037,-10.164],[-68.694,-9.887],[-68.667,-9.841],[-68.7,-9.679],[-68.673,-9.56],[-68.608,-9.505],[-68.584,-9.539]]]}},{"type":"Feature","properties":{"id":"1200427","name":"Rodrigues Alves","centroid":[-73.2258,-7.8422]},"geometry":{"type":"Polygon","coordinates":[[[-72.78,-7.693],[-72.731,-7.724],[-72.644,-7.676],[-72.642,-7.772],[-72.609,-7.78],[-72.646,-7.786],[-72.616,-7.813],[-72.948,-7.943],[-73.097,-7.941],[-73.116,-7.923],[-73.092,-7.884],[-73.169,-7.893],[-73.321,-7.992],[-73.374,-7.987],[-73.397,-8.029],[-73.63,-8.051],[-73.64,-8.008],[-73.678,-8.005],[-73.698,-7.961],[-73.732,-7.968],[-73.772,-7.902],[-73.762,-7.858],[-73.713,-7.876],[-73.69,-7.854],[-73.675,-7.74],[-73.544,-7.715],[-73.451,-7.773],[-73.331,-7.711],[-73.307,-7.778],[-73.256,-7.791],[-73.183,-7.725],[-73.039,-7.665],[-72.78,-7.693]]]}},{"type":"Feature","properties":{"id":"1200435","name":"Santa Rosa do Purus","centroid":[-70.3998,-9.4163]},"geometry":{"type":"Polygon","coordinates":[[[-69.865,-8.957],[-69.796,-9.112],[-69.848,-9.14],[-69.85,-9.196],[-69.904,-9.213],[-69.91,-9.246],[-69.957,-9.23],[-70.051,-9.289],[-70.21,-9.276],[-70.331,-9.396],[-70.028,-9.523],[-70.153,-9.558],[-70.445,-9.942],[-70.624,-10.075],[-70.622,-9.822],[-70.546,-9.777],[-70.525,-9.714],[-70.584,-9.638],[-70.598,-9.552],[-70.556,-9.571],[-70.57,-9.53],[-70.505,-9.504],[-70.523,-9.46],[-70.493,-9.426],[-70.594,-9.441],[-70.663,-9.524],[-70.75,-9.559],[-70.799,-9.641],[-70.963,-9.748],[-70.995,-9.817],[-71.077,-9.828],[-71.1,-9.749],[-71.045,-9.642],[-70.863,-9.457],[-70.791,-9.449],[-70.677,-9.373],[-70.54,-9.16],[-70.439,-9.088],[-70.365,-8.982],[-69.865,-8.957]]]}},{"type":"Feature","properties":{"id":"1200500","name":"Sena Madureira","centroid":[-69.3812,-9.7704]},"geometry":{"type":"Polygon","coordinates":[[[-68.922,-8.813],[-68.647,-9.049],[-68.22,-9.242],[-68.401,-9.324],[-68.33,-9.44],[-68.411,-9.541],[-68.514,-9.589],[-68.601,-9.538],[-68.608,-9.505],[-68.673,-9.56],[-68.7,-9.679],[-68.667,-9.841],[-68.694,-9.887],[-69.037,-10.164],[-69.121,-10.269],[-69.311,-10.364],[-69.364,-10.463],[-69.342,-10.485],[-69.508,-10.505],[-69.592,-10.37],[-69.648,-10.428],[-69.682,-10.41],[-69.687,-10.435],[-69.785,-10.461],[-69.832,-10.538],[-69.992,-10.57],[-70.207,-10.703],[-70.224,-10.676],[-70.255,-10.713],[-70.282,-10.691],[-70.368,-10.73],[-70.462,-10.701],[-70.51,-10.727],[-70.555,-10.688],[-70.623,-10.711],[-70.625,-10.425],[-70.256,-10.425],[-70.227,-10.292],[-70.136,-10.194],[-70.043,-9.99],[-70.039,-9.866],[-69.977,-9.782],[-69.861,-9.439],[-69.784,-9.38],[-69.797,-9.334],[-69.77,-9.339],[-69.691,-9.23],[-69.458,-9.145],[-69.349,-9.046],[-69.234,-9.04],[-69.201,-8.956],[-69.111,-8.955],[-69.082,-8.905],[-68.922,-8.813]]]}},{"type":"Feature","properties":{"id":"1200450","name":"Senador Guiomard","centroid":[-67.432,-9.9987]},"geometry":{"type":"Polygon","coordinates":[[[-67.139,-9.683],[-67.193,-9.704],[-67.091,-9.957],[-67.425,-10.096],[-67.51,-10.268],[-67.612,-10.298],[-67.637,-10.363],[-67.689,-10.354],[-67.81,-10.199],[-67.82,-10.089],[-67.671,-10.102],[-67.62,-10.048],[-67.581,-10.069],[-67.501,-10.02],[-67.436,-9.837],[-67.335,-9.724],[-67.324,-9.592],[-67.139,-9.683]]]}},{"type":"Feature","properties":{"id":"1200609","name":"Tarauacá","centroid":[-71.4446,-8.2381]},"geometry":{"type":"Polygon","coordinates":[[[-71.381,-7.692],[-70.515,-7.792],[-70.645,-7.911],[-70.636,-7.976],[-70.573,-8.022],[-70.555,-8.161],[-70.625,-8.341],[-70.68,-8.383],[-70.653,-8.466],[-70.702,-8.477],[-70.688,-8.523],[-70.784,-8.64],[-70.858,-8.67],[-70.921,-8.6],[-71.078,-8.778],[-71.122,-8.764],[-71.242,-8.855],[-71.29,-8.84],[-71.373,-8.895],[-71.616,-8.858],[-71.542,-8.738],[-71.555,-8.647],[-71.713,-8.722],[-71.811,-8.83],[-71.968,-8.778],[-72.079,-8.867],[-72.125,-8.828],[-72.144,-8.712],[-72.214,-8.701],[-72.23,-8.599],[-72.201,-8.552],[-72.232,-8.41],[-72.266,-8.391],[-72.226,-8.281],[-72.266,-8.261],[-72.258,-8.085],[-72.214,-7.965],[-72.017,-7.798],[-71.957,-7.625],[-71.381,-7.692]]]}},{"type":"Feature","properties":{"id":"1200708","name":"Xapuri","centroid":[-68.5061,-10.5772]},"geometry":{"type":"Polygon","coordinates":[[[-68.452,-10.248],[-68.412,-10.268],[-68.416,-10.307],[-68.351,-10.332],[-68.388,-10.38],[-68.314,-10.418],[-68.207,-10.375],[-68.048,-10.383],[-68.064,-10.425],[-68.031,-10.536],[-67.983,-10.593],[-68.016,-10.602],[-68.002,-10.648],[-68.1,-10.709],[-68.103,-10.775],[-68.196,-10.859],[-68.237,-10.956],[-68.389,-11.041],[-68.423,-10.934],[-68.403,-10.857],[-68.558,-10.778],[-68.532,-10.721],[-68.644,-10.654],[-68.637,-10.619],[-68.808,-10.671],[-68.806,-10.716],[-68.854,-10.758],[-68.975,-10.771],[-68.904,-10.58],[-69.06,-10.59],[-69.169,-10.481],[-69.132,-10.385],[-68.713,-10.384],[-68.642,-10.306],[-68.496,-10.254],[-68.453,-10.183],[-68.452,-10.248]]]}}]'),r={type:e,uf:o,features:t};exports.default=r;exports.features=t;exports.type=e;exports.uf=o;
2
+ //# sourceMappingURL=AC-Brw7ZrEs.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AC-Brw7ZrEs.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ const e = "FeatureCollection", t = "AC", o = /* @__PURE__ */ JSON.parse('[{"type":"Feature","properties":{"id":"1200013","name":"Acrelândia","centroid":[-66.9475,-9.9347]},"geometry":{"type":"Polygon","coordinates":[[[-67.133,-9.676],[-66.619,-9.894],[-66.638,-9.952],[-66.657,-9.936],[-66.838,-10.083],[-66.873,-10.081],[-66.998,-10.232],[-67.076,-10.196],[-67.077,-10.091],[-67.099,-10.103],[-67.125,-9.971],[-67.091,-9.957],[-67.193,-9.704],[-67.133,-9.676]]]}},{"type":"Feature","properties":{"id":"1200054","name":"Assis Brasil","centroid":[-70.0041,-10.781]},"geometry":{"type":"Polygon","coordinates":[[[-69.588,-10.371],[-69.542,-10.418],[-69.511,-10.557],[-69.671,-10.731],[-69.757,-10.743],[-69.778,-10.782],[-69.657,-10.863],[-69.552,-10.873],[-69.485,-10.794],[-69.498,-10.7],[-69.422,-10.691],[-69.39,-10.826],[-69.428,-10.937],[-69.737,-10.974],[-69.769,-10.93],[-69.934,-10.922],[-70.159,-11.041],[-70.307,-11.07],[-70.437,-11.039],[-70.53,-10.935],[-70.621,-11],[-70.602,-10.697],[-70.381,-10.73],[-70.282,-10.691],[-70.255,-10.713],[-70.224,-10.676],[-70.207,-10.703],[-69.992,-10.57],[-69.832,-10.538],[-69.785,-10.461],[-69.687,-10.435],[-69.682,-10.41],[-69.648,-10.428],[-69.588,-10.371]]]}},{"type":"Feature","properties":{"id":"1200104","name":"Brasiléia","centroid":[-69.2092,-10.7465]},"geometry":{"type":"Polygon","coordinates":[[[-69.129,-10.402],[-69.165,-10.502],[-69.081,-10.579],[-68.904,-10.58],[-68.975,-10.771],[-68.907,-10.777],[-68.835,-10.74],[-68.784,-10.869],[-68.687,-10.937],[-68.743,-11.016],[-68.788,-11.015],[-68.792,-10.991],[-68.912,-11.022],[-69.072,-10.966],[-69.413,-10.938],[-69.393,-10.732],[-69.422,-10.691],[-69.498,-10.7],[-69.485,-10.794],[-69.552,-10.873],[-69.657,-10.863],[-69.778,-10.782],[-69.757,-10.743],[-69.671,-10.731],[-69.55,-10.614],[-69.508,-10.505],[-69.342,-10.485],[-69.149,-10.385],[-69.129,-10.402]]]}},{"type":"Feature","properties":{"id":"1200138","name":"Bujari","centroid":[-68.1755,-9.6136]},"geometry":{"type":"Polygon","coordinates":[[[-68.22,-9.242],[-67.974,-9.353],[-68.048,-9.352],[-68.059,-9.417],[-68.019,-9.47],[-68.089,-9.554],[-67.909,-9.709],[-67.804,-9.747],[-67.83,-9.87],[-67.867,-9.841],[-67.976,-9.847],[-68.152,-9.96],[-68.3,-9.794],[-68.38,-9.782],[-68.442,-9.827],[-68.427,-9.711],[-68.455,-9.624],[-68.411,-9.521],[-68.33,-9.44],[-68.401,-9.324],[-68.22,-9.242]]]}},{"type":"Feature","properties":{"id":"1200179","name":"Capixaba","centroid":[-67.8337,-10.4752]},"geometry":{"type":"Polygon","coordinates":[[[-67.773,-10.242],[-67.689,-10.354],[-67.637,-10.363],[-67.68,-10.391],[-67.696,-10.453],[-67.587,-10.51],[-67.729,-10.713],[-67.864,-10.641],[-68.002,-10.648],[-68.016,-10.602],[-67.983,-10.593],[-68.064,-10.425],[-67.999,-10.316],[-67.847,-10.287],[-67.804,-10.198],[-67.773,-10.242]]]}},{"type":"Feature","properties":{"id":"1200203","name":"Cruzeiro do Sul","centroid":[-72.7626,-7.9748]},"geometry":{"type":"Polygon","coordinates":[[[-71.989,-7.673],[-72.017,-7.798],[-72.219,-7.974],[-72.265,-8.222],[-72.302,-8.208],[-72.408,-8.258],[-72.556,-8.187],[-72.634,-8.185],[-72.68,-8.226],[-72.794,-8.2],[-72.808,-8.122],[-72.999,-8.223],[-73.101,-8.341],[-73.331,-8.474],[-73.39,-8.469],[-73.413,-8.411],[-73.517,-8.37],[-73.537,-8.27],[-73.594,-8.206],[-73.583,-8.128],[-73.63,-8.051],[-73.397,-8.029],[-73.374,-7.987],[-73.321,-7.992],[-73.169,-7.893],[-73.092,-7.884],[-73.116,-7.923],[-73.097,-7.941],[-72.948,-7.943],[-72.616,-7.813],[-72.646,-7.786],[-72.609,-7.78],[-72.642,-7.772],[-72.644,-7.676],[-72.731,-7.724],[-72.86,-7.675],[-72.783,-7.661],[-72.862,-7.58],[-72.901,-7.437],[-72.584,-7.552],[-71.957,-7.625],[-71.989,-7.673]]]}},{"type":"Feature","properties":{"id":"1200252","name":"Epitaciolândia","centroid":[-68.6216,-10.889]},"geometry":{"type":"Polygon","coordinates":[[[-68.648,-10.614],[-68.644,-10.654],[-68.532,-10.721],[-68.558,-10.778],[-68.403,-10.857],[-68.423,-10.934],[-68.389,-11.041],[-68.432,-11.031],[-68.543,-11.11],[-68.716,-11.145],[-68.766,-11.049],[-68.687,-10.937],[-68.784,-10.869],[-68.835,-10.74],[-68.808,-10.671],[-68.648,-10.614]]]}},{"type":"Feature","properties":{"id":"1200302","name":"Feijó","centroid":[-70.7452,-8.928]},"geometry":{"type":"Polygon","coordinates":[[[-69.989,-7.901],[-69.444,-8.366],[-69.575,-8.636],[-69.758,-8.782],[-69.847,-8.948],[-70.365,-8.982],[-70.439,-9.088],[-70.54,-9.16],[-70.677,-9.373],[-70.791,-9.449],[-70.863,-9.457],[-71.045,-9.642],[-71.1,-9.749],[-71.077,-9.828],[-71.163,-9.876],[-71.211,-9.967],[-71.308,-9.992],[-71.349,-9.974],[-71.376,-10.001],[-72.199,-10],[-72.154,-9.884],[-72.178,-9.822],[-72.111,-9.763],[-71.929,-9.722],[-71.836,-9.622],[-71.792,-9.486],[-71.724,-9.426],[-71.7,-9.267],[-71.615,-9.188],[-71.598,-9.024],[-71.527,-8.909],[-71.459,-8.867],[-71.373,-8.895],[-71.29,-8.84],[-71.242,-8.855],[-71.122,-8.764],[-71.078,-8.778],[-70.921,-8.6],[-70.858,-8.67],[-70.742,-8.609],[-70.688,-8.523],[-70.702,-8.477],[-70.653,-8.466],[-70.68,-8.383],[-70.625,-8.341],[-70.633,-8.311],[-70.564,-8.215],[-70.567,-8.043],[-70.586,-7.997],[-70.636,-7.976],[-70.645,-7.911],[-70.6,-7.894],[-70.547,-7.809],[-70.052,-7.847],[-69.989,-7.901]]]}},{"type":"Feature","properties":{"id":"1200328","name":"Jordão","centroid":[-71.9048,-9.2422]},"geometry":{"type":"Polygon","coordinates":[[[-71.559,-8.656],[-71.542,-8.738],[-71.616,-8.858],[-71.482,-8.883],[-71.574,-8.962],[-71.615,-9.188],[-71.7,-9.267],[-71.724,-9.426],[-71.792,-9.486],[-71.836,-9.622],[-71.929,-9.722],[-71.992,-9.717],[-72.039,-9.767],[-72.035,-9.743],[-72.153,-9.797],[-72.244,-9.766],[-72.271,-9.743],[-72.246,-9.654],[-72.254,-9.612],[-72.288,-9.601],[-72.283,-9.54],[-72.345,-9.545],[-72.371,-9.509],[-72.299,-9.504],[-72.156,-9.383],[-72.045,-9.203],[-72.063,-9.179],[-72.028,-8.973],[-72.081,-8.854],[-71.968,-8.778],[-71.811,-8.83],[-71.713,-8.722],[-71.559,-8.656]]]}},{"type":"Feature","properties":{"id":"1200336","name":"Mâncio Lima","centroid":[-73.4359,-7.5051]},"geometry":{"type":"Polygon","coordinates":[[[-73.12,-7.358],[-72.901,-7.437],[-72.862,-7.58],[-72.783,-7.661],[-72.946,-7.689],[-73.039,-7.665],[-73.183,-7.725],[-73.256,-7.791],[-73.307,-7.778],[-73.331,-7.711],[-73.443,-7.772],[-73.544,-7.715],[-73.675,-7.74],[-73.692,-7.768],[-73.822,-7.718],[-73.991,-7.536],[-73.948,-7.527],[-73.92,-7.466],[-73.959,-7.346],[-73.87,-7.379],[-73.83,-7.337],[-73.756,-7.347],[-73.7,-7.304],[-73.714,-7.234],[-73.801,-7.111],[-73.12,-7.358]]]}},{"type":"Feature","properties":{"id":"1200344","name":"Manoel Urbano","centroid":[-69.855,-9.3816]},"geometry":{"type":"Polygon","coordinates":[[[-68.941,-8.836],[-69.082,-8.905],[-69.111,-8.955],[-69.201,-8.956],[-69.256,-9.053],[-69.349,-9.046],[-69.458,-9.145],[-69.691,-9.23],[-69.77,-9.339],[-69.797,-9.334],[-69.784,-9.38],[-69.861,-9.439],[-69.977,-9.782],[-70.039,-9.866],[-70.043,-9.99],[-70.136,-10.194],[-70.227,-10.292],[-70.256,-10.425],[-70.625,-10.425],[-70.624,-10.075],[-70.445,-9.942],[-70.153,-9.558],[-70.028,-9.523],[-70.331,-9.396],[-70.299,-9.338],[-70.21,-9.276],[-70.051,-9.289],[-69.957,-9.23],[-69.91,-9.246],[-69.904,-9.213],[-69.85,-9.196],[-69.848,-9.14],[-69.796,-9.112],[-69.865,-8.957],[-69.758,-8.782],[-69.575,-8.636],[-69.444,-8.366],[-68.922,-8.813],[-68.941,-8.836]]]}},{"type":"Feature","properties":{"id":"1200351","name":"Marechal Thaumaturgo","centroid":[-72.5543,-9.1]},"geometry":{"type":"Polygon","coordinates":[[[-72.693,-8.696],[-72.683,-8.749],[-72.637,-8.773],[-72.495,-8.778],[-72.466,-8.754],[-72.36,-8.782],[-72.214,-8.701],[-72.144,-8.712],[-72.125,-8.828],[-72.044,-8.9],[-72.045,-9.203],[-72.156,-9.383],[-72.299,-9.504],[-72.437,-9.476],[-72.546,-9.491],[-72.75,-9.41],[-73.212,-9.411],[-73.102,-9.306],[-73.078,-9.237],[-73.008,-9.215],[-73.018,-9.177],[-72.944,-9.097],[-72.942,-8.987],[-73.022,-8.893],[-73.045,-8.903],[-73.111,-8.758],[-72.924,-8.762],[-72.75,-8.717],[-72.728,-8.672],[-72.693,-8.696]]]}},{"type":"Feature","properties":{"id":"1200385","name":"Plácido de Castro","centroid":[-67.3421,-10.2474]},"geometry":{"type":"Polygon","coordinates":[[[-67.125,-9.971],[-67.099,-10.103],[-67.077,-10.091],[-67.076,-10.196],[-67.002,-10.217],[-67.011,-10.254],[-67.131,-10.293],[-67.169,-10.337],[-67.315,-10.319],[-67.311,-10.376],[-67.407,-10.374],[-67.413,-10.427],[-67.518,-10.491],[-67.597,-10.51],[-67.696,-10.453],[-67.612,-10.298],[-67.502,-10.26],[-67.425,-10.096],[-67.125,-9.971]]]}},{"type":"Feature","properties":{"id":"1200807","name":"Porto Acre","centroid":[-67.6976,-9.6319]},"geometry":{"type":"Polygon","coordinates":[[[-68.021,-9.349],[-67.517,-9.56],[-67.324,-9.592],[-67.335,-9.724],[-67.436,-9.837],[-67.447,-9.914],[-67.517,-9.906],[-67.53,-9.855],[-67.581,-9.824],[-67.601,-9.865],[-67.71,-9.836],[-67.703,-9.787],[-67.744,-9.74],[-67.796,-9.779],[-68.089,-9.554],[-68.022,-9.481],[-68.062,-9.39],[-68.021,-9.349]]]}},{"type":"Feature","properties":{"id":"1200393","name":"Porto Walter","centroid":[-72.7188,-8.4884]},"geometry":{"type":"Polygon","coordinates":[[[-72.808,-8.122],[-72.794,-8.2],[-72.68,-8.226],[-72.634,-8.185],[-72.556,-8.187],[-72.408,-8.258],[-72.302,-8.208],[-72.265,-8.222],[-72.266,-8.261],[-72.226,-8.281],[-72.266,-8.391],[-72.232,-8.41],[-72.201,-8.552],[-72.23,-8.599],[-72.214,-8.701],[-72.36,-8.782],[-72.466,-8.754],[-72.495,-8.778],[-72.637,-8.773],[-72.728,-8.672],[-72.773,-8.727],[-73.06,-8.765],[-73.111,-8.758],[-73.15,-8.684],[-73.24,-8.666],[-73.287,-8.619],[-73.306,-8.472],[-73.331,-8.474],[-73.101,-8.341],[-72.999,-8.223],[-72.808,-8.122]]]}},{"type":"Feature","properties":{"id":"1200401","name":"Rio Branco","centroid":[-68.3686,-10.0666]},"geometry":{"type":"Polygon","coordinates":[[[-68.584,-9.539],[-68.514,-9.589],[-68.418,-9.545],[-68.455,-9.624],[-68.427,-9.711],[-68.442,-9.827],[-68.38,-9.782],[-68.3,-9.794],[-68.152,-9.96],[-67.976,-9.847],[-67.867,-9.841],[-67.83,-9.87],[-67.827,-9.782],[-67.744,-9.74],[-67.703,-9.787],[-67.71,-9.836],[-67.601,-9.865],[-67.581,-9.824],[-67.53,-9.855],[-67.482,-9.927],[-67.49,-9.997],[-67.581,-10.069],[-67.62,-10.048],[-67.671,-10.102],[-67.82,-10.089],[-67.818,-10.267],[-67.999,-10.316],[-68.041,-10.389],[-68.097,-10.364],[-68.207,-10.375],[-68.314,-10.418],[-68.388,-10.38],[-68.351,-10.332],[-68.416,-10.307],[-68.453,-10.183],[-68.496,-10.254],[-68.642,-10.306],[-68.713,-10.384],[-69.149,-10.385],[-69.342,-10.485],[-69.364,-10.463],[-69.311,-10.364],[-69.121,-10.269],[-69.037,-10.164],[-68.694,-9.887],[-68.667,-9.841],[-68.7,-9.679],[-68.673,-9.56],[-68.608,-9.505],[-68.584,-9.539]]]}},{"type":"Feature","properties":{"id":"1200427","name":"Rodrigues Alves","centroid":[-73.2258,-7.8422]},"geometry":{"type":"Polygon","coordinates":[[[-72.78,-7.693],[-72.731,-7.724],[-72.644,-7.676],[-72.642,-7.772],[-72.609,-7.78],[-72.646,-7.786],[-72.616,-7.813],[-72.948,-7.943],[-73.097,-7.941],[-73.116,-7.923],[-73.092,-7.884],[-73.169,-7.893],[-73.321,-7.992],[-73.374,-7.987],[-73.397,-8.029],[-73.63,-8.051],[-73.64,-8.008],[-73.678,-8.005],[-73.698,-7.961],[-73.732,-7.968],[-73.772,-7.902],[-73.762,-7.858],[-73.713,-7.876],[-73.69,-7.854],[-73.675,-7.74],[-73.544,-7.715],[-73.451,-7.773],[-73.331,-7.711],[-73.307,-7.778],[-73.256,-7.791],[-73.183,-7.725],[-73.039,-7.665],[-72.78,-7.693]]]}},{"type":"Feature","properties":{"id":"1200435","name":"Santa Rosa do Purus","centroid":[-70.3998,-9.4163]},"geometry":{"type":"Polygon","coordinates":[[[-69.865,-8.957],[-69.796,-9.112],[-69.848,-9.14],[-69.85,-9.196],[-69.904,-9.213],[-69.91,-9.246],[-69.957,-9.23],[-70.051,-9.289],[-70.21,-9.276],[-70.331,-9.396],[-70.028,-9.523],[-70.153,-9.558],[-70.445,-9.942],[-70.624,-10.075],[-70.622,-9.822],[-70.546,-9.777],[-70.525,-9.714],[-70.584,-9.638],[-70.598,-9.552],[-70.556,-9.571],[-70.57,-9.53],[-70.505,-9.504],[-70.523,-9.46],[-70.493,-9.426],[-70.594,-9.441],[-70.663,-9.524],[-70.75,-9.559],[-70.799,-9.641],[-70.963,-9.748],[-70.995,-9.817],[-71.077,-9.828],[-71.1,-9.749],[-71.045,-9.642],[-70.863,-9.457],[-70.791,-9.449],[-70.677,-9.373],[-70.54,-9.16],[-70.439,-9.088],[-70.365,-8.982],[-69.865,-8.957]]]}},{"type":"Feature","properties":{"id":"1200500","name":"Sena Madureira","centroid":[-69.3812,-9.7704]},"geometry":{"type":"Polygon","coordinates":[[[-68.922,-8.813],[-68.647,-9.049],[-68.22,-9.242],[-68.401,-9.324],[-68.33,-9.44],[-68.411,-9.541],[-68.514,-9.589],[-68.601,-9.538],[-68.608,-9.505],[-68.673,-9.56],[-68.7,-9.679],[-68.667,-9.841],[-68.694,-9.887],[-69.037,-10.164],[-69.121,-10.269],[-69.311,-10.364],[-69.364,-10.463],[-69.342,-10.485],[-69.508,-10.505],[-69.592,-10.37],[-69.648,-10.428],[-69.682,-10.41],[-69.687,-10.435],[-69.785,-10.461],[-69.832,-10.538],[-69.992,-10.57],[-70.207,-10.703],[-70.224,-10.676],[-70.255,-10.713],[-70.282,-10.691],[-70.368,-10.73],[-70.462,-10.701],[-70.51,-10.727],[-70.555,-10.688],[-70.623,-10.711],[-70.625,-10.425],[-70.256,-10.425],[-70.227,-10.292],[-70.136,-10.194],[-70.043,-9.99],[-70.039,-9.866],[-69.977,-9.782],[-69.861,-9.439],[-69.784,-9.38],[-69.797,-9.334],[-69.77,-9.339],[-69.691,-9.23],[-69.458,-9.145],[-69.349,-9.046],[-69.234,-9.04],[-69.201,-8.956],[-69.111,-8.955],[-69.082,-8.905],[-68.922,-8.813]]]}},{"type":"Feature","properties":{"id":"1200450","name":"Senador Guiomard","centroid":[-67.432,-9.9987]},"geometry":{"type":"Polygon","coordinates":[[[-67.139,-9.683],[-67.193,-9.704],[-67.091,-9.957],[-67.425,-10.096],[-67.51,-10.268],[-67.612,-10.298],[-67.637,-10.363],[-67.689,-10.354],[-67.81,-10.199],[-67.82,-10.089],[-67.671,-10.102],[-67.62,-10.048],[-67.581,-10.069],[-67.501,-10.02],[-67.436,-9.837],[-67.335,-9.724],[-67.324,-9.592],[-67.139,-9.683]]]}},{"type":"Feature","properties":{"id":"1200609","name":"Tarauacá","centroid":[-71.4446,-8.2381]},"geometry":{"type":"Polygon","coordinates":[[[-71.381,-7.692],[-70.515,-7.792],[-70.645,-7.911],[-70.636,-7.976],[-70.573,-8.022],[-70.555,-8.161],[-70.625,-8.341],[-70.68,-8.383],[-70.653,-8.466],[-70.702,-8.477],[-70.688,-8.523],[-70.784,-8.64],[-70.858,-8.67],[-70.921,-8.6],[-71.078,-8.778],[-71.122,-8.764],[-71.242,-8.855],[-71.29,-8.84],[-71.373,-8.895],[-71.616,-8.858],[-71.542,-8.738],[-71.555,-8.647],[-71.713,-8.722],[-71.811,-8.83],[-71.968,-8.778],[-72.079,-8.867],[-72.125,-8.828],[-72.144,-8.712],[-72.214,-8.701],[-72.23,-8.599],[-72.201,-8.552],[-72.232,-8.41],[-72.266,-8.391],[-72.226,-8.281],[-72.266,-8.261],[-72.258,-8.085],[-72.214,-7.965],[-72.017,-7.798],[-71.957,-7.625],[-71.381,-7.692]]]}},{"type":"Feature","properties":{"id":"1200708","name":"Xapuri","centroid":[-68.5061,-10.5772]},"geometry":{"type":"Polygon","coordinates":[[[-68.452,-10.248],[-68.412,-10.268],[-68.416,-10.307],[-68.351,-10.332],[-68.388,-10.38],[-68.314,-10.418],[-68.207,-10.375],[-68.048,-10.383],[-68.064,-10.425],[-68.031,-10.536],[-67.983,-10.593],[-68.016,-10.602],[-68.002,-10.648],[-68.1,-10.709],[-68.103,-10.775],[-68.196,-10.859],[-68.237,-10.956],[-68.389,-11.041],[-68.423,-10.934],[-68.403,-10.857],[-68.558,-10.778],[-68.532,-10.721],[-68.644,-10.654],[-68.637,-10.619],[-68.808,-10.671],[-68.806,-10.716],[-68.854,-10.758],[-68.975,-10.771],[-68.904,-10.58],[-69.06,-10.59],[-69.169,-10.481],[-69.132,-10.385],[-68.713,-10.384],[-68.642,-10.306],[-68.496,-10.254],[-68.453,-10.183],[-68.452,-10.248]]]}}]'), r = {
2
+ type: e,
3
+ uf: "AC",
4
+ features: o
5
+ };
6
+ export {
7
+ r as default,
8
+ o as features,
9
+ e as type,
10
+ t as uf
11
+ };
12
+ //# sourceMappingURL=AC-DLl3Z4oj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AC-DLl3Z4oj.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}