posti 3.5.0 → 4.0.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.
- package/{LICENSE.md → LICENSE} +1 -1
- package/README.md +333 -112
- package/dist/cli/args.d.ts +17 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +80 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +85 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +2 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +2 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +97 -1
- package/dist/config/index.js.map +1 -0
- package/dist/config/paths.d.ts +4 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +16 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +27 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +24 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/db/dialects.d.ts +15 -0
- package/dist/db/dialects.d.ts.map +1 -0
- package/dist/db/dialects.js +270 -0
- package/dist/db/dialects.js.map +1 -0
- package/dist/db/index.d.ts +27 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +49 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +8 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +58 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/migrations/001_initial_schema.d.ts +3 -0
- package/dist/db/migrations/001_initial_schema.d.ts.map +1 -0
- package/dist/db/migrations/001_initial_schema.js +17 -0
- package/dist/db/migrations/001_initial_schema.js.map +1 -0
- package/dist/db/migrations/index.d.ts +3 -0
- package/dist/db/migrations/index.d.ts.map +1 -0
- package/dist/db/migrations/index.js +3 -0
- package/dist/db/migrations/index.js.map +1 -0
- package/dist/db/operations.d.ts +13 -0
- package/dist/db/operations.d.ts.map +1 -0
- package/dist/db/operations.js +179 -0
- package/dist/db/operations.js.map +1 -0
- package/dist/fetcher/url-parser.d.ts +9 -0
- package/dist/fetcher/url-parser.d.ts.map +1 -0
- package/dist/fetcher/url-parser.js +19 -0
- package/dist/fetcher/url-parser.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -0
- package/dist/loader/index.d.ts +7 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +145 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/state.d.ts +5 -0
- package/dist/loader/state.d.ts.map +1 -0
- package/dist/loader/state.js +26 -0
- package/dist/loader/state.js.map +1 -0
- package/dist/parser/field-definitions.d.ts +14 -0
- package/dist/parser/field-definitions.d.ts.map +1 -0
- package/dist/parser/field-definitions.js +91 -0
- package/dist/parser/field-definitions.js.map +1 -0
- package/dist/parser/file-converter.d.ts +2 -0
- package/dist/parser/file-converter.d.ts.map +1 -0
- package/dist/parser/file-converter.js +7 -0
- package/dist/parser/file-converter.js.map +1 -0
- package/dist/parser/line-parser.d.ts +4 -0
- package/dist/parser/line-parser.d.ts.map +1 -0
- package/dist/parser/line-parser.js +28 -0
- package/dist/parser/line-parser.js.map +1 -0
- package/dist/parser/unzipper.d.ts +2 -0
- package/dist/parser/unzipper.d.ts.map +1 -0
- package/dist/parser/unzipper.js +11 -0
- package/dist/parser/unzipper.js.map +1 -0
- package/dist/utils/chunks.d.ts +2 -0
- package/dist/utils/chunks.d.ts.map +1 -0
- package/dist/utils/chunks.js +10 -0
- package/dist/utils/chunks.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +8 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/progress.d.ts +14 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +68 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/time.d.ts +2 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +14 -0
- package/dist/utils/time.js.map +1 -0
- package/package.json +76 -63
- package/CHANGELOG.md +0 -345
- package/dist/classes/Posti.js +0 -11
- package/dist/classes/Sequelize.js +0 -15
- package/dist/posti.js +0 -2
- package/dist/utils/index.js +0 -55
package/package.json
CHANGED
|
@@ -1,84 +1,97 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "posti",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
6
|
-
"author": "Kimmo Saari <kirbo@kirbo-designs.com>",
|
|
7
|
-
"license": "MIT",
|
|
8
|
-
"scripts": {
|
|
9
|
-
"build": "cross-env NODE_ENV=build npx babel src --out-dir dist",
|
|
10
|
-
"start": "babel-node src/posti.js",
|
|
11
|
-
"force": "cross-env force=true babel-node src/posti.js",
|
|
12
|
-
"lint": "eslint .",
|
|
13
|
-
"test": "yarn test:debug --silent --colors",
|
|
14
|
-
"test:debug": "cross-env NODE_ENV=test jest --verbose --detectOpenHandles --forceExit",
|
|
15
|
-
"prepush": "yarn lint && yarn test"
|
|
16
|
-
},
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"description": "Finnish postal data (BAF/PCF/POM) loader for PostgreSQL, MySQL, MariaDB, and SQLite",
|
|
5
|
+
"type": "module",
|
|
17
6
|
"engines": {
|
|
18
|
-
"node": ">=
|
|
19
|
-
"yarn": ">=1.3.2"
|
|
7
|
+
"node": ">=22.12"
|
|
20
8
|
},
|
|
9
|
+
"packageManager": "pnpm@12.18.0+sha512.9d7882d5dc82147ecfc4e062aa34834e0ad0296710a1837a1115ae012127d36b7109e321ac1598a1dd0a65597681b1e99917e12ed0d749eae91187943363beb3",
|
|
21
10
|
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./package.json": "./package.json"
|
|
18
|
+
},
|
|
22
19
|
"bin": {
|
|
23
|
-
"posti": "./dist/
|
|
20
|
+
"posti": "./dist/cli.js"
|
|
24
21
|
},
|
|
25
22
|
"files": [
|
|
26
|
-
"dist"
|
|
27
|
-
"package.json"
|
|
23
|
+
"dist"
|
|
28
24
|
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "pnpm clean && tsc -p tsconfig.build.json",
|
|
27
|
+
"clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
28
|
+
"start": "tsx src/cli.ts",
|
|
29
|
+
"dev": "tsx --watch src/cli.ts",
|
|
30
|
+
"lint": "biome check src/ test/ scripts/",
|
|
31
|
+
"lint:shell": "shellcheck scripts/*.sh",
|
|
32
|
+
"lint:fix": "biome check --write src/ test/ scripts/",
|
|
33
|
+
"format": "biome format --write src/ test/ scripts/",
|
|
34
|
+
"typecheck": "tsc --noEmit && tsc -p tsconfig.scripts.json",
|
|
35
|
+
"test": "vitest run",
|
|
36
|
+
"test:unit": "vitest run --dir test/unit",
|
|
37
|
+
"test:integration": "vitest run --dir test/integration",
|
|
38
|
+
"test:sqlite": "vitest run test/integration/sqlite.test.ts",
|
|
39
|
+
"test:watch": "vitest",
|
|
40
|
+
"test:coverage": "vitest run --coverage",
|
|
41
|
+
"check:package": "bash scripts/check-package.sh",
|
|
42
|
+
"deps:check": "pnpm outdated && pnpm audit",
|
|
43
|
+
"deps:update": "pnpm update --latest && pnpm install",
|
|
44
|
+
"prepack": "pnpm build"
|
|
45
|
+
},
|
|
29
46
|
"keywords": [
|
|
30
47
|
"posti",
|
|
31
48
|
"finnish post",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
49
|
+
"postal codes",
|
|
50
|
+
"addresses",
|
|
51
|
+
"postgresql",
|
|
34
52
|
"mysql",
|
|
35
53
|
"mariadb",
|
|
54
|
+
"sqlite",
|
|
36
55
|
"cli"
|
|
37
56
|
],
|
|
57
|
+
"homepage": "https://github.com/Kirbo/posti#readme",
|
|
58
|
+
"bugs": {
|
|
59
|
+
"url": "https://github.com/Kirbo/posti/issues"
|
|
60
|
+
},
|
|
61
|
+
"repository": {
|
|
62
|
+
"type": "git",
|
|
63
|
+
"url": "git+https://github.com/Kirbo/posti.git"
|
|
64
|
+
},
|
|
65
|
+
"author": "Kimmo Saari <kirbo@kirbo-designs.com>",
|
|
66
|
+
"license": "MIT",
|
|
38
67
|
"dependencies": {
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"pg
|
|
49
|
-
"regenerator-runtime": "0.13.7",
|
|
50
|
-
"request": "2.88.2",
|
|
51
|
-
"sequelize": "6.6.2",
|
|
52
|
-
"sqlite3": "5.0.2",
|
|
53
|
-
"tedious": "11.0.7",
|
|
54
|
-
"unzipper": "0.10.11"
|
|
68
|
+
"cli-progress": "^3.12.0",
|
|
69
|
+
"iconv-lite": "^0.7.3",
|
|
70
|
+
"picocolors": "^1.1.1",
|
|
71
|
+
"unzipper": "^0.12.5",
|
|
72
|
+
"zod": "^4.6.7"
|
|
73
|
+
},
|
|
74
|
+
"optionalDependencies": {
|
|
75
|
+
"better-sqlite3": "^13.0.3",
|
|
76
|
+
"mysql2": "^3.24.6",
|
|
77
|
+
"pg": "^8.23.1"
|
|
55
78
|
},
|
|
56
79
|
"devDependencies": {
|
|
57
|
-
"@
|
|
58
|
-
"@
|
|
59
|
-
"@
|
|
60
|
-
"@
|
|
61
|
-
"@
|
|
62
|
-
"@
|
|
63
|
-
"@
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"cross-env": "7.0.3",
|
|
74
|
-
"eslint": "7.24.0",
|
|
75
|
-
"eslint-config-airbnb-base": "14.2.1",
|
|
76
|
-
"eslint-plugin-compat": "3.9.0",
|
|
77
|
-
"eslint-plugin-import": "2.22.1",
|
|
78
|
-
"eslint-plugin-jsdoc": "32.3.1",
|
|
79
|
-
"eslint-plugin-require-jsdoc": "1.0.4",
|
|
80
|
-
"husky": "6.0.0",
|
|
81
|
-
"jest": "26.6.3",
|
|
82
|
-
"jest-plugin-console-matchers": "2.9.0"
|
|
80
|
+
"@arethetypeswrong/cli": "0.18.5",
|
|
81
|
+
"@biomejs/biome": "2.6.5",
|
|
82
|
+
"@types/better-sqlite3": "9.6.0",
|
|
83
|
+
"@types/cli-progress": "3.11.6",
|
|
84
|
+
"@types/node": "22.20.5",
|
|
85
|
+
"@types/pg": "8.23.1",
|
|
86
|
+
"@types/unzipper": "0.10.11",
|
|
87
|
+
"@vitest/coverage-v8": "5.1.0",
|
|
88
|
+
"publint": "0.3.25",
|
|
89
|
+
"tsx": "4.23.15",
|
|
90
|
+
"typescript": "7.0.2",
|
|
91
|
+
"vitest": "5.1.0"
|
|
92
|
+
},
|
|
93
|
+
"publishConfig": {
|
|
94
|
+
"access": "public",
|
|
95
|
+
"registry": "https://registry.npmjs.org/"
|
|
83
96
|
}
|
|
84
97
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
# Posti
|
|
2
|
-
All notable changes to this project will be documented in this file.
|
|
3
|
-
|
|
4
|
-
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
5
|
-
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
6
|
-
|
|
7
|
-
## [Unreleased]
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
## [3.5.0] - 2021-04-23
|
|
11
|
-
|
|
12
|
-
### Changed
|
|
13
|
-
- Updated the dependencies.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
## [3.4.3] - 2020-05-14
|
|
17
|
-
|
|
18
|
-
### Added
|
|
19
|
-
- `core-js`.
|
|
20
|
-
|
|
21
|
-
### Fixed
|
|
22
|
-
- Broken binary.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
## [3.4.2] - 2020-05-14
|
|
26
|
-
|
|
27
|
-
### Added
|
|
28
|
-
- More tests in CI/CD.
|
|
29
|
-
|
|
30
|
-
### Fixed
|
|
31
|
-
- Broken binary.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
## [3.4.1] - 2020-05-14
|
|
35
|
-
|
|
36
|
-
### Added
|
|
37
|
-
- `resolution` for `graceful-fs`.
|
|
38
|
-
|
|
39
|
-
### Changed
|
|
40
|
-
- Updated the dependencies.
|
|
41
|
-
- Updated to Node 12
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
## [3.4.0] - 2019-12-02
|
|
45
|
-
|
|
46
|
-
### Changed
|
|
47
|
-
- Updated the dependencies.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
## [3.3.1] - 2019-12-02
|
|
51
|
-
|
|
52
|
-
### Changed
|
|
53
|
-
- Updated the dependencies.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
## [3.3.0] - 2019-12-02
|
|
57
|
-
|
|
58
|
-
### Changed
|
|
59
|
-
- Updated the dependencies.
|
|
60
|
-
- Updated Node version into 10
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
## [3.2.0] - 2019-05-02
|
|
64
|
-
|
|
65
|
-
### Added
|
|
66
|
-
- Configuration for `query` in `server.query`.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
## [3.1.3] - 2019-05-01
|
|
70
|
-
|
|
71
|
-
### Changed
|
|
72
|
-
- Added link to coverage in `README.md`.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
## [3.1.2] - 2019-05-01
|
|
76
|
-
|
|
77
|
-
### Fixed
|
|
78
|
-
- Postgres test also works now.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
## [3.1.1] - 2019-05-01
|
|
82
|
-
|
|
83
|
-
### Added
|
|
84
|
-
- Missing dependency `regenerator-runtime`.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
## [3.1.0] - 2019-05-01
|
|
88
|
-
|
|
89
|
-
### Added
|
|
90
|
-
- Configuration for `cors` in `server.cors`.
|
|
91
|
-
|
|
92
|
-
### Fixed
|
|
93
|
-
- Build didn't replace shebang from `babel-node` into `node`.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
## [3.0.4] - 2019-05-01
|
|
97
|
-
|
|
98
|
-
### Fixed
|
|
99
|
-
- Fixing CI/CD pipeline.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
## [3.0.3] - 2019-05-01
|
|
103
|
-
|
|
104
|
-
### Fixed
|
|
105
|
-
- Fixing CI/CD pipeline.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
## [3.0.2] - 2019-05-01
|
|
109
|
-
|
|
110
|
-
### Removed
|
|
111
|
-
- Redundant dependencies.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
## [3.0.1] - 2019-05-01
|
|
115
|
-
|
|
116
|
-
### Fixed
|
|
117
|
-
- Fixing CI/CD pipeline.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
## [3.0.0] - 2019-05-01
|
|
121
|
-
|
|
122
|
-
### Added
|
|
123
|
-
- New property in configuration file: `server.playground`.
|
|
124
|
-
|
|
125
|
-
### Breaking changes
|
|
126
|
-
- Had to split `server.limiter` in configuration file into two separate configurations:
|
|
127
|
-
- `server.rateLimiter`
|
|
128
|
-
- `server.speedLimiter`
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
## [2.1.3] - 2019-04-39
|
|
132
|
-
|
|
133
|
-
### Fixed
|
|
134
|
-
- Fixing CI/CD pipeline.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
## [2.1.2] - 2019-04-39
|
|
138
|
-
|
|
139
|
-
### Fixed
|
|
140
|
-
- Fixing CI/CD pipeline.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
## [2.1.1] - 2019-04-39
|
|
144
|
-
|
|
145
|
-
### Fixed
|
|
146
|
-
- Fixing CI/CD pipeline.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
## [2.1.0] - 2019-04-39
|
|
150
|
-
|
|
151
|
-
### Changed
|
|
152
|
-
- Updated the dependencies.
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
## [2.0.0] - 2018-08-29
|
|
156
|
-
|
|
157
|
-
### Changed
|
|
158
|
-
- Updated the dependencies.
|
|
159
|
-
|
|
160
|
-
### Breaking changes
|
|
161
|
-
- Had to change engine dependency from node `0.1.0` into `6.0.0`.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
## [1.0.3] - 2018-08-22
|
|
165
|
-
|
|
166
|
-
### Changed
|
|
167
|
-
- Updated the dependencies and fixed Jest config.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
## [1.0.2] - 2018-03-26
|
|
171
|
-
|
|
172
|
-
### Breaking changes
|
|
173
|
-
- Breaking changes to config file, check the [latest config here](./posti.config.example.js).
|
|
174
|
-
- Renamed `ZIPCODE_CHANGES.graphqlQuery` from `PostalCodeChanges` into `PostalCodeChange` on line 395.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
## [1.0.1] - 2018-03-26
|
|
178
|
-
|
|
179
|
-
### Added
|
|
180
|
-
- Link to [`posti-graphql`](https://www.npmjs.com/package/posti-graphql).
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
## [1.0.0] - 2018-03-26
|
|
184
|
-
|
|
185
|
-
### Breaking changes
|
|
186
|
-
- Breaking changes to config file, check the [latest config here](./posti.config.example.js).
|
|
187
|
-
- Renamed `table` into `tables` on line 19.
|
|
188
|
-
- Added new configs: `server`.
|
|
189
|
-
|
|
190
|
-
### Changed
|
|
191
|
-
- Optimised CI/CD pipeline.
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
## [0.2.3] - 2018-03-21
|
|
195
|
-
|
|
196
|
-
### Changed
|
|
197
|
-
- Improved tests.
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
## [0.2.2] - 2018-03-19
|
|
201
|
-
|
|
202
|
-
### Changed
|
|
203
|
-
- Improved tests.
|
|
204
|
-
|
|
205
|
-
### Fixed
|
|
206
|
-
- Casting for `integer` type fields, was incorrectly `number` [src/classes/Sequelize.js](./src/classes/Sequelize.js) on line #874.
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
## [0.2.1] - 2018-03-18
|
|
210
|
-
|
|
211
|
-
### Added
|
|
212
|
-
- Screenshot of test output.
|
|
213
|
-
- Added link to test coverages.
|
|
214
|
-
|
|
215
|
-
### Changed
|
|
216
|
-
- Fixed [README.md](./README.md) installation instructions (obsolete config examples).
|
|
217
|
-
- Renamed "Screenshots" section to be "Links" in [README.md](./README.md).
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
## [0.2.0] - 2018-03-18
|
|
221
|
-
|
|
222
|
-
### Breaking changes
|
|
223
|
-
- Breaking changes to config file, check the [latest config here](./posti.config.example.js).
|
|
224
|
-
- In `postalcodes` table, renamed column `effectiveAt` to `entryIntoForceAt`.
|
|
225
|
-
|
|
226
|
-
### Changed
|
|
227
|
-
- Improvements in tests.
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
## [0.1.6] - 2018-03-18
|
|
231
|
-
|
|
232
|
-
### Added
|
|
233
|
-
- Couple of badges more into [README.md](./README.md).
|
|
234
|
-
- Lots of improvements in tests (now everything is 100% 🎉🎊🥂).
|
|
235
|
-
|
|
236
|
-
### Changed
|
|
237
|
-
- `no-console` eslint rule to give `error` instead of `warning`.
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
## [0.1.5] - 2018-03-17
|
|
241
|
-
|
|
242
|
-
### Changed
|
|
243
|
-
- `tablePrefix` in tests from `test_` into `${tablePrefix}test_`.
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
## [0.1.4] - 2018-03-17
|
|
247
|
-
|
|
248
|
-
### Changed
|
|
249
|
-
- CI/CD pipeline to publish with `npm` instead of `yarn`.
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
## [0.1.3] - 2018-03-17
|
|
253
|
-
|
|
254
|
-
### Changed
|
|
255
|
-
- Manually tested publishing, since `yarn` gave error "Cannot publish over previously published version".
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
## [0.1.2] - 2018-03-17
|
|
259
|
-
|
|
260
|
-
### Changed
|
|
261
|
-
- CI/CD pipeline to output the version to be published.
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
## [0.1.1] - 2018-03-17
|
|
265
|
-
|
|
266
|
-
### Fixed
|
|
267
|
-
- Bug showing incorrect number of lines inserted.
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
## [0.1.0] - 2018-03-17
|
|
271
|
-
|
|
272
|
-
### Breaking changes
|
|
273
|
-
- Breaking changes to config file, check the [latest config here](./posti.config.example.js).
|
|
274
|
-
- Table `zipcode_changes` renamed to `postalcode_changes`.
|
|
275
|
-
- Table `zipcodes` renamed to `postalcodes`.
|
|
276
|
-
|
|
277
|
-
### Added
|
|
278
|
-
- Disclaimer in `README.md`.
|
|
279
|
-
- Links to Finnish, English and Swedish Postal Code Services site, Terms of use and Frequently asked questions.
|
|
280
|
-
- Babel polyfill in `src/posti.js`.
|
|
281
|
-
|
|
282
|
-
### Changed
|
|
283
|
-
- Major refactoring.
|
|
284
|
-
- Updated dependencies.
|
|
285
|
-
- Run tests in parallel instead in serially.
|
|
286
|
-
- Coverage percentage in badge to contain `% Branch` instead of `% Funcs`.
|
|
287
|
-
- `Stage-0` into `Stage-2`.
|
|
288
|
-
|
|
289
|
-
### Fixed
|
|
290
|
-
- Bug showing incorrect number of lines being inserted.
|
|
291
|
-
|
|
292
|
-
## [0.0.6] - 2018-03-14
|
|
293
|
-
|
|
294
|
-
### Added
|
|
295
|
-
- Lots of more tests.
|
|
296
|
-
- New `test-debug` script.
|
|
297
|
-
|
|
298
|
-
### Changed
|
|
299
|
-
- Coverage percentage in badge back to contain `% Funcs` instead of `% Branch`.
|
|
300
|
-
- Run the tests serially instead in parallel.
|
|
301
|
-
- Fixed bug with table prefixes.
|
|
302
|
-
- Remove the test tables after tests.
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
## [0.0.5] - 2018-03-14
|
|
306
|
-
|
|
307
|
-
### Added
|
|
308
|
-
- Lots of more tests.
|
|
309
|
-
- A little more comments in the code.
|
|
310
|
-
|
|
311
|
-
### Changed
|
|
312
|
-
- Coverage percentage in badge to contain `% Branch` instead of `% Funcs`.
|
|
313
|
-
- Tests to use the actual config, with the difference that it overwrites `TABLE_PREFIX` to be `test_` when running tests.
|
|
314
|
-
- Renamed `this.table_names` to be `this.tables` in [src/classes/Database.js:49](./src/classes/Database.js).
|
|
315
|
-
- New method `this.setFile(file)` in [src/classes/Posti.js:203](./src/classes/Posti.js), to ease the tests.
|
|
316
|
-
- `delete_on_complete` in [src/config/index.js:7](./src/config/index.js) is set to `false` for tests.
|
|
317
|
-
- `findDatabaseConfig()` in [src/utils/index.js:76](./src/utils/index.js) shouldn't break anymore when using different `NODE_ENV`.
|
|
318
|
-
- Table names and temp table names to use `TABLE_PREFIX` in [src/classes/Database.js:52](./src/classes/Database.js).
|
|
319
|
-
|
|
320
|
-
### Removed
|
|
321
|
-
- `posti.config.test.js` file, as it is no longer needed.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
## [0.0.4] - 2018-03-13
|
|
325
|
-
|
|
326
|
-
### Changed
|
|
327
|
-
- Finetuning CI/CD pipeline.
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
## [0.0.3] - 2018-03-13
|
|
331
|
-
|
|
332
|
-
### Changed
|
|
333
|
-
- Finetuning CI/CD pipeline.
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
## [0.0.2] - 2018-03-13
|
|
337
|
-
|
|
338
|
-
### Changed
|
|
339
|
-
- Finetuning CI/CD pipeline.
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
## [0.0.1] - 2018-03-12
|
|
343
|
-
|
|
344
|
-
### Changed
|
|
345
|
-
- Initial release.
|
package/dist/classes/Posti.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";require("core-js/modules/es.promise.js"),exports.__esModule=!0,exports["default"]=void 0,require("core-js/modules/es.date.to-string.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.regexp.to-string.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.string.includes.js"),require("core-js/modules/es.array.map.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.string.match.js"),require("core-js/modules/es.parse-int.js"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.array.for-each.js"),require("core-js/modules/es.string.trim.js"),require("core-js/modules/es.object.define-property.js"),require("regenerator-runtime/runtime.js");var _fsExtra=_interopRequireDefault(require("fs-extra")),_path=_interopRequireDefault(require("path")),_request=_interopRequireDefault(require("request")),_cliProgress=_interopRequireDefault(require("cli-progress")),_bluebird=_interopRequireDefault(require("bluebird")),_unzipper=_interopRequireDefault(require("unzipper")),_readline=_interopRequireDefault(require("readline")),_iconvLite=_interopRequireDefault(require("iconv-lite")),_utils=require("../utils");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}var gen=fn.apply(self,args);_next(void 0)})}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}/**
|
|
2
|
-
* Posti
|
|
3
|
-
*
|
|
4
|
-
* @class
|
|
5
|
-
*/var Posti=/**
|
|
6
|
-
* Constructor
|
|
7
|
-
*/function(){var _this=this;_defineProperty(this,"setLatest",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(){return regeneratorRuntime.wrap(function(_context){for(;;)switch(_context.prev=_context.next){case 0:return _context.next=2,_this.getLatest();case 2:_this.newFiles=_context.sent;case 3:case"end":return _context.stop();}},_callee)}))),_defineProperty(this,"getLatest",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee2(){var files;return regeneratorRuntime.wrap(function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:if(!_fsExtra["default"].existsSync(global.postiConfig.cache.latestFile)){_context2.next=3;break}return files=_fsExtra["default"].readFileSync(global.postiConfig.cache.latestFile,{encoding:"utf8"}),_context2.abrupt("return",files);case 3:return _context2.abrupt("return",[]);case 4:case"end":return _context2.stop();}},_callee2)}))),_defineProperty(this,"writeLatest",function(files){_fsExtra["default"].writeFileSync(global.postiConfig.cache.latestFile,files.toString(),{encoding:"utf8"})}),_defineProperty(this,"getNewFiles",/*#__PURE__*/function(){var _ref3=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee3(proc){return regeneratorRuntime.wrap(function(_context3){for(;;)switch(_context3.prev=_context3.next){case 0:return void 0===proc&&(proc=process),_context3.next=3,_this.getLatest();case 3:return _this.latest=_context3.sent,proc.env.force&&((0,_utils.logBlock)("Force update all"),_this.latest=[]),_context3.abrupt("return",_this.files.filter(function(file){return!_this.latest.includes(file.filename)}));case 6:case"end":return _context3.stop();}},_callee3)}));return function(){return _ref3.apply(this,arguments)}}()),_defineProperty(this,"setNewFiles",/*#__PURE__*/function(){var _ref4=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee4(files){return regeneratorRuntime.wrap(function(_context4){for(;;)switch(_context4.prev=_context4.next){case 0:_this.newFiles=files;case 1:case"end":return _context4.stop();}},_callee4)}));return function(){return _ref4.apply(this,arguments)}}()),_defineProperty(this,"setFile",function(file){_this.file=file}),_defineProperty(this,"createCacheDir",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee5(){return regeneratorRuntime.wrap(function(_context5){for(;;)switch(_context5.prev=_context5.next){case 0:(0,_utils.logBlock)("Using temp folder: "+global.postiConfig.cache.tempDir),_fsExtra["default"].ensureDirSync(global.postiConfig.cache.tempDir);case 2:case"end":return _context5.stop();}},_callee5)}))),_defineProperty(this,"fecthFileUrls",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee6(){return regeneratorRuntime.wrap(function(_context6){for(;;)switch(_context6.prev=_context6.next){case 0:return(0,_utils.logBlock)("Fetching file list"),_context6.abrupt("return",new _bluebird["default"](function(resolve){(0,_request["default"])(global.postiConfig.webpcode.index,function(err,res,body){_this.files=body.match(/href="((.*)?webpcode\/[BAF|PCF|POM](.*)\.zip)"/g).map(function(url){var file=url.match(/href="((.*)?webpcode\/(((BAF|PCF|POM)(.*))\.zip))"/);return console.info(" - "+file[1]),{url:file[1],filename:file[3],extensionless:file[4],model:global.database.getFileModelName(file[5])}}),resolve(_this.files)})}));case 2:case"end":return _context6.stop();}},_callee6)}))),_defineProperty(this,"processFiles",/*#__PURE__*/function(){var _ref7=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee7(files){return regeneratorRuntime.wrap(function(_context7){for(;;)switch(_context7.prev=_context7.next){case 0:return _context7.t0=_bluebird["default"],_context7.t1=files,_context7.next=4,_this.processFile;case 4:return _context7.t2=_context7.sent,_context7.abrupt("return",_context7.t0.each.call(_context7.t0,_context7.t1,_context7.t2).then(function(){global.config.process.deleteOnComplete&&_this.removeFiles(),_this.writeLatest(files.map(function(file){return file.filename}))}));case 6:case"end":return _context7.stop();}},_callee7)}));return function(){return _ref7.apply(this,arguments)}}()),_defineProperty(this,"processFile",/*#__PURE__*/function(){var _ref8=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee8(file){return regeneratorRuntime.wrap(function(_context8){for(;;)switch(_context8.prev=_context8.next){case 0:if(_this.setFile(file),!_this.newFiles.includes(file)){_context8.next=12;break}return(0,_utils.logBlock)("Processing file: "+file.filename),_context8.next=5,_this.downloadFile();case 5:return _context8.next=7,_this.unzipFile();case 7:return _context8.next=9,_this.convertFile();case 9:return _context8.next=11,_this.parseFile();case 11:return _context8.abrupt("return",_this.clean());case 12:return(0,_utils.logBlock)("Skipping file: "+file.filename),_context8.abrupt("return",_this.clean());case 14:case"end":return _context8.stop();}},_callee8)}));return function(){return _ref8.apply(this,arguments)}}()),_defineProperty(this,"downloadFile",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee9(){return regeneratorRuntime.wrap(function(_context9){for(;;)switch(_context9.prev=_context9.next){case 0:return _context9.abrupt("return",new _bluebird["default"](function(resolve){(0,_utils.logStep)("Downloading file");var FILE_PATH=_path["default"].resolve(global.postiConfig.cache.tempDir,_this.file.filename),PROGRESS=new _cliProgress["default"].Bar(global.postiConfig.progressbar.downloadConfig),download=(0,_request["default"])(_this.file.url);download.on("response",function(response){var size=parseInt(response.headers["content-length"],10);PROGRESS.start(size,0),response.on("data",function(chunk){PROGRESS.increment(chunk.length)}).on("end",function(){resolve()})}).pipe(_fsExtra["default"].createWriteStream(FILE_PATH)).on("error",_utils.throwError)}));case 1:case"end":return _context9.stop();}},_callee9)}))),_defineProperty(this,"unzipFile",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee10(){return regeneratorRuntime.wrap(function(_context10){for(;;)switch(_context10.prev=_context10.next){case 0:return _context10.abrupt("return",new _bluebird["default"](function(resolve){(0,_utils.logStep)("Unziping file: "+_this.file.filename),_fsExtra["default"].createReadStream(_path["default"].resolve(global.postiConfig.cache.tempDir,_this.file.filename)).pipe(_unzipper["default"].Extract({path:_path["default"].resolve(global.postiConfig.cache.tempDir)})).on("close",function(){resolve()})}));case 1:case"end":return _context10.stop();}},_callee10)}))),_defineProperty(this,"convertFile",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee11(){return regeneratorRuntime.wrap(function(_context11){for(;;)switch(_context11.prev=_context11.next){case 0:return _context11.abrupt("return",new _bluebird["default"](function(resolve){(0,_utils.logStep)("Converting file from ISO-8859-1 -> UTF-8"),_fsExtra["default"].createReadStream(_path["default"].resolve(global.postiConfig.cache.tempDir,_this.file.extensionless+".dat")).pipe(_iconvLite["default"].decodeStream("latin1")).pipe(_iconvLite["default"].encodeStream("utf8")).pipe(_fsExtra["default"].createWriteStream(_path["default"].resolve(global.postiConfig.cache.tempDir,_this.file.extensionless+"_utf8.dat"))).on("close",function(){resolve()})}));case 1:case"end":return _context11.stop();}},_callee11)}))),_defineProperty(this,"parseFile",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee12(){var tableConfigs,oldTable;return regeneratorRuntime.wrap(function(_context12){for(;;)switch(_context12.prev=_context12.next){case 0:if(tableConfigs=global.database.getTableConfigs(_this.file.model),!tableConfigs){_context12.next=6;break}return _context12.next=4,global.database.tableExists(tableConfigs.nameFinished);case 4:return oldTable=_context12.sent,_context12.abrupt("return",new _bluebird["default"](function(resolve){var datFile=_this.file.extensionless+"_utf8.dat";(0,_utils.logStep)("Parsing file: "+datFile);var PROGRESS=new _cliProgress["default"].Bar(global.postiConfig.progressbar.insertConfig),FILE_PATH=_path["default"].resolve(global.postiConfig.cache.tempDir,datFile),databaseModel=global.database.getTableModel(_this.file.model),rows=[],emptyRow=Object.keys(tableConfigs.fields),parseLine=function(line){var row={};return emptyRow.forEach(function(key){var column=tableConfigs.fields[key];if(row[key]=null,column.start){var value=line.substr(column.start-1,column.length).trim();row[key]=global.database.castProperties(column.type,value)}}),row},insertChunk=function(chunk){return databaseModel.bulkCreate(chunk).then(function(){return PROGRESS.increment(chunk.length)})["catch"](_utils.throwError)};_readline["default"].createInterface({input:_fsExtra["default"].createReadStream(FILE_PATH),output:!1,console:!1}).on("line",function(line){rows.push(parseLine(line))}).on("close",function(){(0,_utils.logStep)("Inserting into temp table '"+tableConfigs.nameProcessing+"'"),PROGRESS.start(rows.length,0),_bluebird["default"].map((0,_utils.sliceArrayIntoChunks)(rows,global.config.process.chunkSize),insertChunk,{concurrency:global.config.process.concurrency}).then(function(){if(oldTable&&tableConfigs.deleteOnceComplete)return global.database.renameTable(tableConfigs.nameFinished,tableConfigs.nameFinished+"_old")}).then(function(){if(tableConfigs.deleteOnceComplete)return global.database.renameTable(tableConfigs.nameProcessing,tableConfigs.nameFinished)}).then(function(){resolve()})})}));case 6:case"end":return _context12.stop();}},_callee12)}))),_defineProperty(this,"clean",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee13(){var tableConfigs,oldTable;return regeneratorRuntime.wrap(function(_context13){for(;;)switch(_context13.prev=_context13.next){case 0:if(tableConfigs=global.database.getTableConfigs(_this.file.model),!tableConfigs){_context13.next=8;break}return _context13.next=4,global.database.tableExists(tableConfigs.nameFinished+"_old");case 4:if(oldTable=_context13.sent,!(oldTable&&tableConfigs.deleteOnceComplete)){_context13.next=8;break}return(0,_utils.logStep)("Cleaning up"),_context13.abrupt("return",global.database.dropTable(tableConfigs.nameFinished+"_old"));case 8:case"end":return _context13.stop();}},_callee13)}))),_defineProperty(this,"removeFiles",function(){(0,_utils.logBlock)("Removing temp folder "+global.postiConfig.cache.tempDir),_fsExtra["default"].removeSync(global.postiConfig.cache.tempDir)}),_defineProperty(this,"allFinished",function(){global.config.process.deleteOnComplete&&_this.removeFiles(),_this.writeLatest(_this.files.map(function(file){return file.filename}))}),this.files=[],this.latest=[],this.newFiles=[]}/**
|
|
8
|
-
* Get last processed files
|
|
9
|
-
*
|
|
10
|
-
* @returns {Array<Object>} - Last files processed
|
|
11
|
-
*/,_default=Posti;exports["default"]=_default;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";require("core-js/modules/es.symbol.js"),require("core-js/modules/es.object.get-own-property-descriptor.js"),require("core-js/modules/es.array.for-each.js"),require("core-js/modules/es.object.get-own-property-descriptors.js"),require("core-js/modules/es.object.define-properties.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.promise.js"),exports.__esModule=!0,exports["default"]=void 0,require("regenerator-runtime/runtime.js"),require("core-js/modules/es.array.reduce.js"),require("core-js/modules/es.array.map.js"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.function.name.js"),require("core-js/modules/es.parse-int.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.string.match.js"),require("core-js/modules/es.object.define-property.js");var _bluebird=_interopRequireDefault(require("bluebird")),_sequelize=_interopRequireDefault(require("sequelize")),_utils=require("../utils");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}var gen=fn.apply(self,args);_next(void 0)})}}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function _objectSpread(target){for(var source,i=1;i<arguments.length;i++)source=null==arguments[i]?{}:arguments[i],i%2?ownKeys(Object(source),!0).forEach(function(key){_defineProperty(target,key,source[key])}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))});return target}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}/**
|
|
2
|
-
* Database
|
|
3
|
-
*
|
|
4
|
-
* @class
|
|
5
|
-
*/var Database=/**
|
|
6
|
-
* Constructor.
|
|
7
|
-
*/function(){var _this=this;_defineProperty(this,"getTableName",function(tableKey){var tableConfigs=_this.tables[tableKey];return{name:tableConfigs.deleteOnceComplete?tableConfigs.nameProcessing:tableConfigs.nameFinished,nameProcessing:tableConfigs.nameProcessing,nameFinished:tableConfigs.nameFinished}}),_defineProperty(this,"getTableDefinitions",function(tableKey){return Object.keys(_this.tables[tableKey].fields).map(function(field){return[""+field,_this.tables[tableKey].fields[field].dbType]}).reduce(function(columns,item){var key=item[0],field=item[1];return columns[key]=field,columns},{})}),_defineProperty(this,"getFileModelName",function(filename){return _this.fileToModel[filename]}),_defineProperty(this,"getTableIndexes",function(tableKey){return Object.keys(_this.tables[tableKey].fields).filter(function(field){return _this.tables[tableKey].fields[field].index}).map(function(field){return{name:field,fields:[field]}})}),_defineProperty(this,"getTableDatabaseOptions",function(tableKey){return _objectSpread(_objectSpread({},_this.commonTableOptions),{},{indexes:_this.getTableIndexes(tableKey)})}),_defineProperty(this,"getTableConfigs",function(tableKey){return _this.tables[tableKey]}),_defineProperty(this,"defineTable",/*#__PURE__*/function(){var _ref=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(tableKey){return regeneratorRuntime.wrap(function(_context){for(;;)switch(_context.prev=_context.next){case 0:_this.models[tableKey]=_this.database.define(_this.getTableName(tableKey).name,_this.getTableDefinitions(tableKey),_this.getTableDatabaseOptions(tableKey));case 1:case"end":return _context.stop();}},_callee)}));return function(){return _ref.apply(this,arguments)}}()),_defineProperty(this,"getTableModel",function(tableKey){return _this.models[tableKey]}),_defineProperty(this,"isConnected",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee2(){return regeneratorRuntime.wrap(function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:if(_this.database){_context2.next=2;break}return _context2.abrupt("return",!1);case 2:return _context2.abrupt("return",_this.database.authenticate().then(function(){return!0})["catch"](_utils.returnFalse));case 3:case"end":return _context2.stop();}},_callee2)}))),_defineProperty(this,"connect",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee3(){return regeneratorRuntime.wrap(function(_context3){for(;;)switch(_context3.prev=_context3.next){case 0:return _context3.next=2,_this.isConnected();case 2:if(_context3.sent){_context3.next=8;break}return(0,_utils.logBlock)("Database connecting..."),_this.database=new _sequelize["default"](global.config.database,global.config.user,global.config.password,_objectSpread({logging:!1,host:global.config.host,dialect:global.config.dialect},global.config.dialectOptions)),_context3.abrupt("return",_this.database.authenticate().then(function(){(0,_utils.logStep)("Connected")}));case 8:return _context3.abrupt("return",!0);case 9:case"end":return _context3.stop();}},_callee3)}))),_defineProperty(this,"createTempTables",/*#__PURE__*/function(){var _ref4=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee5(tableKeys){return regeneratorRuntime.wrap(function(_context5){for(;;)switch(_context5.prev=_context5.next){case 0:return _context5.abrupt("return",_bluebird["default"].map(tableKeys,/*#__PURE__*/function(){var _ref5=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee4(tableKey){var tableConfigs;return regeneratorRuntime.wrap(function(_context4){for(;;)switch(_context4.prev=_context4.next){case 0:return tableConfigs=_this.getTableConfigs(tableKey),_context4.next=3,_this.defineTable(tableKey);case 3:if(!tableConfigs.deleteOnceComplete){_context4.next=15;break}return _context4.next=6,_this.tableExists(tableConfigs.nameProcessing);case 6:if(_context4.sent){_context4.next=12;break}return(0,_utils.logStep)("Creating temp table: "+tableConfigs.nameProcessing),_context4.next=10,_this.getTableModel(tableKey).sync();case 10:_context4.next=13;break;case 12:(0,_utils.logStep)("Temp table '"+tableConfigs.nameProcessing+"' already exists");case 13:_context4.next=24;break;case 15:return _context4.next=17,_this.tableExists(tableConfigs.nameFinished);case 17:if(_context4.sent){_context4.next=23;break}return(0,_utils.logStep)("Creating table for: "+tableConfigs.nameFinished),_context4.next=21,_this.getTableModel(tableKey).sync();case 21:_context4.next=24;break;case 23:(0,_utils.logStep)("Table '"+tableConfigs.nameFinished+"' already exists");case 24:case"end":return _context4.stop();}},_callee4)}));return function(){return _ref5.apply(this,arguments)}}(),{concurrency:10})["catch"](_utils.logError));case 1:case"end":return _context5.stop();}},_callee5)}));return function(){return _ref4.apply(this,arguments)}}()),_defineProperty(this,"tableExists",/*#__PURE__*/function(){var _ref6=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee6(table){return regeneratorRuntime.wrap(function(_context6){for(;;)switch(_context6.prev=_context6.next){case 0:return _context6.abrupt("return",_this.database.getQueryInterface().describeTable(table).then(function(){return!0})["catch"](_utils.returnFalse));case 1:case"end":return _context6.stop();}},_callee6)}));return function(){return _ref6.apply(this,arguments)}}()),_defineProperty(this,"renameTable",/*#__PURE__*/function(){var _ref7=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee7(oldTableName,newTableName){return regeneratorRuntime.wrap(function(_context7){for(;;)switch(_context7.prev=_context7.next){case 0:return _context7.next=2,_this.tableExists(oldTableName);case 2:if(!_context7.sent){_context7.next=5;break}return(0,_utils.logStep)("Renaming table '"+oldTableName+"' -> '"+newTableName+"'"),_context7.abrupt("return",_this.database.getQueryInterface().renameTable(oldTableName,newTableName).then(function(){return!0})["catch"](_utils.returnFalse));case 5:return _context7.abrupt("return",null);case 6:case"end":return _context7.stop();}},_callee7)}));return function(){return _ref7.apply(this,arguments)}}()),_defineProperty(this,"dropTable",/*#__PURE__*/function(){var _ref8=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee8(tableName){return regeneratorRuntime.wrap(function(_context8){for(;;)switch(_context8.prev=_context8.next){case 0:return _context8.next=2,_this.tableExists(tableName);case 2:if(!_context8.sent){_context8.next=5;break}return(0,_utils.logStep)("Drop table '"+tableName+"'"),_context8.abrupt("return",_this.database.getQueryInterface().dropTable(tableName).then(function(){return!0})["catch"](_utils.returnFalse));case 5:return _context8.abrupt("return",null);case 6:case"end":return _context8.stop();}},_callee8)}));return function(){return _ref8.apply(this,arguments)}}()),_defineProperty(this,"castProperties",function(type,value){if(""===value)return null;switch(type){case"integer":return parseInt(value,10);case"YYYYMMDD":{var matches=value.match(/(\d{4})(\d{2})(\d{2})/);return matches[1]+"-"+matches[2]+"-"+matches[3]}default:return value;}}),this.database=null,this.models={},this.tables={ADDRESSES:{graphqlQuery:"Address",nameProcessing:global.config.tablePrefix+"temp_"+global.config.tables.addresses.name,nameFinished:""+global.config.tablePrefix+global.config.tables.addresses.name,deleteOnceComplete:global.config.tables.addresses.useTempTable,fields:{id:{type:"integer",index:!1,dbType:{primaryKey:!0,autoIncrement:!0,type:_sequelize["default"].INTEGER}},record:{comment:"Record identifier",start:1,length:5,type:"string",dbType:_sequelize["default"].STRING(5),index:!0},updatedAt:{comment:"Running date",start:6,length:8,type:"YYYYMMDD",dbType:_sequelize["default"].DATEONLY(),index:!0},postalCode:{comment:"Postal code",start:14,length:5,type:"string",dbType:_sequelize["default"].STRING(5),index:!0},postOfficeName:{comment:"Postal code name in Finnish ",start:19,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},postOfficeNameSwe:{comment:"Postal code name in Swedish",start:49,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},postOfficeShortName:{comment:"Postal code name abbreviation in Finnish",start:79,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!0},postOfficeShortNameSwe:{comment:"Postal code name abbreviation in Swedish",start:91,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!0},address:{comment:"Street (location) name in Finnish",start:103,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},addressSwe:{comment:"Street (location) name in Swedish",start:133,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},empty1:{comment:"Blank",start:163,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!1},empty2:{comment:"Blank",start:175,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!1},oddEven:{comment:"Building data type",extraComment:"1 = Odd\n2 = Even",start:187,length:1,type:"integer",dbType:_sequelize["default"].INTEGER,index:!0},smallestBuildingNumber1:{comment:"Building number 1 (Smallest building number)",start:188,length:5,type:"integer",dbType:_sequelize["default"].INTEGER,index:!0},smallestDeliveryLetter1:{comment:"Building delivery letter 1",start:193,length:1,type:"string",dbType:_sequelize["default"].STRING(1),index:!0},divider1:{comment:"Punctuation mark",start:194,length:1,type:"string",dbType:_sequelize["default"].STRING(1),index:!0},smallestBuildingNumber2:{comment:"Building number 2",start:195,length:5,type:"integer",dbType:_sequelize["default"].INTEGER,index:!0},smallestDeliveryLetter2:{comment:"Building delivery letter 2",start:200,length:1,type:"string",dbType:_sequelize["default"].STRING(1),index:!0},highestBuildingNumber1:{comment:"Building number 1 (Highest building number)",start:201,length:5,type:"integer",dbType:_sequelize["default"].INTEGER,index:!0},highestDeliveryLetter1:{comment:"Building delivery letter 1",start:206,length:1,type:"string",dbType:_sequelize["default"].STRING(1),index:!0},divider2:{comment:"Punctuation mark",start:207,length:1,type:"string",dbType:_sequelize["default"].STRING(1),index:!0},highestBuildingNumber2:{comment:"Building number 2",start:208,length:5,type:"integer",dbType:_sequelize["default"].INTEGER,index:!0},highestDeliveryLetter2:{comment:"Building delivery letter 2",start:213,length:1,type:"string",dbType:_sequelize["default"].STRING(1),index:!0},municipalityIdCode:{comment:"Municipality code",start:214,length:3,type:"string",dbType:_sequelize["default"].STRING(3),index:!0},municipalityName:{comment:"Municipality name in Finnish",start:217,length:20,type:"string",dbType:_sequelize["default"].STRING(20),index:!0},municipalityNameSwe:{comment:"Municipality name in Swedish",start:237,length:20,type:"string",dbType:_sequelize["default"].STRING(20),index:!0}}},ZIPCODES:{graphqlQuery:"PostalCode",nameProcessing:global.config.tablePrefix+"temp_"+global.config.tables.postalcodes.name,nameFinished:""+global.config.tablePrefix+global.config.tables.postalcodes.name,deleteOnceComplete:global.config.tables.postalcodes.useTempTable,fields:{id:{type:"integer",index:!1,dbType:{primaryKey:!0,autoIncrement:!0,type:_sequelize["default"].INTEGER}},record:{comment:"Record identifier",start:1,length:5,type:"string",dbType:_sequelize["default"].STRING(5),index:!0},updatedAt:{comment:"Running date",start:6,length:8,type:"YYYYMMDD",dbType:_sequelize["default"].DATEONLY(),index:!0},postalCode:{comment:"Postal code",start:14,length:5,type:"string",dbType:_sequelize["default"].STRING(5),index:!0},postOfficeName:{comment:"Postal code name in Finnish",start:19,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},postOfficeNameSwe:{comment:"Postal code name in Swedish",start:49,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},postOfficeShortName:{comment:"Postal code name abbreviation in Finnish",start:79,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!0},postOfficeShortNameSwe:{comment:"Postal code name abbreviation in Swedish",start:91,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!0},entryIntoForceAt:{comment:"Date of entry into force",start:103,length:8,type:"YYYYMMDD",dbType:_sequelize["default"].DATEONLY(),index:!0},typeCode:{comment:"Type code",extraComment:"1 = Normal postcode\n2 = PO Box postcode\n3 = Corporate postal code\n4 = Compilation postcode\n5 = Reply Mail postcode\n6 = SmartPOST (Parcel machine)\n7 = Pick-up Point postcode\n8 = Technical postcode",// eslint-disable-line
|
|
8
|
-
start:111,length:1,type:"integer",dbType:_sequelize["default"].INTEGER,index:!0},regionId:{comment:"Administrative region code",start:112,length:5,type:"string",dbType:_sequelize["default"].STRING(5),index:!0},regionName:{comment:"Administrative region name in Finnish",start:117,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},regionNameSwe:{comment:"Administrative region name in Swedish",start:147,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},municipalityIdCode:{comment:"Municipality code",start:177,length:3,type:"string",dbType:_sequelize["default"].STRING(3),index:!0},municipalityName:{comment:"Municipality name in Finnish",start:180,length:20,type:"string",dbType:_sequelize["default"].STRING(20),index:!0},municipalityNameSwe:{comment:"Municipality name in Swedish",start:200,length:20,type:"string",dbType:_sequelize["default"].STRING(20),index:!0},municipalityLanguage:{comment:"Municipality language distribution code",extraComment:"1 = Finnish\n2 = Bilingual\n3 = Bilingual\n4 = Swedish",start:220,length:1,type:"integer",dbType:_sequelize["default"].INTEGER,index:!0}}},ZIPCODE_CHANGES:{graphqlQuery:"PostalCodeChange",nameProcessing:global.config.tablePrefix+"temp_"+global.config.tables.postalcode_changes.name,nameFinished:""+global.config.tablePrefix+global.config.tables.postalcode_changes.name,deleteOnceComplete:global.config.tables.postalcode_changes.useTempTable,fields:{id:{type:"integer",index:!1,dbType:{primaryKey:!0,autoIncrement:!0,type:_sequelize["default"].INTEGER}},record:{comment:"Record identifier",start:1,length:4,type:"string",dbType:_sequelize["default"].STRING(4),index:!0},level:{comment:"Level",start:5,length:1,type:"string",dbType:_sequelize["default"].STRING(1),index:!0},updatedAt:{comment:"Running date",start:6,length:8,type:"YYYYMMDD",dbType:_sequelize["default"].DATEONLY(),index:!0},extractionStartAt:{comment:"Extraction start date",start:14,length:8,type:"YYYYMMDD",dbType:_sequelize["default"].DATEONLY(),index:!0},extractionEndAt:{comment:"Extraction end date",start:22,length:8,type:"YYYYMMDD",dbType:_sequelize["default"].DATEONLY(),index:!0},oldPostalCode:{comment:"Old postal code",start:30,length:5,type:"string",dbType:_sequelize["default"].STRING(5),index:!0},oldPostOfficeName:{comment:"Old postal code name in Finnish",start:35,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},oldPostOfficeNameSwe:{comment:"Old postal code name in Swedish",start:65,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},oldPostOfficeShortName:{comment:"Old postal code name abbreviation in Finnish",start:95,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!0},oldPostOfficeShortNameSwe:{comment:"Old postal code name abbreviation in Swedish",start:107,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!0},reserved:{comment:"Reserve",start:119,length:131,type:"string",dbType:_sequelize["default"].STRING(132),index:!1},postalCode:{comment:"New postal code",start:250,length:5,type:"string",dbType:_sequelize["default"].STRING(5),index:!0},postOfficeName:{comment:"New postal code name in Finnish",start:255,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},postOfficeNameSwe:{comment:"New postal code name in Swedish",start:285,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},postOfficeShortName:{comment:"New postal code name abbreviation in Finnish",start:315,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!0},postOfficeShortNameSwe:{comment:"New postal code name abbreviation in Swedish",start:327,length:12,type:"string",dbType:_sequelize["default"].STRING(12),index:!0},municipalityIdCode:{comment:"Municipality code",start:339,length:3,type:"string",dbType:_sequelize["default"].STRING(3),index:!0},municipalityName:{comment:"Municipality name in Finnish",start:342,length:20,type:"string",dbType:_sequelize["default"].STRING(20),index:!0},municipalityNameSwe:{comment:"Municipality name in Swedish",start:362,length:20,type:"string",dbType:_sequelize["default"].STRING(20),index:!0},regionId:{comment:"Administrative region code",start:382,length:2,type:"string",dbType:_sequelize["default"].STRING(2),index:!0},regionName:{comment:"Administrative region name in Finnish",start:384,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},regionNameSwe:{comment:"Administrative region name in Swedish",start:414,length:30,type:"string",dbType:_sequelize["default"].STRING(30),index:!0},changedAt:{comment:"Change date",start:444,length:8,type:"YYYYMMDD",dbType:_sequelize["default"].DATEONLY(),index:!0},eventCode:{comment:"Event code",extraComment:"1 = Change of name\n2 = Postal code closed\n3 = New postal code\n4 = Postal code merged\n5 = Postal code reactivation\n6 = Postal code replaced by new postal code",// eslint-disable-line
|
|
9
|
-
start:452,length:2,type:"integer",dbType:_sequelize["default"].INTEGER,index:!0}}}},this.fileToModel={BAF:"ADDRESSES",PCF:"ZIPCODES",POM:"ZIPCODE_CHANGES"},this.commonTableOptions={freezeTableName:!0,charset:"utf8",dialectOptions:{collate:"utf8_general_ci"}}}/**
|
|
10
|
-
* Get table name.
|
|
11
|
-
*
|
|
12
|
-
* @param {String} tableKey - Table key.
|
|
13
|
-
*
|
|
14
|
-
* @returns {Object} Table name.
|
|
15
|
-
*/,_default=Database;exports["default"]=_default;
|
package/dist/posti.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.promise.js"),require("regenerator-runtime/runtime.js"),require("core-js/modules/es.date.to-string.js"),require("core-js/modules/es.array.map.js");var _utils=require("./utils"),_Posti=_interopRequireDefault(require("./classes/Posti")),_Sequelize=_interopRequireDefault(require("./classes/Sequelize")),_config=_interopRequireDefault(require("./config"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}var gen=fn.apply(self,args);_next(void 0)})}}var started=new Date,configPath=(0,_utils.findDatabaseConfig)();global.config=require(configPath)["default"],global.postiConfig=_config["default"],_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(){var posti,database,files,newFiles;return regeneratorRuntime.wrap(function(_context){for(;;)switch(_context.prev=_context.next){case 0:return _context.prev=0,(0,_utils.logBlock)("Using config from: "+configPath),posti=new _Posti["default"],database=new _Sequelize["default"],global.database=database,_context.next=7,posti.createCacheDir();case 7:return _context.next=9,posti.fecthFileUrls();case 9:return files=_context.sent,_context.next=12,posti.getNewFiles();case 12:if(newFiles=_context.sent,!newFiles.length){_context.next=24;break}return _context.next=16,database.connect();case 16:return _context.next=18,database.createTempTables(newFiles.map(function(file){return file.model}));case 18:return _context.next=20,posti.setNewFiles(newFiles);case 20:return _context.next=22,posti.processFiles(files);case 22:_context.next=25;break;case 24:(0,_utils.logBlock)("No new files to process");case 25:(0,_utils.logFinished)((0,_utils.millisecondsToTime)(new Date-started)),process.exit(0),_context.next=32;break;case 29:_context.prev=29,_context.t0=_context["catch"](0),(0,_utils.throwError)(_context.t0);case 32:case"end":return _context.stop();}},_callee,null,[[0,29]])}))();
|