@appsemble/cli 0.20.45 → 0.21.1

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 (131) hide show
  1. package/README.md +145 -3
  2. package/commands/app/create.d.ts +2 -2
  3. package/commands/app/update.d.ts +2 -2
  4. package/commands/organization/create.d.ts +1 -1
  5. package/commands/organization/update.d.ts +1 -1
  6. package/commands/serve.d.ts +14 -0
  7. package/commands/serve.js +265 -0
  8. package/index.js +2 -0
  9. package/lib/app.d.ts +4 -4
  10. package/lib/app.js +14 -5
  11. package/lib/block.d.ts +2 -2
  12. package/lib/block.js +17 -3
  13. package/lib/block.test.js +6 -4
  14. package/lib/coercers.d.ts +2 -2
  15. package/lib/createServers.d.ts +15 -0
  16. package/lib/createServers.js +58 -0
  17. package/lib/getBlockConfigFromTypeScript.js +3 -2
  18. package/lib/getBlockConfigFromTypeScript.test.js +2 -2
  19. package/lib/organization.d.ts +1 -1
  20. package/package.json +25 -8
  21. package/server/argv.d.ts +117 -0
  22. package/server/argv.js +25 -0
  23. package/server/controllers/action.d.ts +6 -0
  24. package/server/controllers/action.js +8 -0
  25. package/server/controllers/appMembers.d.ts +2 -0
  26. package/server/controllers/appMembers.js +4 -0
  27. package/server/controllers/appMessages.d.ts +2 -0
  28. package/server/controllers/appMessages.js +4 -0
  29. package/server/controllers/assets.d.ts +4 -0
  30. package/server/controllers/assets.js +6 -0
  31. package/server/controllers/index.d.ts +7 -0
  32. package/server/controllers/index.js +8 -0
  33. package/server/controllers/oauth2Provider.d.ts +2 -0
  34. package/server/controllers/oauth2Provider.js +4 -0
  35. package/server/controllers/resources.d.ts +7 -0
  36. package/server/controllers/resources.js +9 -0
  37. package/server/controllers/teams.d.ts +2 -0
  38. package/server/controllers/teams.js +4 -0
  39. package/server/db/index.d.ts +2 -0
  40. package/server/db/index.js +10 -0
  41. package/server/db/methods.d.ts +11 -0
  42. package/server/db/methods.js +232 -0
  43. package/server/db/methods.test.js +365 -0
  44. package/server/models/Resource.d.ts +14 -0
  45. package/server/models/Resource.js +23 -0
  46. package/server/models/Theme.d.ts +17 -0
  47. package/server/models/Theme.js +11 -0
  48. package/server/options/applyAppServiceSecrets.d.ts +3 -0
  49. package/server/options/applyAppServiceSecrets.js +2 -0
  50. package/server/options/checkRole.d.ts +1 -0
  51. package/server/options/checkRole.js +2 -0
  52. package/server/options/checkRole.test.d.ts +1 -0
  53. package/server/options/checkRole.test.js +12 -0
  54. package/server/options/createAppAsset.d.ts +2 -0
  55. package/server/options/createAppAsset.js +15 -0
  56. package/server/options/createAppResourcesWithAssets.d.ts +3 -0
  57. package/server/options/createAppResourcesWithAssets.js +18 -0
  58. package/server/options/createSettings.d.ts +2 -0
  59. package/server/options/createSettings.js +15 -0
  60. package/server/options/createTheme.d.ts +2 -0
  61. package/server/options/createTheme.js +5 -0
  62. package/server/options/deleteAppAsset.d.ts +2 -0
  63. package/server/options/deleteAppAsset.js +15 -0
  64. package/server/options/deleteAppResource.d.ts +2 -0
  65. package/server/options/deleteAppResource.js +5 -0
  66. package/server/options/email.d.ts +1 -0
  67. package/server/options/email.js +2 -0
  68. package/server/options/getApp.d.ts +3 -0
  69. package/server/options/getApp.js +5 -0
  70. package/server/options/getAppAssets.d.ts +2 -0
  71. package/server/options/getAppAssets.js +12 -0
  72. package/server/options/getAppBlockStyles.d.ts +2 -0
  73. package/server/options/getAppBlockStyles.js +26 -0
  74. package/server/options/getAppDetails.d.ts +2 -0
  75. package/server/options/getAppDetails.js +8 -0
  76. package/server/options/getAppIcon.d.ts +3 -0
  77. package/server/options/getAppIcon.js +6 -0
  78. package/server/options/getAppMembers.d.ts +3 -0
  79. package/server/options/getAppMembers.js +4 -0
  80. package/server/options/getAppMessages.d.ts +3 -0
  81. package/server/options/getAppMessages.js +4 -0
  82. package/server/options/getAppResource.d.ts +3 -0
  83. package/server/options/getAppResource.js +5 -0
  84. package/server/options/getAppResources.d.ts +3 -0
  85. package/server/options/getAppResources.js +5 -0
  86. package/server/options/getAppScreenshots.d.ts +2 -0
  87. package/server/options/getAppScreenshots.js +20 -0
  88. package/server/options/getAppStyles.d.ts +2 -0
  89. package/server/options/getAppStyles.js +7 -0
  90. package/server/options/getAppTeams.d.ts +2 -0
  91. package/server/options/getAppTeams.js +4 -0
  92. package/server/options/getAppUrl.d.ts +2 -0
  93. package/server/options/getAppUrl.js +5 -0
  94. package/server/options/getAppUserInfo.d.ts +3 -0
  95. package/server/options/getAppUserInfo.js +4 -0
  96. package/server/options/getBlockAsset.d.ts +2 -0
  97. package/server/options/getBlockAsset.js +28 -0
  98. package/server/options/getBlockAssetsPaths.d.ts +2 -0
  99. package/server/options/getBlockAssetsPaths.js +8 -0
  100. package/server/options/getBlockMessages.d.ts +2 -0
  101. package/server/options/getBlockMessages.js +4 -0
  102. package/server/options/getCsp.d.ts +2 -0
  103. package/server/options/getCsp.js +13 -0
  104. package/server/options/getDbUpdated.d.ts +1 -0
  105. package/server/options/getDbUpdated.js +2 -0
  106. package/server/options/getHost.d.ts +2 -0
  107. package/server/options/getHost.js +5 -0
  108. package/server/options/getTheme.d.ts +2 -0
  109. package/server/options/getTheme.js +8 -0
  110. package/server/options/index.d.ts +35 -0
  111. package/server/options/index.js +36 -0
  112. package/server/options/options.d.ts +2 -0
  113. package/server/options/options.js +39 -0
  114. package/server/options/parseQuery.d.ts +2 -0
  115. package/server/options/parseQuery.js +82 -0
  116. package/server/options/parseQuery.test.d.ts +1 -0
  117. package/server/options/parseQuery.test.js +43 -0
  118. package/server/options/reloadUser.d.ts +1 -0
  119. package/server/options/reloadUser.js +2 -0
  120. package/server/options/sendNotifications.d.ts +1 -0
  121. package/server/options/sendNotifications.js +2 -0
  122. package/server/options/updateAppResource.d.ts +3 -0
  123. package/server/options/updateAppResource.js +5 -0
  124. package/server/options/verifyResourceActionPermission.d.ts +1 -0
  125. package/server/options/verifyResourceActionPermission.js +2 -0
  126. package/server/routes/appRouter/index.d.ts +2 -0
  127. package/server/routes/appRouter/index.js +4 -0
  128. package/vitest.config.d.ts +2 -0
  129. package/vitest.setup.d.ts +1 -0
  130. package/{jest.setup.js → vitest.setup.js} +1 -1
  131. /package/{jest.setup.d.ts → server/db/methods.test.d.ts} +0 -0
@@ -0,0 +1,82 @@
1
+ import { processLiteral, } from '@appsemble/node-utils';
2
+ import { defaultParser, TokenType } from '@odata/parser';
3
+ const operators = new Map([
4
+ [TokenType.EqualsExpression, 'eq'],
5
+ [TokenType.LesserOrEqualsExpression, 'lte'],
6
+ [TokenType.LesserThanExpression, 'lt'],
7
+ [TokenType.GreaterOrEqualsExpression, 'gte'],
8
+ [TokenType.GreaterThanExpression, 'gt'],
9
+ [TokenType.NotEqualsExpression, 'ne'],
10
+ ]);
11
+ function renameOData(name) {
12
+ switch (name) {
13
+ case '$author':
14
+ return 'AuthorId';
15
+ case 'id':
16
+ return name;
17
+ default:
18
+ return name;
19
+ }
20
+ }
21
+ function processToken(token) {
22
+ if (token.type === TokenType.ParenExpression) {
23
+ return processToken(token.value);
24
+ }
25
+ if (token.type === TokenType.FirstMemberExpression) {
26
+ return token.raw;
27
+ }
28
+ if (operators.has(token.type)) {
29
+ return {
30
+ [processToken(token.value.left)]: {
31
+ [operators.get(token.type)]: processToken(token.value.right),
32
+ },
33
+ };
34
+ }
35
+ if (token.type === TokenType.Literal) {
36
+ return processLiteral(token);
37
+ }
38
+ throw new TypeError(`${token.position}: Unhandled OData type: ${token.type}`);
39
+ }
40
+ function processLogicalExpression(token) {
41
+ if (token.type === TokenType.BoolParenExpression || token.type === TokenType.CommonExpression) {
42
+ return processLogicalExpression(token.value);
43
+ }
44
+ if (token.type === TokenType.NotExpression) {
45
+ return { not: processLogicalExpression(token.value) };
46
+ }
47
+ const op = token.type === TokenType.AndExpression
48
+ ? 'and'
49
+ : token.type === TokenType.OrExpression
50
+ ? 'or'
51
+ : undefined;
52
+ if (!op) {
53
+ return processToken(token);
54
+ }
55
+ const flatten = (expr) => (op in expr ? expr[op] : expr);
56
+ const left = flatten(processLogicalExpression(token.value.left));
57
+ const right = flatten(processLogicalExpression(token.value.right));
58
+ return { [op]: [].concat(left).concat(right) };
59
+ }
60
+ function parseOdataFilter(query) {
61
+ if (!query) {
62
+ return {};
63
+ }
64
+ const ast = typeof query === 'string' ? defaultParser.filter(query) : query;
65
+ return processLogicalExpression(ast);
66
+ }
67
+ function parseOdataOrder(query) {
68
+ if (!query) {
69
+ return [];
70
+ }
71
+ return query.split(/,/g).map((line) => {
72
+ const [name, direction] = line.split(' ');
73
+ return [renameOData(name), direction === null || direction === void 0 ? void 0 : direction.toUpperCase()];
74
+ });
75
+ }
76
+ export function parseQuery({ $filter, $orderby }) {
77
+ return {
78
+ where: parseOdataFilter($filter),
79
+ order: parseOdataOrder($orderby ? $orderby.replaceAll(/(^|\B)\$author\/id(\b|$)/g, '$author') : undefined),
80
+ };
81
+ }
82
+ //# sourceMappingURL=parseQuery.js.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ import { parseQuery } from './parseQuery.js';
2
+ describe('parseQuery', () => {
3
+ it('should parse the query correctly with valid parameters', () => {
4
+ const queryParams = {
5
+ $filter: "AuthorId eq 1 and (Title ne 'example' or Year gt 2020)",
6
+ $orderby: 'Title asc,Year desc',
7
+ };
8
+ const expectedParsedQuery = {
9
+ where: {
10
+ and: [
11
+ { AuthorId: { eq: 1 } },
12
+ {
13
+ or: [{ Title: { ne: 'example' } }, { Year: { gt: 2020 } }],
14
+ },
15
+ ],
16
+ },
17
+ order: [
18
+ ['Title', 'ASC'],
19
+ ['Year', 'DESC'],
20
+ ],
21
+ };
22
+ const parsedQuery = parseQuery(queryParams);
23
+ expect(parsedQuery).toStrictEqual(expectedParsedQuery);
24
+ });
25
+ it('should parse the query with special characters in $orderby', () => {
26
+ const queryParams = {
27
+ $filter: "Title eq 'example'",
28
+ $orderby: 'Title asc,$author/id desc',
29
+ };
30
+ const expectedParsedQuery = {
31
+ where: {
32
+ Title: { eq: 'example' },
33
+ },
34
+ order: [
35
+ ['Title', 'ASC'],
36
+ ['AuthorId', 'DESC'],
37
+ ],
38
+ };
39
+ const parsedQuery = parseQuery(queryParams);
40
+ expect(parsedQuery).toStrictEqual(expectedParsedQuery);
41
+ });
42
+ });
43
+ //# sourceMappingURL=parseQuery.test.js.map
@@ -0,0 +1 @@
1
+ export declare const reloadUser: () => Promise<Record<string, any>>;
@@ -0,0 +1,2 @@
1
+ export const reloadUser = () => Promise.resolve({});
2
+ //# sourceMappingURL=reloadUser.js.map
@@ -0,0 +1 @@
1
+ export declare const sendNotifications: () => Promise<void>;
@@ -0,0 +1,2 @@
1
+ export const sendNotifications = () => Promise.resolve();
2
+ //# sourceMappingURL=sendNotifications.js.map
@@ -0,0 +1,3 @@
1
+ import { type UpdateAppResourceParams } from '@appsemble/node-utils';
2
+ import { type Resource as ResourceInterface } from '@appsemble/types';
3
+ export declare function updateAppResource({ id, resource, type, }: UpdateAppResourceParams): Promise<ResourceInterface | null>;
@@ -0,0 +1,5 @@
1
+ import { Resource } from '../models/Resource.js';
2
+ export function updateAppResource({ id, resource, type, }) {
3
+ return Resource.updateOne(id, resource, type);
4
+ }
5
+ //# sourceMappingURL=updateAppResource.js.map
@@ -0,0 +1 @@
1
+ export declare const verifyResourceActionPermission: () => Promise<Record<string, any>>;
@@ -0,0 +1,2 @@
1
+ export const verifyResourceActionPermission = () => Promise.resolve({});
2
+ //# sourceMappingURL=verifyResourceActionPermission.js.map
@@ -0,0 +1,2 @@
1
+ import { type Middleware } from 'koa';
2
+ export declare const appRouter: Middleware;
@@ -0,0 +1,4 @@
1
+ import { createAppRouter } from '@appsemble/node-utils';
2
+ import { options } from '../../options/options.js';
3
+ export const appRouter = createAppRouter(options);
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vitest/dist/config.js").UserProjectConfigExport;
2
+ export default _default;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
1
  import { setFixtureBase, setLogLevel } from '@appsemble/node-utils';
2
2
  setFixtureBase(import.meta);
3
3
  setLogLevel(0);
4
- //# sourceMappingURL=jest.setup.js.map
4
+ //# sourceMappingURL=vitest.setup.js.map