@appsemble/node-utils 0.29.6 → 0.29.8

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 CHANGED
@@ -1,9 +1,9 @@
1
- # ![](https://gitlab.com/appsemble/appsemble/-/raw/0.29.6/config/assets/logo.svg) Appsemble Node Utilities
1
+ # ![](https://gitlab.com/appsemble/appsemble/-/raw/0.29.8/config/assets/logo.svg) Appsemble Node Utilities
2
2
 
3
3
  > NodeJS utilities used by Appsemble internally.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/@appsemble/node-utils)](https://www.npmjs.com/package/@appsemble/node-utils)
6
- [![GitLab CI](https://gitlab.com/appsemble/appsemble/badges/0.29.6/pipeline.svg)](https://gitlab.com/appsemble/appsemble/-/releases/0.29.6)
6
+ [![GitLab CI](https://gitlab.com/appsemble/appsemble/badges/0.29.8/pipeline.svg)](https://gitlab.com/appsemble/appsemble/-/releases/0.29.8)
7
7
  [![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io)
8
8
 
9
9
  ## Table of Contents
@@ -26,5 +26,5 @@ compatibility is not guaranteed.
26
26
 
27
27
  ## License
28
28
 
29
- [LGPL-3.0-only](https://gitlab.com/appsemble/appsemble/-/blob/0.29.6/LICENSE.md) ©
29
+ [LGPL-3.0-only](https://gitlab.com/appsemble/appsemble/-/blob/0.29.8/LICENSE.md) ©
30
30
  [Appsemble](https://appsemble.com)
@@ -0,0 +1,3 @@
1
+ import { type Options } from '@appsemble/node-utils';
2
+ import { type Context } from 'koa';
3
+ export declare function getMessagesUtil(ctx: Context, language: string, appId: number, merge: string[] | string, { getApp, getAppMessages, getBlockMessages }: Options, override?: string[] | string): Promise<Record<string, any>>;
@@ -0,0 +1,70 @@
1
+ import { getAppsembleMessages, mergeMessages, } from '@appsemble/node-utils';
2
+ import { defaultLocale, extractAppMessages, normalizeBlockName, } from '@appsemble/utils';
3
+ import tags from 'language-tags';
4
+ import { assertKoaError, throwKoaError } from './koa.js';
5
+ export async function getMessagesUtil(ctx, language, appId, merge, { getApp, getAppMessages, getBlockMessages }, override = 'true') {
6
+ var _a, _b, _c, _d, _e;
7
+ if (!tags.check(language)) {
8
+ throwKoaError(ctx, 400, '`Language “${language}” is invalid`');
9
+ }
10
+ const lang = language.toLowerCase();
11
+ const baseLanguage = tags(language)
12
+ .subtags()
13
+ .find((sub) => sub.type() === 'language');
14
+ const baseLang = baseLanguage && String(baseLanguage).toLowerCase();
15
+ const app = await getApp({ context: ctx, query: { where: { id: appId } } });
16
+ assertKoaError(!app, ctx, 404, 'App not found');
17
+ const blockPrefixes = [];
18
+ const blockQuery = [];
19
+ const appMessages = await getAppMessages({ context: ctx, app, language });
20
+ const coreMessages = await getAppsembleMessages(lang, baseLang);
21
+ const messages = {
22
+ core: Object.fromEntries(Object.entries(coreMessages).filter(([key]) => key.startsWith('app') || key.startsWith('react-components') || key.startsWith('server'))),
23
+ blocks: {},
24
+ ...extractAppMessages(app.definition, (block, prefix) => {
25
+ const blockName = normalizeBlockName(block.type);
26
+ const [org, name] = blockName.split('/');
27
+ blockQuery.push({ version: block.version, OrganizationId: org.slice(1), name });
28
+ blockPrefixes.push([blockName, prefix]);
29
+ }),
30
+ };
31
+ const blockMessages = await getBlockMessages({ context: ctx, blockQuery, baseLang, lang });
32
+ if ((!appMessages.length || (merge && !appMessages.some((m) => m.language === lang))) &&
33
+ lang !== (app.definition.defaultLanguage || defaultLocale)) {
34
+ throwKoaError(ctx, 404, `Language “${language}” could not be found`);
35
+ }
36
+ const baseLanguageMessages = override === 'true' && appMessages.find((m) => m.language === baseLang);
37
+ const languageMessages = override === 'true' && appMessages.find((m) => m.language === lang);
38
+ for (const block of blockMessages) {
39
+ const { name } = block;
40
+ const defaultMessages = (_a = block.messages) === null || _a === void 0 ? void 0 : _a[defaultLocale];
41
+ const blockBaseLanguageMessages = baseLang && ((_b = block.messages) === null || _b === void 0 ? void 0 : _b[baseLang]);
42
+ const blockLanguageMessages = (_c = block.messages) === null || _c === void 0 ? void 0 : _c[language];
43
+ const blockVersionMessages = {
44
+ ...defaultMessages,
45
+ ...Object.fromEntries(Object.entries(blockBaseLanguageMessages !== null && blockBaseLanguageMessages !== void 0 ? blockBaseLanguageMessages : {}).filter(([, value]) => value)),
46
+ ...Object.fromEntries(Object.entries(blockLanguageMessages !== null && blockLanguageMessages !== void 0 ? blockLanguageMessages : {}).filter(([, value]) => value)),
47
+ };
48
+ if (messages.blocks[name]) {
49
+ messages.blocks[name][block.version] = blockVersionMessages;
50
+ }
51
+ else {
52
+ messages.blocks[name] = {
53
+ [block.version]: blockVersionMessages,
54
+ };
55
+ }
56
+ if (override !== 'true') {
57
+ const prefixed = blockPrefixes.filter(([b]) => b === name);
58
+ for (const [messageId, value] of Object.entries(blockVersionMessages)) {
59
+ for (const [, prefix] of prefixed) {
60
+ messages.app[`${prefix.join('.')}.${messageId}`] = value;
61
+ }
62
+ }
63
+ }
64
+ }
65
+ return {
66
+ language: lang,
67
+ messages: mergeMessages(messages, (_d = baseLanguageMessages === null || baseLanguageMessages === void 0 ? void 0 : baseLanguageMessages.messages) !== null && _d !== void 0 ? _d : {}, (_e = languageMessages === null || languageMessages === void 0 ? void 0 : languageMessages.messages) !== null && _e !== void 0 ? _e : {}),
68
+ };
69
+ }
70
+ //# sourceMappingURL=getMessagesUtil.js.map
package/index.d.ts CHANGED
@@ -35,4 +35,5 @@ export * from './EmailQuotaExceededError.js';
35
35
  export * from './EmailError.js';
36
36
  export * from './UserPropertiesError.js';
37
37
  export * from './authentication.js';
38
+ export * from './getMessagesUtil.js';
38
39
  export * from './container/index.js';
package/index.js CHANGED
@@ -35,5 +35,6 @@ export * from './EmailQuotaExceededError.js';
35
35
  export * from './EmailError.js';
36
36
  export * from './UserPropertiesError.js';
37
37
  export * from './authentication.js';
38
+ export * from './getMessagesUtil.js';
38
39
  export * from './container/index.js';
39
40
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appsemble/node-utils",
3
- "version": "0.29.6",
3
+ "version": "0.29.8",
4
4
  "description": "NodeJS utilities used by Appsemble internally.",
5
5
  "keywords": [
6
6
  "app",
@@ -38,8 +38,8 @@
38
38
  "test": "vitest"
39
39
  },
40
40
  "dependencies": {
41
- "@appsemble/types": "0.29.6",
42
- "@appsemble/utils": "0.29.6",
41
+ "@appsemble/types": "0.29.8",
42
+ "@appsemble/utils": "0.29.8",
43
43
  "@formatjs/fast-memoize": "^2.0.0",
44
44
  "@fortawesome/fontawesome-free": "^6.0.0",
45
45
  "@kubernetes/client-node": "0.21.0",
@@ -1,3 +1,3 @@
1
1
  import { type Options } from '@appsemble/node-utils';
2
2
  import { type Middleware } from 'koa';
3
- export declare function createGetMessages({ getApp, getAppMessages, getBlockMessages, }: Options): Middleware;
3
+ export declare function createGetMessages(options: Options): Middleware;
@@ -1,72 +1,8 @@
1
- import { assertKoaError, getAppsembleMessages, mergeMessages, throwKoaError, } from '@appsemble/node-utils';
2
- import { defaultLocale, extractAppMessages, normalizeBlockName, } from '@appsemble/utils';
3
- import tags from 'language-tags';
4
- export function createGetMessages({ getApp, getAppMessages, getBlockMessages, }) {
1
+ import { getMessagesUtil } from '@appsemble/node-utils';
2
+ export function createGetMessages(options) {
5
3
  return async (ctx) => {
6
- var _a, _b, _c, _d, _e;
7
4
  const { pathParams: { appId, language }, query: { merge, override = 'true' }, } = ctx;
8
- if (!tags.check(language)) {
9
- throwKoaError(ctx, 400, '`Language “${language}” is invalid`');
10
- }
11
- const lang = language.toLowerCase();
12
- const baseLanguage = tags(language)
13
- .subtags()
14
- .find((sub) => sub.type() === 'language');
15
- const baseLang = baseLanguage && String(baseLanguage).toLowerCase();
16
- const app = await getApp({ context: ctx, query: { where: { id: appId } } });
17
- assertKoaError(!app, ctx, 404, 'App not found');
18
- const blockPrefixes = [];
19
- const blockQuery = [];
20
- const appMessages = await getAppMessages({ context: ctx, app, language });
21
- const coreMessages = await getAppsembleMessages(lang, baseLang);
22
- const messages = {
23
- core: Object.fromEntries(Object.entries(coreMessages).filter(([key]) => key.startsWith('app') || key.startsWith('react-components') || key.startsWith('server'))),
24
- blocks: {},
25
- ...extractAppMessages(app.definition, (block, prefix) => {
26
- const blockName = normalizeBlockName(block.type);
27
- const [org, name] = blockName.split('/');
28
- blockQuery.push({ version: block.version, OrganizationId: org.slice(1), name });
29
- blockPrefixes.push([blockName, prefix]);
30
- }),
31
- };
32
- const blockMessages = await getBlockMessages({ context: ctx, blockQuery, baseLang, lang });
33
- if ((!appMessages.length || (merge && !appMessages.some((m) => m.language === lang))) &&
34
- lang !== (app.definition.defaultLanguage || defaultLocale)) {
35
- throwKoaError(ctx, 404, `Language “${language}” could not be found`);
36
- }
37
- const baseLanguageMessages = override === 'true' && appMessages.find((m) => m.language === baseLang);
38
- const languageMessages = override === 'true' && appMessages.find((m) => m.language === lang);
39
- for (const block of blockMessages) {
40
- const { name } = block;
41
- const defaultMessages = (_a = block.messages) === null || _a === void 0 ? void 0 : _a[defaultLocale];
42
- const blockBaseLanguageMessages = baseLang && ((_b = block.messages) === null || _b === void 0 ? void 0 : _b[baseLang]);
43
- const blockLanguageMessages = (_c = block.messages) === null || _c === void 0 ? void 0 : _c[language];
44
- const blockVersionMessages = {
45
- ...defaultMessages,
46
- ...Object.fromEntries(Object.entries(blockBaseLanguageMessages !== null && blockBaseLanguageMessages !== void 0 ? blockBaseLanguageMessages : {}).filter(([, value]) => value)),
47
- ...Object.fromEntries(Object.entries(blockLanguageMessages !== null && blockLanguageMessages !== void 0 ? blockLanguageMessages : {}).filter(([, value]) => value)),
48
- };
49
- if (messages.blocks[name]) {
50
- messages.blocks[name][block.version] = blockVersionMessages;
51
- }
52
- else {
53
- messages.blocks[name] = {
54
- [block.version]: blockVersionMessages,
55
- };
56
- }
57
- if (override !== 'true') {
58
- const prefixed = blockPrefixes.filter(([b]) => b === name);
59
- for (const [messageId, value] of Object.entries(blockVersionMessages)) {
60
- for (const [, prefix] of prefixed) {
61
- messages.app[`${prefix.join('.')}.${messageId}`] = value;
62
- }
63
- }
64
- }
65
- }
66
- ctx.body = {
67
- language: lang,
68
- messages: mergeMessages(messages, (_d = baseLanguageMessages === null || baseLanguageMessages === void 0 ? void 0 : baseLanguageMessages.messages) !== null && _d !== void 0 ? _d : {}, (_e = languageMessages === null || languageMessages === void 0 ? void 0 : languageMessages.messages) !== null && _e !== void 0 ? _e : {}),
69
- };
5
+ ctx.body = await getMessagesUtil(ctx, language, appId, merge, options, override);
70
6
  };
71
7
  }
72
8
  //# sourceMappingURL=appMessages.js.map
package/server/types.d.ts CHANGED
@@ -105,6 +105,7 @@ declare module 'koas-parameters' {
105
105
  screenshots: boolean;
106
106
  readmes: boolean;
107
107
  roles: string[];
108
+ includeMessages: boolean;
108
109
  }
109
110
  }
110
111
  export type Operator = 'and' | 'not' | 'or';