lupine.api 1.1.58 → 1.1.60
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/README.md +3 -3
- package/admin/admin-about.tsx +12 -16
- package/admin/admin-config.tsx +47 -44
- package/admin/admin-css.tsx +3 -3
- package/admin/admin-db.tsx +75 -75
- package/admin/admin-frame-helper.tsx +364 -364
- package/admin/admin-frame.tsx +164 -164
- package/admin/admin-index.tsx +65 -65
- package/admin/admin-login.tsx +111 -111
- package/admin/admin-menu-edit.tsx +637 -637
- package/admin/admin-menu-list.tsx +87 -87
- package/admin/admin-page-edit.tsx +564 -564
- package/admin/admin-page-list.tsx +83 -83
- package/admin/admin-performance.tsx +28 -28
- package/admin/admin-release.tsx +427 -426
- package/admin/admin-resources.tsx +382 -382
- package/admin/admin-shell.tsx +89 -89
- package/admin/admin-table-data.tsx +146 -146
- package/admin/admin-table-list.tsx +230 -230
- package/admin/admin-test-animations.tsx +395 -395
- package/admin/admin-test-component.tsx +823 -808
- package/admin/admin-test-edit.tsx +319 -319
- package/admin/admin-test-themes.tsx +56 -56
- package/admin/admin-tokens.tsx +338 -338
- package/admin/design/admin-design.tsx +174 -174
- package/admin/design/block-grid.tsx +36 -36
- package/admin/design/block-grid1.tsx +21 -21
- package/admin/design/block-paragraph.tsx +19 -19
- package/admin/design/block-title.tsx +19 -19
- package/admin/design/design-block-box.tsx +140 -140
- package/admin/design/drag-data.tsx +24 -24
- package/admin/index.ts +9 -9
- package/admin/package.json +15 -15
- package/admin/tsconfig.json +127 -127
- package/dev/copy-folder.js +32 -32
- package/dev/cp-index-html.js +69 -69
- package/dev/file-utils.js +12 -12
- package/dev/index.js +18 -19
- package/dev/package.json +12 -12
- package/dev/plugin-ifelse.js +168 -168
- package/dev/plugin-ifelse.test.js +37 -37
- package/dev/run-cmd.js +14 -14
- package/dev/send-request.js +12 -12
- package/package.json +55 -55
- package/src/admin-api/admin-api-helper.ts +210 -205
- package/src/admin-api/admin-api.ts +65 -65
- package/src/admin-api/admin-auth.ts +152 -146
- package/src/admin-api/admin-config.ts +94 -84
- package/src/admin-api/admin-csv.ts +94 -94
- package/src/admin-api/admin-db.ts +269 -269
- package/src/admin-api/admin-menu.ts +135 -135
- package/src/admin-api/admin-page.ts +135 -135
- package/src/admin-api/admin-performance.ts +128 -128
- package/src/admin-api/admin-release.ts +706 -700
- package/src/admin-api/admin-resources.ts +318 -318
- package/src/admin-api/admin-token-helper.ts +82 -79
- package/src/admin-api/admin-tokens.ts +90 -90
- package/src/admin-api/index.ts +2 -2
- package/src/admin-api/web-config-api.ts +19 -19
- package/src/api/api-cache.ts +103 -103
- package/src/api/api-helper.ts +44 -44
- package/src/api/api-module.ts +67 -60
- package/src/api/api-router.ts +177 -177
- package/src/api/api-shared-storage.ts +64 -64
- package/src/api/async-storage.ts +5 -5
- package/src/api/debug-service.ts +56 -56
- package/src/api/encode-html.ts +27 -27
- package/src/api/handle-status.ts +75 -75
- package/src/api/index.ts +15 -16
- package/src/api/mini-web-socket.ts +270 -270
- package/src/api/server-content-type.ts +82 -82
- package/src/api/server-render.ts +235 -215
- package/src/api/shell-service.ts +74 -74
- package/src/api/simple-storage.ts +80 -80
- package/src/api/static-server.ts +128 -125
- package/src/api/to-client-delivery.ts +26 -26
- package/src/app/app-cache.ts +55 -55
- package/src/app/app-helper.ts +62 -62
- package/src/app/app-message.ts +109 -109
- package/src/app/app-shared-storage.ts +363 -363
- package/src/app/app-start.ts +136 -136
- package/src/app/cleanup-exit.ts +16 -16
- package/src/app/host-to-path.ts +38 -38
- package/src/app/index.ts +11 -11
- package/src/app/process-dev-requests.ts +130 -130
- package/src/app/web-listener.ts +294 -294
- package/src/app/web-processor.ts +47 -42
- package/src/app/web-server.ts +100 -100
- package/src/common-js/web-env.js +104 -104
- package/src/index.ts +7 -7
- package/src/lang/api-lang-en.ts +26 -26
- package/src/lang/api-lang-zh-cn.ts +27 -27
- package/src/lang/index.ts +2 -2
- package/src/lang/lang-helper.ts +76 -76
- package/src/lang/lang-props.ts +6 -6
- package/src/lib/db/db-helper.ts +23 -23
- package/src/lib/db/db-mysql.ts +249 -250
- package/src/lib/db/db-sqlite.ts +101 -101
- package/src/lib/db/db.spec.ts +28 -28
- package/src/lib/db/db.ts +325 -325
- package/src/lib/db/index.ts +5 -5
- package/src/lib/index.ts +3 -3
- package/src/lib/logger.spec.ts +214 -214
- package/src/lib/logger.ts +281 -281
- package/src/lib/runtime-require.ts +37 -37
- package/src/lib/utils/cookie-util.ts +34 -34
- package/src/lib/utils/crypto.ts +58 -58
- package/src/lib/utils/date-utils.ts +317 -317
- package/src/lib/utils/deep-merge.ts +37 -37
- package/src/lib/utils/delay.ts +12 -12
- package/src/lib/utils/file-setting.ts +55 -55
- package/src/lib/utils/format-bytes.ts +11 -11
- package/src/lib/utils/fs-utils.ts +158 -158
- package/src/lib/utils/get-env.ts +27 -27
- package/src/lib/utils/index.ts +12 -12
- package/src/lib/utils/is-type.ts +48 -48
- package/src/lib/utils/load-env.ts +14 -14
- package/src/lib/utils/pad.ts +6 -6
- package/src/models/api-base.ts +5 -5
- package/src/models/api-module-props.ts +10 -11
- package/src/models/api-router-props.ts +26 -26
- package/src/models/app-cache-props.ts +33 -33
- package/src/models/app-data-props.ts +10 -10
- package/src/models/app-helper-props.ts +6 -6
- package/src/models/app-shared-storage-props.ts +38 -38
- package/src/models/app-start-props.ts +18 -18
- package/src/models/async-storage-props.ts +13 -13
- package/src/models/db-config.ts +30 -30
- package/src/models/host-to-path-props.ts +12 -12
- package/src/models/index.ts +16 -16
- package/src/models/json-object.ts +8 -8
- package/src/models/locals-props.ts +36 -36
- package/src/models/logger-props.ts +84 -84
- package/src/models/simple-storage-props.ts +13 -14
- package/src/models/to-client-delivery-props.ts +6 -6
- package/tsconfig.json +115 -115
- package/dev/plugin-gen-versions.js +0 -20
package/src/lang/lang-helper.ts
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
import { deepMerge, Logger } from '../lib';
|
|
2
|
-
import { apiLangEn } from './api-lang-en';
|
|
3
|
-
import { LangProps, OneLangProps } from './lang-props';
|
|
4
|
-
import { apiCache } from '../api';
|
|
5
|
-
import { apiLangZhCn } from './api-lang-zh-cn';
|
|
6
|
-
|
|
7
|
-
/*
|
|
8
|
-
This module only provides server-side multi-language support.
|
|
9
|
-
|
|
10
|
-
language code: https://www.andiamo.co.uk/resources/iso-language-codes/
|
|
11
|
-
English: en, Chinese (PRC): zh-cn, Chinese (Hong Kong): zh-hk, Chinese (Taiwan): zh-tw, Japanese: ja, Korean: ko
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Multi-language reason:
|
|
15
|
-
This framework may be used for Chinese or English projects, but to keep only one code, the underlying framework needs to return messages, pages, and other content when called.
|
|
16
|
-
Before the call, a message list needs to be set up. The underlying framework returns the message corresponding to the language based on the key.
|
|
17
|
-
*/
|
|
18
|
-
export class LangHelper {
|
|
19
|
-
private static instance: LangHelper;
|
|
20
|
-
private logger = new Logger('lang-helper');
|
|
21
|
-
private langs: LangProps = {};
|
|
22
|
-
|
|
23
|
-
private constructor() {
|
|
24
|
-
this.addLang(apiLangEn);
|
|
25
|
-
this.addLang(apiLangZhCn);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public static getInstance(): LangHelper {
|
|
29
|
-
if (!LangHelper.instance) {
|
|
30
|
-
LangHelper.instance = new LangHelper();
|
|
31
|
-
}
|
|
32
|
-
return LangHelper.instance;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// 'My name is {name}' -> getLang('my_name_is', { name: 'John' })
|
|
36
|
-
public getLang(key: string, params?: { [key: string]: string | number | boolean }) {
|
|
37
|
-
return this.getLangWithLangName(key, apiCache.getLang(), '', params);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
public getLangWithLangName(
|
|
41
|
-
key: string,
|
|
42
|
-
langName = '',
|
|
43
|
-
defaultLang = '',
|
|
44
|
-
params?: { [key: string]: string | number | boolean }
|
|
45
|
-
) {
|
|
46
|
-
if (!langName) {
|
|
47
|
-
// if lang is not set, this should be called in a request
|
|
48
|
-
langName = apiCache.getLang();
|
|
49
|
-
}
|
|
50
|
-
const oneLang = this.langs[langName];
|
|
51
|
-
if (!oneLang || !oneLang.langs[key]) {
|
|
52
|
-
this.logger.warn(`Lang not found: ${langName}`);
|
|
53
|
-
return defaultLang || `${key} (Lang not found)`;
|
|
54
|
-
}
|
|
55
|
-
if (params) {
|
|
56
|
-
return oneLang.langs[key].replace(/\{(\w+)\}/g, (match, name) => {
|
|
57
|
-
return (params[name] || match).toString();
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
return oneLang.langs[key];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public getLangs() {
|
|
64
|
-
return this.langs;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Sub projects can extend or override the language set
|
|
68
|
-
public addLang(lang: OneLangProps) {
|
|
69
|
-
if (!this.langs[lang.langName]) {
|
|
70
|
-
this.langs[lang.langName] = { langName: lang.langName, langs: {} };
|
|
71
|
-
}
|
|
72
|
-
deepMerge(this.langs[lang.langName], lang);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export const langHelper = /* @__PURE__ */ LangHelper.getInstance();
|
|
1
|
+
import { deepMerge, Logger } from '../lib';
|
|
2
|
+
import { apiLangEn } from './api-lang-en';
|
|
3
|
+
import { LangProps, OneLangProps } from './lang-props';
|
|
4
|
+
import { apiCache } from '../api';
|
|
5
|
+
import { apiLangZhCn } from './api-lang-zh-cn';
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
This module only provides server-side multi-language support.
|
|
9
|
+
|
|
10
|
+
language code: https://www.andiamo.co.uk/resources/iso-language-codes/
|
|
11
|
+
English: en, Chinese (PRC): zh-cn, Chinese (Hong Kong): zh-hk, Chinese (Taiwan): zh-tw, Japanese: ja, Korean: ko
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
Multi-language reason:
|
|
15
|
+
This framework may be used for Chinese or English projects, but to keep only one code, the underlying framework needs to return messages, pages, and other content when called.
|
|
16
|
+
Before the call, a message list needs to be set up. The underlying framework returns the message corresponding to the language based on the key.
|
|
17
|
+
*/
|
|
18
|
+
export class LangHelper {
|
|
19
|
+
private static instance: LangHelper;
|
|
20
|
+
private logger = new Logger('lang-helper');
|
|
21
|
+
private langs: LangProps = {};
|
|
22
|
+
|
|
23
|
+
private constructor() {
|
|
24
|
+
this.addLang(apiLangEn);
|
|
25
|
+
this.addLang(apiLangZhCn);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public static getInstance(): LangHelper {
|
|
29
|
+
if (!LangHelper.instance) {
|
|
30
|
+
LangHelper.instance = new LangHelper();
|
|
31
|
+
}
|
|
32
|
+
return LangHelper.instance;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 'My name is {name}' -> getLang('my_name_is', { name: 'John' })
|
|
36
|
+
public getLang(key: string, params?: { [key: string]: string | number | boolean }) {
|
|
37
|
+
return this.getLangWithLangName(key, apiCache.getLang(), '', params);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public getLangWithLangName(
|
|
41
|
+
key: string,
|
|
42
|
+
langName = '',
|
|
43
|
+
defaultLang = '',
|
|
44
|
+
params?: { [key: string]: string | number | boolean }
|
|
45
|
+
) {
|
|
46
|
+
if (!langName) {
|
|
47
|
+
// if lang is not set, this should be called in a request
|
|
48
|
+
langName = apiCache.getLang();
|
|
49
|
+
}
|
|
50
|
+
const oneLang = this.langs[langName];
|
|
51
|
+
if (!oneLang || !oneLang.langs[key]) {
|
|
52
|
+
this.logger.warn(`Lang not found: ${langName}`);
|
|
53
|
+
return defaultLang || `${key} (Lang not found)`;
|
|
54
|
+
}
|
|
55
|
+
if (params) {
|
|
56
|
+
return oneLang.langs[key].replace(/\{(\w+)\}/g, (match, name) => {
|
|
57
|
+
return (params[name] || match).toString();
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return oneLang.langs[key];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public getLangs() {
|
|
64
|
+
return this.langs;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Sub projects can extend or override the language set
|
|
68
|
+
public addLang(lang: OneLangProps) {
|
|
69
|
+
if (!this.langs[lang.langName]) {
|
|
70
|
+
this.langs[lang.langName] = { langName: lang.langName, langs: {} };
|
|
71
|
+
}
|
|
72
|
+
deepMerge(this.langs[lang.langName], lang);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const langHelper = /* @__PURE__ */ LangHelper.getInstance();
|
package/src/lang/lang-props.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type OneLangProps = {
|
|
2
|
-
langName: string;
|
|
3
|
-
langs: { [key: string]: string };
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
export type LangProps = { [key: string]: OneLangProps };
|
|
1
|
+
export type OneLangProps = {
|
|
2
|
+
langName: string;
|
|
3
|
+
langs: { [key: string]: string };
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export type LangProps = { [key: string]: OneLangProps };
|
package/src/lib/db/db-helper.ts
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { Logger } from '../logger';
|
|
2
|
-
import { Db } from './db';
|
|
3
|
-
import { DbConfig } from '../../models/db-config';
|
|
4
|
-
import { DbSqlite } from './db-sqlite';
|
|
5
|
-
|
|
6
|
-
const logger = new Logger('db-helper');
|
|
7
|
-
export class DbHelper {
|
|
8
|
-
static async createInstance(option: DbConfig): Promise<Db> {
|
|
9
|
-
if (!option || !option.type) {
|
|
10
|
-
throw new Error('Invalid configuration');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const type = option.type.toLowerCase();
|
|
14
|
-
switch (type) {
|
|
15
|
-
case 'sqlite':
|
|
16
|
-
const db = new DbSqlite(option);
|
|
17
|
-
await db.connect();
|
|
18
|
-
return db;
|
|
19
|
-
default:
|
|
20
|
-
throw new Error(`Unsupported database type: ${type}`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
1
|
+
import { Logger } from '../logger';
|
|
2
|
+
import { Db } from './db';
|
|
3
|
+
import { DbConfig } from '../../models/db-config';
|
|
4
|
+
import { DbSqlite } from './db-sqlite';
|
|
5
|
+
|
|
6
|
+
const logger = new Logger('db-helper');
|
|
7
|
+
export class DbHelper {
|
|
8
|
+
static async createInstance(option: DbConfig): Promise<Db> {
|
|
9
|
+
if (!option || !option.type) {
|
|
10
|
+
throw new Error('Invalid configuration');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const type = option.type.toLowerCase();
|
|
14
|
+
switch (type) {
|
|
15
|
+
case 'sqlite':
|
|
16
|
+
const db = new DbSqlite(option);
|
|
17
|
+
await db.connect();
|
|
18
|
+
return db;
|
|
19
|
+
default:
|
|
20
|
+
throw new Error(`Unsupported database type: ${type}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|