@keragon/connector-cli 0.0.8 → 0.0.10
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/assets/templates/add/action/src/components/{<%= componentName %>/<%= componentName %>.definition.json.ejs → [%= componentName %]/[%= componentName %].definition.json.ejs } +2 -2
- package/assets/templates/add/action/src/components/[%= componentName %]/index.ts.ejs +5 -0
- package/assets/templates/add/implementation/component/__tests__/[%= name %].test.ts.ejs +36 -0
- package/assets/templates/add/implementation/component/src/components/{<%= name %>/<%= name %>.ts.ejs → [%= name %]/[%= name %].ts.ejs } +6 -6
- package/assets/templates/add/implementation/connector/__tests__/[%= name %].test.ts.ejs +28 -0
- package/assets/templates/add/implementation/connector/src/{<%= name %>.ts.ejs → [%= name %].ts.ejs } +2 -2
- package/assets/templates/add/pollingtrigger/__tests__/{<%= componentName %>.test.ts.ejs → [%= componentName %].test.ts.ejs } +7 -7
- package/assets/templates/add/pollingtrigger/src/components/{<%= componentName %>/<%= componentName %>.definition.json.ejs → [%= componentName %]/[%= componentName %].definition.json.ejs } +9 -9
- package/assets/templates/add/pollingtrigger/src/components/{<%= componentName %>/<%= componentName %>.ts.ejs → [%= componentName %]/[%= componentName %].ts.ejs } +2 -2
- package/assets/templates/add/pollingtrigger/src/components/[%= componentName %]/index.ts.ejs +7 -0
- package/assets/templates/add/trigger/__tests__/{<%= componentName %>.test.ts.ejs → [%= componentName %].test.ts.ejs } +8 -8
- package/assets/templates/add/trigger/src/components/{<%= componentName %>/<%= componentName %>.definition.json.ejs → [%= componentName %]/[%= componentName %].definition.json.ejs } +8 -8
- package/assets/templates/add/trigger/src/components/{<%= componentName %>/<%= componentName %>.ts.ejs → [%= componentName %]/[%= componentName %].ts.ejs } +4 -4
- package/assets/templates/add/trigger/src/components/[%= componentName %]/index.ts.ejs +7 -0
- package/assets/templates/create/connector/README.md.ejs +1 -1
- package/assets/templates/create/connector/keragon.json.ejs +1 -1
- package/assets/templates/create/connector/package.json.ejs +2 -2
- package/assets/templates/create/connector/src/[%= name %].definition.json.ejs +19 -0
- package/assets/templates/create/connector/src/index.ts.ejs +3 -3
- package/main.js +1 -1
- package/package.json +1 -1
- package/assets/preview/index.html.ejs +0 -28
- package/assets/templates/add/action/src/components/<%= componentName %>/index.ts.ejs +0 -5
- package/assets/templates/add/implementation/component/__tests__/<%= name %>.test.ts.ejs +0 -36
- package/assets/templates/add/implementation/connector/__tests__/<%= name %>.test.ts.ejs +0 -28
- package/assets/templates/add/pollingtrigger/src/components/<%= componentName %>/index.ts.ejs +0 -7
- package/assets/templates/add/trigger/src/components/<%= componentName %>/index.ts.ejs +0 -7
- package/assets/templates/create/connector/src/<%= name %>.definition.json.ejs +0 -19
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
[%
|
|
2
2
|
function formatComponentTitle(str) {
|
|
3
3
|
const spaced = str?.replace(/([A-Z])/g, ' $1')?.toLowerCase();
|
|
4
4
|
return spaced?.charAt(0).toUpperCase() + spaced?.slice(1);
|
|
@@ -110,4 +110,4 @@
|
|
|
110
110
|
}
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
|
-
|
|
113
|
+
%][%- JSON.stringify(obj, null, 2) %]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Credentials
|
|
3
|
+
} from '@keragon/connector-sdk';
|
|
4
|
+
import app from '../src';
|
|
5
|
+
import [%= className %] from '../src/components/[%= name %]/[%= name %]';
|
|
6
|
+
const { definition, ctor: [%= firstLetterUpperCase(connectorName) %] } = app;
|
|
7
|
+
|
|
8
|
+
const setupTest = ({
|
|
9
|
+
credentials = {
|
|
10
|
+
authScheme: {
|
|
11
|
+
id: 'com.keragon.[%= connectorName %].environments.prod.authSchemes.custom',
|
|
12
|
+
},
|
|
13
|
+
}
|
|
14
|
+
}: {
|
|
15
|
+
credentials?: Credentials
|
|
16
|
+
}) => {
|
|
17
|
+
const [%= connectorName %] = new [%= firstLetterUpperCase(connectorName) %]({
|
|
18
|
+
definition, credentials,
|
|
19
|
+
});
|
|
20
|
+
const component = [%= connectorName %].constructComponent({ componentId: 'com.keragon.[%= connectorName %].[%= name %]' }) as [%= className %];
|
|
21
|
+
|
|
22
|
+
return { [%= connectorName %], component, credentials }
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
describe('Component: [%= className %] should', () => {
|
|
26
|
+
it('implement run', async () => {
|
|
27
|
+
// Arrange
|
|
28
|
+
const { component } = setupTest({});
|
|
29
|
+
|
|
30
|
+
// Act
|
|
31
|
+
const outputs = await component.run({});
|
|
32
|
+
|
|
33
|
+
// Assert
|
|
34
|
+
expect(outputs).toBe({});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
[%= isHttp ? 'HttpApp, HttpComponent,' : 'App, Component,' %]
|
|
3
3
|
RunFunctionArgs,
|
|
4
4
|
RunFunctionReturnType,
|
|
5
5
|
} from "@keragon/connector-sdk";
|
|
6
|
-
|
|
6
|
+
[%- isHttp ? "import { AxiosRequestConfig } from 'axios';" : '' %]
|
|
7
7
|
|
|
8
|
-
export default class
|
|
9
|
-
|
|
8
|
+
export default class [%= className %] extends [%= isHttp ? 'HttpComponent' : 'Component' %]<[%= isHttp ? 'HttpApp' : 'App' %]> {
|
|
9
|
+
[%_ if (isHttp) { _%]
|
|
10
10
|
override async onRequest({
|
|
11
11
|
requestConfig,
|
|
12
12
|
}: {
|
|
@@ -25,10 +25,10 @@ export default class <%= className %> extends <%= isHttp ? 'HttpComponent' : 'Co
|
|
|
25
25
|
},
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
[%_ } else { _%]
|
|
29
29
|
override async run({ inputs }: RunFunctionArgs): Promise<RunFunctionReturnType> {
|
|
30
30
|
if (!inputs) throw new Error(`Component ${this.definition.id} run() received no inputs`);
|
|
31
31
|
throw new Error('Change default implementation of run() method');
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
[%_ } _%]
|
|
34
34
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Credentials
|
|
3
|
+
} from '@keragon/connector-sdk';
|
|
4
|
+
import app from '../src';
|
|
5
|
+
const { definition, ctor: [%= firstLetterUpperCase(name) %] } = app;
|
|
6
|
+
|
|
7
|
+
const setupTest = ({
|
|
8
|
+
credentials = {
|
|
9
|
+
authScheme: {
|
|
10
|
+
id: 'com.keragon.[%= name %].environments.prod.authSchemes.custom',
|
|
11
|
+
},
|
|
12
|
+
}
|
|
13
|
+
}: {
|
|
14
|
+
credentials?: Credentials
|
|
15
|
+
}) => {
|
|
16
|
+
const [%= name %] = new [%= firstLetterUpperCase(name) %]({
|
|
17
|
+
definition, credentials,
|
|
18
|
+
});
|
|
19
|
+
return { [%= name %], credentials }
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
describe('Connector: [%= firstLetterUpperCase(name) %] should', () => {
|
|
23
|
+
it('construct connector', async () => {
|
|
24
|
+
const { [%= name %] } = setupTest({});
|
|
25
|
+
|
|
26
|
+
expect([%= name %]).toBeDefined();
|
|
27
|
+
});
|
|
28
|
+
});
|
package/assets/templates/add/implementation/connector/src/{<%= name %>.ts.ejs → [%= name %].ts.ejs }
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ConfigureCredentialsArgs,
|
|
3
|
-
|
|
3
|
+
[%= isHttp ? 'HttpApp' : 'App' %],
|
|
4
4
|
} from '@keragon/connector-sdk';
|
|
5
5
|
|
|
6
|
-
export default class
|
|
6
|
+
export default class [%= firstLetterUpperCase(name) %] extends [%= isHttp ? 'HttpApp' : 'App' %] {
|
|
7
7
|
// TODO: default implementation
|
|
8
8
|
override async configureCredentials(args: ConfigureCredentialsArgs) {
|
|
9
9
|
const configuredCredentials = await super.configureCredentials(args);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CloudEventData } from '@keragon/types';
|
|
2
2
|
import { CloudEvent } from 'cloudevents';
|
|
3
3
|
import app from '../src';
|
|
4
|
-
const { definition, ctor:
|
|
4
|
+
const { definition, ctor: [%= firstLetterUpperCase(connectorId) %] } = app;
|
|
5
5
|
|
|
6
6
|
const mockAxiosGet = jest.fn();
|
|
7
7
|
const mockAxiosPost = jest.fn();
|
|
@@ -28,22 +28,22 @@ const setUpTest = ({
|
|
|
28
28
|
}: {
|
|
29
29
|
store?: Record<string, unknown>;
|
|
30
30
|
}) => {
|
|
31
|
-
const
|
|
31
|
+
const [%= connectorId %]: InstanceType<typeof [%= firstLetterUpperCase(connectorId) %]> = new [%= firstLetterUpperCase(connectorId) %]({
|
|
32
32
|
definition,
|
|
33
33
|
credentials: {
|
|
34
34
|
key: 'mockKey',
|
|
35
35
|
authScheme: {
|
|
36
36
|
// TODO authScheme
|
|
37
|
-
id: '
|
|
37
|
+
id: '[%= connectorId %].environments.prod.authSchemes.apiKey',
|
|
38
38
|
},
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
-
const trigger =
|
|
43
|
-
return {
|
|
42
|
+
const trigger = [%= connectorId %].constructComponent({ componentId: '[%= componentId %]', store });
|
|
43
|
+
return { [%= connectorId %], trigger, webhookUrl: 'https://test.com/v1/' };
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
describe('Component: Trigger
|
|
46
|
+
describe('Component: Trigger [%= componentId %] should', () => {
|
|
47
47
|
|
|
48
48
|
it('.generateSampleEvents returns sample', async () => {
|
|
49
49
|
// Arrange
|
|
@@ -61,7 +61,7 @@ describe('Component: Trigger <%= componentId %> should', () => {
|
|
|
61
61
|
|
|
62
62
|
// Assert
|
|
63
63
|
expect(mockGetDynamicValue).toHaveBeenCalledWith({
|
|
64
|
-
componentId: '
|
|
64
|
+
componentId: '[%= connectorId %].getItems',
|
|
65
65
|
processInputs: '${ {} }',
|
|
66
66
|
processOutputs: '${ }',
|
|
67
67
|
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"id": "
|
|
3
|
-
"title": "
|
|
4
|
-
"description": "
|
|
2
|
+
"id": "[%= componentId %]",
|
|
3
|
+
"title": "[%= title %]",
|
|
4
|
+
"description": "[%= desc %]",
|
|
5
5
|
"type": "trigger",
|
|
6
|
-
"sdkVersion": "0.0.1"
|
|
6
|
+
"sdkVersion": "0.0.1"[% if (alert) { %],
|
|
7
7
|
"alerts": [{
|
|
8
8
|
"type": "info",
|
|
9
9
|
"content": "TODO: Add alert message. You can change the type to 'warning' or 'error' if needed."
|
|
10
|
-
}]
|
|
10
|
+
}][% } %],
|
|
11
11
|
"poll": {
|
|
12
12
|
"schedule": {
|
|
13
13
|
"cron": "*/5 * * * *"
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
"getDedupValue": "${ .item.created_time }"
|
|
18
18
|
},
|
|
19
19
|
"poller": {
|
|
20
|
-
"componentId": "
|
|
20
|
+
"componentId": "[%= connectorId %].getItems<TODO set correct component>",
|
|
21
21
|
"processInputs": "${ { event: .event } }",
|
|
22
22
|
"processOutputs": "${ . | sort_by(.created_time) | reverse }"
|
|
23
23
|
}
|
|
24
|
-
}
|
|
24
|
+
}[% if (inputs) { %],
|
|
25
25
|
"inputs": {
|
|
26
26
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
27
27
|
"type": "object",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"type": "string",
|
|
33
33
|
"title": "Event",
|
|
34
34
|
"dynamicEnum": {
|
|
35
|
-
"componentId": "
|
|
35
|
+
"componentId": "[%= connectorId %].get",
|
|
36
36
|
"processInputs": "${ }",
|
|
37
37
|
"processOutputs": "${ [.[] | {label: .name, value: .type}] }"
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
}
|
|
41
|
+
}[% } %]
|
|
42
42
|
}
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
App,
|
|
6
6
|
} from '@keragon/connector-sdk';
|
|
7
7
|
|
|
8
|
-
export default class
|
|
8
|
+
export default class [%= firstLetterUpperCase(componentName) %] extends PollingTrigger<App> implements HasSampleEvents {
|
|
9
9
|
|
|
10
10
|
async generateSampleEvents({ store: _, ...inputs }: Record<string, unknown>): Promise<SampleEvent[]> {
|
|
11
11
|
const { a, b, c } = this.validateInputs(inputs);
|
|
12
12
|
const items = await this.getDynamicValue({
|
|
13
|
-
componentId: '
|
|
13
|
+
componentId: '[%= connectorId %].getItems<TODO set correct component>',
|
|
14
14
|
processInputs: `\${ ${JSON.stringify({ a, b, c })} }`,
|
|
15
15
|
processOutputs: '${ sort_by(.date) | reverse }'
|
|
16
16
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CloudEventData } from '@keragon/types';
|
|
2
2
|
import { CloudEvent } from 'cloudevents';
|
|
3
3
|
import app from '../src';
|
|
4
|
-
const { definition, ctor:
|
|
4
|
+
const { definition, ctor: [%= firstLetterUpperCase(connectorId) %] } = app;
|
|
5
5
|
|
|
6
6
|
const mockAxiosGet = jest.fn();
|
|
7
7
|
const mockAxiosPost = jest.fn();
|
|
@@ -28,22 +28,22 @@ const setUpTest = ({
|
|
|
28
28
|
}: {
|
|
29
29
|
store?: Record<string, unknown>;
|
|
30
30
|
}) => {
|
|
31
|
-
const
|
|
31
|
+
const [%= connectorId %]: InstanceType<typeof [%= firstLetterUpperCase(connectorId) %]> = new [%= firstLetterUpperCase(connectorId) %]({
|
|
32
32
|
definition,
|
|
33
33
|
credentials: {
|
|
34
34
|
key: 'mockKey',
|
|
35
35
|
authScheme: {
|
|
36
36
|
// TODO authScheme
|
|
37
|
-
id: '
|
|
37
|
+
id: '[%= connectorId %].environments.prod.authSchemes.apiKey',
|
|
38
38
|
},
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
-
const trigger =
|
|
43
|
-
return {
|
|
42
|
+
const trigger = [%= connectorId %].constructComponent({ componentId: '[%= componentId %]', store });
|
|
43
|
+
return { [%= connectorId %], trigger, webhookUrl: 'https://test.com/v1/' };
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
describe('Component: Trigger
|
|
46
|
+
describe('Component: Trigger [%= componentId %] should', () => {
|
|
47
47
|
|
|
48
48
|
describe('implement configure() and', () => {
|
|
49
49
|
|
|
@@ -66,7 +66,7 @@ describe('Component: Trigger <%= componentId %> should', () => {
|
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
// Assert that the webhook id, url and secret were stored
|
|
69
|
-
expect(trigger.store.get('webhookURL')).toEqual('https://test.com/v2/?triggerId
|
|
69
|
+
expect(trigger.store.get('webhookURL')).toEqual('https://test.com/v2/?triggerId=[%= componentId %]');
|
|
70
70
|
expect(trigger.store.get('webhookID')).toEqual('mockWebhookId');
|
|
71
71
|
|
|
72
72
|
// Assert that the configured inputs are returned
|
|
@@ -107,7 +107,7 @@ describe('Component: Trigger <%= componentId %> should', () => {
|
|
|
107
107
|
|
|
108
108
|
const event = {} as CloudEvent<CloudEventData>;
|
|
109
109
|
|
|
110
|
-
await expect(trigger.run({ event })).rejects.toThrow('Component
|
|
110
|
+
await expect(trigger.run({ event })).rejects.toThrow('Component [%= componentId %] run() received no event payload');
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
it('return passed events', async () => {
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
"id": "
|
|
3
|
-
"title": "
|
|
4
|
-
"description": "
|
|
2
|
+
"id": "[%= componentId %]",
|
|
3
|
+
"title": "[%= title %]",
|
|
4
|
+
"description": "[%= desc %]",
|
|
5
5
|
"type": "trigger",
|
|
6
|
-
"sdkVersion": "0.0.1"
|
|
6
|
+
"sdkVersion": "0.0.1"[% if (alert) { %],
|
|
7
7
|
"alerts": [{
|
|
8
8
|
"type": "info",
|
|
9
9
|
"content": "TODO: Add alert message. You can change the type to 'warning' or 'error' if needed."
|
|
10
|
-
}]
|
|
10
|
+
}][% } %][% if (http) { %],
|
|
11
11
|
"request": {
|
|
12
12
|
"config": {
|
|
13
13
|
"method": "get",
|
|
14
14
|
"url": "/"
|
|
15
15
|
}
|
|
16
|
-
}
|
|
16
|
+
}[% } %][% if (inputs) { %],
|
|
17
17
|
"inputs": {
|
|
18
18
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
19
19
|
"type": "object",
|
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
"type": "string",
|
|
25
25
|
"title": "Event",
|
|
26
26
|
"dynamicEnum": {
|
|
27
|
-
"componentId": "
|
|
27
|
+
"componentId": "[%= connectorId %].get",
|
|
28
28
|
"processInputs": "${ }",
|
|
29
29
|
"processOutputs": "${ [.[] | {label: .name, value: .type}] }"
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
}
|
|
33
|
+
}[% } %]
|
|
34
34
|
}
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
extractErrorMessage,
|
|
5
5
|
RunFunctionReturnType,
|
|
6
6
|
RunFunctionArgs,
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
[%= http ? 'HttpApp' : 'App' %],
|
|
8
|
+
[%= http ? 'HttpComponent' : 'Component' %],
|
|
9
9
|
} from '@keragon/connector-sdk';
|
|
10
10
|
|
|
11
|
-
export default class
|
|
11
|
+
export default class [%= firstLetterUpperCase(componentName) %] extends [%- http ? 'HttpComponent<HttpApp>' : 'Component<App>' %] implements HasSampleEvents {
|
|
12
12
|
|
|
13
13
|
override async configure(inputs: Record<string, unknown> = {}, webhookURL: string, ..._rest: string[]) {
|
|
14
14
|
if (this.store.get('webhookID')) {
|
|
@@ -51,7 +51,7 @@ export default class <%= firstLetterUpperCase(componentName) %> extends <%- http
|
|
|
51
51
|
async generateSampleEvents({ store: _, ...inputs }: Record<string, unknown>): Promise<SampleEvent[]> {
|
|
52
52
|
const { a, b, c } = this.validateInputs(inputs);
|
|
53
53
|
const items = await this.getDynamicValue({
|
|
54
|
-
componentId: '
|
|
54
|
+
componentId: '[%= connectorId %].getItems<TODO set correct component>',
|
|
55
55
|
processInputs: `\${ ${JSON.stringify({ a, b, c })} }`,
|
|
56
56
|
processOutputs: '${ sort_by(.date) | reverse }'
|
|
57
57
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
#
|
|
1
|
+
# [%= name %] connector
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@keragonhq
|
|
2
|
+
"name": "@keragonhq/[%= name %]",
|
|
3
3
|
"version": "0.0.1",
|
|
4
|
-
"description": "Keragon's built-in
|
|
4
|
+
"description": "Keragon's built-in [%= firstLetterUpperCase(name) %] app",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"registry": "https://npm.pkg.github.com",
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "com.keragon.[%= name %]",
|
|
3
|
+
"title": "[%= firstLetterUpperCase(name) %]",
|
|
4
|
+
"tags": [%- JSON.stringify(tags ?? []) %],
|
|
5
|
+
"icon": "/assets/[%= name %].svg",
|
|
6
|
+
"description": "[%= desc %]",
|
|
7
|
+
"version": "0.0.1",
|
|
8
|
+
"environments": [
|
|
9
|
+
{
|
|
10
|
+
"id": "com.keragon.[%= name %].environments.prod",
|
|
11
|
+
"title": "Production",
|
|
12
|
+
"description": "Production environment"[% if (http) { %],
|
|
13
|
+
"requestDefaults": {
|
|
14
|
+
"baseURL": "[%= baseUrl ? baseUrl : '<Replace with base URL>' %]"
|
|
15
|
+
},
|
|
16
|
+
"supportedAuthSchemes": [][% } %]
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
[%= http ? 'createHttpAppDescriptor' : 'createAppDescriptor' %]
|
|
3
3
|
} from '@keragon/connector-sdk';
|
|
4
4
|
import components from './components';
|
|
5
|
-
import definition from '
|
|
5
|
+
import definition from './[%= name %].definition.json';
|
|
6
6
|
|
|
7
|
-
export default
|
|
7
|
+
export default [%= http ? 'createHttpAppDescriptor' : 'createAppDescriptor' %] ({
|
|
8
8
|
definition: { ...definition, components },
|
|
9
9
|
});
|