japanese_address_parser 3.0.5 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -2
  3. data/Gemfile.lock +6 -6
  4. data/js/node_modules/.package-lock.json +86 -1
  5. data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/lib/cacheRegexes.d.ts +9 -2
  6. data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-browser.js +141 -25
  7. data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-es.d.ts +3 -0
  8. data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-es.js +1922 -0
  9. data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-node.d.ts +6 -0
  10. data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-node.js +203 -54
  11. data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/normalize.d.ts +47 -3
  12. data/js/node_modules/@geolonia/normalize-japanese-addresses/package.json +9 -5
  13. data/js/node_modules/@geolonia/normalize-japanese-addresses/rollup.config.ts +9 -0
  14. data/js/node_modules/@geolonia/normalize-japanese-addresses/src/config.ts +1 -0
  15. data/js/node_modules/@geolonia/normalize-japanese-addresses/src/lib/cacheRegexes.ts +71 -11
  16. data/js/node_modules/@geolonia/normalize-japanese-addresses/src/lib/dict.ts +3 -2
  17. data/js/node_modules/@geolonia/normalize-japanese-addresses/src/lib/kan2num.ts +6 -2
  18. data/js/node_modules/@geolonia/normalize-japanese-addresses/src/main-es.ts +4 -0
  19. data/js/node_modules/@geolonia/normalize-japanese-addresses/src/main-node.ts +41 -12
  20. data/js/node_modules/@geolonia/normalize-japanese-addresses/src/normalize.ts +165 -37
  21. data/js/package-lock.json +7 -7
  22. data/js/package.json +1 -1
  23. data/lib/japanese_address_parser/data/03-03206.csv +1 -0
  24. data/lib/japanese_address_parser/data/04-04421.csv +8 -8
  25. data/lib/japanese_address_parser/data/05-05203.csv +5 -0
  26. data/lib/japanese_address_parser/data/08-08222.csv +4 -0
  27. data/lib/japanese_address_parser/data/11-11442.csv +2 -0
  28. data/lib/japanese_address_parser/data/13-13225.csv +3 -0
  29. data/lib/japanese_address_parser/data/14-14134.csv +3 -0
  30. data/lib/japanese_address_parser/data/15-15104.csv +1 -1
  31. data/lib/japanese_address_parser/data/15-15222.csv +1 -1
  32. data/lib/japanese_address_parser/data/15-15225.csv +1 -1
  33. data/lib/japanese_address_parser/data/18-18202.csv +1 -1
  34. data/lib/japanese_address_parser/data/22-22102.csv +6 -0
  35. data/lib/japanese_address_parser/data/23-23202.csv +1 -0
  36. data/lib/japanese_address_parser/data/23-23207.csv +5 -0
  37. data/lib/japanese_address_parser/data/23-23213.csv +1 -0
  38. data/lib/japanese_address_parser/data/23-23236.csv +1 -0
  39. data/lib/japanese_address_parser/data/25-25206.csv +4 -0
  40. data/lib/japanese_address_parser/data/27-27212.csv +4 -0
  41. data/lib/japanese_address_parser/data/28-28108.csv +1 -0
  42. data/lib/japanese_address_parser/data/28-28204.csv +1 -1
  43. data/lib/japanese_address_parser/data/28-28226.csv +1 -0
  44. data/lib/japanese_address_parser/data/29-29201.csv +1 -1
  45. data/lib/japanese_address_parser/data/34-34207.csv +3 -0
  46. data/lib/japanese_address_parser/data/35-35215.csv +3 -0
  47. data/lib/japanese_address_parser/data/38-38204.csv +17 -0
  48. data/lib/japanese_address_parser/data/40-40131.csv +1 -0
  49. data/lib/japanese_address_parser/data/40-40342.csv +4 -0
  50. data/lib/japanese_address_parser/data/44-44201.csv +27 -0
  51. data/lib/japanese_address_parser/data/46-46201.csv +4 -0
  52. data/lib/japanese_address_parser/data/47-47205.csv +4 -0
  53. data/lib/japanese_address_parser/version.rb +1 -1
  54. metadata +6 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d28fd38a1eb9e6e7c3a6a8898bc94d22362d37682c484054f2590008a2323c1f
4
- data.tar.gz: 8eee70a4afd90a33efba50d1e58a5598df1fe6f08dcb172cab0091aedf2df0c3
3
+ metadata.gz: 53a31a273123299a2e48aea1fa82e3bd4d0d33d7e8f1a694ef39a1926004576a
4
+ data.tar.gz: 21198c935bf0dc0892f5ff395403ef4aaa08d03f60d576e7cfbeaa556ae9ebed
5
5
  SHA512:
6
- metadata.gz: a8619ac4af9c11b814e4dd745445f783a6aadbda4bf0ab1c455015dcee0ce2091099a2a8c7ac6dcc645058bc20cfc25cf5f4bf680a4e713c9e4a566420485f84
7
- data.tar.gz: 646b35be9a561c4ba8e4429e4d83ab06dfe461e5752a2ff9851dd5fea78cca2df511c484b6c758ca18b1be0b6c3419c66b73a7cb19341eba13db4768eb0d1bab
6
+ metadata.gz: 742a64618c177ef65bf6dcb0677993ba531f734efda24b81dc2a5f0839aef47ae42c57e829b5c9a3e9b984dbb4b1960303a1b05c8d88dcfc516b473948f8219e
7
+ data.tar.gz: dab2e5dedbeda742af992a5b9574697523f9816c9765741c8f6b9eec6b06723c98247f9248d20a61aeebdcaf541d09d734c2a30a12ca22a47b5b2f1ab2da5694
data/CHANGELOG.md CHANGED
@@ -9,8 +9,6 @@ Change Log の形式は [Keep a Changelog](http://keepachangelog.com/) に従い
9
9
 
10
10
  ### Changed
11
11
 
12
- - [#79](https://github.com/yamat47/japanese_address_parser/pull/79) Bump activesupport from 7.0.4 to 7.0.4.1([@yamat47](https://github.com/yamat47))
13
-
14
12
  ### Deprecated
15
13
 
16
14
  ### Removed
@@ -19,6 +17,28 @@ Change Log の形式は [Keep a Changelog](http://keepachangelog.com/) に従い
19
17
 
20
18
  ### Security
21
19
 
20
+ ## [3.1.1] - 2023-09-07
21
+
22
+ ### Changed
23
+
24
+ - [#95](https://github.com/yamat47/japanese_address_parser/pull/95) Bump @geolonia/normalize-japanese-addresses from 2.8.0 to 2.9.2 in /js([@yamat47](https://github.com/yamat47))
25
+
26
+ ### Security
27
+
28
+ - [#94](https://github.com/yamat47/japanese_address_parser/pull/94) Bump activesupport from 7.0.4.3 to 7.0.7.1([@yamat47](https://github.com/yamat47))
29
+
30
+ ## [3.1.0] - 2023-07-24
31
+
32
+ ### Changed
33
+
34
+ - [#79](https://github.com/yamat47/japanese_address_parser/pull/79) Bump activesupport from 7.0.4 to 7.0.4.1([@yamat47](https://github.com/yamat47))
35
+ - [#84](https://github.com/yamat47/japanese_address_parser/pull/84) Bump activesupport from 7.0.4.1 to 7.0.4.3([@yamat47](https://github.com/yamat47))
36
+ - [#85](https://github.com/yamat47/japanese_address_parser/pull/85) CIに必要な権限を追加した。([@yamat47](https://github.com/yamat47))
37
+
38
+ ### Removed
39
+
40
+ - [#89](https://github.com/yamat47/japanese_address_parser/pull/89) 最新のRubyでCIを実行するのを一時的に停止した。([@yamat47](https://github.com/yamat47))
41
+
22
42
  ## [3.0.5]
23
43
  ### Changed
24
44
 
data/Gemfile.lock CHANGED
@@ -1,31 +1,31 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- japanese_address_parser (3.0.5)
4
+ japanese_address_parser (3.1.1)
5
5
  schmooze
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (7.0.4.1)
10
+ activesupport (7.0.7.1)
11
11
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
12
  i18n (>= 1.6, < 2)
13
13
  minitest (>= 5.1)
14
14
  tzinfo (~> 2.0)
15
15
  ast (2.4.2)
16
- concurrent-ruby (1.1.10)
16
+ concurrent-ruby (1.2.2)
17
17
  diff-lcs (1.5.0)
18
18
  factory_bot (6.2.1)
19
19
  activesupport (>= 5.0.0)
20
20
  ffi (1.15.5)
21
- i18n (1.12.0)
21
+ i18n (1.14.1)
22
22
  concurrent-ruby (~> 1.0)
23
23
  json (2.6.2)
24
24
  language_server-protocol (3.17.0.1)
25
25
  listen (3.7.1)
26
26
  rb-fsevent (~> 0.10, >= 0.10.3)
27
27
  rb-inotify (~> 0.9, >= 0.9.10)
28
- minitest (5.17.0)
28
+ minitest (5.19.0)
29
29
  parallel (1.22.1)
30
30
  parser (3.1.2.1)
31
31
  ast (~> 2.4.1)
@@ -81,7 +81,7 @@ GEM
81
81
  unicode-display_width (>= 1.1.1, < 3)
82
82
  typeprof (0.21.3)
83
83
  rbs (>= 1.8.1)
84
- tzinfo (2.0.5)
84
+ tzinfo (2.0.6)
85
85
  concurrent-ruby (~> 1.0)
86
86
  unicode-display_width (2.3.0)
87
87
 
@@ -1,5 +1,90 @@
1
1
  {
2
+ "name": "japanese_address_parser",
2
3
  "lockfileVersion": 3,
3
4
  "requires": true,
4
- "packages": {}
5
+ "packages": {
6
+ "node_modules/@geolonia/japanese-numeral": {
7
+ "version": "0.1.16",
8
+ "resolved": "https://registry.npmjs.org/@geolonia/japanese-numeral/-/japanese-numeral-0.1.16.tgz",
9
+ "integrity": "sha512-xzSsIHhyyjqNpW8qSh5bFMu3FJvyJGBbNZ/t8clPHkigjUdZ7Ck8wkzCkcwlVd00RkoHwGDLnvXx5W0WiGK0TQ=="
10
+ },
11
+ "node_modules/@geolonia/normalize-japanese-addresses": {
12
+ "version": "2.9.2",
13
+ "resolved": "https://registry.npmjs.org/@geolonia/normalize-japanese-addresses/-/normalize-japanese-addresses-2.9.2.tgz",
14
+ "integrity": "sha512-sbeV/seJ/ue6pn2sLo+Ccunl6eB3yNhrUIzNpT2IiR9Fw6fW5f1lLdApODqhTmz++xr1dyPwZOzTXCGEaXejDA==",
15
+ "dependencies": {
16
+ "@geolonia/japanese-numeral": "^0.1.16",
17
+ "isomorphic-unfetch": "^3.1.0",
18
+ "lru-cache": "^6.0.0"
19
+ }
20
+ },
21
+ "node_modules/isomorphic-unfetch": {
22
+ "version": "3.1.0",
23
+ "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz",
24
+ "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==",
25
+ "dependencies": {
26
+ "node-fetch": "^2.6.1",
27
+ "unfetch": "^4.2.0"
28
+ }
29
+ },
30
+ "node_modules/lru-cache": {
31
+ "version": "6.0.0",
32
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
33
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
34
+ "dependencies": {
35
+ "yallist": "^4.0.0"
36
+ },
37
+ "engines": {
38
+ "node": ">=10"
39
+ }
40
+ },
41
+ "node_modules/node-fetch": {
42
+ "version": "2.6.7",
43
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
44
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
45
+ "dependencies": {
46
+ "whatwg-url": "^5.0.0"
47
+ },
48
+ "engines": {
49
+ "node": "4.x || >=6.0.0"
50
+ },
51
+ "peerDependencies": {
52
+ "encoding": "^0.1.0"
53
+ },
54
+ "peerDependenciesMeta": {
55
+ "encoding": {
56
+ "optional": true
57
+ }
58
+ }
59
+ },
60
+ "node_modules/tr46": {
61
+ "version": "0.0.3",
62
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
63
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
64
+ },
65
+ "node_modules/unfetch": {
66
+ "version": "4.2.0",
67
+ "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz",
68
+ "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA=="
69
+ },
70
+ "node_modules/webidl-conversions": {
71
+ "version": "3.0.1",
72
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
73
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
74
+ },
75
+ "node_modules/whatwg-url": {
76
+ "version": "5.0.0",
77
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
78
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
79
+ "dependencies": {
80
+ "tr46": "~0.0.3",
81
+ "webidl-conversions": "^3.0.0"
82
+ }
83
+ },
84
+ "node_modules/yallist": {
85
+ "version": "4.0.0",
86
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
87
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
88
+ }
89
+ }
5
90
  }
@@ -1,4 +1,4 @@
1
- declare type PrefectureList = {
1
+ export declare type PrefectureList = {
2
2
  [key: string]: string[];
3
3
  };
4
4
  interface SingleTown {
@@ -8,7 +8,13 @@ interface SingleTown {
8
8
  lat: string;
9
9
  lng: string;
10
10
  }
11
- declare type TownList = SingleTown[];
11
+ export declare type TownList = SingleTown[];
12
+ interface SingleAddr {
13
+ addr: string;
14
+ lat: string | null;
15
+ lng: string | null;
16
+ }
17
+ export declare type AddrList = SingleAddr[];
12
18
  interface GaikuListItem {
13
19
  gaiku: string;
14
20
  lat: string;
@@ -28,6 +34,7 @@ export declare const getCityRegexPatterns: (pref: string, cities: string[]) => [
28
34
  export declare const getTowns: (pref: string, city: string) => Promise<TownList>;
29
35
  export declare const getGaikuList: (pref: string, city: string, town: string) => Promise<GaikuListItem[]>;
30
36
  export declare const getResidentials: (pref: string, city: string, town: string) => Promise<ResidentialList>;
37
+ export declare const getAddrs: (pref: string, city: string, town: string) => Promise<AddrList>;
31
38
  export declare const getTownRegexPatterns: (pref: string, city: string) => Promise<[SingleTown, string][]>;
32
39
  export declare const getSameNamedPrefectureCityRegexPatterns: (prefs: string[], prefList: PrefectureList) => [string, string][];
33
40
  export {};
@@ -348,6 +348,7 @@
348
348
 
349
349
  var gh_pages_endpoint = 'https://geolonia.github.io/japanese-addresses/api/ja';
350
350
  var currentConfig = {
351
+ interfaceVersion: 1,
351
352
  japaneseAddressesApi: gh_pages_endpoint,
352
353
  townCacheSize: 1000,
353
354
  };
@@ -355,8 +356,13 @@
355
356
  var kan2num = function (string) {
356
357
  var kanjiNumbers = dist.findKanjiNumbers(string);
357
358
  for (var i = 0; i < kanjiNumbers.length; i++) {
358
- // @ts-ignore
359
- string = string.replace(kanjiNumbers[i], dist.kanji2number(kanjiNumbers[i]));
359
+ try {
360
+ // @ts-ignore
361
+ string = string.replace(kanjiNumbers[i], dist.kanji2number(kanjiNumbers[i]));
362
+ }
363
+ catch (error) {
364
+ // ignore
365
+ }
360
366
  }
361
367
  return string;
362
368
  };
@@ -402,8 +408,8 @@
402
408
  };
403
409
 
404
410
  // JIS 第2水準 => 第1水準 及び 旧字体 => 新字体
405
- var JIS_OLD_KANJI = '亞,圍,壹,榮,驛,應,櫻,假,會,懷,覺,樂,陷,歡,氣,戲,據,挾,區,徑,溪,輕,藝,儉,圈,權,嚴,恆,國,齋,雜,蠶,殘,兒,實,釋,從,縱,敍,燒,條,剩,壤,釀,眞,盡,醉,髓,聲,竊,淺,錢,禪,爭,插,騷,屬,對,滯,擇,單,斷,癡,鑄,敕,鐵,傳,黨,鬪,屆,腦,廢,發,蠻,拂,邊,瓣,寶,沒,滿,藥,餘,樣,亂,兩,禮,靈,爐,灣,惡,醫,飮,營,圓,歐,奧,價,繪,擴,學,罐,勸,觀,歸,犧,擧,狹,驅,莖,經,繼,缺,劍,檢,顯,廣,鑛,碎,劑,參,慘,絲,辭,舍,壽,澁,肅,將,證,乘,疊,孃,觸,寢,圖,穗,樞,齊,攝,戰,潛,雙,莊,裝,藏,續,體,臺,澤,膽,彈,蟲,廳,鎭,點,燈,盜,獨,貳,霸,賣,髮,祕,佛,變,辯,豐,飜,默,與,譽,謠,覽,獵,勵,齡,勞,壓,爲,隱,衞,鹽,毆,穩,畫,壞,殼,嶽,卷,關,顏,僞,舊,峽,曉,勳,惠,螢,鷄,縣,險,獻,驗,效,號,濟,册,棧,贊,齒,濕,寫,收,獸,處,稱,奬,淨,繩,讓,囑,愼,粹,隨,數,靜,專,踐,纖,壯,搜,總,臟,墮,帶,瀧,擔,團,遲,晝,聽,遞,轉,當,稻,讀,惱,拜,麥,拔,濱,竝,辨,舖,襃,萬,譯,豫,搖,來,龍,壘,隸,戀,樓,鰺,鶯,蠣,攪,竈,灌,諫,頸,礦,蘂,靱,賤,壺,礪,檮,濤,邇,蠅,檜,儘,藪,籠,彌'.split(/,/);
406
- var JIS_NEW_KANJI = '亜,囲,壱,栄,駅,応,桜,仮,会,懐,覚,楽,陥,歓,気,戯,拠,挟,区,径,渓,軽,芸,倹,圏,権,厳,恒,国,斎,雑,蚕,残,児,実,釈,従,縦,叙,焼,条,剰,壌,醸,真,尽,酔,髄,声,窃,浅,銭,禅,争,挿,騒,属,対,滞,択,単,断,痴,鋳,勅,鉄,伝,党,闘,届,脳,廃,発,蛮,払,辺,弁,宝,没,満,薬,余,様,乱,両,礼,霊,炉,湾,悪,医,飲,営,円,欧,奥,価,絵,拡,学,缶,勧,観,帰,犠,挙,狭,駆,茎,経,継,欠,剣,検,顕,広,鉱,砕,剤,参,惨,糸,辞,舎,寿,渋,粛,将,証,乗,畳,嬢,触,寝,図,穂,枢,斉,摂,戦,潜,双,荘,装,蔵,続,体,台,沢,胆,弾,虫,庁,鎮,点,灯,盗,独,弐,覇,売,髪,秘,仏,変,弁,豊,翻,黙,与,誉,謡,覧,猟,励,齢,労,圧,為,隠,衛,塩,殴,穏,画,壊,殻,岳,巻,関,顔,偽,旧,峡,暁,勲,恵,蛍,鶏,県,険,献,験,効,号,済,冊,桟,賛,歯,湿,写,収,獣,処,称,奨,浄,縄,譲,嘱,慎,粋,随,数,静,専,践,繊,壮,捜,総,臓,堕,帯,滝,担,団,遅,昼,聴,逓,転,当,稲,読,悩,拝,麦,抜,浜,並,弁,舗,褒,万,訳,予,揺,来,竜,塁,隷,恋,楼,鯵,鴬,蛎,撹,竃,潅,諌,頚,砿,蕊,靭,賎,壷,砺,梼,涛,迩,蝿,桧,侭,薮,篭,弥'.split(/,/);
411
+ var JIS_OLD_KANJI = '亞,圍,壹,榮,驛,應,櫻,假,會,懷,覺,樂,陷,歡,氣,戲,據,挾,區,徑,溪,輕,藝,儉,圈,權,嚴,恆,國,齋,雜,蠶,殘,兒,實,釋,從,縱,敍,燒,條,剩,壤,釀,眞,盡,醉,髓,聲,竊,淺,錢,禪,爭,插,騷,屬,對,滯,擇,單,斷,癡,鑄,敕,鐵,傳,黨,鬪,屆,腦,廢,發,蠻,拂,邊,瓣,寶,沒,滿,藥,餘,樣,亂,兩,禮,靈,爐,灣,惡,醫,飮,營,圓,歐,奧,價,繪,擴,學,罐,勸,觀,歸,犧,擧,狹,驅,莖,經,繼,缺,劍,檢,顯,廣,鑛,碎,劑,參,慘,絲,辭,舍,壽,澁,肅,將,證,乘,疊,孃,觸,寢,圖,穗,樞,齊,攝,戰,潛,雙,莊,裝,藏,續,體,臺,澤,膽,彈,蟲,廳,鎭,點,燈,盜,獨,貳,霸,賣,髮,祕,佛,變,辯,豐,飜,默,與,譽,謠,覽,獵,勵,齡,勞,壓,爲,隱,衞,鹽,毆,穩,畫,壞,殼,嶽,卷,關,顏,僞,舊,峽,曉,勳,惠,螢,鷄,縣,險,獻,驗,效,號,濟,册,棧,贊,齒,濕,寫,收,獸,處,稱,奬,淨,繩,讓,囑,愼,粹,隨,數,靜,專,踐,纖,壯,搜,總,臟,墮,帶,瀧,擔,團,遲,晝,聽,遞,轉,當,稻,讀,惱,拜,麥,拔,濱,竝,辨,舖,襃,萬,譯,豫,搖,來,龍,壘,隸,戀,樓,鰺,鶯,蠣,攪,竈,灌,諫,頸,礦,蘂,靱,賤,壺,礪,檮,濤,邇,蠅,檜,儘,藪,籠,彌,麩'.split(/,/);
412
+ var JIS_NEW_KANJI = '亜,囲,壱,栄,駅,応,桜,仮,会,懐,覚,楽,陥,歓,気,戯,拠,挟,区,径,渓,軽,芸,倹,圏,権,厳,恒,国,斎,雑,蚕,残,児,実,釈,従,縦,叙,焼,条,剰,壌,醸,真,尽,酔,髄,声,窃,浅,銭,禅,争,挿,騒,属,対,滞,択,単,断,痴,鋳,勅,鉄,伝,党,闘,届,脳,廃,発,蛮,払,辺,弁,宝,没,満,薬,余,様,乱,両,礼,霊,炉,湾,悪,医,飲,営,円,欧,奥,価,絵,拡,学,缶,勧,観,帰,犠,挙,狭,駆,茎,経,継,欠,剣,検,顕,広,鉱,砕,剤,参,惨,糸,辞,舎,寿,渋,粛,将,証,乗,畳,嬢,触,寝,図,穂,枢,斉,摂,戦,潜,双,荘,装,蔵,続,体,台,沢,胆,弾,虫,庁,鎮,点,灯,盗,独,弐,覇,売,髪,秘,仏,変,弁,豊,翻,黙,与,誉,謡,覧,猟,励,齢,労,圧,為,隠,衛,塩,殴,穏,画,壊,殻,岳,巻,関,顔,偽,旧,峡,暁,勲,恵,蛍,鶏,県,険,献,験,効,号,済,冊,桟,賛,歯,湿,写,収,獣,処,称,奨,浄,縄,譲,嘱,慎,粋,随,数,静,専,践,繊,壮,捜,総,臓,堕,帯,滝,担,団,遅,昼,聴,逓,転,当,稲,読,悩,拝,麦,抜,浜,並,弁,舗,褒,万,訳,予,揺,来,竜,塁,隷,恋,楼,鯵,鴬,蛎,撹,竃,潅,諌,頚,砿,蕊,靭,賎,壷,砺,梼,涛,迩,蝿,桧,侭,薮,篭,弥,麸'.split(/,/);
407
413
  var JIS_KANJI_REGEX_PATTERNS = JIS_OLD_KANJI.map(function (old, i) {
408
414
  var pattern = old + "|" + JIS_NEW_KANJI[i];
409
415
  return [pattern, old, JIS_NEW_KANJI[i]];
@@ -422,6 +428,7 @@
422
428
  _str = _str
423
429
  .replace(/三栄町|四谷三栄町/g, '(三栄町|四谷三栄町)')
424
430
  .replace(/鬮野川|くじ野川|くじの川/g, '(鬮野川|くじ野川|くじの川)')
431
+ .replace(/柿碕町|柿さき町/g, '(柿碕町|柿さき町)')
425
432
  .replace(/通り|とおり/g, '(通り|とおり)')
426
433
  .replace(/埠頭|ふ頭/g, '(埠頭|ふ頭)')
427
434
  .replace(/番町|番丁/g, '(番町|番丁)')
@@ -1227,6 +1234,7 @@
1227
1234
  var cachedTowns = {};
1228
1235
  var cachedGaikuListItem = {};
1229
1236
  var cachedResidentials = {};
1237
+ var cachedAddrs = {}; // TODO: use LRU
1230
1238
  var cachedSameNamedPrefectureCityRegexPatterns = undefined;
1231
1239
  var getPrefectures = function () { return __awaiter(void 0, void 0, void 0, function () {
1232
1240
  var prefsResp, data;
@@ -1236,7 +1244,7 @@
1236
1244
  if (typeof cachedPrefectures !== 'undefined') {
1237
1245
  return [2 /*return*/, cachedPrefectures];
1238
1246
  }
1239
- return [4 /*yield*/, __internals.fetch('.json')]; // ja.json
1247
+ return [4 /*yield*/, __internals.fetch('.json', { level: 1 })]; // ja.json
1240
1248
  case 1:
1241
1249
  prefsResp = _a.sent() // ja.json
1242
1250
  ;
@@ -1290,7 +1298,7 @@
1290
1298
  if (typeof cachedTown !== 'undefined') {
1291
1299
  return [2 /*return*/, cachedTown];
1292
1300
  }
1293
- return [4 /*yield*/, __internals.fetch(['', encodeURI(pref), encodeURI(city) + '.json'].join('/'))];
1301
+ return [4 /*yield*/, __internals.fetch(['', encodeURI(pref), encodeURI(city) + '.json'].join('/'), { level: 3, pref: pref, city: city })];
1294
1302
  case 1:
1295
1303
  townsResp = _a.sent();
1296
1304
  return [4 /*yield*/, townsResp.json()];
@@ -1305,7 +1313,10 @@
1305
1313
  return __generator(this, function (_b) {
1306
1314
  switch (_b.label) {
1307
1315
  case 0:
1308
- cacheKey = pref + "-" + city + "-" + town;
1316
+ if (currentConfig.interfaceVersion > 1) {
1317
+ throw new Error("Invalid config.interfaceVersion: " + currentConfig.interfaceVersion + "'}. Please set config.interfaceVersion to 1.");
1318
+ }
1319
+ cacheKey = pref + "-" + city + "-" + town + "-v" + currentConfig.interfaceVersion;
1309
1320
  cache = cachedGaikuListItem[cacheKey];
1310
1321
  if (typeof cache !== 'undefined') {
1311
1322
  return [2 /*return*/, cache];
@@ -1333,7 +1344,10 @@
1333
1344
  return __generator(this, function (_b) {
1334
1345
  switch (_b.label) {
1335
1346
  case 0:
1336
- cacheKey = pref + "-" + city + "-" + town;
1347
+ if (currentConfig.interfaceVersion > 1) {
1348
+ throw new Error("Invalid config.interfaceVersion: " + currentConfig.interfaceVersion + "'}. Please set config.interfaceVersion to 1.");
1349
+ }
1350
+ cacheKey = pref + "-" + city + "-" + town + "-v" + currentConfig.interfaceVersion;
1337
1351
  cache = cachedResidentials[cacheKey];
1338
1352
  if (typeof cache !== 'undefined') {
1339
1353
  return [2 /*return*/, cache];
@@ -1367,6 +1381,39 @@
1367
1381
  }
1368
1382
  });
1369
1383
  }); };
1384
+ var getAddrs = function (pref, city, town) { return __awaiter(void 0, void 0, void 0, function () {
1385
+ var cacheKey, cache, addrsResp, addrs;
1386
+ return __generator(this, function (_b) {
1387
+ switch (_b.label) {
1388
+ case 0:
1389
+ if (currentConfig.interfaceVersion < 2) {
1390
+ throw new Error("Invalid config.interfaceVersion: " + currentConfig.interfaceVersion + "'}. Please set config.interfaceVersion to 2 or higher");
1391
+ }
1392
+ cacheKey = pref + "-" + city + "-" + town + "-v" + currentConfig.interfaceVersion;
1393
+ cache = cachedAddrs[cacheKey];
1394
+ if (typeof cache !== 'undefined') {
1395
+ return [2 /*return*/, cache];
1396
+ }
1397
+ return [4 /*yield*/, __internals.fetch(['', encodeURI(pref), encodeURI(city), encodeURI(town) + '.json'].join('/'), { level: 8, pref: pref, city: city, town: town })];
1398
+ case 1:
1399
+ addrsResp = _b.sent();
1400
+ _b.label = 2;
1401
+ case 2:
1402
+ _b.trys.push([2, 4, , 5]);
1403
+ return [4 /*yield*/, addrsResp.json()];
1404
+ case 3:
1405
+ addrs = (_b.sent());
1406
+ return [3 /*break*/, 5];
1407
+ case 4:
1408
+ _b.sent();
1409
+ addrs = [];
1410
+ return [3 /*break*/, 5];
1411
+ case 5:
1412
+ addrs.sort(function (res1, res2) { return res1.addr.length - res2.addr.length; });
1413
+ return [2 /*return*/, (cachedAddrs[cacheKey] = addrs)];
1414
+ }
1415
+ });
1416
+ }); };
1370
1417
  // 十六町 のように漢数字と町が連結しているか
1371
1418
  var isKanjiNumberFollewedByCho = function (targetTownName) {
1372
1419
  var xCho = targetTownName.match(/.町/g);
@@ -1376,9 +1423,9 @@
1376
1423
  return kanjiNumbers.length > 0;
1377
1424
  };
1378
1425
  var getTownRegexPatterns = function (pref, city) { return __awaiter(void 0, void 0, void 0, function () {
1379
- var cachedResult, pre_towns, townSet, towns, isKyoto, _i, pre_towns_1, town, originalTown, townAbbr, patterns;
1380
- return __generator(this, function (_a) {
1381
- switch (_a.label) {
1426
+ var cachedResult, pre_towns, townSet, towns, isKyoto, _i, pre_towns_1, town, originalTown, townAbbr, patterns, _a, towns_1, town, chomeMatch, chomeNamePart, chomeNum, pattern;
1427
+ return __generator(this, function (_b) {
1428
+ switch (_b.label) {
1382
1429
  case 0:
1383
1430
  cachedResult = cachedTownRegexes.get(pref + "-" + city);
1384
1431
  if (typeof cachedResult !== 'undefined') {
@@ -1386,7 +1433,7 @@
1386
1433
  }
1387
1434
  return [4 /*yield*/, getTowns(pref, city)];
1388
1435
  case 1:
1389
- pre_towns = _a.sent();
1436
+ pre_towns = _b.sent();
1390
1437
  townSet = new Set(pre_towns.map(function (town) { return town.town; }));
1391
1438
  towns = [];
1392
1439
  isKyoto = city.match(/^京都市/);
@@ -1452,6 +1499,18 @@
1452
1499
  }));
1453
1500
  return [town, pattern];
1454
1501
  });
1502
+ // X丁目の丁目なしの数字だけ許容するため、最後に数字だけ追加していく
1503
+ for (_a = 0, towns_1 = towns; _a < towns_1.length; _a++) {
1504
+ town = towns_1[_a];
1505
+ chomeMatch = town.town.match(/([^一二三四五六七八九十]+)([一二三四五六七八九十]+)(丁目?)/);
1506
+ if (!chomeMatch) {
1507
+ continue;
1508
+ }
1509
+ chomeNamePart = chomeMatch[1];
1510
+ chomeNum = chomeMatch[2];
1511
+ pattern = toRegexPattern("^" + chomeNamePart + "(" + chomeNum + "|" + kan2num(chomeNum) + ")");
1512
+ patterns.push([town, pattern]);
1513
+ }
1455
1514
  cachedTownRegexes.set(pref + "-" + city, patterns);
1456
1515
  return [2 /*return*/, patterns];
1457
1516
  }
@@ -1586,10 +1645,32 @@
1586
1645
  }
1587
1646
  });
1588
1647
  }); };
1648
+ var normalizeAddrPart = function (addr, pref, city, town) { return __awaiter(void 0, void 0, void 0, function () {
1649
+ var addrListItem, addrItem, other;
1650
+ return __generator(this, function (_a) {
1651
+ switch (_a.label) {
1652
+ case 0: return [4 /*yield*/, getAddrs(pref, city, town)
1653
+ // 住居表示住所、および地番住所が見つからなかった
1654
+ ];
1655
+ case 1:
1656
+ addrListItem = _a.sent();
1657
+ // 住居表示住所、および地番住所が見つからなかった
1658
+ if (addrListItem.length === 0) {
1659
+ return [2 /*return*/, null];
1660
+ }
1661
+ addrItem = addrListItem.find(function (item) { return addr.startsWith(item.addr); });
1662
+ if (addrItem) {
1663
+ other = addr.replace(addrItem.addr, '').trim();
1664
+ return [2 /*return*/, { addr: addrItem.addr, other: other, lat: addrItem.lat, lng: addrItem.lng }];
1665
+ }
1666
+ return [2 /*return*/, null];
1667
+ }
1668
+ });
1669
+ }); };
1589
1670
  var normalize$1 = function (address, _option) {
1590
1671
  if (_option === void 0) { _option = defaultOption; }
1591
1672
  return __awaiter(void 0, void 0, void 0, function () {
1592
- var option, addr, pref, city, town, lat, lng, level, normalized, prefectures, prefs, prefPatterns, sameNamedPrefectureCityRegexPatterns, i, _a, prefectureCity, reg, match, i, _b, _pref, pattern, match, matched, _pref, cities, cityPatterns, i, _c, _city, pattern, match, i, normalized_1, cities, cityPatterns, i, _d, _city, pattern, match, result;
1673
+ var option, addr, pref, city, town, lat, lng, level, normalized, prefectures, prefs, prefPatterns, sameNamedPrefectureCityRegexPatterns, i, _a, prefectureCity, reg, match, i, _b, _pref, pattern, match, matched, _pref, cities, cityPatterns, i, _c, _city, pattern, match, i, normalized_1, cities, cityPatterns, i, _d, _city, pattern, match, normalizedAddrPart, other, result, result;
1593
1674
  return __generator(this, function (_e) {
1594
1675
  switch (_e.label) {
1595
1676
  case 0:
@@ -1732,7 +1813,7 @@
1732
1813
  });
1733
1814
  })
1734
1815
  .replace(/(([0-9〇一二三四五六七八九十百千]+)(番地?)([0-9〇一二三四五六七八九十百千]+)号)\s*(.+)/, '$1 $5')
1735
- .replace(/([0-9〇一二三四五六七八九十百千]+)(番地?)([0-9〇一二三四五六七八九十百千]+)号?/, '$1-$3')
1816
+ .replace(/([0-9〇一二三四五六七八九十百千]+)\s*(番地?)\s*([0-9〇一二三四五六七八九十百千]+)\s*号?/, '$1-$3')
1736
1817
  .replace(/([0-9〇一二三四五六七八九十百千]+)番地?/, '$1')
1737
1818
  .replace(/([0-9〇一二三四五六七八九十百千]+)の/g, '$1-')
1738
1819
  .replace(/([0-9〇一二三四五六七八九十百千]+)[--﹣−‐⁃‑‒–—﹘―⎯⏤ーー─━]/g, function (match) {
@@ -1749,7 +1830,7 @@
1749
1830
  // `-1` のようなケース
1750
1831
  return kan2num(s);
1751
1832
  })
1752
- .replace(/-[^0-9]+([0-9〇一二三四五六七八九十百千]+)/, function (s) {
1833
+ .replace(/-[^0-9]([0-9〇一二三四五六七八九十百千]+)/, function (s) {
1753
1834
  // `-あ1` のようなケース
1754
1835
  return kan2num(zen2han(s));
1755
1836
  })
@@ -1762,12 +1843,52 @@
1762
1843
  _e.label = 8;
1763
1844
  case 8:
1764
1845
  addr = patchAddr(pref, city, town, addr);
1765
- if (!(option.level > 3 && normalized && town)) return [3 /*break*/, 10];
1766
- return [4 /*yield*/, normalizeResidentialPart(addr, pref, city, town)];
1846
+ if (pref)
1847
+ level = level + 1;
1848
+ if (city)
1849
+ level = level + 1;
1850
+ if (town)
1851
+ level = level + 1;
1852
+ if (option.level <= 3 || level < 3) {
1853
+ return [2 /*return*/, { pref: pref, city: city, town: town, addr: addr, level: level, lat: lat, lng: lng }];
1854
+ }
1855
+ if (!(currentConfig.interfaceVersion === 2)) return [3 /*break*/, 10];
1856
+ return [4 /*yield*/, normalizeAddrPart(addr, pref, city, town)];
1767
1857
  case 9:
1768
- normalized = _e.sent();
1769
- _e.label = 10;
1858
+ normalizedAddrPart = _e.sent();
1859
+ other = undefined;
1860
+ if (normalizedAddrPart) {
1861
+ addr = normalizedAddrPart.addr;
1862
+ if (normalizedAddrPart.other) {
1863
+ other = normalizedAddrPart.other;
1864
+ }
1865
+ if (normalizedAddrPart.lat !== null)
1866
+ lat = parseFloat(normalizedAddrPart.lat);
1867
+ if (normalizedAddrPart.lng !== null)
1868
+ lng = parseFloat(normalizedAddrPart.lng);
1869
+ level = 8;
1870
+ }
1871
+ result = {
1872
+ pref: pref,
1873
+ city: city,
1874
+ town: town,
1875
+ addr: addr,
1876
+ level: level,
1877
+ lat: lat,
1878
+ lng: lng,
1879
+ };
1880
+ if (other) {
1881
+ result.other = other;
1882
+ }
1883
+ return [2 /*return*/, result];
1770
1884
  case 10:
1885
+ if (!(currentConfig.interfaceVersion === 1)) return [3 /*break*/, 13];
1886
+ if (!(option.level > 3 && normalized && town)) return [3 /*break*/, 12];
1887
+ return [4 /*yield*/, normalizeResidentialPart(addr, pref, city, town)];
1888
+ case 11:
1889
+ normalized = _e.sent();
1890
+ _e.label = 12;
1891
+ case 12:
1771
1892
  if (normalized) {
1772
1893
  lat = parseFloat(normalized.lat);
1773
1894
  lng = parseFloat(normalized.lng);
@@ -1776,12 +1897,6 @@
1776
1897
  lat = null;
1777
1898
  lng = null;
1778
1899
  }
1779
- if (pref)
1780
- level = level + 1;
1781
- if (city)
1782
- level = level + 1;
1783
- if (town)
1784
- level = level + 1;
1785
1900
  result = {
1786
1901
  pref: pref,
1787
1902
  city: city,
@@ -1801,6 +1916,7 @@
1801
1916
  result.level = 8;
1802
1917
  }
1803
1918
  return [2 /*return*/, result];
1919
+ case 13: throw new Error('invalid interfaceVersion');
1804
1920
  }
1805
1921
  });
1806
1922
  });
@@ -0,0 +1,3 @@
1
+ import * as Normalize from './normalize';
2
+ export declare const config: Normalize.Config;
3
+ export declare const normalize: Normalize.Normalizer;