@things-factory/shell 8.0.38 → 9.0.0-9.0.0-beta.59.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 (180) hide show
  1. package/_index.html +0 -1
  2. package/bin/things-factory-migration +6 -3
  3. package/client/themes/calendar-theme.css +3 -1
  4. package/client/themes/index.css +2 -1
  5. package/dist-server/index.d.ts +12 -12
  6. package/dist-server/index.js +12 -12
  7. package/dist-server/index.js.map +1 -1
  8. package/dist-server/initializers/database.js +4 -10
  9. package/dist-server/initializers/database.js.map +1 -1
  10. package/dist-server/initializers/ormconfig.d.ts +2 -0
  11. package/dist-server/initializers/ormconfig.js +30 -0
  12. package/dist-server/initializers/ormconfig.js.map +1 -0
  13. package/dist-server/middlewares/domain-middleware.js +2 -2
  14. package/dist-server/middlewares/domain-middleware.js.map +1 -1
  15. package/dist-server/middlewares/index.d.ts +1 -1
  16. package/dist-server/middlewares/index.js +3 -3
  17. package/dist-server/middlewares/index.js.map +1 -1
  18. package/dist-server/migrations/1000000000000-SeedDomain.js +4 -4
  19. package/dist-server/migrations/1000000000000-SeedDomain.js.map +1 -1
  20. package/dist-server/migrations/index.js.map +1 -1
  21. package/dist-server/process-cleaner.d.ts +1 -0
  22. package/dist-server/process-cleaner.js +92 -0
  23. package/dist-server/process-cleaner.js.map +1 -0
  24. package/dist-server/routers/domain-router.js +3 -3
  25. package/dist-server/routers/domain-router.js.map +1 -1
  26. package/dist-server/routers/global-router.js +6 -6
  27. package/dist-server/routers/global-router.js.map +1 -1
  28. package/dist-server/routers/index.d.ts +3 -3
  29. package/dist-server/routers/index.js +3 -3
  30. package/dist-server/routers/index.js.map +1 -1
  31. package/dist-server/schema.js +5 -4
  32. package/dist-server/schema.js.map +1 -1
  33. package/dist-server/server-dev.js +37 -39
  34. package/dist-server/server-dev.js.map +1 -1
  35. package/dist-server/server.js +34 -36
  36. package/dist-server/server.js.map +1 -1
  37. package/dist-server/service/attribute-set/attribute-set-item-type.js +3 -3
  38. package/dist-server/service/attribute-set/attribute-set-item-type.js.map +1 -1
  39. package/dist-server/service/attribute-set/attribute-set-mutation.d.ts +2 -2
  40. package/dist-server/service/attribute-set/attribute-set-mutation.js +16 -16
  41. package/dist-server/service/attribute-set/attribute-set-mutation.js.map +1 -1
  42. package/dist-server/service/attribute-set/attribute-set-query.d.ts +3 -3
  43. package/dist-server/service/attribute-set/attribute-set-query.js +15 -15
  44. package/dist-server/service/attribute-set/attribute-set-query.js.map +1 -1
  45. package/dist-server/service/attribute-set/attribute-set-type.d.ts +2 -2
  46. package/dist-server/service/attribute-set/attribute-set-type.js +5 -5
  47. package/dist-server/service/attribute-set/attribute-set-type.js.map +1 -1
  48. package/dist-server/service/attribute-set/attribute-set.d.ts +1 -1
  49. package/dist-server/service/attribute-set/attribute-set.js +2 -2
  50. package/dist-server/service/attribute-set/attribute-set.js.map +1 -1
  51. package/dist-server/service/attribute-set/index.d.ts +3 -3
  52. package/dist-server/service/attribute-set/index.js +5 -5
  53. package/dist-server/service/attribute-set/index.js.map +1 -1
  54. package/dist-server/service/common-types/index.d.ts +6 -6
  55. package/dist-server/service/common-types/index.js +6 -6
  56. package/dist-server/service/common-types/index.js.map +1 -1
  57. package/dist-server/service/common-types/list-param.js +2 -2
  58. package/dist-server/service/common-types/list-param.js.map +1 -1
  59. package/dist-server/service/common-types/log.js +2 -2
  60. package/dist-server/service/common-types/log.js.map +1 -1
  61. package/dist-server/service/common-types/scalar-object.d.ts +2 -1
  62. package/dist-server/service/common-types/scalar-object.js +2 -2
  63. package/dist-server/service/common-types/scalar-object.js.map +1 -1
  64. package/dist-server/service/directive-transaction/index.d.ts +1 -1
  65. package/dist-server/service/directive-transaction/index.js +1 -1
  66. package/dist-server/service/directive-transaction/index.js.map +1 -1
  67. package/dist-server/service/directive-transaction/transaction.js +2 -2
  68. package/dist-server/service/directive-transaction/transaction.js.map +1 -1
  69. package/dist-server/service/domain/domain-mutation.d.ts +2 -2
  70. package/dist-server/service/domain/domain-mutation.js +21 -21
  71. package/dist-server/service/domain/domain-mutation.js.map +1 -1
  72. package/dist-server/service/domain/domain-query.js +6 -6
  73. package/dist-server/service/domain/domain-query.js.map +1 -1
  74. package/dist-server/service/domain/domain-types.d.ts +2 -2
  75. package/dist-server/service/domain/domain-types.js +6 -6
  76. package/dist-server/service/domain/domain-types.js.map +1 -1
  77. package/dist-server/service/domain/index.d.ts +3 -3
  78. package/dist-server/service/domain/index.js +5 -5
  79. package/dist-server/service/domain/index.js.map +1 -1
  80. package/dist-server/service/index.d.ts +7 -7
  81. package/dist-server/service/index.js +16 -16
  82. package/dist-server/service/index.js.map +1 -1
  83. package/dist-server/service/subscription-data/data-resolver.d.ts +1 -1
  84. package/dist-server/service/subscription-data/data-resolver.js +4 -4
  85. package/dist-server/service/subscription-data/data-resolver.js.map +1 -1
  86. package/dist-server/service/subscription-data/data-types.d.ts +1 -1
  87. package/dist-server/service/subscription-data/data-types.js +5 -5
  88. package/dist-server/service/subscription-data/data-types.js.map +1 -1
  89. package/dist-server/service/subscription-data/index.d.ts +1 -1
  90. package/dist-server/service/subscription-data/index.js +2 -2
  91. package/dist-server/service/subscription-data/index.js.map +1 -1
  92. package/dist-server/tsconfig.tsbuildinfo +1 -1
  93. package/dist-server/typeorm/encrypt-transform.js +3 -3
  94. package/dist-server/typeorm/encrypt-transform.js.map +1 -1
  95. package/dist-server/utils/get-times-for-period.d.ts +24 -4
  96. package/dist-server/utils/get-times-for-period.js +42 -5
  97. package/dist-server/utils/get-times-for-period.js.map +1 -1
  98. package/dist-server/utils/index.d.ts +8 -8
  99. package/dist-server/utils/index.js +8 -8
  100. package/dist-server/utils/index.js.map +1 -1
  101. package/dist-server/utils/list-param-adjuster.d.ts +1 -1
  102. package/dist-server/utils/list-param-adjuster.js.map +1 -1
  103. package/dist-server/utils/list-params-converter.d.ts +2 -2
  104. package/dist-server/utils/list-params-converter.js +2 -2
  105. package/dist-server/utils/list-params-converter.js.map +1 -1
  106. package/dist-server/utils/list-query-builder.d.ts +1 -1
  107. package/dist-server/utils/list-query-builder.js +7 -7
  108. package/dist-server/utils/list-query-builder.js.map +1 -1
  109. package/dist-server/utils/publish-progress.js +2 -2
  110. package/dist-server/utils/publish-progress.js.map +1 -1
  111. package/package.json +14 -19
  112. package/translations/en.json +1 -0
  113. package/translations/ja.json +1 -0
  114. package/translations/ko.json +2 -1
  115. package/translations/ms.json +1 -0
  116. package/translations/zh.json +1 -0
  117. package/views/public/home.html +0 -1
  118. package/client/hot-client/hot.js +0 -140
  119. package/client/hot-client/index.js +0 -103
  120. package/client/hot-client/log.js +0 -44
  121. package/client/hot-client/socket.js +0 -63
  122. package/client/scene/scene-components.js +0 -3
  123. package/client/scene/scene-player.js +0 -103
  124. package/client/scene/scene-viewer.js +0 -106
  125. package/client/scene/things-scene-components.import +0 -1
  126. package/ormconfig.js +0 -31
  127. package/server/graphql-local-client.ts +0 -59
  128. package/server/index.ts +0 -13
  129. package/server/initializers/database.ts +0 -96
  130. package/server/initializers/naming-strategy.ts +0 -14
  131. package/server/middlewares/domain-middleware.ts +0 -60
  132. package/server/middlewares/index.ts +0 -43
  133. package/server/migrations/1000000000000-SeedDomain.ts +0 -37
  134. package/server/migrations/index.ts +0 -9
  135. package/server/pubsub-log-transport.ts +0 -59
  136. package/server/pubsub.ts +0 -84
  137. package/server/routers/domain-router.ts +0 -13
  138. package/server/routers/global-router.ts +0 -76
  139. package/server/routers/graphql-router.ts +0 -3
  140. package/server/routers/index.ts +0 -3
  141. package/server/schema.ts +0 -163
  142. package/server/server-dev.ts +0 -305
  143. package/server/server.ts +0 -296
  144. package/server/service/attribute-set/attribute-set-item-type.ts +0 -65
  145. package/server/service/attribute-set/attribute-set-mutation.ts +0 -125
  146. package/server/service/attribute-set/attribute-set-query.ts +0 -36
  147. package/server/service/attribute-set/attribute-set-type.ts +0 -46
  148. package/server/service/attribute-set/attribute-set.ts +0 -35
  149. package/server/service/attribute-set/index.ts +0 -6
  150. package/server/service/common-types/index.ts +0 -6
  151. package/server/service/common-types/list-param.ts +0 -61
  152. package/server/service/common-types/log.ts +0 -17
  153. package/server/service/common-types/object-ref.ts +0 -13
  154. package/server/service/common-types/scalar-any.ts +0 -44
  155. package/server/service/common-types/scalar-date.ts +0 -22
  156. package/server/service/common-types/scalar-object.ts +0 -15
  157. package/server/service/directive-transaction/index.ts +0 -1
  158. package/server/service/directive-transaction/transaction.ts +0 -40
  159. package/server/service/domain/domain-mutation.ts +0 -120
  160. package/server/service/domain/domain-query.ts +0 -55
  161. package/server/service/domain/domain-types.ts +0 -69
  162. package/server/service/domain/domain.ts +0 -112
  163. package/server/service/domain/index.ts +0 -6
  164. package/server/service/index.ts +0 -32
  165. package/server/service/subscription-data/data-resolver.ts +0 -37
  166. package/server/service/subscription-data/data-types.ts +0 -16
  167. package/server/service/subscription-data/index.ts +0 -4
  168. package/server/typeorm/encrypt-transform.ts +0 -70
  169. package/server/typeorm/get-data-encryption-key.ts +0 -13
  170. package/server/typeorm/json5-transform.ts +0 -26
  171. package/server/typeorm/round-transform.ts +0 -20
  172. package/server/utils/condition-builder.ts +0 -145
  173. package/server/utils/get-domain.ts +0 -228
  174. package/server/utils/get-query-builder-from-list-params.ts +0 -469
  175. package/server/utils/get-times-for-period.ts +0 -60
  176. package/server/utils/index.ts +0 -8
  177. package/server/utils/list-param-adjuster.ts +0 -21
  178. package/server/utils/list-params-converter.ts +0 -200
  179. package/server/utils/list-query-builder.ts +0 -120
  180. package/server/utils/publish-progress.ts +0 -23
@@ -1,69 +0,0 @@
1
- import { ObjectType, InputType, Field, Int } from 'type-graphql'
2
- import { Domain, IPList } from './domain'
3
- import { ObjectRef, ScalarObject } from '../common-types'
4
-
5
- @InputType()
6
- export class DomainInput {
7
- @Field()
8
- name: string
9
-
10
- @Field({ nullable: true })
11
- description?: string
12
-
13
- @Field({ nullable: true })
14
- extType?: string
15
- }
16
-
17
- @InputType()
18
- export class DomainPatch {
19
- @Field({ nullable: true })
20
- id?: string
21
-
22
- @Field({ nullable: true })
23
- name?: string
24
-
25
- @Field({ nullable: true })
26
- description?: string
27
-
28
- @Field({ nullable: true })
29
- timezone?: string
30
-
31
- @Field({ nullable: true })
32
- systemFlag?: Boolean
33
-
34
- @Field({ nullable: true })
35
- subdomain?: string
36
-
37
- @Field({ nullable: true })
38
- owner?: string
39
-
40
- @Field(type => ObjectRef, { nullable: true })
41
- parent?: ObjectRef
42
-
43
- @Field({ nullable: true })
44
- brandName?: string
45
-
46
- @Field({ nullable: true })
47
- brandImage?: string
48
-
49
- @Field({ nullable: true })
50
- contentImage?: string
51
-
52
- @Field({ nullable: true })
53
- extType?: string
54
-
55
- @Field(type => ScalarObject, { nullable: true })
56
- attributes?: any
57
-
58
- @Field({ nullable: true })
59
- theme?: string
60
- }
61
-
62
- @ObjectType()
63
- export class DomainList {
64
- @Field(type => [Domain], { nullable: true })
65
- items: Domain[]
66
-
67
- @Field(type => Int, { nullable: true })
68
- total: number
69
- }
@@ -1,112 +0,0 @@
1
- import {
2
- Column,
3
- CreateDateColumn,
4
- ManyToOne,
5
- OneToMany,
6
- RelationId,
7
- Entity,
8
- Index,
9
- UpdateDateColumn,
10
- DeleteDateColumn,
11
- PrimaryGeneratedColumn
12
- } from 'typeorm'
13
- import { ObjectType, Directive, Field, ID } from 'type-graphql'
14
- import { ScalarObject } from '../common-types/scalar-object.js'
15
-
16
- export type IPList = {
17
- whitelist?: string[]
18
- blacklist?: string[]
19
- protectedlist?: string[]
20
- privileges?: {
21
- category: string
22
- privilege: string
23
- }[]
24
- }
25
-
26
- @Entity()
27
- @Index('ix_domain_0', (domain: Domain) => [domain.subdomain, domain.deletedAt], {
28
- unique: true,
29
- where: '"deleted_at" IS NULL'
30
- })
31
- @ObjectType()
32
- export class Domain {
33
- @PrimaryGeneratedColumn('uuid')
34
- @Field(type => ID)
35
- readonly id: string
36
-
37
- @Field()
38
- @Column({ unique: true })
39
- name: string
40
-
41
- @Field({ nullable: true })
42
- @Column({ nullable: true })
43
- description: string
44
-
45
- @Field({ nullable: true })
46
- @Column({ nullable: true })
47
- extType: string
48
-
49
- @Field({ nullable: true })
50
- @Column({ nullable: true })
51
- timezone: string
52
-
53
- @Directive('@deprecated(reason: "Use `parent`")')
54
- @Field({ nullable: true })
55
- @Column({ default: false })
56
- systemFlag: boolean
57
-
58
- @Field({ nullable: true })
59
- @Column({ nullable: true })
60
- subdomain: string
61
-
62
- @Field({ nullable: true })
63
- @ManyToOne(type => Domain, { nullable: true })
64
- parent: Domain
65
-
66
- @RelationId((domain: Domain) => domain.parent)
67
- parentId?: string
68
-
69
- @OneToMany(type => Domain, domain => domain.parent)
70
- @Field(type => Domain, { nullable: true })
71
- children: Domain[]
72
-
73
- @Field({ nullable: true })
74
- @Column({ nullable: true })
75
- brandName: string
76
-
77
- @Field({ nullable: true })
78
- @Column({ nullable: true })
79
- brandImage: string
80
-
81
- @Field({ nullable: true })
82
- @Column({ nullable: true })
83
- contentImage: string
84
-
85
- @Field({ nullable: true })
86
- @Column({ nullable: true })
87
- owner: string
88
-
89
- @Field({ nullable: true })
90
- @Column({ nullable: true })
91
- theme: string
92
-
93
- @Column('simple-json', { nullable: true })
94
- @Field(type => ScalarObject, { nullable: true })
95
- iplist?: IPList
96
-
97
- @Column('simple-json', { nullable: true })
98
- @Field(type => ScalarObject, { nullable: true })
99
- attributes?: any
100
-
101
- @Field({ nullable: true })
102
- @CreateDateColumn()
103
- createdAt: Date
104
-
105
- @Field({ nullable: true })
106
- @UpdateDateColumn()
107
- updatedAt: Date
108
-
109
- @DeleteDateColumn()
110
- @Field({ nullable: true })
111
- deletedAt?: Date
112
- }
@@ -1,6 +0,0 @@
1
- import { Domain } from './domain'
2
- import { DomainQuery } from './domain-query'
3
- import { DomainMutation } from './domain-mutation'
4
-
5
- export const entities = [Domain]
6
- export const resolvers = [DomainQuery, DomainMutation]
@@ -1,32 +0,0 @@
1
- import { transactionDirectiveResolver, transactionDirectiveTypeDefs } from './directive-transaction'
2
- import { entities as DomainEntities, resolvers as DomainResolvers } from './domain'
3
- import { entities as AttributeEntities, resolvers as AttributeResolvers } from './attribute-set'
4
- import { resolvers as SubscriptionDataResolvers } from './subscription-data'
5
-
6
- export * from './common-types'
7
- export * from './domain/domain'
8
- export * from './domain/domain'
9
-
10
- /* EXPORT TYPES */
11
- export * from './domain/domain-types'
12
- export * from './subscription-data/data-types'
13
-
14
- export const entities = [
15
- /* Entities */
16
- ...AttributeEntities,
17
- ...DomainEntities
18
- ]
19
- export const schema = {
20
- typeDefs: {
21
- transactionDirectiveTypeDefs
22
- },
23
- resolverClasses: [
24
- /* Resolvers */
25
- ...AttributeResolvers,
26
- ...DomainResolvers,
27
- ...SubscriptionDataResolvers
28
- ],
29
- directives: {
30
- transaction: transactionDirectiveResolver
31
- }
32
- }
@@ -1,37 +0,0 @@
1
- import { filter, pipe } from 'graphql-yoga'
2
- import { Arg, Resolver, Root, Subscription } from 'type-graphql'
3
-
4
- import { pubsub } from '../../pubsub'
5
- import { Data } from './data-types'
6
-
7
- /* 이 Resolver는 @things-factory/integration-base 에서 Overide 된다. (state-register를 사용하기 위해서) */
8
- @Resolver()
9
- export class DataResolver {
10
- @Subscription({
11
- subscribe: ({ args, context, info }) => {
12
- const { domain, user } = context.state
13
- const { tag } = args
14
- const subdomain = domain?.subdomain
15
-
16
- if (!domain || !tag) {
17
- throw new Error('domain and tag required')
18
- }
19
-
20
- //@ts-ignore
21
- if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {
22
- throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)
23
- }
24
-
25
- return pipe(
26
- pubsub.subscribe('data'),
27
- filter((payload: { data: Data }) => {
28
- const { domain: pdomain, tag: ptag, data } = payload.data
29
- return tag === ptag && subdomain === pdomain?.subdomain
30
- })
31
- )
32
- }
33
- })
34
- data(@Root() payload: { data: Data }, @Arg('tag') tag: string): Data {
35
- return payload.data
36
- }
37
- }
@@ -1,16 +0,0 @@
1
- import { Field, ObjectType } from 'type-graphql'
2
-
3
- import { ScalarObject } from '../common-types/scalar-object'
4
- import { Domain } from '../domain/domain'
5
-
6
- @ObjectType()
7
- export class Data {
8
- @Field(type => Domain, { nullable: true, description: 'The domain where the data originated' })
9
- domain?: Domain
10
-
11
- @Field({ description: 'Tag name attached to data' })
12
- tag: string
13
-
14
- @Field(type => ScalarObject, { nullable: true, description: 'Data delivered by subscription' })
15
- data?: Object
16
- }
@@ -1,4 +0,0 @@
1
- import { DataResolver } from './data-resolver'
2
-
3
- export const entities = []
4
- export const resolvers = [DataResolver]
@@ -1,70 +0,0 @@
1
- import { ValueTransformer } from 'typeorm'
2
- import { createCipheriv, createDecipheriv, randomBytes, scryptSync } from 'crypto'
3
-
4
- import { dataEncryptionKey } from './get-data-encryption-key'
5
-
6
- const ALGORITHM = 'aes-256-cbc'
7
- const KEY_LENGTH = 32
8
- const SALT_LENGTH = 16
9
- const IV_LENGTH = 16
10
-
11
- /**
12
- * ValueTransformer object for encrypting and decrypting database entity field values.
13
- * Used in TypeORM entities to encrypt field values before storing them in the database
14
- * and decrypt values when retrieving them from the database.
15
- */
16
- export const encryptTransformer: ValueTransformer = {
17
- /**
18
- * Encrypts the entity field value before storing it in the database.
19
- * @param {string} entityValue - Unencrypted entity field value
20
- * @returns {string} - Encrypted string
21
- */
22
- to: (entityValue: string) => encrypt(entityValue), // DB에 저장하기 전에 암호화
23
-
24
- /**
25
- * Decrypts the encrypted database value when retrieving it from the database.
26
- * @param {string} databaseValue - Encrypted database field value
27
- * @returns {string} - Decrypted string
28
- */
29
- from: (databaseValue: string) => decrypt(databaseValue) // DB에서 값을 가져올 때 복호화
30
- }
31
-
32
- /**
33
- * Encrypts the given text using the AES-256-CBC algorithm.
34
- * @param {string} text - Text to encrypt
35
- * @returns {string} - Encrypted string
36
- */
37
- function encrypt(text: string): string {
38
- if (!text) {
39
- return null
40
- }
41
-
42
- const iv = randomBytes(IV_LENGTH)
43
- const cipher = createCipheriv(ALGORITHM, dataEncryptionKey, iv)
44
- const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()])
45
-
46
- return `${iv.toString('hex')}:${encrypted.toString('hex')}`
47
- }
48
-
49
- /**
50
- * Decrypts the given encrypted text.
51
- * @param {string} text - Encrypted text to decrypt
52
- * @returns {string} - Decrypted string
53
- */
54
- function decrypt(text: string): string {
55
- if (!text) {
56
- return null
57
- }
58
-
59
- try {
60
- const parts = text.split(':')
61
- const iv = Buffer.from(parts.shift(), 'hex')
62
- const encryptedText = Buffer.from(parts.join(':'), 'hex')
63
- const decipher = createDecipheriv(ALGORITHM, dataEncryptionKey, iv)
64
-
65
- return Buffer.concat([decipher.update(encryptedText), decipher.final()]).toString('utf8')
66
- } catch (err) {
67
- console.error(`decryption for encrypted field failed in encryptTransformer`)
68
- return null
69
- }
70
- }
@@ -1,13 +0,0 @@
1
- import { config } from '@things-factory/env'
2
-
3
- var _DATA_ENCRYPTION_KEY = config.get('dataEncryptionKey')
4
-
5
- if (!_DATA_ENCRYPTION_KEY) {
6
- if (process.env.NODE_ENV == 'production') {
7
- throw new TypeError('dataEncryptionKey not configured.')
8
- } else {
9
- _DATA_ENCRYPTION_KEY = 'V6g5oHJZb7KcYzIyL6cM95XvIDouon5b'
10
- }
11
- }
12
-
13
- export const dataEncryptionKey = _DATA_ENCRYPTION_KEY
@@ -1,26 +0,0 @@
1
- import { ValueTransformer } from 'typeorm'
2
- import json5 from 'json5'
3
-
4
- export const json5Transformer: ValueTransformer = {
5
- /**
6
- * Converts the entity's value to a JSON5 string before storing it in the database.
7
- * @param {any} entityValue - The unencrypted entity field value.
8
- * @returns {string} - The stringified JSON5 representation of the entityValue.
9
- */
10
- to(entityValue: any) {
11
- return entityValue === null || entityValue === undefined ? null : json5.stringify(entityValue)
12
- },
13
-
14
- /**
15
- * Converts a JSON5 string from the database back into its original type when retrieving it.
16
- * @param {string} databaseValue - The JSON5 string stored in the database.
17
- * @returns {any} - The original type of the entityValue, parsed from the JSON5 string.
18
- */
19
- from(databaseValue: string) {
20
- try {
21
- return databaseValue === null ? null : json5.parse(databaseValue)
22
- } finally {
23
- return databaseValue
24
- }
25
- }
26
- }
@@ -1,20 +0,0 @@
1
- import { ValueTransformer } from 'typeorm'
2
-
3
- /**
4
- * ValueTransformer object for rounding floating point values.
5
- */
6
- export const roundTransformer: ValueTransformer = {
7
- /**
8
- * Rounds the entity field value before storing it in the database.
9
- * @param {number | null} value - Floating point value to round or null
10
- * @returns {number | null} - Rounded number or null
11
- */
12
- to: (value: number | null) => (value !== null && !isNaN(value) ? Math.round(value * 10000) / 10000 : undefined),
13
-
14
- /**
15
- * Returns the entity field value as it is without any transformation when reading from the database.
16
- * @param {number} value - Number value read from the database
17
- * @returns {number} - The number value as is
18
- */
19
- from: (value: number) => value
20
- }
@@ -1,145 +0,0 @@
1
- import _ from 'lodash'
2
-
3
- /**
4
- * Generates and returns a condition clause based on the provided parameters.
5
- *
6
- * @param alias {string} Alias or table name of the entity.
7
- * @param fieldName {string} Field or column name.
8
- * @param operator {string} Comparison operator.
9
- * @param value {any} Value or an array of values to compare.
10
- * @param relation {boolean | string} Indicates if it's a related field or the name of the relation (optional).
11
- * @param seq {number} Integer representing the order of condition generation (internal use).
12
- * @returns {Object} An object containing the generated condition clause and parameters.
13
- */
14
- export const buildCondition = function (alias: string, fieldName: string, operator: string, value: any, relation: boolean | string, seq: number) {
15
- seq++
16
-
17
- fieldName = _.snakeCase(fieldName)
18
- const values = value instanceof Array ? value : [value]
19
-
20
- switch (operator) {
21
- case 'eq':
22
- return {
23
- clause: `${alias}.${fieldName} = :args${seq}`,
24
- parameters: { [`args${seq}`]: value }
25
- }
26
-
27
- case 'like':
28
- return {
29
- clause: `${alias}.${fieldName} LIKE :args${seq}`,
30
- parameters: { [`args${seq}`]: `${value}` }
31
- }
32
-
33
- case 'search':
34
- case 'i_like':
35
- return {
36
- clause: `LOWER(${alias}.${fieldName}) LIKE :args${seq}`,
37
- parameters: { [`args${seq}`]: `${String(value).toLowerCase()}` }
38
- }
39
-
40
- case 'nlike':
41
- return {
42
- clause: `${alias}.${fieldName} NOT LIKE :args${seq}`,
43
- value: { [`args${seq}`]: `${value}` }
44
- }
45
-
46
- case 'i_nlike':
47
- return {
48
- clause: `LOWER(${alias}.${fieldName}) NOT LIKE :args${seq}`,
49
- value: { [`args${seq}`]: `${String(value).toLowerCase()}` }
50
- }
51
-
52
- case 'lt':
53
- return {
54
- clause: `${alias}.${fieldName} < :args${seq}`,
55
- parameters: { [`args${seq}`]: value }
56
- }
57
-
58
- case 'gt':
59
- return {
60
- clause: `${alias}.${fieldName} > :args${seq}`,
61
- parameters: { [`args${seq}`]: value }
62
- }
63
-
64
- case 'lte':
65
- return {
66
- clause: `${alias}.${fieldName} <= :args${seq}`,
67
- parameters: { [`args${seq}`]: value }
68
- }
69
-
70
- case 'gte':
71
- return {
72
- clause: `${alias}.${fieldName} >= :args${seq}`,
73
- parameters: { [`args${seq}`]: value }
74
- }
75
-
76
- case 'noteq':
77
- return {
78
- clause: `${alias}.${fieldName} != :args${seq}`,
79
- parameters: { [`args${seq}`]: value }
80
- }
81
-
82
- case 'in':
83
- return {
84
- clause: relation ? `${fieldName}.id IN (:...args${seq})` : `${alias}.${fieldName} IN (:...args${seq})`,
85
- parameters: { [`args${seq}`]: values }
86
- }
87
-
88
- case 'notin':
89
- return {
90
- clause: relation ? `${fieldName}.id NOT IN (:...args${seq})` : `${alias}.${fieldName} NOT IN (:...args${seq})`,
91
- parameters: { [`args${seq}`]: values }
92
- }
93
-
94
- case 'notin_with_null':
95
- return {
96
- clause: relation
97
- ? `(${fieldName}.id IS NULL OR ${fieldName}.id NOT IN (:...args${seq})`
98
- : `${alias}.${fieldName} IS NULL OR ${alias}.${fieldName} NOT IN (:...args${seq}))`,
99
- parameters: { [`args${seq}`]: values }
100
- }
101
-
102
- case 'is_null':
103
- return {
104
- clause: `${alias}.${fieldName} IS NULL`
105
- }
106
- case 'is_not_null':
107
- return {
108
- clause: `${alias}.${fieldName} IS NOT NULL`
109
- }
110
- case 'is_false':
111
- return {
112
- clause: `${alias}.${fieldName} IS FALSE`
113
- }
114
- case 'is_true':
115
- return {
116
- clause: `${alias}.${fieldName} IS TRUE`
117
- }
118
- case 'is_not_false':
119
- return {
120
- clause: `${alias}.${fieldName} IS NOT FALSE`
121
- }
122
- case 'is_not_true':
123
- return {
124
- clause: `${alias}.${fieldName} IS NOT TRUE`
125
- }
126
- case 'is_present':
127
- return {
128
- clause: `${alias}.${fieldName} IS PRESENT`
129
- }
130
- case 'is_blank':
131
- return {
132
- clause: `${alias}.${fieldName} IS BLANK`
133
- }
134
- case 'is_empty_num_id':
135
- return {
136
- clause: `${alias}.${fieldName} IS EMPTY NUMERIC ID`
137
- }
138
-
139
- case 'between':
140
- return {
141
- clause: `${alias}.${fieldName} BETWEEN :args${seq}_1 AND :args${seq}_2`,
142
- parameters: { [`args${seq}_1`]: values[0], [`args${seq}_2`]: values[1] }
143
- }
144
- }
145
- }