@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.
- package/README.md +145 -3
- package/commands/app/create.d.ts +2 -2
- package/commands/app/update.d.ts +2 -2
- package/commands/organization/create.d.ts +1 -1
- package/commands/organization/update.d.ts +1 -1
- package/commands/serve.d.ts +14 -0
- package/commands/serve.js +265 -0
- package/index.js +2 -0
- package/lib/app.d.ts +4 -4
- package/lib/app.js +14 -5
- package/lib/block.d.ts +2 -2
- package/lib/block.js +17 -3
- package/lib/block.test.js +6 -4
- package/lib/coercers.d.ts +2 -2
- package/lib/createServers.d.ts +15 -0
- package/lib/createServers.js +58 -0
- package/lib/getBlockConfigFromTypeScript.js +3 -2
- package/lib/getBlockConfigFromTypeScript.test.js +2 -2
- package/lib/organization.d.ts +1 -1
- package/package.json +25 -8
- package/server/argv.d.ts +117 -0
- package/server/argv.js +25 -0
- package/server/controllers/action.d.ts +6 -0
- package/server/controllers/action.js +8 -0
- package/server/controllers/appMembers.d.ts +2 -0
- package/server/controllers/appMembers.js +4 -0
- package/server/controllers/appMessages.d.ts +2 -0
- package/server/controllers/appMessages.js +4 -0
- package/server/controllers/assets.d.ts +4 -0
- package/server/controllers/assets.js +6 -0
- package/server/controllers/index.d.ts +7 -0
- package/server/controllers/index.js +8 -0
- package/server/controllers/oauth2Provider.d.ts +2 -0
- package/server/controllers/oauth2Provider.js +4 -0
- package/server/controllers/resources.d.ts +7 -0
- package/server/controllers/resources.js +9 -0
- package/server/controllers/teams.d.ts +2 -0
- package/server/controllers/teams.js +4 -0
- package/server/db/index.d.ts +2 -0
- package/server/db/index.js +10 -0
- package/server/db/methods.d.ts +11 -0
- package/server/db/methods.js +232 -0
- package/server/db/methods.test.js +365 -0
- package/server/models/Resource.d.ts +14 -0
- package/server/models/Resource.js +23 -0
- package/server/models/Theme.d.ts +17 -0
- package/server/models/Theme.js +11 -0
- package/server/options/applyAppServiceSecrets.d.ts +3 -0
- package/server/options/applyAppServiceSecrets.js +2 -0
- package/server/options/checkRole.d.ts +1 -0
- package/server/options/checkRole.js +2 -0
- package/server/options/checkRole.test.d.ts +1 -0
- package/server/options/checkRole.test.js +12 -0
- package/server/options/createAppAsset.d.ts +2 -0
- package/server/options/createAppAsset.js +15 -0
- package/server/options/createAppResourcesWithAssets.d.ts +3 -0
- package/server/options/createAppResourcesWithAssets.js +18 -0
- package/server/options/createSettings.d.ts +2 -0
- package/server/options/createSettings.js +15 -0
- package/server/options/createTheme.d.ts +2 -0
- package/server/options/createTheme.js +5 -0
- package/server/options/deleteAppAsset.d.ts +2 -0
- package/server/options/deleteAppAsset.js +15 -0
- package/server/options/deleteAppResource.d.ts +2 -0
- package/server/options/deleteAppResource.js +5 -0
- package/server/options/email.d.ts +1 -0
- package/server/options/email.js +2 -0
- package/server/options/getApp.d.ts +3 -0
- package/server/options/getApp.js +5 -0
- package/server/options/getAppAssets.d.ts +2 -0
- package/server/options/getAppAssets.js +12 -0
- package/server/options/getAppBlockStyles.d.ts +2 -0
- package/server/options/getAppBlockStyles.js +26 -0
- package/server/options/getAppDetails.d.ts +2 -0
- package/server/options/getAppDetails.js +8 -0
- package/server/options/getAppIcon.d.ts +3 -0
- package/server/options/getAppIcon.js +6 -0
- package/server/options/getAppMembers.d.ts +3 -0
- package/server/options/getAppMembers.js +4 -0
- package/server/options/getAppMessages.d.ts +3 -0
- package/server/options/getAppMessages.js +4 -0
- package/server/options/getAppResource.d.ts +3 -0
- package/server/options/getAppResource.js +5 -0
- package/server/options/getAppResources.d.ts +3 -0
- package/server/options/getAppResources.js +5 -0
- package/server/options/getAppScreenshots.d.ts +2 -0
- package/server/options/getAppScreenshots.js +20 -0
- package/server/options/getAppStyles.d.ts +2 -0
- package/server/options/getAppStyles.js +7 -0
- package/server/options/getAppTeams.d.ts +2 -0
- package/server/options/getAppTeams.js +4 -0
- package/server/options/getAppUrl.d.ts +2 -0
- package/server/options/getAppUrl.js +5 -0
- package/server/options/getAppUserInfo.d.ts +3 -0
- package/server/options/getAppUserInfo.js +4 -0
- package/server/options/getBlockAsset.d.ts +2 -0
- package/server/options/getBlockAsset.js +28 -0
- package/server/options/getBlockAssetsPaths.d.ts +2 -0
- package/server/options/getBlockAssetsPaths.js +8 -0
- package/server/options/getBlockMessages.d.ts +2 -0
- package/server/options/getBlockMessages.js +4 -0
- package/server/options/getCsp.d.ts +2 -0
- package/server/options/getCsp.js +13 -0
- package/server/options/getDbUpdated.d.ts +1 -0
- package/server/options/getDbUpdated.js +2 -0
- package/server/options/getHost.d.ts +2 -0
- package/server/options/getHost.js +5 -0
- package/server/options/getTheme.d.ts +2 -0
- package/server/options/getTheme.js +8 -0
- package/server/options/index.d.ts +35 -0
- package/server/options/index.js +36 -0
- package/server/options/options.d.ts +2 -0
- package/server/options/options.js +39 -0
- package/server/options/parseQuery.d.ts +2 -0
- package/server/options/parseQuery.js +82 -0
- package/server/options/parseQuery.test.d.ts +1 -0
- package/server/options/parseQuery.test.js +43 -0
- package/server/options/reloadUser.d.ts +1 -0
- package/server/options/reloadUser.js +2 -0
- package/server/options/sendNotifications.d.ts +1 -0
- package/server/options/sendNotifications.js +2 -0
- package/server/options/updateAppResource.d.ts +3 -0
- package/server/options/updateAppResource.js +5 -0
- package/server/options/verifyResourceActionPermission.d.ts +1 -0
- package/server/options/verifyResourceActionPermission.js +2 -0
- package/server/routes/appRouter/index.d.ts +2 -0
- package/server/routes/appRouter/index.js +4 -0
- package/vitest.config.d.ts +2 -0
- package/vitest.setup.d.ts +1 -0
- package/{jest.setup.js → vitest.setup.js} +1 -1
- /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 @@
|
|
|
1
|
+
export declare const sendNotifications: () => Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const verifyResourceActionPermission: () => Promise<Record<string, any>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
File without changes
|