@things-factory/shell 10.1.150 → 10.1.154
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/dist-server/database-errors-unspoken.d.ts +14 -0
- package/dist-server/database-errors-unspoken.js +37 -0
- package/dist-server/database-errors-unspoken.js.map +1 -0
- package/dist-server/server-dev.js +2 -0
- package/dist-server/server-dev.js.map +1 -1
- package/dist-server/server.js +3 -1
- package/dist-server/server.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/tests/database-errors-unspoken.test.ts +47 -0
- package/translations/en.json +1 -0
- package/translations/es.json +1 -0
- package/translations/ja.json +1 -0
- package/translations/ko.json +1 -0
- package/translations/ms.json +1 -0
- package/translations/zh.json +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/shell",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.154",
|
|
4
4
|
"description": "Core module for framework",
|
|
5
5
|
"bin": {
|
|
6
6
|
"things-factory": "bin/things-factory",
|
|
@@ -142,5 +142,5 @@
|
|
|
142
142
|
"pg": "^8.7.3",
|
|
143
143
|
"sqlite3": "^5.0.8"
|
|
144
144
|
},
|
|
145
|
-
"gitHead": "
|
|
145
|
+
"gitHead": "f28579aa7131cbb282eb8813f8b285d9d29bb525"
|
|
146
146
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ApolloServer } from '@apollo/server'
|
|
2
|
+
import { buildSchema } from 'graphql'
|
|
3
|
+
import { QueryFailedError } from 'typeorm'
|
|
4
|
+
|
|
5
|
+
import { databaseErrorsUnspoken, DATABASE_FAILED } from '../server/database-errors-unspoken'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 2026-10-12: operato-office's save toast read `저장하지 못했습니다: null value in column "original_id" of relation
|
|
9
|
+
* "transaction_histories" violates not-null constraint`. A database error answers one sentence in the request's
|
|
10
|
+
* language; any other error keeps its own message.
|
|
11
|
+
*/
|
|
12
|
+
const NOT_NULL = 'null value in column "original_id" of relation "transaction_histories" violates not-null constraint'
|
|
13
|
+
|
|
14
|
+
const schema = buildSchema(`type Query { database: String, refused: String }`)
|
|
15
|
+
const rootValue = {
|
|
16
|
+
database: () => {
|
|
17
|
+
throw new QueryFailedError('INSERT INTO "transaction_histories" ...', [], new Error(NOT_NULL))
|
|
18
|
+
},
|
|
19
|
+
refused: () => {
|
|
20
|
+
throw new Error('a counterparty needs a name')
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const server = new ApolloServer({ schema, rootValue, plugins: [databaseErrorsUnspoken()] })
|
|
25
|
+
|
|
26
|
+
beforeAll(() => server.start())
|
|
27
|
+
afterAll(() => server.stop())
|
|
28
|
+
|
|
29
|
+
const t = (key: string) => (key === DATABASE_FAILED ? '서버에서 처리하지 못했습니다. 관리자에게 알려 주세요.' : key)
|
|
30
|
+
|
|
31
|
+
const ask = async (query: string) => {
|
|
32
|
+
const response = await server.executeOperation({ query }, { contextValue: { t } })
|
|
33
|
+
return response.body.kind === 'single' ? response.body.singleResult : undefined
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
describe('an error from the database', () => {
|
|
37
|
+
it('answers one sentence in the request language, not the database text', async () => {
|
|
38
|
+
const message = (await ask('{ database }'))?.errors?.[0]?.message
|
|
39
|
+
|
|
40
|
+
expect(message).toBe('서버에서 처리하지 못했습니다. 관리자에게 알려 주세요.')
|
|
41
|
+
expect(message).not.toContain('original_id')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('leaves any other error as it is', async () => {
|
|
45
|
+
expect((await ask('{ refused }'))?.errors?.[0]?.message).toBe('a counterparty needs a name')
|
|
46
|
+
})
|
|
47
|
+
})
|
package/translations/en.json
CHANGED
|
@@ -171,6 +171,7 @@
|
|
|
171
171
|
"label.released": "released",
|
|
172
172
|
"label.import": "import",
|
|
173
173
|
"error.address-not-allowed": "this site does not accept connections from where you are. ask its administrator.",
|
|
174
|
+
"error.database-failed": "The server could not process this. Tell your administrator.",
|
|
174
175
|
"button.undo": "undo",
|
|
175
176
|
"button.redo": "redo",
|
|
176
177
|
"button.fit-view": "fit to view",
|
package/translations/es.json
CHANGED
|
@@ -171,6 +171,7 @@
|
|
|
171
171
|
"label.released": "publicado",
|
|
172
172
|
"label.import": "importar",
|
|
173
173
|
"error.address-not-allowed": "este sitio no acepta conexiones desde su ubicación actual. consulte a su administrador.",
|
|
174
|
+
"error.database-failed": "El servidor no pudo procesar esto. Avise a su administrador.",
|
|
174
175
|
"button.undo": "deshacer",
|
|
175
176
|
"button.redo": "rehacer",
|
|
176
177
|
"button.fit-view": "ajustar a la vista",
|
package/translations/ja.json
CHANGED
|
@@ -171,6 +171,7 @@
|
|
|
171
171
|
"label.released": "公開済み",
|
|
172
172
|
"label.import": "インポート",
|
|
173
173
|
"error.address-not-allowed": "この事業所は現在の場所からの接続を受け付けていません。事業所の管理者にお問い合わせください。",
|
|
174
|
+
"error.database-failed": "サーバーで処理できませんでした。管理者にお知らせください。",
|
|
174
175
|
"button.undo": "元に戻す",
|
|
175
176
|
"button.redo": "やり直す",
|
|
176
177
|
"button.fit-view": "画面に合わせる",
|
package/translations/ko.json
CHANGED
|
@@ -171,6 +171,7 @@
|
|
|
171
171
|
"label.released": "발행됨",
|
|
172
172
|
"label.import": "가져오기",
|
|
173
173
|
"error.address-not-allowed": "이 사업장은 지금 계신 곳에서의 접속을 받지 않습니다. 사업장 관리자에게 문의하십시오.",
|
|
174
|
+
"error.database-failed": "서버에서 처리하지 못했습니다. 관리자에게 알려 주세요.",
|
|
174
175
|
"button.undo": "되돌리기",
|
|
175
176
|
"button.redo": "다시 실행",
|
|
176
177
|
"button.fit-view": "화면에 맞추기",
|
package/translations/ms.json
CHANGED
|
@@ -171,6 +171,7 @@
|
|
|
171
171
|
"label.released": "diterbitkan",
|
|
172
172
|
"label.import": "import",
|
|
173
173
|
"error.address-not-allowed": "tapak ini tidak menerima sambungan dari lokasi anda. sila hubungi pentadbirnya.",
|
|
174
|
+
"error.database-failed": "Pelayan tidak dapat memproses ini. Sila maklumkan kepada pentadbir anda.",
|
|
174
175
|
"button.undo": "buat asal",
|
|
175
176
|
"button.redo": "buat semula",
|
|
176
177
|
"button.fit-view": "muat ke paparan",
|
package/translations/zh.json
CHANGED