@things-factory/shell 8.0.0 → 9.0.0-beta.5

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 (175) hide show
  1. package/bin/things-factory-migration +6 -3
  2. package/client/themes/calendar-theme.css +3 -1
  3. package/client/themes/index.css +2 -1
  4. package/dist-server/index.d.ts +12 -12
  5. package/dist-server/index.js +12 -12
  6. package/dist-server/index.js.map +1 -1
  7. package/dist-server/initializers/database.js +4 -10
  8. package/dist-server/initializers/database.js.map +1 -1
  9. package/dist-server/initializers/ormconfig.d.ts +2 -0
  10. package/dist-server/initializers/ormconfig.js +30 -0
  11. package/dist-server/initializers/ormconfig.js.map +1 -0
  12. package/dist-server/middlewares/domain-middleware.js +2 -2
  13. package/dist-server/middlewares/domain-middleware.js.map +1 -1
  14. package/dist-server/middlewares/index.d.ts +1 -1
  15. package/dist-server/middlewares/index.js +3 -3
  16. package/dist-server/middlewares/index.js.map +1 -1
  17. package/dist-server/migrations/1000000000000-SeedDomain.js +4 -4
  18. package/dist-server/migrations/1000000000000-SeedDomain.js.map +1 -1
  19. package/dist-server/migrations/index.js +5 -4
  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 +33 -35
  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.d.ts +3 -3
  73. package/dist-server/service/domain/domain-query.js +18 -18
  74. package/dist-server/service/domain/domain-query.js.map +1 -1
  75. package/dist-server/service/domain/domain-types.d.ts +2 -2
  76. package/dist-server/service/domain/domain-types.js +6 -6
  77. package/dist-server/service/domain/domain-types.js.map +1 -1
  78. package/dist-server/service/domain/domain.js +3 -3
  79. package/dist-server/service/domain/domain.js.map +1 -1
  80. package/dist-server/service/domain/index.d.ts +3 -3
  81. package/dist-server/service/domain/index.js +5 -5
  82. package/dist-server/service/domain/index.js.map +1 -1
  83. package/dist-server/service/index.d.ts +7 -7
  84. package/dist-server/service/index.js +16 -16
  85. package/dist-server/service/index.js.map +1 -1
  86. package/dist-server/service/subscription-data/data-resolver.d.ts +1 -1
  87. package/dist-server/service/subscription-data/data-resolver.js +4 -4
  88. package/dist-server/service/subscription-data/data-resolver.js.map +1 -1
  89. package/dist-server/service/subscription-data/data-types.d.ts +1 -1
  90. package/dist-server/service/subscription-data/data-types.js +5 -5
  91. package/dist-server/service/subscription-data/data-types.js.map +1 -1
  92. package/dist-server/service/subscription-data/index.d.ts +1 -1
  93. package/dist-server/service/subscription-data/index.js +2 -2
  94. package/dist-server/service/subscription-data/index.js.map +1 -1
  95. package/dist-server/tsconfig.tsbuildinfo +1 -1
  96. package/dist-server/typeorm/encrypt-transform.js +3 -3
  97. package/dist-server/typeorm/encrypt-transform.js.map +1 -1
  98. package/dist-server/typeorm/json5-transform.js +2 -2
  99. package/dist-server/typeorm/json5-transform.js.map +1 -1
  100. package/dist-server/utils/get-query-builder-from-list-params.d.ts +2 -2
  101. package/dist-server/utils/get-query-builder-from-list-params.js +5 -5
  102. package/dist-server/utils/get-query-builder-from-list-params.js.map +1 -1
  103. package/dist-server/utils/index.d.ts +8 -8
  104. package/dist-server/utils/index.js +8 -8
  105. package/dist-server/utils/index.js.map +1 -1
  106. package/dist-server/utils/list-param-adjuster.d.ts +1 -1
  107. package/dist-server/utils/list-param-adjuster.js.map +1 -1
  108. package/dist-server/utils/list-params-converter.d.ts +2 -2
  109. package/dist-server/utils/list-params-converter.js +2 -2
  110. package/dist-server/utils/list-params-converter.js.map +1 -1
  111. package/dist-server/utils/list-query-builder.d.ts +1 -1
  112. package/dist-server/utils/list-query-builder.js +7 -7
  113. package/dist-server/utils/list-query-builder.js.map +1 -1
  114. package/dist-server/utils/publish-progress.js +2 -2
  115. package/dist-server/utils/publish-progress.js.map +1 -1
  116. package/package.json +14 -16
  117. package/client/hot-client/hot.js +0 -140
  118. package/client/hot-client/index.js +0 -103
  119. package/client/hot-client/log.js +0 -44
  120. package/client/hot-client/socket.js +0 -63
  121. package/ormconfig.js +0 -31
  122. package/server/graphql-local-client.ts +0 -59
  123. package/server/index.ts +0 -13
  124. package/server/initializers/database.ts +0 -96
  125. package/server/initializers/naming-strategy.ts +0 -14
  126. package/server/middlewares/domain-middleware.ts +0 -60
  127. package/server/middlewares/index.ts +0 -43
  128. package/server/migrations/1000000000000-SeedDomain.ts +0 -37
  129. package/server/migrations/index.ts +0 -9
  130. package/server/pubsub-log-transport.ts +0 -59
  131. package/server/pubsub.ts +0 -84
  132. package/server/routers/domain-router.ts +0 -13
  133. package/server/routers/global-router.ts +0 -76
  134. package/server/routers/graphql-router.ts +0 -3
  135. package/server/routers/index.ts +0 -3
  136. package/server/schema.ts +0 -163
  137. package/server/server-dev.ts +0 -305
  138. package/server/server.ts +0 -296
  139. package/server/service/attribute-set/attribute-set-item-type.ts +0 -65
  140. package/server/service/attribute-set/attribute-set-mutation.ts +0 -125
  141. package/server/service/attribute-set/attribute-set-query.ts +0 -36
  142. package/server/service/attribute-set/attribute-set-type.ts +0 -46
  143. package/server/service/attribute-set/attribute-set.ts +0 -35
  144. package/server/service/attribute-set/index.ts +0 -6
  145. package/server/service/common-types/index.ts +0 -6
  146. package/server/service/common-types/list-param.ts +0 -61
  147. package/server/service/common-types/log.ts +0 -17
  148. package/server/service/common-types/object-ref.ts +0 -13
  149. package/server/service/common-types/scalar-any.ts +0 -44
  150. package/server/service/common-types/scalar-date.ts +0 -22
  151. package/server/service/common-types/scalar-object.ts +0 -15
  152. package/server/service/directive-transaction/index.ts +0 -1
  153. package/server/service/directive-transaction/transaction.ts +0 -40
  154. package/server/service/domain/domain-mutation.ts +0 -120
  155. package/server/service/domain/domain-query.ts +0 -48
  156. package/server/service/domain/domain-types.ts +0 -63
  157. package/server/service/domain/domain.ts +0 -147
  158. package/server/service/domain/index.ts +0 -6
  159. package/server/service/index.ts +0 -32
  160. package/server/service/subscription-data/data-resolver.ts +0 -37
  161. package/server/service/subscription-data/data-types.ts +0 -16
  162. package/server/service/subscription-data/index.ts +0 -4
  163. package/server/typeorm/encrypt-transform.ts +0 -70
  164. package/server/typeorm/get-data-encryption-key.ts +0 -13
  165. package/server/typeorm/json5-transform.ts +0 -26
  166. package/server/typeorm/round-transform.ts +0 -20
  167. package/server/utils/condition-builder.ts +0 -145
  168. package/server/utils/get-domain.ts +0 -226
  169. package/server/utils/get-query-builder-from-list-params.ts +0 -469
  170. package/server/utils/get-times-for-period.ts +0 -60
  171. package/server/utils/index.ts +0 -8
  172. package/server/utils/list-param-adjuster.ts +0 -21
  173. package/server/utils/list-params-converter.ts +0 -200
  174. package/server/utils/list-query-builder.ts +0 -120
  175. package/server/utils/publish-progress.ts +0 -23
@@ -1,63 +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
-
14
- @InputType()
15
- export class DomainPatch {
16
- @Field({ nullable: true })
17
- id?: string
18
-
19
- @Field({ nullable: true })
20
- name?: string
21
-
22
- @Field({ nullable: true })
23
- description?: string
24
-
25
- @Field({ nullable: true })
26
- timezone?: string
27
-
28
- @Field({ nullable: true })
29
- systemFlag?: Boolean
30
-
31
- @Field({ nullable: true })
32
- subdomain?: string
33
-
34
- @Field({ nullable: true })
35
- owner?: string
36
-
37
- @Field(type => ObjectRef, { nullable: true })
38
- parent?: ObjectRef
39
-
40
- @Field({ nullable: true })
41
- brandName?: string
42
-
43
- @Field({ nullable: true })
44
- brandImage?: string
45
-
46
- @Field({ nullable: true })
47
- contentImage?: string
48
-
49
- @Field(type => ScalarObject, { nullable: true })
50
- attributes?: any
51
-
52
- @Field({ nullable: true })
53
- theme?: string
54
- }
55
-
56
- @ObjectType()
57
- export class DomainList {
58
- @Field(type => [Domain], { nullable: true })
59
- items: Domain[]
60
-
61
- @Field(type => Int, { nullable: true })
62
- total: number
63
- }
@@ -1,147 +0,0 @@
1
- import {
2
- Column,
3
- CreateDateColumn,
4
- ManyToOne,
5
- OneToMany,
6
- RelationId,
7
- Entity,
8
- Index,
9
- UpdateDateColumn,
10
- DeleteDateColumn
11
- } from 'typeorm'
12
- import { ObjectType, Directive, Field, ID } from 'type-graphql'
13
- import { config } from '@things-factory/env'
14
- import { ScalarObject } from '../common-types'
15
-
16
- const numericTypes = ['int', 'int2', 'int4', 'int8', 'integer', 'tinyint', 'smallint', 'mediumint', 'bigint']
17
- const generatedStrategy = ['uuid', 'rowid', 'increment', 'identity']
18
- const domainPrimaryOption = config.get('domainPrimaryOption')
19
- const domainPrimaryType = domainPrimaryOption?.type
20
- const domainPrimaryStrategy = domainPrimaryOption?.strategy
21
-
22
- export type IPList = {
23
- whitelist?: string[]
24
- blacklist?: string[]
25
- protectedlist?: string[]
26
- privileges?: {
27
- category: string
28
- privilege: string
29
- }[]
30
- }
31
-
32
- @Entity()
33
- @Index('ix_domain_0', (domain: Domain) => [domain.subdomain, domain.deletedAt], {
34
- unique: true,
35
- where: '"deleted_at" IS NULL'
36
- })
37
- @ObjectType()
38
- export class Domain {
39
- @Field(type => ID)
40
- @Column(
41
- domainPrimaryOption
42
- ? {
43
- type: domainPrimaryType,
44
- primary: true,
45
- transformer: {
46
- //from(value: DatabaseType): EntityType
47
- from: value => {
48
- return value
49
- },
50
- //to(value: EntityType): DatabaseType
51
- to: value => {
52
- if (!value) {
53
- value = 0
54
- }
55
- if (numericTypes.indexOf(domainPrimaryType) >= 0) {
56
- return parseInt(value)
57
- } else {
58
- return value
59
- }
60
- }
61
- },
62
- generated: generatedStrategy.indexOf(domainPrimaryStrategy) >= 0 ? domainPrimaryStrategy : false
63
- }
64
- : {
65
- type: 'uuid',
66
- primary: true,
67
- generated: 'uuid'
68
- }
69
- )
70
- readonly id: string
71
-
72
- @Field()
73
- @Column({ unique: true })
74
- name: string
75
-
76
- @Field({ nullable: true })
77
- @Column({ nullable: true })
78
- description: string
79
-
80
- @Field({ nullable: true })
81
- @Column({ nullable: true })
82
- extType: string
83
-
84
- @Field({ nullable: true })
85
- @Column({ nullable: true })
86
- timezone: string
87
-
88
- @Directive('@deprecated(reason: "Use `parent`")')
89
- @Field({ nullable: true })
90
- @Column({ default: false })
91
- systemFlag: boolean
92
-
93
- @Field({ nullable: true })
94
- @Column({ nullable: true })
95
- subdomain: string
96
-
97
- @Field({ nullable: true })
98
- @ManyToOne(type => Domain, { nullable: true })
99
- parent: Domain
100
-
101
- @RelationId((domain: Domain) => domain.parent)
102
- parentId?: string
103
-
104
- @OneToMany(type => Domain, domain => domain.parent)
105
- @Field(type => Domain, { nullable: true })
106
- children: Domain[]
107
-
108
- @Field({ nullable: true })
109
- @Column({ nullable: true })
110
- brandName: string
111
-
112
- @Field({ nullable: true })
113
- @Column({ nullable: true })
114
- brandImage: string
115
-
116
- @Field({ nullable: true })
117
- @Column({ nullable: true })
118
- contentImage: string
119
-
120
- @Field({ nullable: true })
121
- @Column({ nullable: true })
122
- owner: string
123
-
124
- @Field({ nullable: true })
125
- @Column({ nullable: true })
126
- theme: string
127
-
128
- @Column('simple-json', { nullable: true })
129
- @Field(type => ScalarObject, { nullable: true })
130
- iplist?: IPList
131
-
132
- @Column('simple-json', { nullable: true })
133
- @Field(type => ScalarObject, { nullable: true })
134
- attributes?: any
135
-
136
- @Field({ nullable: true })
137
- @CreateDateColumn()
138
- createdAt: Date
139
-
140
- @Field({ nullable: true })
141
- @UpdateDateColumn()
142
- updatedAt: Date
143
-
144
- @DeleteDateColumn()
145
- @Field({ nullable: true })
146
- deletedAt?: Date
147
- }
@@ -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 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 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
- }