@fmidev/smartmet-alert-client 4.0.0-beta.7 → 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.
Files changed (50) hide show
  1. package/Jenkinsfile +1 -1
  2. package/README.md +14 -10
  3. package/dist/index.dark.html +5 -0
  4. package/dist/index.html +0 -1
  5. package/dist/index.js +50 -66
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.relative.html +2 -2
  8. package/dist/index.start.html +3 -3
  9. package/package.json +10 -14
  10. package/postcss.config.js +3 -3
  11. package/public/index.dark.html +5 -0
  12. package/public/index.relative.html +2 -2
  13. package/public/index.start.html +3 -3
  14. package/screenshot.png +0 -0
  15. package/src/App.vue +21 -12
  16. package/src/assets/img/warning/forest-fire-weather.svg +2 -2
  17. package/src/assets/img/warning/sea-wave-height.svg +2 -2
  18. package/src/assets/img/warning/sea-wind-legend.svg +3 -4
  19. package/src/assets/img/warning/sea-wind.svg +3 -3
  20. package/src/assets/img/warning/traffic-weather.svg +4 -5
  21. package/src/components/AlertClient.vue +40 -15
  22. package/src/components/DaySmall.vue +128 -20
  23. package/src/components/Days.vue +25 -9
  24. package/src/components/DescriptionWarning.vue +5 -1
  25. package/src/components/GrayScaleToggle.vue +10 -0
  26. package/src/components/Legend.vue +48 -10
  27. package/src/components/MapLarge.vue +143 -27
  28. package/src/components/MapSmall.vue +10 -10
  29. package/src/components/PopupRow.vue +1 -1
  30. package/src/components/Region.vue +32 -7
  31. package/src/components/Warning.vue +31 -2
  32. package/src/components/Warnings.vue +40 -12
  33. package/src/locales/en.json +178 -178
  34. package/src/locales/fi.json +178 -178
  35. package/src/locales/sv.json +2 -2
  36. package/src/main.js +16 -20
  37. package/src/mixins/config.js +30 -49
  38. package/src/mixins/utils.js +10 -2
  39. package/src/scss/colors.scss +6 -6
  40. package/src/scss/constants.scss +7 -5
  41. package/src/scss/themes/dark-gray.scss +34 -0
  42. package/src/scss/themes/dark.scss +1 -5
  43. package/src/scss/themes/light-gray.scss +33 -34
  44. package/src/scss/themes/light.scss +6 -8
  45. package/src/scss/warningImages.scss +76 -29
  46. package/test/snapshot.test.js +20 -112
  47. package/vite.config.js +4 -2
  48. package/.nvmrc +0 -1
  49. package/Jenkinsfile.beta +0 -111
  50. package/ssr/index.mjs +0 -40
@@ -1,118 +1,26 @@
1
- import fs, { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'
2
- import { JSDOM } from 'jsdom'
3
- import path from 'path'
4
- import { expect, it } from 'vitest'
5
- import Vue from 'vue'
6
- import { createRenderer } from 'vue-server-renderer'
7
- import format from 'xml-formatter'
8
- import XMLHttpRequest from 'xmlhttprequest-ssl'
1
+ var fs = require('fs-extra');
2
+ const { chromium } = require("playwright");
3
+ const timers = require("node:timers/promises");
9
4
 
10
- import SmartMetAlertClient from '../dist/SmartMetAlertClient.umd'
5
+ let browser = null;
6
+ const url = "";
11
7
 
12
- global.XMLHttpRequest = XMLHttpRequest
8
+ (async () => {
9
+ browser = await chromium.launch();
10
+ let page = await browser.newPage();
11
+ await page.setViewportSize({ width: 1280, height: 1000 });
12
+ await page.goto(url);
13
13
 
14
- const svgPath = './test/svg'
15
- if (!existsSync(svgPath)) {
16
- mkdirSync(svgPath)
17
- }
14
+ await timers.setTimeout(5000);
15
+ await page.screenshot({ path: `./pic-${(new Date()).toISOString()}.png` });
18
16
 
19
- const dateTimes = new Set()
17
+ const html = await page.content()
18
+ const result = await page.locator("svg#finland-large");
19
+ const text = await result.evaluate((el) => el.outerHTML);
20
20
 
21
- const getAllDateTimes = function (dirPath) {
22
- const files = fs.readdirSync(dirPath)
23
- files.forEach(function (file) {
24
- if (fs.statSync(dirPath + '/' + file).isDirectory()) {
25
- getAllDateTimes(dirPath + '/' + file)
26
- } else {
27
- const parts = file.split('-')
28
- if (parts.length > 0 && parts[0].length === 14) {
29
- dateTimes.add(parts[0])
30
- }
31
- }
32
- })
33
- }
21
+ await result.screenshot({ path: `./map-${(new Date()).toISOString()}.png` });
22
+
23
+ console.log(text);
34
24
 
35
- getAllDateTimes(import.meta.env.VITE_DATA_DIRECTORY)
36
-
37
- const data = Array.from(dateTimes)
38
- .sort()
39
- .map((dateTime) => {
40
- const basePath =
41
- import.meta.env.VITE_DATA_DIRECTORY +
42
- path.sep +
43
- dateTime.substr(0, 4) +
44
- path.sep +
45
- dateTime.substr(4, 2) +
46
- path.sep +
47
- dateTime.substr(6, 2) +
48
- path.sep +
49
- dateTime +
50
- '-'
51
-
52
- return {
53
- dateTime,
54
- weatherUpdateTime: `${basePath}weather_update_time.json`,
55
- floodUpdateTime: `${basePath}flood_update_time.json`,
56
- weatherFinlandActiveAll: `${basePath}weather_finland_active_all.json`,
57
- floodFinlandActiveAll: `${basePath}flood_finland_active_all.fi.json`,
58
- }
59
- })
60
-
61
- for (let i = 0; i < data.length; i++) {
62
- const weatherUpdateTime = JSON.parse(
63
- readFileSync(data[i].weatherUpdateTime, 'utf8')
64
- )
65
-
66
- const floodUpdateTime = JSON.parse(
67
- readFileSync(data[i].floodUpdateTime, 'utf8')
68
- )
69
-
70
- const weatherFinlandActiveAll = JSON.parse(
71
- readFileSync(data[i].weatherFinlandActiveAll, 'utf8')
72
- )
73
-
74
- const floodFinlandActiveAll = JSON.parse(
75
- readFileSync(data[i].floodFinlandActiveAll, 'utf8')
76
- )
77
-
78
- const renderer = createRenderer({
79
- template: (result) => `<!DOCTYPE html>
80
- <html lang="en">
81
- <head><link rel="stylesheet" href="./dist/SmartMetAlertClient.css"></head>
82
- <body>${result}</body>
83
- </html>
84
- `,
85
- })
86
-
87
- it(`renders warning map ${data[i].dateTime}`, async () => {
88
- const vm = new Vue({
89
- el: '#app',
90
- render(h) {
91
- return h(SmartMetAlertClient, {
92
- props: {
93
- language: 'fi',
94
- currentDate: [
95
- weatherUpdateTime.features[0].properties.update_time,
96
- floodUpdateTime.features[0].properties.update_time,
97
- ]
98
- .sort()
99
- .reverse()[0],
100
- warnings: {
101
- weather_update_time: weatherUpdateTime,
102
- weather_finland_active_all: weatherFinlandActiveAll,
103
- flood_update_time: floodUpdateTime,
104
- flood_finland_active_all: floodFinlandActiveAll,
105
- },
106
- },
107
- })
108
- },
109
- })
110
-
111
- const html = await renderer.renderToString(vm)
112
- const dom = new JSDOM(html)
113
- const element = dom.window.document.getElementById('finland-large')
114
- const svg = format(element.outerHTML)
115
- writeFileSync(path.join(svgPath, `${data[i].dateTime}.svg`), svg)
116
- expect(svg).toMatchSnapshot()
117
- })
118
- }
25
+ await browser.close();
26
+ })();
package/vite.config.js CHANGED
@@ -1,11 +1,12 @@
1
1
  // vite.config.js
2
2
  import vue from '@vitejs/plugin-vue'
3
- import path from 'path'
3
+ import { fileURLToPath, URL } from 'node:url'
4
4
  import { visualizer } from 'rollup-plugin-visualizer'
5
5
  import { BootstrapVueNextResolver } from 'unplugin-vue-components/resolvers'
6
6
  import Components from 'unplugin-vue-components/vite'
7
7
  import { defineConfig } from 'vite'
8
8
  import banner from 'vite-plugin-banner'
9
+ import { vueAdoptedStylesheetsPlugin } from 'vue-adopted-stylesheets'
9
10
 
10
11
  import pkg from './package.json'
11
12
 
@@ -18,6 +19,7 @@ export default defineConfig({
18
19
  Components({
19
20
  resolvers: [BootstrapVueNextResolver()],
20
21
  }),
22
+ vueAdoptedStylesheetsPlugin(),
21
23
  banner(
22
24
  `/**\n * name: ${pkg.name}\n * version: v${pkg.version}\n * description: ${pkg.description}\n * author: ${pkg.author}\n * homepage: ${pkg.homepage}\n */`
23
25
  ),
@@ -25,7 +27,7 @@ export default defineConfig({
25
27
  ],
26
28
  resolve: {
27
29
  alias: {
28
- '@': path.resolve(__dirname, './src'),
30
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
29
31
  },
30
32
  },
31
33
  build: {
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- v14
package/Jenkinsfile.beta DELETED
@@ -1,111 +0,0 @@
1
- #!groovy
2
-
3
- def packageVersion = "undefined"
4
- def deployUserAndHost = "${params.deployUserAndHost}"
5
- def deployBaseDirectory = "${params.deployBaseDirectory}"
6
- def buildNode = "${params.buildNode}"
7
-
8
- pipeline {
9
-
10
- agent {
11
- node {
12
- label "${buildNode}"
13
- }
14
- }
15
-
16
- tools {
17
- nodejs 'nodejs-18'
18
- }
19
-
20
- options {
21
- disableConcurrentBuilds()
22
- buildDiscarder(logRotator(numToKeepStr: '3'))
23
- }
24
-
25
- stages {
26
- stage('Configure http proxy') {
27
- when { expression { env.HTTP_PROXY != '' } }
28
- steps {
29
- sh "npm config set proxy ${env.HTTP_PROXY}"
30
- }
31
- }
32
-
33
- stage('Configure https proxy') {
34
- when { expression { env.HTTPS_PROXY != '' } }
35
- steps {
36
- sh "npm config set https-proxy ${env.HTTPS_PROXY}"
37
- }
38
- }
39
-
40
- stage('Install') {
41
- steps {
42
- sh "env"
43
- sh "npm --version"
44
- sh "node --version"
45
- sh "rm --recursive --force node_modules"
46
- sh "npm install"
47
- }
48
- }
49
-
50
- stage('Build') {
51
- steps {
52
- sh "npm run build"
53
- }
54
- }
55
-
56
- stage('Test') {
57
- steps {
58
- sh "docker stop docker_chromium_1 || true && docker rm docker_chromium_1 || true"
59
- sh "npm test || echo \"Some or all tests failed\""
60
- }
61
- }
62
-
63
- stage('Determine version from package.json') {
64
- steps {
65
- script {
66
- packageVersion = sh(returnStdout: true, script: 'jq --raw-output .version package.json').trim()
67
- }
68
- }
69
- }
70
-
71
- stage('Require unique deploy directory') {
72
- steps {
73
- sh "ssh ${deployUserAndHost} \"if [ -d ${deployBaseDirectory}/${packageVersion} ]; then echo deploy directory already exists; exit 1; fi\""
74
- }
75
- }
76
-
77
- stage('Deploy') {
78
- steps {
79
- sh "chmod --verbose --recursive u+r+w+X,g+r-w+X,o-r-w-x dist/"
80
- sh "ssh ${deployUserAndHost} \"mkdir --parents --mode=750 ${deployBaseDirectory}/${packageVersion}\""
81
- sh "scp -rp dist/* ${deployUserAndHost}:${deployBaseDirectory}/${packageVersion}/"
82
- }
83
- }
84
-
85
- stage('Publish package to npmjs.com') {
86
- environment {
87
- NPM_TOKEN = credentials('npm-token')
88
- }
89
- steps {
90
- sh 'echo //registry.npmjs.org/:_authToken=$NPM_TOKEN > .npmrc'
91
- sh 'npm publish'
92
- sh 'rm .npmrc'
93
- }
94
- }
95
- }
96
-
97
- post {
98
- success {
99
- slackSend(message: "Success ${env.JOB_NAME} ${packageVersion} (<${env.BUILD_URL}|Open>)")
100
- }
101
- unstable {
102
- slackSend(message: "Unstable ${env.JOB_NAME} ${packageVersion} (<${env.BUILD_URL}|Open>)")
103
- }
104
- failure {
105
- slackSend(message: "Failure ${env.JOB_NAME} ${packageVersion} (<${env.BUILD_URL}|Open>)")
106
- }
107
- changed {
108
- slackSend(message: "Changed ${env.JOB_NAME} ${packageVersion} (<${env.BUILD_URL}|Open>)")
109
- }
110
- }
111
- }
package/ssr/index.mjs DELETED
@@ -1,40 +0,0 @@
1
- import fs from 'fs'
2
- import Vue from 'vue'
3
- import { createRenderer } from 'vue-server-renderer'
4
- import XMLHttpRequest from 'xmlhttprequest-ssl'
5
-
6
- import SmartMetAlertClient from '../dist/SmartMetAlertClient.umd'
7
-
8
- global.XMLHttpRequest = XMLHttpRequest
9
-
10
- const renderer = createRenderer({
11
- template: (result) => `<!DOCTYPE html>
12
- <html lang="en">
13
- <head><link rel="stylesheet" href="./dist/SmartMetAlertClient.css"></head>
14
- <body>${result}</body>
15
- </html>
16
- `,
17
- })
18
- const vm = new Vue({
19
- el: '#app',
20
- render(h) {
21
- return h(SmartMetAlertClient, {
22
- props: {
23
- language: 'fi',
24
- },
25
- })
26
- },
27
- })
28
-
29
- renderer
30
- .renderToString(vm)
31
- .then((html) => {
32
- fs.writeFile('out.html', html, (err) => {
33
- if (err) {
34
- return console.error(err)
35
- }
36
- })
37
- })
38
- .catch((err) => {
39
- console.error(err)
40
- })