Initial commit
This commit is contained in:
79
scripts/patch-tv-tehran-tz.js
Normal file
79
scripts/patch-tv-tehran-tz.js
Normal file
@@ -0,0 +1,79 @@
|
||||
/**
|
||||
* Patch TradingView charting_library Asia/Tehran zone:
|
||||
* Iran abolished DST in 2022 — permanently UTC+03:30 (12600s).
|
||||
*
|
||||
* IMPORTANT: TV binary-search returns -1 (→ offset 0 / UTC) when "now"
|
||||
* is past the LAST transition. A single-entry zone breaks modern charts.
|
||||
* Mirror Asia/Dubai: keep a far-future sentinel as the last time entry.
|
||||
*/
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
// Both offsets 12600: permanent UTC+03:30 (no DST).
|
||||
// Sentinel ~2030 so current timestamps resolve to index 0/1 with +3:30, not UTC.
|
||||
const FIXED =
|
||||
'"Asia/Tehran":{time:[-1704153600,1925006400],offset:[12600,12600]}';
|
||||
|
||||
const FILES = [
|
||||
path.resolve(
|
||||
__dirname,
|
||||
"../../Gereh/src/charting_library/static/bundles/library.e964cdc99937c68d0389.js"
|
||||
),
|
||||
path.resolve(
|
||||
__dirname,
|
||||
"../../Gereh/public/charting_library/static/bundles/library.e964cdc99937c68d0389.js"
|
||||
),
|
||||
path.resolve(
|
||||
__dirname,
|
||||
"../../Shahoo/public/charting_library/static/bundles/library.e964cdc99937c68d0389.js"
|
||||
),
|
||||
path.resolve(
|
||||
__dirname,
|
||||
"../../Shahoo/src/features/Market/MainComponents/TVChartContainer/charting_library/static/bundles/library.e964cdc99937c68d0389.js"
|
||||
),
|
||||
];
|
||||
|
||||
function extractTehran(s) {
|
||||
const key = '"Asia/Tehran":{';
|
||||
const i = s.indexOf(key);
|
||||
if (i < 0) return null;
|
||||
let depth = 0;
|
||||
let end = -1;
|
||||
for (let j = i + key.length - 1; j < s.length; j++) {
|
||||
if (s[j] === "{") depth++;
|
||||
else if (s[j] === "}") {
|
||||
depth--;
|
||||
if (depth === 0) {
|
||||
end = j + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (end < 0) return null;
|
||||
return { start: i, end, text: s.slice(i, end) };
|
||||
}
|
||||
|
||||
let patched = 0;
|
||||
for (const file of FILES) {
|
||||
if (!fs.existsSync(file)) {
|
||||
console.log("skip missing:", file);
|
||||
continue;
|
||||
}
|
||||
const src = fs.readFileSync(file, "utf8");
|
||||
const hit = extractTehran(src);
|
||||
if (!hit) {
|
||||
console.log("skip no Tehran:", file);
|
||||
continue;
|
||||
}
|
||||
if (hit.text === FIXED) {
|
||||
console.log("already patched:", file);
|
||||
continue;
|
||||
}
|
||||
fs.writeFileSync(file, src.slice(0, hit.start) + FIXED + src.slice(hit.end));
|
||||
console.log("patched:", path.relative(process.cwd(), file));
|
||||
console.log(" was:", hit.text);
|
||||
console.log(" now:", FIXED);
|
||||
patched++;
|
||||
}
|
||||
|
||||
console.log("done, patched", patched, "file(s)");
|
||||
Reference in New Issue
Block a user