✨ MAJOR FEATURES: • Auto-zoom intelligence với smart bounds fitting • Enhanced 3D GPS markers với pulsing effects • Professional route display với 6-layer rendering • Status-based parking icons với availability indicators • Production-ready build optimizations 🗺️ AUTO-ZOOM FEATURES: • Smart bounds fitting cho GPS + selected parking • Adaptive padding (50px) cho visual balance • Max zoom control (level 16) để tránh quá gần • Dynamic centering khi không có selection 🎨 ENHANCED VISUALS: • 3D GPS marker với multi-layer pulse effects • Advanced parking icons với status colors • Selection highlighting với animation • Dimming system cho non-selected items 🛣️ ROUTE SYSTEM: • OpenRouteService API integration • Multi-layer route rendering (glow, shadow, main, animated) • Real-time distance & duration calculation • Visual route info trong popup 📱 PRODUCTION READY: • SSR safe với dynamic imports • Build errors resolved • Global deployment via Vercel • Optimized performance 🌍 DEPLOYMENT: • Vercel: https://whatever-ctk2auuxr-phong12hexdockworks-projects.vercel.app • Bundle size: 22.8 kB optimized • Global CDN distribution • HTTPS enabled 💾 VERSION CONTROL: • MapView-v2.0.tsx backup created • MAPVIEW_VERSIONS.md documentation • Full version history tracking
122 lines
3.1 KiB
JavaScript
122 lines
3.1 KiB
JavaScript
#!/usr/bin/env zx
|
|
|
|
import { $, fs, glob } from "zx";
|
|
import { ast_grep } from "./ast_grep.js";
|
|
import { errors } from "./errors.js";
|
|
import { root } from "./utils.js";
|
|
|
|
// clear generated content
|
|
await Promise.all([
|
|
fs.remove(root("cjs")),
|
|
fs.remove(root("_")),
|
|
fs.remove(root("src")),
|
|
]);
|
|
|
|
let modules = await glob("*.js", { cwd: root("esm") });
|
|
|
|
const task_queue = [];
|
|
|
|
const NO_MODIFY = [
|
|
"/* This file is automatically generated and should not be manually edited. */",
|
|
"/* To modify this file, please run the `npm run build` command instead. */",
|
|
];
|
|
|
|
// generate index.js
|
|
const indexESM = [...NO_MODIFY, ""];
|
|
|
|
const indexCJS = [`"use strict";`, "", ...NO_MODIFY, ""];
|
|
|
|
const cjs_export_list = [];
|
|
const cjs_module_lexer = [];
|
|
|
|
const main_package_json = fs.readJSONSync(root("package.json"));
|
|
|
|
main_package_json.exports = {
|
|
"./package.json": "./package.json",
|
|
"./esm/*": "./esm/*",
|
|
"./cjs/*": "./cjs/*",
|
|
"./src/*": "./src/*",
|
|
".": { import: "./esm/index.js", default: "./cjs/index.cjs" },
|
|
"./_": { import: "./esm/index.js", default: "./cjs/index.cjs" },
|
|
};
|
|
|
|
modules.forEach((p) => {
|
|
const importBinding = p.slice(0, -3);
|
|
|
|
main_package_json.exports[`./_/${importBinding}`] = {
|
|
import: `./esm/${importBinding}.js`,
|
|
default: `./cjs/${importBinding}.cjs`,
|
|
};
|
|
|
|
const alias_package = {
|
|
main: `../../cjs/${importBinding}.cjs`,
|
|
module: `../../esm/${importBinding}.js`,
|
|
};
|
|
task_queue.push(
|
|
fs.outputJSON(root("_", importBinding, "package.json"), alias_package, {
|
|
encoding: "utf-8",
|
|
spaces: 4,
|
|
}),
|
|
);
|
|
|
|
if (importBinding === "index") {
|
|
return;
|
|
}
|
|
|
|
task_queue.push(
|
|
fs.outputFile(root("src", `${importBinding}.mjs`), re_export_esm(importBinding), {
|
|
encoding: "utf-8",
|
|
}),
|
|
);
|
|
|
|
indexESM.push(`export { ${importBinding} } from "./${importBinding}.js";`);
|
|
|
|
cjs_module_lexer.push(`${importBinding}: null,`);
|
|
cjs_export_list.push(`get ${importBinding}() {
|
|
return require("./${importBinding}.cjs")._;
|
|
},`);
|
|
});
|
|
|
|
indexCJS.push(
|
|
`0 && (module.exports = {`,
|
|
"/* @Annotate_start: the CommonJS named exports for ESM import in node */",
|
|
...cjs_module_lexer,
|
|
"/* @Annotate_end */",
|
|
`});`,
|
|
`module.exports = {`,
|
|
...cjs_export_list,
|
|
`};`,
|
|
);
|
|
|
|
task_queue.push(
|
|
fs.outputJSON(root("package.json"), main_package_json, { spaces: 4 }),
|
|
fs.outputFile(root("esm", "index.js"), indexESM.join("\n") + "\n", {
|
|
encoding: "utf-8",
|
|
}),
|
|
fs.outputFile(root("cjs", "index.cjs"), indexCJS.join("\n") + "\n", {
|
|
encoding: "utf-8",
|
|
}),
|
|
fs.outputFile(root("src", "index.mjs"), `export * from "../esm/index.js"`, {
|
|
"encoding": "utf-8",
|
|
}),
|
|
);
|
|
|
|
task_queue.push(...ast_grep());
|
|
|
|
await Promise.all(task_queue);
|
|
|
|
if (errors.length > 0) {
|
|
errors.forEach((e) => {
|
|
console.error(e);
|
|
});
|
|
process.exitCode = 1;
|
|
} else {
|
|
$.cwd = root(".");
|
|
await $`dprint fmt`;
|
|
await $`dprint fmt "scripts/*.js" -c scripts/.dprint.json`;
|
|
}
|
|
|
|
function re_export_esm(importBinding) {
|
|
return `export { _ as default } from "../esm/${importBinding}.js"`;
|
|
}
|