@things-factory/shell 7.0.0-alpha.8 → 7.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/_index.html +8 -3
- package/client/entries/public/home.js +5 -6
- package/client/index.js +1 -6
- package/client/route.js +11 -0
- package/client/serviceworker/sw-src.js +2 -2
- package/client/store.js +3 -3
- package/client/themes/app-theme.css +53 -60
- package/client/themes/calendar-theme.css +59 -0
- package/client/themes/dark.css +51 -0
- package/client/themes/grist-theme.css +175 -0
- package/client/themes/layout-theme.css +15 -13
- package/client/themes/light.css +51 -0
- package/client/themes/material-theme.css +23 -0
- package/client/themes/md-typescale-styles.css +100 -0
- package/client/themes/oops-theme.css +6 -6
- package/client/themes/report-theme.css +47 -0
- package/client/themes/spacing.css +23 -0
- package/client/themes/state-color.css +6 -0
- package/config/config.development.js +2 -1
- package/config/license.json +5 -5
- package/dist-server/graphql-local-client.js +3 -3
- package/dist-server/graphql-local-client.js.map +1 -1
- package/dist-server/index.d.ts +1 -0
- package/dist-server/index.js +1 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/initializers/database.js +6 -6
- package/dist-server/initializers/database.js.map +1 -1
- package/dist-server/middlewares/domain-middleware.js +1 -2
- package/dist-server/middlewares/domain-middleware.js.map +1 -1
- package/dist-server/middlewares/index.js +1 -2
- package/dist-server/middlewares/index.js.map +1 -1
- package/dist-server/pubsub.js +1 -2
- package/dist-server/pubsub.js.map +1 -1
- package/dist-server/routers/global-router.js.map +1 -1
- package/dist-server/schema.js +1 -2
- package/dist-server/schema.js.map +1 -1
- package/dist-server/server-dev.js +3 -7
- package/dist-server/server-dev.js.map +1 -1
- package/dist-server/server.js +2 -1
- package/dist-server/server.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set-item-type.js +5 -5
- package/dist-server/service/attribute-set/attribute-set-item-type.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set-mutation.js +2 -2
- package/dist-server/service/attribute-set/attribute-set-mutation.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set-query.js +3 -3
- package/dist-server/service/attribute-set/attribute-set-query.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set-type.js +6 -6
- package/dist-server/service/attribute-set/attribute-set-type.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set.js +2 -2
- package/dist-server/service/attribute-set/attribute-set.js.map +1 -1
- package/dist-server/service/common-types/list-param.js +9 -9
- package/dist-server/service/common-types/list-param.js.map +1 -1
- package/dist-server/service/common-types/log.js +2 -2
- package/dist-server/service/common-types/log.js.map +1 -1
- package/dist-server/service/common-types/object-ref.js +2 -2
- package/dist-server/service/common-types/object-ref.js.map +1 -1
- package/dist-server/service/common-types/scalar-any.js.map +1 -1
- package/dist-server/service/common-types/scalar-date.js.map +1 -1
- package/dist-server/service/directive-transaction/transaction.js.map +1 -1
- package/dist-server/service/domain/{domain-Mutation.js → domain-mutation.js} +3 -3
- package/dist-server/service/domain/domain-mutation.js.map +1 -0
- package/dist-server/service/domain/domain-query.js +3 -3
- package/dist-server/service/domain/domain-query.js.map +1 -1
- package/dist-server/service/domain/domain-types.js +6 -6
- package/dist-server/service/domain/domain-types.js.map +1 -1
- package/dist-server/service/domain/domain.js +6 -7
- package/dist-server/service/domain/domain.js.map +1 -1
- package/dist-server/service/domain/index.d.ts +1 -1
- package/dist-server/service/domain/index.js +2 -2
- package/dist-server/service/domain/index.js.map +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/service/subscription-data/data-resolver.js +2 -2
- package/dist-server/service/subscription-data/data-resolver.js.map +1 -1
- package/dist-server/service/subscription-data/data-types.js +2 -2
- package/dist-server/service/subscription-data/data-types.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/typeorm/encrypt-transform.js +1 -1
- package/dist-server/typeorm/encrypt-transform.js.map +1 -1
- package/dist-server/typeorm/get-data-encryption-key.js.map +1 -1
- package/dist-server/typeorm/json5-transform.js.map +1 -1
- package/dist-server/typeorm/round-transform.d.ts +5 -0
- package/dist-server/typeorm/round-transform.js +21 -0
- package/dist-server/typeorm/round-transform.js.map +1 -0
- package/dist-server/utils/condition-builder.js.map +1 -1
- package/dist-server/utils/get-domain.d.ts +0 -1
- package/dist-server/utils/get-domain.js +7 -8
- package/dist-server/utils/get-domain.js.map +1 -1
- package/dist-server/utils/get-query-builder-from-list-params.js +1 -2
- package/dist-server/utils/get-query-builder-from-list-params.js.map +1 -1
- package/dist-server/utils/get-times-for-period.js +2 -3
- package/dist-server/utils/get-times-for-period.js.map +1 -1
- package/dist-server/utils/list-param-adjuster.js +1 -2
- package/dist-server/utils/list-param-adjuster.js.map +1 -1
- package/dist-server/utils/list-params-converter.js +1 -2
- package/dist-server/utils/list-params-converter.js.map +1 -1
- package/dist-server/utils/list-query-builder.js.map +1 -1
- package/dist-server/utils/publish-progress.js +1 -2
- package/dist-server/utils/publish-progress.js.map +1 -1
- package/helps/config/fileUpload.ja.md +24 -0
- package/helps/config/fileUpload.ko.md +22 -0
- package/helps/config/fileUpload.md +24 -0
- package/helps/config/fileUpload.ms.md +24 -0
- package/helps/config/fileUpload.zh.md +21 -0
- package/package.json +27 -27
- package/server/graphql-local-client.ts +4 -4
- package/server/index.ts +2 -0
- package/server/pubsub.ts +1 -1
- package/server/server-dev.ts +10 -11
- package/server/server.ts +9 -2
- package/server/service/attribute-set/attribute-set-query.ts +1 -1
- package/server/service/domain/domain-query.ts +1 -1
- package/server/service/domain/index.ts +1 -1
- package/server/typeorm/round-transform.ts +20 -0
- package/translations/en.json +2 -1
- package/translations/ja.json +2 -1
- package/translations/ko.json +2 -1
- package/translations/ms.json +2 -1
- package/translations/zh.json +2 -1
- package/views/public/home.html +6 -3
- package/views/template.html +2 -2
- package/client/elements/custom-alert.js +0 -120
- package/client/elements/index.js +0 -4
- package/client/elements/oops-note.js +0 -49
- package/client/elements/oops-progress.js +0 -81
- package/client/elements/oops-spinner.js +0 -31
- package/dist-server/service/domain/domain-Mutation.js.map +0 -1
- package/helps/components/oops-progress.md +0 -73
- /package/dist-server/service/domain/{domain-Mutation.d.ts → domain-mutation.d.ts} +0 -0
@@ -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)
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"domain-Mutation.js","sourceRoot":"","sources":["../../../server/service/domain/domain-Mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, Mutation, Query, Resolver, Root } from 'type-graphql'\nimport { In, Repository } from 'typeorm'\n\nimport { slugger } from '@things-factory/utils'\n\nimport { getRepository } from '../../initializers/database'\n\nimport { Domain, IPList } from './domain'\nimport { DomainPatch } from './domain-types'\nimport { ScalarObject } from '../common-types'\n\n@Resolver(Domain)\nexport class DomainMutation {\n @Directive('@transaction')\n @Directive('@privilege(superUserGranted: true)')\n @Mutation(returns => Domain, { description: 'To create domain (Only superuser is granted this privilege.)' })\n async createDomain(@Arg('domainInput') domainInput: DomainPatch) {\n const { name, description } = domainInput\n const domainRepo: Repository<Domain> = getRepository(Domain)\n const subdomain: string = slugger(name)\n\n const domain: Domain = await domainRepo.findOneBy({ subdomain })\n if (domain) {\n throw new Error('domain is duplicated')\n }\n\n return await domainRepo.save({ name, description, subdomain })\n }\n\n @Directive('@transaction')\n @Directive('@privilege(superUserGranted: true)')\n @Mutation(returns => Domain, { description: 'To delete domain (Only superuser is granted this privilege.)' })\n async deleteDomain(@Arg('name') name: string) {\n return await getRepository(Domain).delete({ name })\n }\n\n @Directive('@transaction')\n @Directive('@privilege(superUserGranted: true)')\n @Mutation(returns => Boolean, {\n description: 'To delete multiple domains (Only superuser is granted this privilege.)'\n })\n async deleteDomains(@Arg('names', () => [String]) names: string[]) {\n const domains: Domain[] = await getRepository(Domain).find({ where: { name: In(names) } })\n const domainIds: string[] = domains.map(domain => domain.id)\n\n await getRepository(Domain).delete({ id: In(domainIds) })\n }\n\n @Directive('@transaction')\n @Directive('@privilege(superUserGranted: true)')\n @Mutation(returns => Domain, {\n description: 'To update domain (Only superuser is granted this privilege.)'\n })\n async updateDomain(@Arg('name') name: string, @Arg('patch', () => DomainPatch) patch: DomainPatch) {\n const repository = getRepository(Domain)\n const domain: Domain = await repository.findOneBy({ name })\n\n if (patch.parent && patch.parent.id == domain.id) {\n delete patch.parent\n }\n\n return await repository.save({\n ...domain,\n ...patch\n } as any)\n }\n\n @Directive('@transaction')\n @Directive('@privilege(superUserGranted: true)')\n @Mutation(returns => Boolean, {\n description: 'To update multiple domains (Only superuser is granted this privilege.)'\n })\n async updateDomains(@Arg('patches', () => [DomainPatch]) patches: DomainPatch[]): Promise<boolean> {\n const domainRepo: Repository<Domain> = getRepository(Domain)\n\n const patchIds = patches.filter((patch: any) => patch.id)\n\n if (patchIds.length > 0) {\n patchIds.forEach(async updateRecord => {\n const domain: Domain = await domainRepo.findOne({ where: { id: updateRecord.id } })\n\n if (updateRecord.name) {\n updateRecord.subdomain = slugger(updateRecord.name)\n }\n\n if (updateRecord.parent && updateRecord.parent.id == domain.id) {\n delete updateRecord.parent\n }\n\n await domainRepo.save({\n ...domain,\n ...updateRecord\n } as any)\n })\n }\n\n return true\n }\n\n @Directive('@transaction')\n @Directive(\n '@privilege(category: \"security\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)'\n )\n @Mutation(returns => ScalarObject, { nullable: true, description: 'To update secure IP list for domain' })\n async updateSecureIPList(\n @Arg('iplist', type => ScalarObject) iplist: IPList,\n @Ctx() context: any\n ): Promise<IPList | null> {\n const { domain } = context.state\n const repository = getRepository(Domain)\n // const domain: Domain = await repository.findOneBy({ id })\n\n const { iplist: result } = await repository.save({\n ...domain,\n iplist\n } as any)\n\n return result\n }\n}\n"]}
|
@@ -1,73 +0,0 @@
|
|
1
|
-
# OOPS Progress 컴포넌트
|
2
|
-
|
3
|
-
긴 시간 진행되는 작업의 진행 상황을 표현해주기 위해 서버에 진행율을 Subscribe하는 클라이언트 컴포넌트이다.
|
4
|
-
이 컴포넌트는 자체적으로 시각적 요소를 포함하지 않지만, 시각적 표현을 위해서 자식 노드(Light DOM)를 포함할 수는 있다.
|
5
|
-
|
6
|
-
## properties
|
7
|
-
|
8
|
-
- tag: String 서브스크립션 태그이며, 서버의 'publishProgress'의 tag와 일치시키도록 한다.
|
9
|
-
- subscription: String (readonly) 이 속성이 값을 가지고 있으면, 서브스크립션 중임을 의미한다.
|
10
|
-
|
11
|
-
## methods
|
12
|
-
|
13
|
-
- startSubscribe() 진행율 구독을 시작한다.
|
14
|
-
- stopSubscribe() 진행율 구독을 종료한다.(서버쪽 작업의 종료를 의미하지 않으며, 클라이언트에서 구독을 종료한다는 의미임.)
|
15
|
-
|
16
|
-
## event
|
17
|
-
|
18
|
-
- progress(event) 서버로부터 진행율이 Subscribe 되었을 때 발생한다.
|
19
|
-
- event.detail : progress 값을 갖는다.
|
20
|
-
- finish(event) 진행율이 100% 도달하면 발생한다.
|
21
|
-
|
22
|
-
## 예시
|
23
|
-
|
24
|
-
### 클라이언트 사이드
|
25
|
-
|
26
|
-
```
|
27
|
-
<oops-progress
|
28
|
-
.tag='progress-pending-job'
|
29
|
-
@progress=${e => {
|
30
|
-
this.progress = e.detail
|
31
|
-
}}
|
32
|
-
@finish=${() => {
|
33
|
-
console.log('complete')
|
34
|
-
}}
|
35
|
-
?hidden=${progress < 0 || progress > 100}
|
36
|
-
>
|
37
|
-
<div>
|
38
|
-
<mwc-linear-progress .progress=${progress / 100}></mwc-linear-progress>
|
39
|
-
<span>Progress : ${progress} % (${message})</span>
|
40
|
-
</div>
|
41
|
-
</oops-progress>
|
42
|
-
|
43
|
-
```
|
44
|
-
|
45
|
-
### 서버사이드
|
46
|
-
|
47
|
-
```
|
48
|
-
import { sleep } from '@things-factory/utils'
|
49
|
-
|
50
|
-
...
|
51
|
-
|
52
|
-
@Mutation(returns => String, { description: 'To reference of pending job progress' })
|
53
|
-
async referencePendingJob(
|
54
|
-
@Root() _,
|
55
|
-
@Ctx() context: any
|
56
|
-
) : Promise<string> {
|
57
|
-
|
58
|
-
const { domain } = context.state
|
59
|
-
|
60
|
-
for(var i = 0;i <= 100;i++) {
|
61
|
-
await sleep(100)
|
62
|
-
|
63
|
-
publishProgress({
|
64
|
-
domain,
|
65
|
-
tag: 'progress-pending-job',
|
66
|
-
progress: i,
|
67
|
-
message: `${i * 10} / 1000`
|
68
|
-
})
|
69
|
-
}
|
70
|
-
|
71
|
-
return 'success'
|
72
|
-
}
|
73
|
-
```
|
File without changes
|