@things-factory/shell 7.0.1-alpha.10 → 7.0.1-alpha.100

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.
@@ -10,7 +10,7 @@ exports.roundTransformer = {
10
10
  * @param {number | null} value - Floating point value to round or null
11
11
  * @returns {number | null} - Rounded number or null
12
12
  */
13
- to: (value) => (value !== null && !isNaN(value) ? Math.round(value * 100) / 100 : null),
13
+ to: (value) => (value !== null && !isNaN(value) ? Math.round(value * 10000) / 10000 : undefined),
14
14
  /**
15
15
  * Returns the entity field value as it is without any transformation when reading from the database.
16
16
  * @param {number} value - Number value read from the database
@@ -1 +1 @@
1
- {"version":3,"file":"round-transform.js","sourceRoot":"","sources":["../../server/typeorm/round-transform.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACU,QAAA,gBAAgB,GAAqB;IAChD;;;;OAIG;IACH,EAAE,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtG;;;;OAIG;IACH,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK;CAC/B,CAAA","sourcesContent":["import { ValueTransformer } from 'typeorm'\n\n/**\n * ValueTransformer object for rounding floating point values.\n */\nexport const roundTransformer: ValueTransformer = {\n /**\n * Rounds the entity field value before storing it in the database.\n * @param {number | null} value - Floating point value to round or null\n * @returns {number | null} - Rounded number or null\n */\n to: (value: number | null) => (value !== null && !isNaN(value) ? Math.round(value * 100) / 100 : null),\n\n /**\n * Returns the entity field value as it is without any transformation when reading from the database.\n * @param {number} value - Number value read from the database\n * @returns {number} - The number value as is\n */\n from: (value: number) => value\n}\n"]}
1
+ {"version":3,"file":"round-transform.js","sourceRoot":"","sources":["../../server/typeorm/round-transform.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACU,QAAA,gBAAgB,GAAqB;IAChD;;;;OAIG;IACH,EAAE,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/G;;;;OAIG;IACH,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK;CAC/B,CAAA","sourcesContent":["import { ValueTransformer } from 'typeorm'\n\n/**\n * ValueTransformer object for rounding floating point values.\n */\nexport const roundTransformer: ValueTransformer = {\n /**\n * Rounds the entity field value before storing it in the database.\n * @param {number | null} value - Floating point value to round or null\n * @returns {number | null} - Rounded number or null\n */\n to: (value: number | null) => (value !== null && !isNaN(value) ? Math.round(value * 10000) / 10000 : undefined),\n\n /**\n * Returns the entity field value as it is without any transformation when reading from the database.\n * @param {number} value - Number value read from the database\n * @returns {number} - The number value as is\n */\n from: (value: number) => value\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/shell",
3
- "version": "7.0.1-alpha.10",
3
+ "version": "7.0.1-alpha.100",
4
4
  "description": "Core module for framework",
5
5
  "bin": {
6
6
  "things-factory": "bin/things-factory",
@@ -46,12 +46,11 @@
46
46
  "@koa/cors": "^5.0.0",
47
47
  "@material-design-icons/font": "^0.14.9",
48
48
  "@material/mwc-button": "^0.27.0",
49
- "@material/mwc-fab": "^0.27.0",
50
49
  "@material/mwc-icon": "^0.27.0",
51
50
  "@material/mwc-icon-button": "^0.27.0",
52
51
  "@material/mwc-slider": "^0.27.0",
53
52
  "@material/mwc-textfield": "^0.27.0",
54
- "@material/web": "^1.1.1",
53
+ "@material/web": "^1.4.0",
55
54
  "@open-wc/scoped-elements": "^2.1.3",
56
55
  "@operato/board": "^2.0.0-alpha.0",
57
56
  "@operato/graphql": "^2.0.0-alpha.0",
@@ -60,11 +59,12 @@
60
59
  "@operato/shell": "^2.0.0-alpha.0",
61
60
  "@operato/typeorm-history": "^2.0.0-alpha.0",
62
61
  "@operato/utils": "^2.0.0-alpha.0",
63
- "@things-factory/ejs-remote": "^7.0.1-alpha.0",
64
- "@things-factory/env": "^7.0.1-alpha.0",
62
+ "@things-factory/ejs-remote": "^7.0.1-alpha.71",
63
+ "@things-factory/env": "^7.0.1-alpha.71",
65
64
  "@things-factory/operato-license-checker": "^4.0.4",
66
- "@things-factory/styles": "^7.0.1-alpha.4",
67
- "@things-factory/utils": "^7.0.1-alpha.4",
65
+ "@things-factory/styles": "^7.0.1-alpha.71",
66
+ "@things-factory/utils": "^7.0.1-alpha.71",
67
+ "@webcomponents/scoped-custom-element-registry": "^0.0.9",
68
68
  "@webcomponents/webcomponentsjs": "^2.6.0",
69
69
  "args": "^5.0.0",
70
70
  "broadcastchannel-polyfill": "^1.0.1",
@@ -101,6 +101,7 @@
101
101
  "loader-utils": "^2.0.0",
102
102
  "lodash": "^4.17.21",
103
103
  "lodash-es": "^4.17.21",
104
+ "material-symbols": "^0.17.2",
104
105
  "mkdirp": "^1.0.4",
105
106
  "moment-timezone": "^0.5.43",
106
107
  "mqtt": "^4.3.4",
@@ -133,5 +134,5 @@
133
134
  "pg": "^8.7.3",
134
135
  "sqlite3": "^5.0.8"
135
136
  },
136
- "gitHead": "5adeb2a190f3c6eb5c5cbceac181a3d19fefda9b"
137
+ "gitHead": "f5062c5559383d06fc8f9f870b56163952557c70"
137
138
  }
@@ -20,7 +20,6 @@ import { useServer } from 'graphql-ws/lib/use/ws'
20
20
  import { createServer } from 'http'
21
21
  import Koa from 'koa'
22
22
  import koaBodyParser from 'koa-bodyparser'
23
- import koaStatic from 'koa-static'
24
23
  import compose from 'koa-compose'
25
24
  import { historyApiFallback } from 'koa2-connect-history-api-fallback'
26
25
  import { WebSocketServer } from 'ws'
@@ -34,7 +33,13 @@ import { initLicense, checkValidity } from '@things-factory/operato-license-chec
34
33
 
35
34
  import { GraphqlLocalClient } from './graphql-local-client'
36
35
  import { databaseInitializer } from './initializers/database'
37
- import { domainPrivateRouter, domainPublicRouter, globalPrivateRouter, globalPublicRouter, graphqlRouter } from './routers'
36
+ import {
37
+ domainPrivateRouter,
38
+ domainPublicRouter,
39
+ globalPrivateRouter,
40
+ globalPublicRouter,
41
+ graphqlRouter
42
+ } from './routers'
38
43
  import { schema } from './schema'
39
44
  import { Domain } from './service'
40
45
  import { EntityManager } from 'typeorm'
@@ -59,7 +64,6 @@ args.option('webpack', 'webpack configuration file', config.get('webpack'))
59
64
 
60
65
  const flags = args.parse(process.argv)
61
66
 
62
- const path = require('path')
63
67
  const webpack = require('webpack')
64
68
  const webpackConfig = require(flags.webpack || '@things-factory/builder/webpack.config.dev.js')
65
69
 
@@ -99,6 +103,7 @@ const bootstrap = async () => {
99
103
  await databaseInitializer()
100
104
 
101
105
  const app = new Koa<ICustomAppState, ICustomAppContext>() as any
106
+ app.proxy = true
102
107
 
103
108
  app.use(
104
109
  cors({
@@ -269,17 +274,11 @@ const bootstrap = async () => {
269
274
  app.use(graphqlRouter.routes())
270
275
  app.use(graphqlRouter.allowedMethods())
271
276
 
272
- /* should follow this order : history-fallback => webpack-middleware => koaStatic */
277
+ /* should follow this order : history-fallback => webpack-middleware */
273
278
  app.use(historyApiFallback({ whiteList: [] }))
274
279
 
275
280
  app.use(middleware)
276
281
 
277
- app.use(
278
- koaStatic(compiler.outputPath, {
279
- index: false
280
- })
281
- )
282
-
283
282
  httpServer.listen({ port: PORT }, () => {
284
283
  logger.info(`🚀 Server ready at http://0.0.0.0:${PORT}/graphql`)
285
284
  logger.info(`🚀 Subscriptions ready at ws://0.0.0.0:${PORT}/graphql`)
package/server/server.ts CHANGED
@@ -33,7 +33,13 @@ import { initLicense, checkValidity } from '@things-factory/operato-license-chec
33
33
 
34
34
  import { GraphqlLocalClient } from './graphql-local-client'
35
35
  import { databaseInitializer } from './initializers/database'
36
- import { domainPrivateRouter, domainPublicRouter, globalPrivateRouter, globalPublicRouter, graphqlRouter } from './routers'
36
+ import {
37
+ domainPrivateRouter,
38
+ domainPublicRouter,
39
+ globalPrivateRouter,
40
+ globalPublicRouter,
41
+ graphqlRouter
42
+ } from './routers'
37
43
  import { schema } from './schema'
38
44
  import { domainMiddleware } from './middlewares'
39
45
 
@@ -74,6 +80,7 @@ const bootstrap = async () => {
74
80
  await databaseInitializer()
75
81
 
76
82
  const app = new Koa() as any
83
+ app.proxy = true
77
84
 
78
85
  app.use(
79
86
  cors({
@@ -29,5 +29,6 @@
29
29
  "text.nothing_changed": "nothing changed",
30
30
  "text.nothing_selected": "nothing selected",
31
31
  "text.there_is_nothing_to_delete": "there is nothing to delete",
32
- "text.there_is_nothing_to_save": "there is nothing to save"
32
+ "text.there_is_nothing_to_save": "there is nothing to save",
33
+ "text.column visibility setting": "column visibility"
33
34
  }
@@ -28,5 +28,6 @@
28
28
  "text.nothing_changed": "変更なし",
29
29
  "text.nothing_selected": "選択されていない",
30
30
  "text.there_is_nothing_to_delete": "削除するデータがありません.",
31
- "text.there_is_nothing_to_save": "保存するデータがありません."
31
+ "text.there_is_nothing_to_save": "保存するデータがありません.",
32
+ "text.column visibility setting": "カラムの表示設定"
32
33
  }
@@ -28,5 +28,6 @@
28
28
  "text.nothing_changed": "변경사항 없음",
29
29
  "text.nothing_selected": "선택되지 않음",
30
30
  "text.there_is_nothing_to_delete": "삭제할 데이터가 없습니다.",
31
- "text.there_is_nothing_to_save": "저장할 데이터가 없습니다."
31
+ "text.there_is_nothing_to_save": "저장할 데이터가 없습니다.",
32
+ "text.column visibility setting": "컬럼 보이기"
32
33
  }
@@ -28,5 +28,6 @@
28
28
  "text.nothing_changed": "nothing changed",
29
29
  "text.nothing_selected": "nothing selected",
30
30
  "text.there_is_nothing_to_delete": "there is nothing to delete",
31
- "text.there_is_nothing_to_save": "there is nothing to save"
31
+ "text.there_is_nothing_to_save": "there is nothing to save",
32
+ "text.column visibility setting": "tetapan kebolehlihatan kolum"
32
33
  }
@@ -28,5 +28,6 @@
28
28
  "text.nothing_changed": "无更改",
29
29
  "text.nothing_selected": "未选择",
30
30
  "text.there_is_nothing_to_delete": "没有要删除的数据。",
31
- "text.there_is_nothing_to_save": "没有要保存的数据。"
31
+ "text.there_is_nothing_to_save": "没有要保存的数据。",
32
+ "text.column visibility setting": "列显示"
32
33
  }
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
@@ -52,6 +52,8 @@
52
52
  <!-- Performance tip: hint to the browser to start the handshake for the fonts site -->
53
53
  <link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />
54
54
  <link href="/node_modules/@material-design-icons/font/index.css" rel="stylesheet" />
55
+ <link href="/node_modules/material-symbols/index.css" rel="stylesheet" />
56
+ <link href="/node_modules/@fontsource/roboto/index.css" rel="stylesheet" />
55
57
  <link rel="stylesheet" href="/theme.css" />
56
58
 
57
59
  <style>
@@ -81,7 +83,7 @@
81
83
  <link rel="prefetch" href="/public/home.js" />
82
84
  </head>
83
85
 
84
- <body>
86
+ <body class="light">
85
87
  <home-page id="page"></home-page>
86
88
  <noscript> Please enable JavaScript to view this website. </noscript>
87
89
  <!-- Load webcomponents-loader.js to check and load any polyfills your browser needs -->
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
@@ -15,7 +15,7 @@
15
15
  </style>
16
16
  </head>
17
17
 
18
- <body>
18
+ <body class="light">
19
19
  <%- body %>
20
20
  </body>
21
21
  </html>
@@ -1,3 +0,0 @@
1
- export * from './oops-note'
2
- export * from './oops-spinner'
3
- export * from './oops-progress'
@@ -1,49 +0,0 @@
1
- import { LitElement, html, css } from 'lit'
2
-
3
- import '@material/mwc-icon'
4
-
5
- export class OopsNote extends LitElement {
6
- static get styles() {
7
- return css`
8
- :host {
9
- display: block;
10
- text-align: center;
11
- }
12
- mwc-icon {
13
- font: var(--oops-note-icon-font);
14
- color: var(--oops-note-icon-color);
15
- border: var(--oops-note-icon-border);
16
- border-radius: var(--oops-note-icon-border-radius);
17
- padding: var(--oops-note-icon-padding);
18
- }
19
- [title] {
20
- margin: var(--oops-note-title-margin);
21
- font: var(--oops-note-title-font);
22
- color: var(--oops-note-title-color);
23
- text-transform: capitalize;
24
- }
25
- [description] {
26
- font: var(--oops-note-description-font);
27
- color: var(--oops-note-description-color);
28
- }
29
- `
30
- }
31
-
32
- static get properties() {
33
- return {
34
- icon: String,
35
- title: String,
36
- description: String
37
- }
38
- }
39
-
40
- render() {
41
- return html`
42
- <mwc-icon>${this.icon}</mwc-icon>
43
- <div title>${this.title}</div>
44
- <div description>${this.description}</div>
45
- `
46
- }
47
- }
48
-
49
- customElements.define('oops-note', OopsNote)
@@ -1,81 +0,0 @@
1
- import gql from 'graphql-tag'
2
- import { html, LitElement } from 'lit'
3
-
4
- import { subscribe } from '@operato/graphql'
5
-
6
- export class OopsProgress extends LitElement {
7
- static get properties() {
8
- return {
9
- tag: String,
10
- subscription: Boolean
11
- }
12
- }
13
-
14
- render() {
15
- return html` <slot></slot> `
16
- }
17
-
18
- disconnectedCallback() {
19
- super.disconnectedCallback()
20
- this.stopSubscribe()
21
- }
22
-
23
- get subscription() {
24
- return this._subscription
25
- }
26
-
27
- set subscription(subscription) {
28
- console.warn('oops-progress#subscription is readonly property')
29
- }
30
-
31
- async updated(changes) {
32
- if (changes.has('tag') && this.subscription) {
33
- await this.stopSubscribe()
34
- }
35
- }
36
-
37
- async startSubscribe() {
38
- if (!this.tag || this._subscription) {
39
- return
40
- }
41
-
42
- this._subscription = await subscribe(
43
- {
44
- query: gql`
45
- subscription {
46
- data(tag: "${this.tag}") {
47
- tag
48
- data
49
- }
50
- }`
51
- },
52
- {
53
- next: async ({ data }) => {
54
- if (data) {
55
- const { progress = 0, message = '' } = data?.data?.data || {}
56
- this.dispatchEvent(
57
- new CustomEvent('progress', {
58
- detail: {
59
- progress,
60
- message
61
- }
62
- })
63
- )
64
-
65
- if (progress >= 100) {
66
- await this.stopSubscribe()
67
- this.dispatchEvent(new CustomEvent('finish'))
68
- }
69
- }
70
- }
71
- }
72
- )
73
- }
74
-
75
- async stopSubscribe() {
76
- await this._subscription?.unsubscribe()
77
- delete this._subscription
78
- }
79
- }
80
-
81
- customElements.define('oops-progress', OopsProgress)
@@ -1,31 +0,0 @@
1
- import { LitElement, html, css } from 'lit'
2
-
3
- export class OopsSpinner extends LitElement {
4
- static get styles() {
5
- return css`
6
- :host {
7
- width: 70px;
8
- height: 70px;
9
- margin: 0 auto;
10
- background: url(/assets/images/spinner.png) 0 0 no-repeat;
11
- background-size: 700%;
12
- animation: spinner steps(6) 2s infinite both;
13
- }
14
-
15
- @keyframes spinner {
16
- 0% {
17
- background-position: 0%;
18
- }
19
- 100% {
20
- background-position: 100%;
21
- }
22
- }
23
- `
24
- }
25
-
26
- render() {
27
- return html``
28
- }
29
- }
30
-
31
- customElements.define('oops-spinner', OopsSpinner)