/** * 列番号 → 列車画像URL のマッピングデータ * * "__anpanman__" は動的URLのセンチネル値。 * WebView inject 側で アンパンマン列車判定 URL に変換される。 * (https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=<列番>) */ const AP = "__anpanman__"; /** 完全一致マッピング (列番 → URL | "__anpanman__") */ export const TRAIN_ICON_MAP: Record = { // ── しおかぜ ─────────────────────────────────────── // 8000 ノーマル "2M": "https://storage.haruk.in/s8000nr.png", "4M": "https://storage.haruk.in/s8000nr.png", "6M": "https://storage.haruk.in/s8000nr.png", "14M": "https://storage.haruk.in/s8000nr.png", "16M": "https://storage.haruk.in/s8000nr.png", "18M": "https://storage.haruk.in/s8000nr.png", "26M": "https://storage.haruk.in/s8000nr.png", "28M": "https://storage.haruk.in/s8000nr.png", "30M": "https://storage.haruk.in/s8000nr.png", "1M": "https://storage.haruk.in/s8000nr.png", "3M": "https://storage.haruk.in/s8000nr.png", "5M": "https://storage.haruk.in/s8000nr.png", "13M": "https://storage.haruk.in/s8000nr.png", "15M": "https://storage.haruk.in/s8000nr.png", "17M": "https://storage.haruk.in/s8000nr.png", "25M": "https://storage.haruk.in/s8000nr.png", "27M": "https://storage.haruk.in/s8000nr.png", "29M": "https://storage.haruk.in/s8000nr.png", // 8000 アンパン "10M": AP, "22M": AP, "9M": AP, "21M": AP, // 8600 "8M": "https://storage.haruk.in/s8600.png", "12M": "https://storage.haruk.in/s8600.png", "20M": "https://storage.haruk.in/s8600.png", "24M": "https://storage.haruk.in/s8600.png", "7M": "https://storage.haruk.in/s8600.png", "11M": "https://storage.haruk.in/s8600.png", "19M": "https://storage.haruk.in/s8600.png", "23M": "https://storage.haruk.in/s8600.png", // ── いしづち ─────────────────────────────────────── // 8000 ノーマル "1004M": "https://storage.haruk.in/s8000no.png", "1006M": "https://storage.haruk.in/s8000no.png", "1014M": "https://storage.haruk.in/s8000no.png", "1016M": "https://storage.haruk.in/s8000no.png", "1018M": "https://storage.haruk.in/s8000no.png", "1026M": "https://storage.haruk.in/s8000no.png", "1028M": "https://storage.haruk.in/s8000no.png", "1030M": "https://storage.haruk.in/s8000no.png", "1001M": "https://storage.haruk.in/s8000no.png", "1003M": "https://storage.haruk.in/s8000no.png", "1005M": "https://storage.haruk.in/s8000no.png", "1013M": "https://storage.haruk.in/s8000no.png", "1015M": "https://storage.haruk.in/s8000no.png", "1017M": "https://storage.haruk.in/s8000no.png", "1025M": "https://storage.haruk.in/s8000no.png", "1027M": "https://storage.haruk.in/s8000no.png", "1029M": "https://storage.haruk.in/s8000no.png", // 8000 アンパン "1010M": AP, "1022M": AP, "1009M": AP, "1021M": AP, // 8600 "1008M": "https://storage.haruk.in/s8600_isz.png", "1012M": "https://storage.haruk.in/s8600_isz.png", "1020M": "https://storage.haruk.in/s8600_isz.png", "1024M": "https://storage.haruk.in/s8600_isz.png", "1007M": "https://storage.haruk.in/s8600_isz.png", "1011M": "https://storage.haruk.in/s8600_isz.png", "1019M": "https://storage.haruk.in/s8600_isz.png", "1023M": "https://storage.haruk.in/s8600_isz.png", // MEXP "1092M": "https://storage.haruk.in/s8000nr.png", "1091M": "https://storage.haruk.in/s8600_isz.png", // 三桁いしづち アンパン "1041M": AP, "1044M": AP, // 三桁いしづち 8600 "1043M": "https://storage.haruk.in/s8600_isz.png", "1042M": "https://storage.haruk.in/s8600_isz.png", "1046M": "https://storage.haruk.in/s8600_isz.png", // ── 南風 ─────────────────────────────────────────── // 2700 ノーマル "34D": "https://storage.haruk.in/s2700.png", "38D": "https://storage.haruk.in/s2700.png", "40D": "https://storage.haruk.in/s2700.png", "42D": "https://storage.haruk.in/s2700.png", "46D": "https://storage.haruk.in/s2700.png", "50D": "https://storage.haruk.in/s2700.png", "52D": "https://storage.haruk.in/s2700.png", "54D": "https://storage.haruk.in/s2700.png", "58D": "https://storage.haruk.in/s2700.png", "31D": "https://storage.haruk.in/s2700.png", "35D": "https://storage.haruk.in/s2700.png", "39D": "https://storage.haruk.in/s2700.png", "41D": "https://storage.haruk.in/s2700.png", "43D": "https://storage.haruk.in/s2700.png", "47D": "https://storage.haruk.in/s2700.png", "51D": "https://storage.haruk.in/s2700.png", "53D": "https://storage.haruk.in/s2700.png", "55D": "https://storage.haruk.in/s2700.png", // 2700 アンパン "32D": AP, "36D": AP, "44D": AP, "48D": AP, "56D": AP, "33D": AP, "37D": AP, "45D": AP, "49D": AP, "57D": AP, // ── うずしお ─────────────────────────────────────── // 2700 "3004D": "https://storage.haruk.in/s2700_uzu.png", "3006D": "https://storage.haruk.in/s2700_uzu.png", "3010D": "https://storage.haruk.in/s2700_uzu.png", "3014D": "https://storage.haruk.in/s2700_uzu.png", "3016D": "https://storage.haruk.in/s2700_uzu.png", "3022D": "https://storage.haruk.in/s2700_uzu.png", "3028D": "https://storage.haruk.in/s2700_uzu.png", "3003D": "https://storage.haruk.in/s2700_uzu.png", "3007D": "https://storage.haruk.in/s2700_uzu.png", "3013D": "https://storage.haruk.in/s2700_uzu.png", "3019D": "https://storage.haruk.in/s2700_uzu.png", "3025D": "https://storage.haruk.in/s2700_uzu.png", "3031D": "https://storage.haruk.in/s2700_uzu.png", "3008D": "https://storage.haruk.in/s2700_uzu.png", "3020D": "https://storage.haruk.in/s2700_uzu.png", "3026D": "https://storage.haruk.in/s2700_uzu.png", "3001D": "https://storage.haruk.in/s2700_uzu.png", "3005D": "https://storage.haruk.in/s2700_uzu.png", "3011D": "https://storage.haruk.in/s2700_uzu.png", "3017D": "https://storage.haruk.in/s2700_uzu.png", "3023D": "https://storage.haruk.in/s2700_uzu.png", "3029D": "https://storage.haruk.in/s2700_uzu.png", // 2600 "3002D": AP, "3012D": AP, "3018D": AP, "3024D": AP, "3030D": AP, "3009D": AP, "3015D": AP, "3021D": AP, "3027D": AP, "3033D": AP, // ── マリンライナー ───────────────────────────────── "3104M": "https://storage.haruk.in/s5001.png", "3106M": "https://storage.haruk.in/s5001.png", "3108M": "https://storage.haruk.in/s5001.png", "3110M": "https://storage.haruk.in/s5001.png", "3112M": "https://storage.haruk.in/s5001.png", "3114M": "https://storage.haruk.in/s5001.png", "3116M": "https://storage.haruk.in/s5001.png", "3118M": "https://storage.haruk.in/s5001.png", "3120M": "https://storage.haruk.in/s5001.png", "3122M": "https://storage.haruk.in/s5001.png", "3124M": "https://storage.haruk.in/s5001.png", "3126M": "https://storage.haruk.in/s5001.png", "3128M": "https://storage.haruk.in/s5001.png", "3130M": "https://storage.haruk.in/s5001.png", "3132M": "https://storage.haruk.in/s5001.png", "3134M": "https://storage.haruk.in/s5001.png", "3136M": "https://storage.haruk.in/s5001.png", "3138M": "https://storage.haruk.in/s5001.png", "3140M": "https://storage.haruk.in/s5001.png", "3142M": "https://storage.haruk.in/s5001.png", "3144M": "https://storage.haruk.in/s5001.png", "3146M": "https://storage.haruk.in/s5001.png", "3148M": "https://storage.haruk.in/s5001.png", "3150M": "https://storage.haruk.in/s5001.png", "3152M": "https://storage.haruk.in/s5001.png", "3154M": "https://storage.haruk.in/s5001.png", "3156M": "https://storage.haruk.in/s5001.png", "3158M": "https://storage.haruk.in/s5001.png", "3160M": "https://storage.haruk.in/s5001.png", "3162M": "https://storage.haruk.in/s5001.png", "3164M": "https://storage.haruk.in/s5001.png", "3166M": "https://storage.haruk.in/s5001.png", "3168M": "https://storage.haruk.in/s5001.png", "3170M": "https://storage.haruk.in/s5001.png", "3105M": "https://storage.haruk.in/s5001.png", "3107M": "https://storage.haruk.in/s5001.png", "3109M": "https://storage.haruk.in/s5001.png", "3111M": "https://storage.haruk.in/s5001.png", "3113M": "https://storage.haruk.in/s5001.png", "3115M": "https://storage.haruk.in/s5001.png", "3117M": "https://storage.haruk.in/s5001.png", "3119M": "https://storage.haruk.in/s5001.png", "3121M": "https://storage.haruk.in/s5001.png", "3123M": "https://storage.haruk.in/s5001.png", "3125M": "https://storage.haruk.in/s5001.png", "3127M": "https://storage.haruk.in/s5001.png", "3129M": "https://storage.haruk.in/s5001.png", "3131M": "https://storage.haruk.in/s5001.png", "3133M": "https://storage.haruk.in/s5001.png", "3135M": "https://storage.haruk.in/s5001.png", "3137M": "https://storage.haruk.in/s5001.png", "3139M": "https://storage.haruk.in/s5001.png", "3141M": "https://storage.haruk.in/s5001.png", "3143M": "https://storage.haruk.in/s5001.png", "3145M": "https://storage.haruk.in/s5001.png", "3147M": "https://storage.haruk.in/s5001.png", "3149M": "https://storage.haruk.in/s5001.png", "3151M": "https://storage.haruk.in/s5001.png", "3153M": "https://storage.haruk.in/s5001.png", "3155M": "https://storage.haruk.in/s5001.png", "3157M": "https://storage.haruk.in/s5001.png", "3159M": "https://storage.haruk.in/s5001.png", "3161M": "https://storage.haruk.in/s5001.png", "3163M": "https://storage.haruk.in/s5001.png", "3165M": "https://storage.haruk.in/s5001.png", "3167M": "https://storage.haruk.in/s5001.png", "3169M": "https://storage.haruk.in/s5001.png", "3175M": "https://storage.haruk.in/s5001.png", // マリンライナー(快速) "3102M": "https://storage.haruk.in/s5001k.png", "3101M": "https://storage.haruk.in/s5001k.png", "3103M": "https://storage.haruk.in/s5001k.png", "3171M": "https://storage.haruk.in/s5001k.png", "3173M": "https://storage.haruk.in/s5001k.png", // ── サンライズ瀬戸 ───────────────────────────────── "5032M": "https://storage.haruk.in/w285.png", "5031M": "https://storage.haruk.in/w285.png", "8041M": "https://storage.haruk.in/w285.png", "8031M": "https://storage.haruk.in/w285.png", // ── 宇和海 ───────────────────────────────────────── // 2000 ノーマル "1052D": "https://storage.haruk.in/s2000_uwa.png", "1054D": "https://storage.haruk.in/s2000_uwa.png", "1056D": "https://storage.haruk.in/s2000_uwa.png", "1060D": "https://storage.haruk.in/s2000_uwa.png", "1062D": "https://storage.haruk.in/s2000_uwa.png", "1064D": "https://storage.haruk.in/s2000_uwa.png", "1068D": "https://storage.haruk.in/s2000_uwa.png", "1070D": "https://storage.haruk.in/s2000_uwa.png", "1072D": "https://storage.haruk.in/s2000_uwa.png", "1076D": "https://storage.haruk.in/s2000_uwa.png", "1078D": "https://storage.haruk.in/s2000_uwa.png", "1080D": "https://storage.haruk.in/s2000_uwa.png", "1082D": "https://storage.haruk.in/s2000_uwa.png", "1051D": "https://storage.haruk.in/s2000_uwa.png", "1055D": "https://storage.haruk.in/s2000_uwa.png", "1057D": "https://storage.haruk.in/s2000_uwa.png", "1061D": "https://storage.haruk.in/s2000_uwa.png", "1063D": "https://storage.haruk.in/s2000_uwa.png", "1065D": "https://storage.haruk.in/s2000_uwa.png", "1069D": "https://storage.haruk.in/s2000_uwa.png", "1071D": "https://storage.haruk.in/s2000_uwa.png", "1073D": "https://storage.haruk.in/s2000_uwa.png", "1075D": "https://storage.haruk.in/s2000_uwa.png", "1077D": "https://storage.haruk.in/s2000_uwa.png", "1079D": "https://storage.haruk.in/s2000_uwa.png", "1081D": "https://storage.haruk.in/s2000_uwa.png", // 2000 アンパン "1058D": AP, "1066D": AP, "1074D": AP, "1053D": AP, "1059D": AP, "1067D": AP, // ── しまんと ─────────────────────────────────────── "2002D": "https://storage.haruk.in/s2000_smn.png", "2004D": "https://storage.haruk.in/s2000_smn.png", "2001D": "https://storage.haruk.in/s2000_smn.png", "2003D": "https://storage.haruk.in/s2000_smn.png", // ── あしずり ─────────────────────────────────────── // 2000 "2074D": "https://storage.haruk.in/s2000_smn.png", "2076D": "https://storage.haruk.in/s2000_smn.png", "2080D": "https://storage.haruk.in/s2000_smn.png", "2082D": "https://storage.haruk.in/s2000_smn.png", "2071D": "https://storage.haruk.in/s2000_smn.png", "2073D": "https://storage.haruk.in/s2000_smn.png", "2079D": "https://storage.haruk.in/s2000_smn.png", "2081D": "https://storage.haruk.in/s2000_smn.png", // 2700 "2072D": "https://storage.haruk.in/s2700_asi.png", "2078D": "https://storage.haruk.in/s2700_asi.png", "2084D": "https://storage.haruk.in/s2700_asi.png", "2075D": "https://storage.haruk.in/s2700_asi.png", "2077D": "https://storage.haruk.in/s2700_asi.png", "2083D": "https://storage.haruk.in/s2700_asi.png", // ── 剣山 ─────────────────────────────────────────── "4002D": "https://storage.haruk.in/s185tu.png", "4004D": "https://storage.haruk.in/s185tu.png", "4006D": "https://storage.haruk.in/s185tu.png", "4001D": "https://storage.haruk.in/s185tu.png", "4003D": "https://storage.haruk.in/s185tu.png", "4005D": "https://storage.haruk.in/s185tu.png", "4007D": "https://storage.haruk.in/s185tu.png", // ── よしのがわトロッコ ───────────────────────────── "8452D": "https://storage.haruk.in/s185to_ai.png", "8451D": "https://storage.haruk.in/s185to_ai.png", // ── 岡山高松/琴平アントロ ────────────────────────── "8176D": "https://storage.haruk.in/s32to4.png", "8179D": "https://storage.haruk.in/s32to4.png", "8277D": "https://storage.haruk.in/s32to4.png", "8278D": "https://storage.haruk.in/s32to4.png", // ── 千年ものがたり ───────────────────────────────── "8021D": "https://storage.haruk.in/s185mm1.png", "8022D": "https://storage.haruk.in/s185mm1.png", // ── 夜明けものがたり ─────────────────────────────── "8082D": "https://storage.haruk.in/s185ym1.png", "8083D": "https://storage.haruk.in/s185ym1.png", "8073D": "https://storage.haruk.in/s185ym1.png", "8074D": "https://storage.haruk.in/s185ym1.png", // ── ラ・マルどこまでも ───────────────────────────── "9253M": "https://storage.haruk.in/w213w.png", "9256M": "https://storage.haruk.in/w213w.png", // ── 貨物 ─────────────────────────────────────────── "74": "https://storage.haruk.in/ef210a.png", "75": "https://storage.haruk.in/ef210a.png", "70": "https://storage.haruk.in/ef210a.png", "71": "https://storage.haruk.in/ef210a.png", "73": "https://storage.haruk.in/ef210a.png", "76": "https://storage.haruk.in/ef210a.png", "3070": "https://storage.haruk.in/ef210a.png", "3071": "https://storage.haruk.in/ef210a.png", "3072": "https://storage.haruk.in/ef210a.png", "3073": "https://storage.haruk.in/ef210a.png", "3076": "https://storage.haruk.in/ef210a.png", "3077": "https://storage.haruk.in/ef210a.png", "3078": "https://storage.haruk.in/ef210a.png", "3079": "https://storage.haruk.in/ef210a.png", "8070": "https://storage.haruk.in/ef210a.png", "8071": "https://storage.haruk.in/ef210a.png", "8072": "https://storage.haruk.in/ef210a.png", "8077": "https://storage.haruk.in/ef210a.png", // ── 伊予灘ものがたり ─────────────────────────────── "8091D": "https://storage.haruk.in/s185iyor.png", "8093D": "https://storage.haruk.in/s185iyor.png", "8092D": "https://storage.haruk.in/s185iyoy.png", "8094D": "https://storage.haruk.in/s185iyoy.png", // ── 高徳線・徳島線・牟岐線・鳴門線 キハ40・47 ──── "4303D": "https://storage.haruk.in/s40.png", "371D": "https://storage.haruk.in/s40.png", "316D": "https://storage.haruk.in/s40.png", "362D": "https://storage.haruk.in/s40.png", "4376D": "https://storage.haruk.in/s40.png", "951D": "https://storage.haruk.in/s40.png", "953D": "https://storage.haruk.in/s40.png", "955D": "https://storage.haruk.in/s40.png", "973D": "https://storage.haruk.in/s40.png", "975D": "https://storage.haruk.in/s40.png", "977D": "https://storage.haruk.in/s40.png", "979D": "https://storage.haruk.in/s40.png", "981D": "https://storage.haruk.in/s40.png", "950D": "https://storage.haruk.in/s40.png", "968D": "https://storage.haruk.in/s40.png", "970D": "https://storage.haruk.in/s40.png", "972D": "https://storage.haruk.in/s40.png", "974D": "https://storage.haruk.in/s40.png", "976D": "https://storage.haruk.in/s40.png", "980D": "https://storage.haruk.in/s40.png", "982D": "https://storage.haruk.in/s40.png", // ── 1000形 ───────────────────────────────────────── "4311D": "https://storage.haruk.in/s1000.png", "363D": "https://storage.haruk.in/s1000.png", "356D": "https://storage.haruk.in/s1000.png", "4374D": "https://storage.haruk.in/s1000.png", "433D": "https://storage.haruk.in/s1000.png", "4447D": "https://storage.haruk.in/s1000.png", "451D": "https://storage.haruk.in/s1000.png", "450D": "https://storage.haruk.in/s1000.png", "4458D": "https://storage.haruk.in/s1000.png", "474D": "https://storage.haruk.in/s1000.png", // ── 1200形 ───────────────────────────────────────── "4301D": "https://storage.haruk.in/s1200n.png", "4327D": "https://storage.haruk.in/s1200n.png", "4329D": "https://storage.haruk.in/s1200n.png", "4343D": "https://storage.haruk.in/s1200n.png", "353D": "https://storage.haruk.in/s1200n.png", "355D": "https://storage.haruk.in/s1200n.png", "367D": "https://storage.haruk.in/s1200n.png", "310D": "https://storage.haruk.in/s1200n.png", "4326D": "https://storage.haruk.in/s1200n.png", "4334D": "https://storage.haruk.in/s1200n.png", "4342D": "https://storage.haruk.in/s1200n.png", "358D": "https://storage.haruk.in/s1200n.png", "364D": "https://storage.haruk.in/s1200n.png", "4453D": "https://storage.haruk.in/s1200n.png", "4455D": "https://storage.haruk.in/s1200n.png", "4457D": "https://storage.haruk.in/s1200n.png", "463D": "https://storage.haruk.in/s1200n.png", "475D": "https://storage.haruk.in/s1200n.png", "477D": "https://storage.haruk.in/s1200n.png", "485D": "https://storage.haruk.in/s1200n.png", "4430D": "https://storage.haruk.in/s1200n.png", "434D": "https://storage.haruk.in/s1200n.png", "438D": "https://storage.haruk.in/s1200n.png", "4460D": "https://storage.haruk.in/s1200n.png", "4464D": "https://storage.haruk.in/s1200n.png", "4466D": "https://storage.haruk.in/s1200n.png", "478D": "https://storage.haruk.in/s1200n.png", "484D": "https://storage.haruk.in/s1200n.png", "957D": "https://storage.haruk.in/s1200n.png", "4959D": "https://storage.haruk.in/s1200n.png", "4963D": "https://storage.haruk.in/s1200n.png", "4967D": "https://storage.haruk.in/s1200n.png", "4971D": "https://storage.haruk.in/s1200n.png", "952D": "https://storage.haruk.in/s1200n.png", "4954D": "https://storage.haruk.in/s1200n.png", "4958D": "https://storage.haruk.in/s1200n.png", "4962D": "https://storage.haruk.in/s1200n.png", "4966D": "https://storage.haruk.in/s1200n.png", // ── 半定期臨時 ───────────────────────────────────── "9174M": "https://storage.haruk.in/s5001.png", "9395D": "https://storage.haruk.in/s1500.png", }; /** 正規表現パターンマッチング (完全一致で未ヒットの場合に評価) */ export const TRAIN_ICON_REGEX: Array<{ pattern: string; url: string }> = [ // 高徳線 普通 { pattern: "^(4|5)3\\d\\dD$", url: "https://storage.haruk.in/s1500.png" }, { pattern: "^3\\d\\dD$", url: "https://storage.haruk.in/s1500.png" }, // 徳島線 普通 { pattern: "^(4|5)4\\d\\dD$", url: "https://storage.haruk.in/s1500.png" }, { pattern: "^4\\d\\dD$", url: "https://storage.haruk.in/s1500.png" }, // 鳴門線 普通 { pattern: "^(4|5)9(5|6|7|8)\\dD$", url: "https://storage.haruk.in/s1500.png", }, { pattern: "^9(5|6|7|8)\\dD$", url: "https://storage.haruk.in/s1500.png" }, ];