@botpress/cli 2.2.5 → 3.0.0

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 (142) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/dist/api/bot-body.js.map +2 -2
  3. package/dist/api/client.js +10 -2
  4. package/dist/api/client.js.map +2 -2
  5. package/dist/api/find-previous-version.test.js +1 -1
  6. package/dist/api/find-previous-version.test.js.map +2 -2
  7. package/dist/api/index.js +1 -0
  8. package/dist/api/index.js.map +2 -2
  9. package/dist/api/integration-body.js +6 -19
  10. package/dist/api/integration-body.js.map +2 -2
  11. package/dist/api/interface-body.js +1 -5
  12. package/dist/api/interface-body.js.map +2 -2
  13. package/dist/api/plugin-body.js +3 -0
  14. package/dist/api/plugin-body.js.map +2 -2
  15. package/dist/api/types.js.map +1 -1
  16. package/dist/code-generation/bot-implementation/bot-implementation.js +5 -2
  17. package/dist/code-generation/bot-implementation/bot-implementation.js.map +2 -2
  18. package/dist/code-generation/bot-implementation/bot-plugins/plugin-module.js +3 -0
  19. package/dist/code-generation/bot-implementation/bot-plugins/plugin-module.js.map +2 -2
  20. package/dist/code-generation/bot-implementation/bot-typings/index.js +11 -2
  21. package/dist/code-generation/bot-implementation/bot-typings/index.js.map +2 -2
  22. package/dist/code-generation/bot-implementation/bot-typings/tables-module.js +64 -0
  23. package/dist/code-generation/bot-implementation/bot-typings/tables-module.js.map +7 -0
  24. package/dist/code-generation/generators.js +11 -2
  25. package/dist/code-generation/generators.js.map +3 -3
  26. package/dist/code-generation/integration-package/index.js +4 -21
  27. package/dist/code-generation/integration-package/index.js.map +2 -2
  28. package/dist/code-generation/integration-package/integration-package-definition/actions-module.js +10 -1
  29. package/dist/code-generation/integration-package/integration-package-definition/actions-module.js.map +2 -2
  30. package/dist/code-generation/integration-package/integration-package-definition/channels-module.js +11 -1
  31. package/dist/code-generation/integration-package/integration-package-definition/channels-module.js.map +2 -2
  32. package/dist/code-generation/integration-package/integration-package-definition/configuration-module.js +10 -8
  33. package/dist/code-generation/integration-package/integration-package-definition/configuration-module.js.map +2 -2
  34. package/dist/code-generation/integration-package/integration-package-definition/configurations-module.js +10 -5
  35. package/dist/code-generation/integration-package/integration-package-definition/configurations-module.js.map +2 -2
  36. package/dist/code-generation/integration-package/integration-package-definition/entities-module.js +9 -1
  37. package/dist/code-generation/integration-package/integration-package-definition/entities-module.js.map +2 -2
  38. package/dist/code-generation/integration-package/integration-package-definition/events-module.js +9 -4
  39. package/dist/code-generation/integration-package/integration-package-definition/events-module.js.map +2 -2
  40. package/dist/code-generation/integration-package/integration-package-definition/index.js +12 -3
  41. package/dist/code-generation/integration-package/integration-package-definition/index.js.map +2 -2
  42. package/dist/code-generation/integration-package/integration-package-definition/interfaces-module.js +61 -0
  43. package/dist/code-generation/integration-package/integration-package-definition/interfaces-module.js.map +7 -0
  44. package/dist/code-generation/integration-package/integration-package-definition/states-module.js +6 -1
  45. package/dist/code-generation/integration-package/integration-package-definition/states-module.js.map +2 -2
  46. package/dist/code-generation/integration-package/integration-package-definition/typings.js.map +1 -1
  47. package/dist/code-generation/interface-package/index.js +4 -21
  48. package/dist/code-generation/interface-package/index.js.map +2 -2
  49. package/dist/code-generation/interface-package/interface-package-definition/actions-module.js +10 -1
  50. package/dist/code-generation/interface-package/interface-package-definition/actions-module.js.map +2 -2
  51. package/dist/code-generation/interface-package/interface-package-definition/channels-module.js +9 -1
  52. package/dist/code-generation/interface-package/interface-package-definition/channels-module.js.map +2 -2
  53. package/dist/code-generation/interface-package/interface-package-definition/entities-module.js +9 -1
  54. package/dist/code-generation/interface-package/interface-package-definition/entities-module.js.map +2 -2
  55. package/dist/code-generation/interface-package/interface-package-definition/events-module.js +9 -1
  56. package/dist/code-generation/interface-package/interface-package-definition/events-module.js.map +2 -2
  57. package/dist/code-generation/interface-package/interface-package-definition/index.js +0 -2
  58. package/dist/code-generation/interface-package/interface-package-definition/index.js.map +2 -2
  59. package/dist/code-generation/interface-package/interface-package-definition/typings.js.map +1 -1
  60. package/dist/code-generation/module.js +13 -7
  61. package/dist/code-generation/module.js.map +2 -2
  62. package/dist/code-generation/plugin-implementation/plugin-implementation.js +27 -4
  63. package/dist/code-generation/plugin-implementation/plugin-implementation.js.map +2 -2
  64. package/dist/code-generation/plugin-implementation/plugin-typings/index.js +19 -2
  65. package/dist/code-generation/plugin-implementation/plugin-typings/index.js.map +2 -2
  66. package/dist/code-generation/plugin-implementation/plugin-typings/tables-module.js +64 -0
  67. package/dist/code-generation/plugin-implementation/plugin-typings/tables-module.js.map +7 -0
  68. package/dist/code-generation/plugin-package/index.js +4 -46
  69. package/dist/code-generation/plugin-package/index.js.map +2 -2
  70. package/dist/code-generation/plugin-package/plugin-package-definition/actions-module.js +8 -1
  71. package/dist/code-generation/plugin-package/plugin-package-definition/actions-module.js.map +2 -2
  72. package/dist/code-generation/plugin-package/plugin-package-definition/configuration-module.js +10 -1
  73. package/dist/code-generation/plugin-package/plugin-package-definition/configuration-module.js.map +2 -2
  74. package/dist/code-generation/plugin-package/plugin-package-definition/events-module.js +9 -4
  75. package/dist/code-generation/plugin-package/plugin-package-definition/events-module.js.map +2 -2
  76. package/dist/code-generation/plugin-package/plugin-package-definition/index.js +15 -3
  77. package/dist/code-generation/plugin-package/plugin-package-definition/index.js.map +2 -2
  78. package/dist/code-generation/plugin-package/plugin-package-definition/interfaces-module.js +58 -0
  79. package/dist/code-generation/plugin-package/plugin-package-definition/interfaces-module.js.map +7 -0
  80. package/dist/code-generation/plugin-package/plugin-package-definition/states-module.js +6 -1
  81. package/dist/code-generation/plugin-package/plugin-package-definition/states-module.js.map +2 -2
  82. package/dist/code-generation/plugin-package/plugin-package-definition/typings.js.map +1 -1
  83. package/dist/code-generation/strings.js +10 -5
  84. package/dist/code-generation/strings.js.map +2 -2
  85. package/dist/code-generation/typings.js.map +1 -1
  86. package/dist/code-generation/typings.test.js +15 -0
  87. package/dist/code-generation/typings.test.js.map +7 -0
  88. package/dist/command-implementations/add-command.js +70 -25
  89. package/dist/command-implementations/add-command.js.map +2 -2
  90. package/dist/command-implementations/bundle-command.js +34 -27
  91. package/dist/command-implementations/bundle-command.js.map +2 -2
  92. package/dist/command-implementations/deploy-command.js +26 -68
  93. package/dist/command-implementations/deploy-command.js.map +2 -2
  94. package/dist/command-implementations/dev-command.js +13 -17
  95. package/dist/command-implementations/dev-command.js.map +2 -2
  96. package/dist/command-implementations/lint-command.js +5 -8
  97. package/dist/command-implementations/lint-command.js.map +3 -3
  98. package/dist/command-implementations/plugin-commands.js +1 -2
  99. package/dist/command-implementations/plugin-commands.js.map +2 -2
  100. package/dist/command-implementations/project-command.js +82 -34
  101. package/dist/command-implementations/project-command.js.map +2 -2
  102. package/dist/command-implementations/read-command.js +23 -8
  103. package/dist/command-implementations/read-command.js.map +2 -2
  104. package/dist/command-implementations/serve-command.js +1 -1
  105. package/dist/command-implementations/serve-command.js.map +1 -1
  106. package/dist/consts.js +4 -2
  107. package/dist/consts.js.map +2 -2
  108. package/dist/errors.js +3 -3
  109. package/dist/errors.js.map +2 -2
  110. package/dist/linter/base-linter.test.js +6 -1
  111. package/dist/linter/base-linter.test.js.map +2 -2
  112. package/dist/linter/bot-linter.js.map +2 -2
  113. package/dist/linter/integration-linter.js.map +1 -1
  114. package/dist/linter/interface-linter.js.map +2 -2
  115. package/dist/linter/ruleset-tests/bot.ruleset.test.js.map +2 -2
  116. package/dist/linter/ruleset-tests/interface.ruleset.test.js.map +2 -2
  117. package/dist/sdk/index.js +0 -2
  118. package/dist/sdk/index.js.map +2 -2
  119. package/dist/{sdk/resolve-bot-interfaces.js → tables/index.js} +7 -21
  120. package/dist/tables/index.js.map +7 -0
  121. package/dist/tables/schemas.js +106 -0
  122. package/dist/tables/schemas.js.map +7 -0
  123. package/dist/tables/tables-publisher.js +157 -0
  124. package/dist/tables/tables-publisher.js.map +7 -0
  125. package/dist/utils/esbuild-utils.js +15 -13
  126. package/dist/utils/esbuild-utils.js.map +2 -2
  127. package/dist/utils/type-utils.js.map +1 -1
  128. package/package.json +2 -2
  129. package/templates/empty-bot/.botpress/implementation/index.ts +5 -2
  130. package/templates/empty-bot/.botpress/implementation/typings/index.ts +3 -0
  131. package/templates/empty-bot/.botpress/implementation/typings/tables/index.ts +6 -0
  132. package/templates/empty-bot/package.json +1 -1
  133. package/templates/empty-integration/package.json +1 -1
  134. package/templates/empty-plugin/.botpress/implementation/index.ts +27 -4
  135. package/templates/empty-plugin/.botpress/implementation/typings/index.ts +3 -0
  136. package/templates/empty-plugin/.botpress/implementation/typings/tables/index.ts +6 -0
  137. package/templates/empty-plugin/package.json +1 -1
  138. package/templates/hello-world/package.json +1 -1
  139. package/templates/webhook-message/package.json +1 -1
  140. package/dist/sdk/resolve-bot-interfaces.js.map +0 -7
  141. package/dist/sdk/resolve-integration-interfaces.js +0 -161
  142. package/dist/sdk/resolve-integration-interfaces.js.map +0 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botpress/cli",
3
- "version": "2.2.5",
3
+ "version": "3.0.0",
4
4
  "description": "Botpress CLI",
5
5
  "scripts": {
6
6
  "build": "pnpm run bundle && pnpm run template:gen",
@@ -22,7 +22,7 @@
22
22
  "@apidevtools/json-schema-ref-parser": "^11.7.0",
23
23
  "@botpress/chat": "0.4.7",
24
24
  "@botpress/client": "0.41.0",
25
- "@botpress/sdk": "2.5.0",
25
+ "@botpress/sdk": "3.0.0",
26
26
  "@bpinternal/const": "^0.0.20",
27
27
  "@bpinternal/tunnel": "^0.1.1",
28
28
  "@bpinternal/yargs-extra": "^0.0.3",
@@ -28,11 +28,14 @@ export class Bot extends sdk.Bot<TBot, TPlugins> {
28
28
  // extra types
29
29
 
30
30
  type AsyncFunction = (...args: any[]) => Promise<any>
31
+
32
+ export type BotHandlers = sdk.BotHandlers<TBot>
33
+
31
34
  export type EventHandlers = Required<{
32
- [K in keyof Bot['eventHandlers']]: NonNullable<Bot['eventHandlers'][K]>[number]
35
+ [K in keyof BotHandlers['eventHandlers']]: NonNullable<BotHandlers['eventHandlers'][K]>[number]
33
36
  }>
34
37
  export type MessageHandlers = Required<{
35
- [K in keyof Bot['messageHandlers']]: NonNullable<Bot['messageHandlers'][K]>[number]
38
+ [K in keyof BotHandlers['messageHandlers']]: NonNullable<BotHandlers['messageHandlers'][K]>[number]
36
39
  }>
37
40
 
38
41
  export type MessageHandlerProps = Parameters<MessageHandlers['*']>[0]
@@ -6,15 +6,18 @@ import * as integrations from './integrations/index'
6
6
  import * as events from './events'
7
7
  import * as states from './states'
8
8
  import * as actions from './actions'
9
+ import * as tables from './tables/index'
9
10
 
10
11
  export * as integrations from './integrations/index'
11
12
  export * as events from './events/index'
12
13
  export * as states from './states/index'
13
14
  export * as actions from './actions'
15
+ export * as tables from './tables/index'
14
16
 
15
17
  export type TBot = {
16
18
  integrations: integrations.Integrations
17
19
  events: events.Events
18
20
  states: states.States
19
21
  actions: actions.Actions
22
+ tables: tables.Tables
20
23
  }
@@ -0,0 +1,6 @@
1
+ /* eslint-disable */
2
+ /* tslint:disable */
3
+ // This file is generated. Do not edit it manually.
4
+
5
+ export type Tables = {
6
+ }
@@ -6,7 +6,7 @@
6
6
  "private": true,
7
7
  "dependencies": {
8
8
  "@botpress/client": "0.41.0",
9
- "@botpress/sdk": "2.5.0"
9
+ "@botpress/sdk": "3.0.0"
10
10
  },
11
11
  "devDependencies": {
12
12
  "@types/node": "^18.19.67",
@@ -7,7 +7,7 @@
7
7
  "private": true,
8
8
  "dependencies": {
9
9
  "@botpress/client": "0.41.0",
10
- "@botpress/sdk": "2.5.0"
10
+ "@botpress/sdk": "3.0.0"
11
11
  },
12
12
  "devDependencies": {
13
13
  "@types/node": "^18.19.67",
@@ -10,18 +10,41 @@ type TPlugin = sdk.DefaultPlugin<typings.TPlugin>
10
10
 
11
11
  export class Plugin extends sdk.Plugin<TPlugin> {}
12
12
 
13
+ export type PluginProps = sdk.PluginProps<TPlugin>
14
+ export type PluginRuntimeProps = sdk.PluginRuntimeProps<TPlugin>
15
+
13
16
  // extra types
14
17
 
18
+ type ValueOf<T> = T[keyof T]
15
19
  type AsyncFunction = (...args: any[]) => Promise<any>
20
+
21
+ export type PluginHandlers = sdk.PluginHandlers<TPlugin>
22
+
16
23
  export type EventHandlers = Required<{
17
- [K in keyof Plugin['eventHandlers']]: NonNullable<Plugin['eventHandlers'][K]>[number]
24
+ [K in keyof PluginHandlers['eventHandlers']]: NonNullable<PluginHandlers['eventHandlers'][K]>[number]
18
25
  }>
19
26
  export type MessageHandlers = Required<{
20
- [K in keyof Plugin['messageHandlers']]: NonNullable<Plugin['messageHandlers'][K]>[number]
27
+ [K in keyof PluginHandlers['messageHandlers']]: NonNullable<PluginHandlers['messageHandlers'][K]>[number]
28
+ }>
29
+ export type HookHandlers = Required<{
30
+ [H in keyof PluginHandlers['hookHandlers']]: {
31
+ [K in keyof PluginHandlers['hookHandlers'][H]]: NonNullable<PluginHandlers['hookHandlers'][H][K]>[number]
32
+ }
21
33
  }>
22
34
 
23
- export type MessageHandlerProps = Parameters<MessageHandlers['*']>[0]
24
- export type EventHandlerProps = Parameters<EventHandlers['*']>[0]
35
+ export type AnyMessageHandler = MessageHandlers['*']
36
+ export type AnyEventHandler = EventHandlers['*']
37
+ export type AnyActionHandler = ValueOf<PluginHandlers['actionHandlers']>
38
+ export type AnyHookHanders = {
39
+ [H in keyof HookHandlers]: HookHandlers[H]['*']
40
+ }
41
+
42
+ export type MessageHandlerProps = Parameters<AnyMessageHandler>[0]
43
+ export type EventHandlerProps = Parameters<AnyEventHandler>[0]
44
+ export type ActionHandlerProps = Parameters<AnyActionHandler>[0]
45
+ export type HookHandlerProps = {
46
+ [H in keyof AnyHookHanders]: Parameters<NonNullable<AnyHookHanders[H]>>[0]
47
+ }
25
48
 
26
49
  export type Client = (MessageHandlerProps | EventHandlerProps)['client']
27
50
  export type ClientOperation = keyof {
@@ -8,6 +8,7 @@ import * as configuration from './configuration/index'
8
8
  import * as events from './events'
9
9
  import * as states from './states'
10
10
  import * as actions from './actions'
11
+ import * as tables from './tables/index'
11
12
 
12
13
  export * as integrations from './integrations/index'
13
14
  export * as interfaces from './interfaces/index'
@@ -15,6 +16,7 @@ export * as configuration from './configuration/index'
15
16
  export * as events from './events/index'
16
17
  export * as states from './states/index'
17
18
  export * as actions from './actions'
19
+ export * as tables from './tables/index'
18
20
 
19
21
  export type TPlugin = {
20
22
  integrations: integrations.Integrations
@@ -23,4 +25,5 @@ export type TPlugin = {
23
25
  events: events.Events
24
26
  states: states.States
25
27
  actions: actions.Actions
28
+ tables: tables.Tables
26
29
  }
@@ -0,0 +1,6 @@
1
+ /* eslint-disable */
2
+ /* tslint:disable */
3
+ // This file is generated. Do not edit it manually.
4
+
5
+ export type Tables = {
6
+ }
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "private": true,
8
8
  "dependencies": {
9
- "@botpress/sdk": "2.5.0"
9
+ "@botpress/sdk": "3.0.0"
10
10
  },
11
11
  "devDependencies": {
12
12
  "@types/node": "^18.19.67",
@@ -7,7 +7,7 @@
7
7
  "private": true,
8
8
  "dependencies": {
9
9
  "@botpress/client": "0.41.0",
10
- "@botpress/sdk": "2.5.0"
10
+ "@botpress/sdk": "3.0.0"
11
11
  },
12
12
  "devDependencies": {
13
13
  "@types/node": "^18.19.67",
@@ -7,7 +7,7 @@
7
7
  "private": true,
8
8
  "dependencies": {
9
9
  "@botpress/client": "0.41.0",
10
- "@botpress/sdk": "2.5.0",
10
+ "@botpress/sdk": "3.0.0",
11
11
  "axios": "^1.6.8"
12
12
  },
13
13
  "devDependencies": {
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/sdk/resolve-bot-interfaces.ts"],
4
- "sourcesContent": ["import * as sdk from '@botpress/sdk'\nimport * as utils from '../utils'\nimport { resolveInterfaces } from './resolve-integration-interfaces'\n\ntype IntegrationPackageDefinition = sdk.IntegrationPackage['definition']\n\ntype _assertPropsInIntegrationDefinition = utils.types.AssertKeyOf<'props', sdk.IntegrationDefinition>\nconst _isLocalIntegrationDef = (\n integration: sdk.IntegrationDefinition | IntegrationPackageDefinition\n): integration is sdk.IntegrationDefinition => {\n return 'props' in integration\n}\n\nexport const resolveBotInterfaces = (bot: sdk.BotDefinition): sdk.BotDefinition => {\n for (const integration of Object.values(bot.integrations ?? {})) {\n if (!integration.definition.interfaces) {\n continue\n }\n\n if (_isLocalIntegrationDef(integration.definition)) {\n integration.definition = resolveInterfaces(integration.definition)\n }\n }\n return bot\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,4CAAkC;AAKlC,MAAM,yBAAyB,CAC7B,gBAC6C;AAC7C,SAAO,WAAW;AACpB;AAEO,MAAM,uBAAuB,CAAC,QAA8C;AACjF,aAAW,eAAe,OAAO,OAAO,IAAI,gBAAgB,CAAC,CAAC,GAAG;AAC/D,QAAI,CAAC,YAAY,WAAW,YAAY;AACtC;AAAA,IACF;AAEA,QAAI,uBAAuB,YAAY,UAAU,GAAG;AAClD,kBAAY,iBAAa,yDAAkB,YAAY,UAAU;AAAA,IACnE;AAAA,EACF;AACA,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,161 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var resolve_integration_interfaces_exports = {};
30
- __export(resolve_integration_interfaces_exports, {
31
- getImplementationStatements: () => getImplementationStatements,
32
- resolveInterfaces: () => resolveInterfaces
33
- });
34
- module.exports = __toCommonJS(resolve_integration_interfaces_exports);
35
- var sdk = __toESM(require("@botpress/sdk"));
36
- var import_lodash = __toESM(require("lodash"));
37
- var utils = __toESM(require("../utils"));
38
- const resolveInterfaces = (integration) => {
39
- const self = integration;
40
- if (!self.interfaces) {
41
- return integration;
42
- }
43
- for (const intrface of Object.values(self.interfaces)) {
44
- const { resolved } = _resolveInterface(intrface);
45
- self.actions = utils.records.mergeRecords(self.actions ?? {}, resolved.actions, _mergeActions);
46
- self.channels = utils.records.mergeRecords(self.channels ?? {}, resolved.channels, _mergeChannels);
47
- self.events = utils.records.mergeRecords(self.events ?? {}, resolved.events, _mergeEvents);
48
- }
49
- return self;
50
- };
51
- const getImplementationStatements = (integration) => {
52
- const self = integration;
53
- if (!self.interfaces) {
54
- return {};
55
- }
56
- const statements = {};
57
- for (const [interfaceKey, intrface] of Object.entries(self.interfaces)) {
58
- const { statement } = _resolveInterface(intrface);
59
- statements[interfaceKey] = statement;
60
- }
61
- return statements;
62
- };
63
- const _mergeActions = (a, b) => {
64
- return {
65
- ...a,
66
- ...b,
67
- input: {
68
- schema: _mergeObjectSchemas(a.input.schema, b.input.schema)
69
- },
70
- output: {
71
- schema: _mergeObjectSchemas(a.input.schema, b.output.schema)
72
- }
73
- };
74
- };
75
- const _mergeEvents = (a, b) => {
76
- return {
77
- ...a,
78
- ...b,
79
- schema: _mergeObjectSchemas(a.schema, b.schema)
80
- };
81
- };
82
- const _mergeChannels = (a, b) => {
83
- const messages = utils.records.mergeRecords(a.messages, b.messages, _mergeMessage);
84
- return {
85
- ...a,
86
- ...b,
87
- messages
88
- };
89
- };
90
- const _mergeMessage = (a, b) => {
91
- return {
92
- schema: _mergeObjectSchemas(a.schema, b.schema)
93
- };
94
- };
95
- const _resolveInterface = (intrface) => {
96
- const { id } = intrface;
97
- const { name, version } = intrface;
98
- const resolved = { actions: {}, events: {}, channels: {} };
99
- const statement = {
100
- id,
101
- name,
102
- version,
103
- entities: import_lodash.default.mapValues(intrface.entities, (entity) => ({ name: entity.name })),
104
- // { item: { name: 'issue' } },
105
- actions: {},
106
- events: {},
107
- channels: {}
108
- };
109
- const entitySchemas = import_lodash.default.mapValues(intrface.entities, (entity) => entity.schema);
110
- for (const [actionName, action] of Object.entries(intrface.definition.actions ?? {})) {
111
- const resolvedInputSchema = action.input.schema.dereference(entitySchemas);
112
- const resolvedOutputSchema = action.output.schema.dereference(entitySchemas);
113
- const newActionName = _rename(intrface, actionName);
114
- resolved.actions[newActionName] = {
115
- ...action,
116
- input: { schema: resolvedInputSchema },
117
- output: { schema: resolvedOutputSchema }
118
- };
119
- statement.actions[actionName] = { name: newActionName };
120
- }
121
- for (const [eventName, event] of Object.entries(intrface.definition.events ?? {})) {
122
- const resolvedEventSchema = event.schema.dereference(entitySchemas);
123
- const newEventName = _rename(intrface, eventName);
124
- resolved.events[newEventName] = { ...event, schema: resolvedEventSchema };
125
- statement.events[eventName] = { name: newEventName };
126
- }
127
- for (const [channelName, channel] of Object.entries(intrface.definition.channels ?? {})) {
128
- const messages = {};
129
- for (const [messageName, message] of Object.entries(channel.messages)) {
130
- const resolvedMessageSchema = message.schema.dereference(entitySchemas);
131
- messages[messageName] = { ...message, schema: resolvedMessageSchema };
132
- }
133
- const newChannelName = _rename(intrface, channelName);
134
- resolved.channels[newChannelName] = { ...channel, messages };
135
- statement.channels[channelName] = { name: newChannelName };
136
- }
137
- return { resolved, statement };
138
- };
139
- const _rename = (intrface, name) => {
140
- if (!intrface.definition.templateName) {
141
- return name;
142
- }
143
- const { entities } = intrface;
144
- const templateProps = import_lodash.default.mapValues(entities, (entity) => entity.name);
145
- return utils.template.formatHandleBars(intrface.definition.templateName, { ...templateProps, name });
146
- };
147
- const _mergeObjectSchemas = (a, b) => {
148
- if (a instanceof sdk.z.ZodObject && b instanceof sdk.z.ZodObject) {
149
- return a.merge(b);
150
- }
151
- if (a instanceof sdk.z.ZodRecord && b instanceof sdk.z.ZodRecord) {
152
- return sdk.z.record(sdk.z.intersection(a.valueSchema, b.valueSchema));
153
- }
154
- throw new Error("Cannot merge object schemas with record schemas");
155
- };
156
- // Annotate the CommonJS export names for ESM import in node:
157
- 0 && (module.exports = {
158
- getImplementationStatements,
159
- resolveInterfaces
160
- });
161
- //# sourceMappingURL=resolve-integration-interfaces.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/sdk/resolve-integration-interfaces.ts"],
4
- "sourcesContent": ["import * as sdk from '@botpress/sdk'\nimport _ from 'lodash'\nimport * as utils from '../utils'\n\ntype InterfaceExtension = NonNullable<sdk.IntegrationDefinition['interfaces']>[string]\ntype ResolvedInterface = {\n actions: Record<string, sdk.ActionDefinition>\n events: Record<string, sdk.EventDefinition>\n channels: Record<string, sdk.ChannelDefinition>\n}\ntype InterfaceImplStatement = {\n id?: string\n name: string\n version: string\n entities: Record<string, { name: string }>\n actions: Record<string, { name: string }>\n events: Record<string, { name: string }>\n channels: Record<string, { name: string }>\n}\n\ntype ZodObjectSchema = sdk.z.ZodObject | sdk.z.ZodRecord\n\nexport const resolveInterfaces = (integration: sdk.IntegrationDefinition): sdk.IntegrationDefinition => {\n const self = integration as utils.types.Writable<sdk.IntegrationDefinition>\n if (!self.interfaces) {\n return integration\n }\n\n for (const intrface of Object.values(self.interfaces)) {\n const { resolved } = _resolveInterface(intrface)\n\n /**\n * If an action is defined both in the integration and the interface; we merge both.\n * This allows setting more specific properties in the integration, while staying compatible with the interface.\n * Same goes for channels and events.\n */\n\n self.actions = utils.records.mergeRecords(self.actions ?? {}, resolved.actions, _mergeActions)\n self.channels = utils.records.mergeRecords(self.channels ?? {}, resolved.channels, _mergeChannels)\n self.events = utils.records.mergeRecords(self.events ?? {}, resolved.events, _mergeEvents)\n }\n\n return self\n}\n\nexport const getImplementationStatements = (\n integration: sdk.IntegrationDefinition\n): Record<string, InterfaceImplStatement> => {\n const self = integration as utils.types.Writable<sdk.IntegrationDefinition>\n if (!self.interfaces) {\n return {}\n }\n\n const statements: Record<string, InterfaceImplStatement> = {}\n for (const [interfaceKey, intrface] of Object.entries(self.interfaces)) {\n const { statement } = _resolveInterface(intrface)\n statements[interfaceKey] = statement\n }\n\n return statements\n}\n\nconst _mergeActions = (a: sdk.ActionDefinition, b: sdk.ActionDefinition): sdk.ActionDefinition => {\n return {\n ...a,\n ...b,\n input: {\n schema: _mergeObjectSchemas(a.input.schema, b.input.schema),\n },\n output: {\n schema: _mergeObjectSchemas(a.input.schema, b.output.schema),\n },\n }\n}\n\nconst _mergeEvents = (a: sdk.EventDefinition, b: sdk.EventDefinition): sdk.EventDefinition => {\n return {\n ...a,\n ...b,\n schema: _mergeObjectSchemas(a.schema, b.schema),\n }\n}\n\nconst _mergeChannels = (a: sdk.ChannelDefinition, b: sdk.ChannelDefinition): sdk.ChannelDefinition => {\n const messages = utils.records.mergeRecords(a.messages, b.messages, _mergeMessage)\n return {\n ...a,\n ...b,\n messages,\n }\n}\n\nconst _mergeMessage = (a: sdk.MessageDefinition, b: sdk.MessageDefinition): sdk.MessageDefinition => {\n return {\n schema: _mergeObjectSchemas(a.schema, b.schema),\n }\n}\n\nconst _resolveInterface = (\n intrface: InterfaceExtension\n): { resolved: ResolvedInterface; statement: InterfaceImplStatement } => {\n const { id } = intrface\n const { name, version } = intrface\n\n const resolved: ResolvedInterface = { actions: {}, events: {}, channels: {} }\n const statement: InterfaceImplStatement = {\n id,\n name,\n version,\n entities: _.mapValues(intrface.entities, (entity) => ({ name: entity.name })), // { item: { name: 'issue' } },\n actions: {},\n events: {},\n channels: {},\n }\n\n const entitySchemas = _.mapValues(intrface.entities, (entity) => entity.schema)\n\n // dereference actions\n for (const [actionName, action] of Object.entries(intrface.definition.actions ?? {})) {\n const resolvedInputSchema = action.input.schema.dereference(entitySchemas) as sdk.z.AnyZodObject\n const resolvedOutputSchema = action.output.schema.dereference(entitySchemas) as sdk.z.AnyZodObject\n\n const newActionName = _rename(intrface, actionName)\n resolved.actions[newActionName] = {\n ...action,\n input: { schema: resolvedInputSchema },\n output: { schema: resolvedOutputSchema },\n }\n statement.actions[actionName] = { name: newActionName }\n }\n\n // dereference events\n for (const [eventName, event] of Object.entries(intrface.definition.events ?? {})) {\n const resolvedEventSchema = event.schema.dereference(entitySchemas) as sdk.z.AnyZodObject\n const newEventName = _rename(intrface, eventName)\n resolved.events[newEventName] = { ...event, schema: resolvedEventSchema }\n statement.events[eventName] = { name: newEventName }\n }\n\n // dereference channels\n for (const [channelName, channel] of Object.entries(intrface.definition.channels ?? {})) {\n const messages: Record<string, { schema: sdk.z.AnyZodObject }> = {}\n for (const [messageName, message] of Object.entries(channel.messages)) {\n const resolvedMessageSchema = message.schema.dereference(entitySchemas) as sdk.z.AnyZodObject\n // no renaming for messages as they are already contained within a channel that acts as a namespace\n messages[messageName] = { ...message, schema: resolvedMessageSchema }\n }\n const newChannelName = _rename(intrface, channelName)\n resolved.channels[newChannelName] = { ...channel, messages }\n statement.channels[channelName] = { name: newChannelName }\n }\n\n return { resolved, statement }\n}\n\nconst _rename = (intrface: InterfaceExtension, name: string) => {\n if (!intrface.definition.templateName) {\n return name\n }\n const { entities } = intrface\n const templateProps = _.mapValues(entities, (entity) => entity.name)\n return utils.template.formatHandleBars(intrface.definition.templateName, { ...templateProps, name })\n}\n\nconst _mergeObjectSchemas = (a: ZodObjectSchema, b: ZodObjectSchema): ZodObjectSchema => {\n if (a instanceof sdk.z.ZodObject && b instanceof sdk.z.ZodObject) {\n return a.merge(b)\n }\n if (a instanceof sdk.z.ZodRecord && b instanceof sdk.z.ZodRecord) {\n return sdk.z.record(sdk.z.intersection(a.valueSchema, b.valueSchema))\n }\n // TODO: adress this case\n throw new Error('Cannot merge object schemas with record schemas')\n}\n"],
5
- "mappings": "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",
6
- "names": ["_"]
7
- }