@botpress/cli 1.7.3 → 2.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 (134) hide show
  1. package/.turbo/turbo-build.log +12 -10
  2. package/dist/api/bot-body.js +20 -6
  3. package/dist/api/bot-body.js.map +2 -2
  4. package/dist/api/client.js +18 -0
  5. package/dist/api/client.js.map +2 -2
  6. package/dist/api/interface-body.js.map +2 -2
  7. package/dist/api/plugin-body.js +79 -0
  8. package/dist/api/plugin-body.js.map +7 -0
  9. package/dist/api/types.js.map +1 -1
  10. package/dist/code-generation/bot-implementation/bot-implementation.js +40 -21
  11. package/dist/code-generation/bot-implementation/bot-implementation.js.map +2 -2
  12. package/dist/code-generation/bot-implementation/bot-plugins/index.js +76 -0
  13. package/dist/code-generation/bot-implementation/bot-plugins/index.js.map +7 -0
  14. package/dist/code-generation/bot-implementation/bot-plugins/plugin-module.js +125 -0
  15. package/dist/code-generation/bot-implementation/bot-plugins/plugin-module.js.map +7 -0
  16. package/dist/code-generation/bot-implementation/index.js +27 -22
  17. package/dist/code-generation/bot-implementation/index.js.map +2 -2
  18. package/dist/code-generation/consts.js +3 -0
  19. package/dist/code-generation/consts.js.map +2 -2
  20. package/dist/code-generation/generators.js +8 -0
  21. package/dist/code-generation/generators.js.map +2 -2
  22. package/dist/code-generation/index.js +6 -0
  23. package/dist/code-generation/index.js.map +2 -2
  24. package/dist/code-generation/integration-package/index.js +11 -2
  25. package/dist/code-generation/integration-package/index.js.map +2 -2
  26. package/dist/code-generation/interface-implementation/index.js +29 -0
  27. package/dist/code-generation/interface-implementation/index.js.map +7 -0
  28. package/dist/code-generation/interface-implementation/integration-typings/actions-module.js +84 -0
  29. package/dist/code-generation/interface-implementation/integration-typings/actions-module.js.map +7 -0
  30. package/dist/code-generation/interface-implementation/integration-typings/channels-module.js +103 -0
  31. package/dist/code-generation/interface-implementation/integration-typings/channels-module.js.map +7 -0
  32. package/dist/code-generation/interface-implementation/integration-typings/entities-module.js +59 -0
  33. package/dist/code-generation/interface-implementation/integration-typings/entities-module.js.map +7 -0
  34. package/dist/code-generation/interface-implementation/integration-typings/events-module.js +59 -0
  35. package/dist/code-generation/interface-implementation/integration-typings/events-module.js.map +7 -0
  36. package/dist/code-generation/interface-implementation/integration-typings/index.js +117 -0
  37. package/dist/code-generation/interface-implementation/integration-typings/index.js.map +7 -0
  38. package/dist/code-generation/interface-package/index.js +11 -2
  39. package/dist/code-generation/interface-package/index.js.map +2 -2
  40. package/dist/code-generation/module.js +17 -4
  41. package/dist/code-generation/module.js.map +2 -2
  42. package/dist/code-generation/plugin-implementation/index.js +56 -0
  43. package/dist/code-generation/plugin-implementation/index.js.map +7 -0
  44. package/dist/code-generation/plugin-implementation/plugin-implementation.js +86 -0
  45. package/dist/code-generation/plugin-implementation/plugin-implementation.js.map +7 -0
  46. package/dist/code-generation/plugin-implementation/plugin-typings/actions-module.js +84 -0
  47. package/dist/code-generation/plugin-implementation/plugin-typings/actions-module.js.map +7 -0
  48. package/dist/code-generation/plugin-implementation/plugin-typings/configuration-module.js +57 -0
  49. package/dist/code-generation/plugin-implementation/plugin-typings/configuration-module.js.map +7 -0
  50. package/dist/code-generation/plugin-implementation/plugin-typings/events-module.js +59 -0
  51. package/dist/code-generation/plugin-implementation/plugin-typings/events-module.js.map +7 -0
  52. package/dist/code-generation/plugin-implementation/plugin-typings/index.js +146 -0
  53. package/dist/code-generation/plugin-implementation/plugin-typings/index.js.map +7 -0
  54. package/dist/code-generation/plugin-implementation/plugin-typings/states-module.js +60 -0
  55. package/dist/code-generation/plugin-implementation/plugin-typings/states-module.js.map +7 -0
  56. package/dist/code-generation/plugin-package/index.js +146 -0
  57. package/dist/code-generation/plugin-package/index.js.map +7 -0
  58. package/dist/code-generation/plugin-package/plugin-package-definition/actions-module.js +84 -0
  59. package/dist/code-generation/plugin-package/plugin-package-definition/actions-module.js.map +7 -0
  60. package/dist/code-generation/plugin-package/plugin-package-definition/configuration-module.js +52 -0
  61. package/dist/code-generation/plugin-package/plugin-package-definition/configuration-module.js.map +7 -0
  62. package/dist/code-generation/plugin-package/plugin-package-definition/events-module.js +62 -0
  63. package/dist/code-generation/plugin-package/plugin-package-definition/events-module.js.map +7 -0
  64. package/dist/code-generation/plugin-package/plugin-package-definition/index.js +103 -0
  65. package/dist/code-generation/plugin-package/plugin-package-definition/index.js.map +7 -0
  66. package/dist/code-generation/plugin-package/plugin-package-definition/states-module.js +62 -0
  67. package/dist/code-generation/plugin-package/plugin-package-definition/states-module.js.map +7 -0
  68. package/dist/code-generation/plugin-package/plugin-package-definition/typings.js +17 -0
  69. package/dist/code-generation/plugin-package/plugin-package-definition/typings.js.map +7 -0
  70. package/dist/code-generation/typings.js.map +1 -1
  71. package/dist/command-definitions.js +8 -0
  72. package/dist/command-definitions.js.map +2 -2
  73. package/dist/command-implementations/add-command.js +47 -10
  74. package/dist/command-implementations/add-command.js.map +2 -2
  75. package/dist/command-implementations/bundle-command.js +7 -2
  76. package/dist/command-implementations/bundle-command.js.map +2 -2
  77. package/dist/command-implementations/deploy-command.js +51 -0
  78. package/dist/command-implementations/deploy-command.js.map +2 -2
  79. package/dist/command-implementations/gen-command.js +11 -0
  80. package/dist/command-implementations/gen-command.js.map +2 -2
  81. package/dist/command-implementations/index.js +8 -0
  82. package/dist/command-implementations/index.js.map +2 -2
  83. package/dist/command-implementations/init-command.js +36 -8
  84. package/dist/command-implementations/init-command.js.map +2 -2
  85. package/dist/command-implementations/lint-command.js +1 -1
  86. package/dist/command-implementations/lint-command.js.map +2 -2
  87. package/dist/command-implementations/plugin-commands.js +107 -0
  88. package/dist/command-implementations/plugin-commands.js.map +7 -0
  89. package/dist/command-implementations/project-command.js +30 -3
  90. package/dist/command-implementations/project-command.js.map +2 -2
  91. package/dist/command-implementations/read-command.js +13 -1
  92. package/dist/command-implementations/read-command.js.map +2 -2
  93. package/dist/config.js +23 -2
  94. package/dist/config.js.map +2 -2
  95. package/dist/consts.js +7 -0
  96. package/dist/consts.js.map +2 -2
  97. package/dist/sdk/index.js +1 -0
  98. package/dist/sdk/index.js.map +2 -2
  99. package/dist/sdk/resolve-bot-interfaces.js +6 -1
  100. package/dist/sdk/resolve-bot-interfaces.js.map +2 -2
  101. package/dist/sdk/resolve-integration-interfaces.js +16 -8
  102. package/dist/sdk/resolve-integration-interfaces.js.map +2 -2
  103. package/dist/sdk/validate-bot.js +84 -0
  104. package/dist/sdk/validate-bot.js.map +7 -0
  105. package/dist/utils/esbuild-utils.js +3 -2
  106. package/dist/utils/esbuild-utils.js.map +2 -2
  107. package/dist/utils/index.js +3 -0
  108. package/dist/utils/index.js.map +2 -2
  109. package/dist/utils/object-utils.js +32 -0
  110. package/dist/utils/object-utils.js.map +7 -0
  111. package/dist/utils/schema-utils.js.map +2 -2
  112. package/dist/utils/type-utils.js.map +1 -1
  113. package/e2e/tests/install-package.ts +1 -1
  114. package/package.json +2 -2
  115. package/templates/empty-bot/.botpress/implementation/index.ts +27 -18
  116. package/templates/empty-bot/.botpress/implementation/plugins/index.ts +11 -0
  117. package/templates/empty-bot/.botpress/index.ts +5 -1
  118. package/templates/empty-bot/package.json +1 -1
  119. package/templates/empty-integration/package.json +1 -1
  120. package/templates/empty-plugin/.botpress/implementation/index.ts +35 -0
  121. package/templates/empty-plugin/.botpress/implementation/typings/actions/index.ts +6 -0
  122. package/templates/empty-plugin/.botpress/implementation/typings/configuration/index.ts +2 -0
  123. package/templates/empty-plugin/.botpress/implementation/typings/events/index.ts +6 -0
  124. package/templates/empty-plugin/.botpress/implementation/typings/index.ts +26 -0
  125. package/templates/empty-plugin/.botpress/implementation/typings/integrations/index.ts +6 -0
  126. package/templates/empty-plugin/.botpress/implementation/typings/interfaces/index.ts +6 -0
  127. package/templates/empty-plugin/.botpress/implementation/typings/states/index.ts +6 -0
  128. package/templates/empty-plugin/.botpress/index.ts +1 -0
  129. package/templates/empty-plugin/package.json +16 -0
  130. package/templates/empty-plugin/plugin.definition.ts +7 -0
  131. package/templates/empty-plugin/src/index.ts +7 -0
  132. package/templates/empty-plugin/tsconfig.json +28 -0
  133. package/templates/hello-world/package.json +1 -1
  134. package/templates/webhook-message/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/config.ts"],
4
- "sourcesContent": ["import * as consts from './consts'\nimport type { CommandOption, CommandSchema } from './typings'\n\n// command options\n\nconst port = {\n type: 'number',\n description: 'The port to use',\n} satisfies CommandOption\n\nconst workDir = {\n type: 'string',\n description: 'The path to the project',\n default: consts.defaultWorkDir,\n} satisfies CommandOption\n\nconst noBuild = {\n type: 'boolean',\n description: 'Skip the build step',\n default: false,\n} satisfies CommandOption\n\nconst apiUrl = {\n type: 'string',\n description: 'The URL of the Botpress server',\n} satisfies CommandOption\n\nconst token = {\n type: 'string',\n description: 'You Personal Access Token ',\n} satisfies CommandOption\n\nconst workspaceId = {\n type: 'string',\n description: 'The Workspace Id to deploy to',\n} satisfies CommandOption\n\nconst secrets = {\n type: 'string',\n description: 'Values for the integration secrets',\n array: true,\n default: [],\n} satisfies CommandOption\n\nconst botRef = {\n type: 'string',\n description: 'The bot ID. Bot Name is not supported.',\n demandOption: true,\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst packageType = {\n type: 'string',\n description:\n 'Either an integration or an interface; helps disambiguate the package type in case both an integration and an interface have the same reference.',\n choices: ['integration', 'interface'] as const,\n} satisfies CommandOption\n\nconst packageRef = {\n type: 'string',\n description:\n 'The package ID or name with optional version. The package can be either an integration or an interface. Ex: teams, teams@0.2.0, llm@5.1.0',\n demandOption: true,\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst integrationRef = {\n ...packageRef,\n description: 'The integration ID or name with optional version. Ex: teams or teams@0.2.0',\n} satisfies CommandOption\n\nconst interfaceRef = {\n ...packageRef,\n description: 'The interface ID or name and version. Ex: llm@5.1.0',\n} satisfies CommandOption\n\nconst sourceMap = { type: 'boolean', description: 'Generate sourcemaps', default: false } satisfies CommandOption\n\nconst minify = { type: 'boolean', description: 'Minify the bundled code', default: true } satisfies CommandOption\n\nconst dev = {\n type: 'boolean',\n description: 'List only dev bots / dev integrations',\n default: false,\n} satisfies CommandOption\n\nconst isPublic = {\n type: 'boolean',\n description: 'Weither or not to deploy the integration publicly',\n default: false,\n} satisfies CommandOption\n\n// base schemas\n\nconst globalSchema = {\n verbose: {\n type: 'boolean',\n description: 'Enable verbose logging',\n alias: 'v',\n default: false,\n },\n confirm: {\n type: 'boolean',\n description: 'Confirm all prompts',\n alias: 'y',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Prevent logging anything else than raw json in stdout. Useful for piping output to other tools',\n default: false,\n },\n botpressHome: {\n type: 'string',\n description: 'The path to the Botpress home directory',\n default: consts.defaultBotpressHome,\n },\n} satisfies CommandSchema\n\nconst projectSchema = {\n ...globalSchema,\n workDir,\n} satisfies CommandSchema\n\nconst credentialsSchema = {\n apiUrl,\n workspaceId,\n token,\n} satisfies CommandSchema\n\nconst secretsSchema = {\n secrets,\n} satisfies CommandSchema\n\n// command schemas\n\nconst generateSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst bundleSchema = {\n ...projectSchema,\n sourceMap,\n minify,\n} satisfies CommandSchema\n\nconst buildSchema = {\n ...projectSchema,\n sourceMap,\n minify,\n} satisfies CommandSchema\n\nconst readSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst serveSchema = {\n ...projectSchema,\n ...secretsSchema,\n port,\n} satisfies CommandSchema\n\nconst deploySchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n botId: { type: 'string', description: 'The bot ID to deploy. Only used when deploying a bot' },\n noBuild,\n createNewBot: { type: 'boolean', description: 'Create a new bot when deploying. Only used when deploying a bot' },\n sourceMap,\n minify,\n public: isPublic,\n allowDeprecated: {\n type: 'boolean',\n description: 'Allow deprecated features in the project',\n default: false,\n },\n} satisfies CommandSchema\n\nconst devSchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n sourceMap,\n minify,\n port,\n tunnelUrl: {\n type: 'string',\n description: 'The tunnel HTTP URL to use',\n default: consts.defaultTunnelUrl,\n },\n} satisfies CommandSchema\n\nconst addSchema = {\n ...globalSchema,\n ...credentialsSchema,\n packageRef,\n packageType,\n installPath: {\n type: 'string',\n description: 'The path where to install the package',\n default: consts.defaultInstallPath,\n },\n} satisfies CommandSchema\n\nconst loginSchema = {\n ...globalSchema,\n token,\n workspaceId,\n apiUrl: { ...apiUrl, default: consts.defaultBotpressApiUrl },\n} satisfies CommandSchema\n\nconst logoutSchema = {\n ...globalSchema,\n} satisfies CommandSchema\n\nconst createBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name of the bot to create' },\n ifNotExists: {\n type: 'boolean',\n description: 'Do not create if a bot with the same name already exists',\n default: false,\n },\n} satisfies CommandSchema\n\nconst getBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n botRef,\n} satisfies CommandSchema\n\nconst deleteBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n botRef,\n} satisfies CommandSchema\n\nconst listBotsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n dev,\n} satisfies CommandSchema\n\nconst getIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst listIntegrationsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name filter when listing integrations' },\n versionNumber: { type: 'string', description: 'The version filter when listing integrations' },\n dev,\n} satisfies CommandSchema\n\nconst deleteIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst getInterfaceSchema = {\n ...globalSchema,\n ...credentialsSchema,\n interfaceRef,\n} satisfies CommandSchema\n\nconst listInterfacesSchema = {\n ...globalSchema,\n ...credentialsSchema,\n} satisfies CommandSchema\n\nconst deleteInterfaceSchema = {\n ...globalSchema,\n ...credentialsSchema,\n interfaceRef,\n} satisfies CommandSchema\n\nconst initSchema = {\n ...globalSchema,\n workDir,\n type: { type: 'string', choices: ['bot', 'integration'] as const },\n name: { type: 'string', description: 'The name of the project' },\n} satisfies CommandSchema\n\nconst lintSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\n// exports\n\nexport const schemas = {\n global: globalSchema,\n project: projectSchema,\n credentials: credentialsSchema,\n secrets: secretsSchema,\n\n login: loginSchema,\n logout: logoutSchema,\n createBot: createBotSchema,\n getBot: getBotSchema,\n deleteBot: deleteBotSchema,\n listBots: listBotsSchema,\n getIntegration: getIntegrationSchema,\n listIntegrations: listIntegrationsSchema,\n deleteIntegration: deleteIntegrationSchema,\n getInterface: getInterfaceSchema,\n listInterfaces: listInterfacesSchema,\n deleteInterface: deleteInterfaceSchema,\n init: initSchema,\n generate: generateSchema,\n bundle: bundleSchema,\n build: buildSchema,\n read: readSchema,\n serve: serveSchema,\n deploy: deploySchema,\n add: addSchema,\n dev: devSchema,\n lint: lintSchema,\n} as const\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as consts from './consts'\nimport type { CommandOption, CommandSchema } from './typings'\n\n// command options\n\nconst port = {\n type: 'number',\n description: 'The port to use',\n} satisfies CommandOption\n\nconst workDir = {\n type: 'string',\n description: 'The path to the project',\n default: consts.defaultWorkDir,\n} satisfies CommandOption\n\nconst noBuild = {\n type: 'boolean',\n description: 'Skip the build step',\n default: false,\n} satisfies CommandOption\n\nconst apiUrl = {\n type: 'string',\n description: 'The URL of the Botpress server',\n} satisfies CommandOption\n\nconst token = {\n type: 'string',\n description: 'You Personal Access Token ',\n} satisfies CommandOption\n\nconst workspaceId = {\n type: 'string',\n description: 'The Workspace Id to deploy to',\n} satisfies CommandOption\n\nconst secrets = {\n type: 'string',\n description: 'Values for the integration secrets',\n array: true,\n default: [],\n} satisfies CommandOption\n\nconst botRef = {\n type: 'string',\n description: 'The bot ID. Bot Name is not supported.',\n demandOption: true,\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst packageType = {\n type: 'string',\n description:\n 'Either an integration or an interface; helps disambiguate the package type in case both an integration and an interface have the same reference.',\n choices: ['integration', 'interface', 'plugin'] as const,\n} satisfies CommandOption\n\nconst packageRef = {\n type: 'string',\n description:\n 'The package ID or name with optional version. The package can be either an integration or an interface. Ex: teams, teams@0.2.0, llm@5.1.0',\n demandOption: true,\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst integrationRef = {\n ...packageRef,\n description: 'The integration ID or name with optional version. Ex: teams or teams@0.2.0',\n} satisfies CommandOption\n\nconst interfaceRef = {\n ...packageRef,\n description: 'The interface ID or name and version. Ex: llm@5.1.0',\n} satisfies CommandOption\n\nconst pluginRef = {\n ...packageRef,\n description: 'The plugin ID or name and version. Ex: knowledge@0.0.1',\n} satisfies CommandOption\n\nconst sourceMap = { type: 'boolean', description: 'Generate sourcemaps', default: false } satisfies CommandOption\n\nconst minify = { type: 'boolean', description: 'Minify the bundled code', default: true } satisfies CommandOption\n\nconst dev = {\n type: 'boolean',\n description: 'List only dev bots / dev integrations',\n default: false,\n} satisfies CommandOption\n\nconst isPublic = {\n type: 'boolean',\n description: 'Weither or not to deploy the integration publicly',\n default: false,\n} satisfies CommandOption\n\n// base schemas\n\nconst globalSchema = {\n verbose: {\n type: 'boolean',\n description: 'Enable verbose logging',\n alias: 'v',\n default: false,\n },\n confirm: {\n type: 'boolean',\n description: 'Confirm all prompts',\n alias: 'y',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Prevent logging anything else than raw json in stdout. Useful for piping output to other tools',\n default: false,\n },\n botpressHome: {\n type: 'string',\n description: 'The path to the Botpress home directory',\n default: consts.defaultBotpressHome,\n },\n} satisfies CommandSchema\n\nconst projectSchema = {\n ...globalSchema,\n workDir,\n} satisfies CommandSchema\n\nconst credentialsSchema = {\n apiUrl,\n workspaceId,\n token,\n} satisfies CommandSchema\n\nconst secretsSchema = {\n secrets,\n} satisfies CommandSchema\n\n// command schemas\n\nconst generateSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst bundleSchema = {\n ...projectSchema,\n sourceMap,\n minify,\n} satisfies CommandSchema\n\nconst buildSchema = {\n ...projectSchema,\n sourceMap,\n minify,\n} satisfies CommandSchema\n\nconst readSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst serveSchema = {\n ...projectSchema,\n ...secretsSchema,\n port,\n} satisfies CommandSchema\n\nconst deploySchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n botId: { type: 'string', description: 'The bot ID to deploy. Only used when deploying a bot' },\n noBuild,\n createNewBot: { type: 'boolean', description: 'Create a new bot when deploying. Only used when deploying a bot' },\n sourceMap,\n minify,\n public: isPublic,\n allowDeprecated: {\n type: 'boolean',\n description: 'Allow deprecated features in the project',\n default: false,\n },\n} satisfies CommandSchema\n\nconst devSchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n sourceMap,\n minify,\n port,\n tunnelUrl: {\n type: 'string',\n description: 'The tunnel HTTP URL to use',\n default: consts.defaultTunnelUrl,\n },\n} satisfies CommandSchema\n\nconst addSchema = {\n ...globalSchema,\n ...credentialsSchema,\n packageRef,\n packageType,\n installPath: {\n type: 'string',\n description: 'The path where to install the package',\n default: consts.defaultInstallPath,\n },\n} satisfies CommandSchema\n\nconst loginSchema = {\n ...globalSchema,\n token,\n workspaceId,\n apiUrl: { ...apiUrl, default: consts.defaultBotpressApiUrl },\n} satisfies CommandSchema\n\nconst logoutSchema = {\n ...globalSchema,\n} satisfies CommandSchema\n\nconst createBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name of the bot to create' },\n ifNotExists: {\n type: 'boolean',\n description: 'Do not create if a bot with the same name already exists',\n default: false,\n },\n} satisfies CommandSchema\n\nconst getBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n botRef,\n} satisfies CommandSchema\n\nconst deleteBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n botRef,\n} satisfies CommandSchema\n\nconst listBotsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n dev,\n} satisfies CommandSchema\n\nconst getIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst listIntegrationsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name filter when listing integrations' },\n versionNumber: { type: 'string', description: 'The version filter when listing integrations' },\n dev,\n} satisfies CommandSchema\n\nconst deleteIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst getInterfaceSchema = {\n ...globalSchema,\n ...credentialsSchema,\n interfaceRef,\n} satisfies CommandSchema\n\nconst listInterfacesSchema = {\n ...globalSchema,\n ...credentialsSchema,\n} satisfies CommandSchema\n\nconst deleteInterfaceSchema = {\n ...globalSchema,\n ...credentialsSchema,\n interfaceRef,\n} satisfies CommandSchema\n\nconst getPluginSchema = {\n ...globalSchema,\n ...credentialsSchema,\n pluginRef,\n} satisfies CommandSchema\n\nconst listPluginsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n} satisfies CommandSchema\n\nconst deletePluginSchema = {\n ...globalSchema,\n ...credentialsSchema,\n pluginRef,\n} satisfies CommandSchema\n\nconst initSchema = {\n ...globalSchema,\n workDir,\n type: { type: 'string', choices: ['bot', 'integration', 'plugin'] as const },\n name: { type: 'string', description: 'The name of the project' },\n} satisfies CommandSchema\n\nconst lintSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\n// exports\n\nexport const schemas = {\n global: globalSchema,\n project: projectSchema,\n credentials: credentialsSchema,\n secrets: secretsSchema,\n\n login: loginSchema,\n logout: logoutSchema,\n createBot: createBotSchema,\n getBot: getBotSchema,\n deleteBot: deleteBotSchema,\n listBots: listBotsSchema,\n getIntegration: getIntegrationSchema,\n listIntegrations: listIntegrationsSchema,\n deleteIntegration: deleteIntegrationSchema,\n getInterface: getInterfaceSchema,\n listInterfaces: listInterfacesSchema,\n deleteInterface: deleteInterfaceSchema,\n getPlugin: getPluginSchema,\n listPlugins: listPluginsSchema,\n deletePlugin: deletePluginSchema,\n init: initSchema,\n generate: generateSchema,\n bundle: bundleSchema,\n build: buildSchema,\n read: readSchema,\n serve: serveSchema,\n deploy: deploySchema,\n add: addSchema,\n dev: devSchema,\n lint: lintSchema,\n} as const\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/consts.js CHANGED
@@ -34,6 +34,7 @@ __export(consts_exports, {
34
34
  distDirName: () => distDirName,
35
35
  emptyBotDirName: () => emptyBotDirName,
36
36
  emptyIntegrationDirName: () => emptyIntegrationDirName,
37
+ emptyPluginDirName: () => emptyPluginDirName,
37
38
  fromCliRootDir: () => fromCliRootDir,
38
39
  fromHomeDir: () => fromHomeDir,
39
40
  fromOutDir: () => fromOutDir,
@@ -55,6 +56,7 @@ const defaultBotpressAppUrl = "https://app.botpress.cloud";
55
56
  const defaultTunnelUrl = "https://tunnel.botpress.cloud";
56
57
  const cliRootDir = import_root.CLI_ROOT_DIR;
57
58
  const emptyBotDirName = "empty-bot";
59
+ const emptyPluginDirName = "empty-plugin";
58
60
  const emptyIntegrationDirName = "empty-integration";
59
61
  const helloWorldIntegrationDirName = "hello-world";
60
62
  const webhookMessageIntegrationDirName = "webhook-message";
@@ -63,6 +65,7 @@ const outDirName = ".botpress";
63
65
  const distDirName = "dist";
64
66
  const fromCliRootDir = {
65
67
  emptyBotTemplate: import_path.default.join("templates", emptyBotDirName),
68
+ emptyPluginTemplate: import_path.default.join("templates", emptyPluginDirName),
66
69
  emptyIntegrationTemplate: import_path.default.join("templates", emptyIntegrationDirName),
67
70
  helloWorldIntegrationTemplate: import_path.default.join("templates", helloWorldIntegrationDirName),
68
71
  webhookMessageIntegrationTemplate: import_path.default.join("templates", webhookMessageIntegrationDirName)
@@ -74,6 +77,7 @@ const fromOutDir = {
74
77
  distDir: distDirName,
75
78
  outFile: import_path.default.join(distDirName, "index.js"),
76
79
  implementationDir: "implementation",
80
+ pluginsDir: "plugins",
77
81
  secretsDir: "secrets",
78
82
  projectCacheFile: "project.cache.json"
79
83
  };
@@ -81,11 +85,13 @@ const fromWorkDir = {
81
85
  integrationDefinition: "integration.definition.ts",
82
86
  interfaceDefinition: "interface.definition.ts",
83
87
  botDefinition: "bot.definition.ts",
88
+ pluginDefinition: "plugin.definition.ts",
84
89
  entryPoint: import_path.default.join("src", "index.ts"),
85
90
  outDir: outDirName,
86
91
  distDir: import_path.default.join(outDirName, fromOutDir.distDir),
87
92
  outFile: import_path.default.join(outDirName, fromOutDir.outFile),
88
93
  implementationDir: import_path.default.join(outDirName, fromOutDir.implementationDir),
94
+ pluginsDir: import_path.default.join(outDirName, fromOutDir.pluginsDir),
89
95
  secretsDir: import_path.default.join(outDirName, fromOutDir.secretsDir),
90
96
  projectCacheFile: import_path.default.join(outDirName, fromOutDir.projectCacheFile)
91
97
  };
@@ -101,6 +107,7 @@ const fromWorkDir = {
101
107
  distDirName,
102
108
  emptyBotDirName,
103
109
  emptyIntegrationDirName,
110
+ emptyPluginDirName,
104
111
  fromCliRootDir,
105
112
  fromHomeDir,
106
113
  fromOutDir,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/consts.ts"],
4
- "sourcesContent": ["import os from 'os'\nimport pathlib from 'path'\nimport { CLI_ROOT_DIR } from './root'\n\n// configurable\n\nexport const defaultBotpressHome = pathlib.join(os.homedir(), '.botpress')\nexport const defaultWorkDir = process.cwd()\nexport const defaultInstallPath = process.cwd()\nexport const defaultBotpressApiUrl = 'https://api.botpress.cloud'\nexport const defaultBotpressAppUrl = 'https://app.botpress.cloud'\nexport const defaultTunnelUrl = 'https://tunnel.botpress.cloud'\n\n// not configurable\n\nexport const cliRootDir = CLI_ROOT_DIR\nexport const emptyBotDirName = 'empty-bot'\nexport const emptyIntegrationDirName = 'empty-integration'\nexport const helloWorldIntegrationDirName = 'hello-world'\nexport const webhookMessageIntegrationDirName = 'webhook-message'\nexport const installDirName = 'bp_modules'\nexport const outDirName = '.botpress'\nexport const distDirName = 'dist'\n\nexport const fromCliRootDir = {\n emptyBotTemplate: pathlib.join('templates', emptyBotDirName),\n emptyIntegrationTemplate: pathlib.join('templates', emptyIntegrationDirName),\n helloWorldIntegrationTemplate: pathlib.join('templates', helloWorldIntegrationDirName),\n webhookMessageIntegrationTemplate: pathlib.join('templates', webhookMessageIntegrationDirName),\n}\n\nexport const fromHomeDir = {\n globalCacheFile: 'global.cache.json',\n}\n\nexport const fromOutDir = {\n distDir: distDirName,\n outFile: pathlib.join(distDirName, 'index.js'),\n implementationDir: 'implementation',\n secretsDir: 'secrets',\n projectCacheFile: 'project.cache.json',\n}\n\nexport const fromWorkDir = {\n integrationDefinition: 'integration.definition.ts',\n interfaceDefinition: 'interface.definition.ts',\n botDefinition: 'bot.definition.ts',\n entryPoint: pathlib.join('src', 'index.ts'),\n outDir: outDirName,\n distDir: pathlib.join(outDirName, fromOutDir.distDir),\n outFile: pathlib.join(outDirName, fromOutDir.outFile),\n implementationDir: pathlib.join(outDirName, fromOutDir.implementationDir),\n secretsDir: pathlib.join(outDirName, fromOutDir.secretsDir),\n projectCacheFile: pathlib.join(outDirName, fromOutDir.projectCacheFile),\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,kBAAoB;AACpB,kBAA6B;AAItB,MAAM,sBAAsB,YAAAA,QAAQ,KAAK,UAAAC,QAAG,QAAQ,GAAG,WAAW;AAClE,MAAM,iBAAiB,QAAQ,IAAI;AACnC,MAAM,qBAAqB,QAAQ,IAAI;AACvC,MAAM,wBAAwB;AAC9B,MAAM,wBAAwB;AAC9B,MAAM,mBAAmB;AAIzB,MAAM,aAAa;AACnB,MAAM,kBAAkB;AACxB,MAAM,0BAA0B;AAChC,MAAM,+BAA+B;AACrC,MAAM,mCAAmC;AACzC,MAAM,iBAAiB;AACvB,MAAM,aAAa;AACnB,MAAM,cAAc;AAEpB,MAAM,iBAAiB;AAAA,EAC5B,kBAAkB,YAAAD,QAAQ,KAAK,aAAa,eAAe;AAAA,EAC3D,0BAA0B,YAAAA,QAAQ,KAAK,aAAa,uBAAuB;AAAA,EAC3E,+BAA+B,YAAAA,QAAQ,KAAK,aAAa,4BAA4B;AAAA,EACrF,mCAAmC,YAAAA,QAAQ,KAAK,aAAa,gCAAgC;AAC/F;AAEO,MAAM,cAAc;AAAA,EACzB,iBAAiB;AACnB;AAEO,MAAM,aAAa;AAAA,EACxB,SAAS;AAAA,EACT,SAAS,YAAAA,QAAQ,KAAK,aAAa,UAAU;AAAA,EAC7C,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,kBAAkB;AACpB;AAEO,MAAM,cAAc;AAAA,EACzB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,YAAY,YAAAA,QAAQ,KAAK,OAAO,UAAU;AAAA,EAC1C,QAAQ;AAAA,EACR,SAAS,YAAAA,QAAQ,KAAK,YAAY,WAAW,OAAO;AAAA,EACpD,SAAS,YAAAA,QAAQ,KAAK,YAAY,WAAW,OAAO;AAAA,EACpD,mBAAmB,YAAAA,QAAQ,KAAK,YAAY,WAAW,iBAAiB;AAAA,EACxE,YAAY,YAAAA,QAAQ,KAAK,YAAY,WAAW,UAAU;AAAA,EAC1D,kBAAkB,YAAAA,QAAQ,KAAK,YAAY,WAAW,gBAAgB;AACxE;",
4
+ "sourcesContent": ["import os from 'os'\nimport pathlib from 'path'\nimport { CLI_ROOT_DIR } from './root'\n\n// configurable\n\nexport const defaultBotpressHome = pathlib.join(os.homedir(), '.botpress')\nexport const defaultWorkDir = process.cwd()\nexport const defaultInstallPath = process.cwd()\nexport const defaultBotpressApiUrl = 'https://api.botpress.cloud'\nexport const defaultBotpressAppUrl = 'https://app.botpress.cloud'\nexport const defaultTunnelUrl = 'https://tunnel.botpress.cloud'\n\n// not configurable\n\nexport const cliRootDir = CLI_ROOT_DIR\nexport const emptyBotDirName = 'empty-bot'\nexport const emptyPluginDirName = 'empty-plugin'\nexport const emptyIntegrationDirName = 'empty-integration'\nexport const helloWorldIntegrationDirName = 'hello-world'\nexport const webhookMessageIntegrationDirName = 'webhook-message'\nexport const installDirName = 'bp_modules'\nexport const outDirName = '.botpress'\nexport const distDirName = 'dist'\n\nexport const fromCliRootDir = {\n emptyBotTemplate: pathlib.join('templates', emptyBotDirName),\n emptyPluginTemplate: pathlib.join('templates', emptyPluginDirName),\n emptyIntegrationTemplate: pathlib.join('templates', emptyIntegrationDirName),\n helloWorldIntegrationTemplate: pathlib.join('templates', helloWorldIntegrationDirName),\n webhookMessageIntegrationTemplate: pathlib.join('templates', webhookMessageIntegrationDirName),\n}\n\nexport const fromHomeDir = {\n globalCacheFile: 'global.cache.json',\n}\n\nexport const fromOutDir = {\n distDir: distDirName,\n outFile: pathlib.join(distDirName, 'index.js'),\n implementationDir: 'implementation',\n pluginsDir: 'plugins',\n secretsDir: 'secrets',\n projectCacheFile: 'project.cache.json',\n}\n\nexport const fromWorkDir = {\n integrationDefinition: 'integration.definition.ts',\n interfaceDefinition: 'interface.definition.ts',\n botDefinition: 'bot.definition.ts',\n pluginDefinition: 'plugin.definition.ts',\n entryPoint: pathlib.join('src', 'index.ts'),\n outDir: outDirName,\n distDir: pathlib.join(outDirName, fromOutDir.distDir),\n outFile: pathlib.join(outDirName, fromOutDir.outFile),\n implementationDir: pathlib.join(outDirName, fromOutDir.implementationDir),\n pluginsDir: pathlib.join(outDirName, fromOutDir.pluginsDir),\n secretsDir: pathlib.join(outDirName, fromOutDir.secretsDir),\n projectCacheFile: pathlib.join(outDirName, fromOutDir.projectCacheFile),\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,kBAAoB;AACpB,kBAA6B;AAItB,MAAM,sBAAsB,YAAAA,QAAQ,KAAK,UAAAC,QAAG,QAAQ,GAAG,WAAW;AAClE,MAAM,iBAAiB,QAAQ,IAAI;AACnC,MAAM,qBAAqB,QAAQ,IAAI;AACvC,MAAM,wBAAwB;AAC9B,MAAM,wBAAwB;AAC9B,MAAM,mBAAmB;AAIzB,MAAM,aAAa;AACnB,MAAM,kBAAkB;AACxB,MAAM,qBAAqB;AAC3B,MAAM,0BAA0B;AAChC,MAAM,+BAA+B;AACrC,MAAM,mCAAmC;AACzC,MAAM,iBAAiB;AACvB,MAAM,aAAa;AACnB,MAAM,cAAc;AAEpB,MAAM,iBAAiB;AAAA,EAC5B,kBAAkB,YAAAD,QAAQ,KAAK,aAAa,eAAe;AAAA,EAC3D,qBAAqB,YAAAA,QAAQ,KAAK,aAAa,kBAAkB;AAAA,EACjE,0BAA0B,YAAAA,QAAQ,KAAK,aAAa,uBAAuB;AAAA,EAC3E,+BAA+B,YAAAA,QAAQ,KAAK,aAAa,4BAA4B;AAAA,EACrF,mCAAmC,YAAAA,QAAQ,KAAK,aAAa,gCAAgC;AAC/F;AAEO,MAAM,cAAc;AAAA,EACzB,iBAAiB;AACnB;AAEO,MAAM,aAAa;AAAA,EACxB,SAAS;AAAA,EACT,SAAS,YAAAA,QAAQ,KAAK,aAAa,UAAU;AAAA,EAC7C,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,kBAAkB;AACpB;AAEO,MAAM,cAAc;AAAA,EACzB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,YAAY,YAAAA,QAAQ,KAAK,OAAO,UAAU;AAAA,EAC1C,QAAQ;AAAA,EACR,SAAS,YAAAA,QAAQ,KAAK,YAAY,WAAW,OAAO;AAAA,EACpD,SAAS,YAAAA,QAAQ,KAAK,YAAY,WAAW,OAAO;AAAA,EACpD,mBAAmB,YAAAA,QAAQ,KAAK,YAAY,WAAW,iBAAiB;AAAA,EACxE,YAAY,YAAAA,QAAQ,KAAK,YAAY,WAAW,UAAU;AAAA,EAC1D,YAAY,YAAAA,QAAQ,KAAK,YAAY,WAAW,UAAU;AAAA,EAC1D,kBAAkB,YAAAA,QAAQ,KAAK,YAAY,WAAW,gBAAgB;AACxE;",
6
6
  "names": ["pathlib", "os"]
7
7
  }
package/dist/sdk/index.js CHANGED
@@ -16,6 +16,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
16
16
  var sdk_exports = {};
17
17
  module.exports = __toCommonJS(sdk_exports);
18
18
  __reExport(sdk_exports, require("./validate-integration"), module.exports);
19
+ __reExport(sdk_exports, require("./validate-bot"), module.exports);
19
20
  __reExport(sdk_exports, require("./resolve-integration-interfaces"), module.exports);
20
21
  __reExport(sdk_exports, require("./resolve-bot-interfaces"), module.exports);
21
22
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/sdk/index.ts"],
4
- "sourcesContent": ["export * from './validate-integration'\nexport * from './resolve-integration-interfaces'\nexport * from './resolve-bot-interfaces'\n"],
5
- "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,mCAAd;AACA,wBAAc,6CADd;AAEA,wBAAc,qCAFd;",
4
+ "sourcesContent": ["export * from './validate-integration'\nexport * from './validate-bot'\nexport * from './resolve-integration-interfaces'\nexport * from './resolve-bot-interfaces'\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,mCAAd;AACA,wBAAc,2BADd;AAEA,wBAAc,6CAFd;AAGA,wBAAc,qCAHd;",
6
6
  "names": []
7
7
  }
@@ -22,12 +22,17 @@ __export(resolve_bot_interfaces_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(resolve_bot_interfaces_exports);
24
24
  var import_resolve_integration_interfaces = require("./resolve-integration-interfaces");
25
+ const _isLocalIntegrationDef = (integration) => {
26
+ return "props" in integration;
27
+ };
25
28
  const resolveBotInterfaces = (bot) => {
26
29
  for (const integration of Object.values(bot.integrations ?? {})) {
27
30
  if (!integration.definition.interfaces) {
28
31
  continue;
29
32
  }
30
- integration.definition = (0, import_resolve_integration_interfaces.resolveInterfaces)(integration.definition);
33
+ if (_isLocalIntegrationDef(integration.definition)) {
34
+ integration.definition = (0, import_resolve_integration_interfaces.resolveInterfaces)(integration.definition);
35
+ }
31
36
  }
32
37
  return bot;
33
38
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/sdk/resolve-bot-interfaces.ts"],
4
- "sourcesContent": ["import * as sdk from '@botpress/sdk'\nimport { resolveInterfaces } from './resolve-integration-interfaces'\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 integration.definition = resolveInterfaces(integration.definition)\n }\n return bot\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4CAAkC;AAE3B,MAAM,uBAAuB,CAAC,QAA8C;AACjF,aAAW,eAAe,OAAO,OAAO,IAAI,gBAAgB,CAAC,CAAC,GAAG;AAC/D,QAAI,CAAC,YAAY,WAAW,YAAY;AACtC;AAAA,IACF;AACA,gBAAY,iBAAa,yDAAkB,YAAY,UAAU;AAAA,EACnE;AACA,SAAO;AACT;",
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
6
  "names": []
7
7
  }
@@ -28,6 +28,7 @@ __export(resolve_integration_interfaces_exports, {
28
28
  resolveInterfaces: () => resolveInterfaces
29
29
  });
30
30
  module.exports = __toCommonJS(resolve_integration_interfaces_exports);
31
+ var sdk = __toESM(require("@botpress/sdk"));
31
32
  var import_lodash = __toESM(require("lodash"));
32
33
  var utils = __toESM(require("../utils"));
33
34
  const resolveInterfaces = (integration) => {
@@ -60,10 +61,10 @@ const _mergeActions = (a, b) => {
60
61
  ...a,
61
62
  ...b,
62
63
  input: {
63
- schema: a.input.schema.merge(b.input.schema)
64
+ schema: _mergeObjectSchemas(a.input.schema, b.input.schema)
64
65
  },
65
66
  output: {
66
- schema: a.output.schema.merge(b.output.schema)
67
+ schema: _mergeObjectSchemas(a.input.schema, b.output.schema)
67
68
  }
68
69
  };
69
70
  };
@@ -71,7 +72,7 @@ const _mergeEvents = (a, b) => {
71
72
  return {
72
73
  ...a,
73
74
  ...b,
74
- schema: a.schema.merge(b.schema)
75
+ schema: _mergeObjectSchemas(a.schema, b.schema)
75
76
  };
76
77
  };
77
78
  const _mergeChannels = (a, b) => {
@@ -84,14 +85,12 @@ const _mergeChannels = (a, b) => {
84
85
  };
85
86
  const _mergeMessage = (a, b) => {
86
87
  return {
87
- schema: a.schema.merge(b.schema)
88
+ schema: _mergeObjectSchemas(a.schema, b.schema)
88
89
  };
89
90
  };
90
91
  const _resolveInterface = (intrface) => {
91
- const id = "id" in intrface ? intrface.id : void 0;
92
- const {
93
- definition: { name, version }
94
- } = intrface;
92
+ const { id } = intrface;
93
+ const { name, version } = intrface;
95
94
  const resolved = { actions: {}, events: {}, channels: {} };
96
95
  const statement = {
97
96
  id,
@@ -140,6 +139,15 @@ const _rename = (intrface, name) => {
140
139
  const templateProps = import_lodash.default.mapValues(entities, (entity) => entity.name);
141
140
  return utils.template.formatHandleBars(intrface.definition.templateName, { ...templateProps, name });
142
141
  };
142
+ const _mergeObjectSchemas = (a, b) => {
143
+ if (a instanceof sdk.z.ZodObject && b instanceof sdk.z.ZodObject) {
144
+ return a.merge(b);
145
+ }
146
+ if (a instanceof sdk.z.ZodRecord && b instanceof sdk.z.ZodRecord) {
147
+ return sdk.z.record(sdk.z.intersection(a.valueSchema, b.valueSchema));
148
+ }
149
+ throw new Error("Cannot merge object schemas with record schemas");
150
+ };
143
151
  // Annotate the CommonJS export names for ESM import in node:
144
152
  0 && (module.exports = {
145
153
  getImplementationStatements,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 InterfaceInstance = NonNullable<sdk.IntegrationDefinition['interfaces']>[number]\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\nexport const resolveInterfaces = <I extends sdk.IntegrationDefinition | sdk.IntegrationPackage['definition']>(\n integration: I\n): I => {\n const self = integration as utils.types.Writable<I>\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: a.input.schema.merge(b.input.schema),\n },\n output: {\n schema: a.output.schema.merge(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: a.schema.merge(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: a.schema.merge(b.schema),\n }\n}\n\nconst _resolveInterface = (\n intrface: InterfaceInstance\n): { resolved: ResolvedInterface; statement: InterfaceImplStatement } => {\n const id = 'id' in intrface ? intrface.id : undefined\n const {\n definition: { name, version },\n } = 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: InterfaceInstance, 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"],
5
- "mappings": "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",
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": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAqB;AACrB,oBAAc;AACd,YAAuB;AAoBhB,MAAM,oBAAoB,CAAC,gBAAsE;AACtG,QAAM,OAAO;AACb,MAAI,CAAC,KAAK,YAAY;AACpB,WAAO;AAAA,EACT;AAEA,aAAW,YAAY,OAAO,OAAO,KAAK,UAAU,GAAG;AACrD,UAAM,EAAE,SAAS,IAAI,kBAAkB,QAAQ;AAQ/C,SAAK,UAAU,MAAM,QAAQ,aAAa,KAAK,WAAW,CAAC,GAAG,SAAS,SAAS,aAAa;AAC7F,SAAK,WAAW,MAAM,QAAQ,aAAa,KAAK,YAAY,CAAC,GAAG,SAAS,UAAU,cAAc;AACjG,SAAK,SAAS,MAAM,QAAQ,aAAa,KAAK,UAAU,CAAC,GAAG,SAAS,QAAQ,YAAY;AAAA,EAC3F;AAEA,SAAO;AACT;AAEO,MAAM,8BAA8B,CACzC,gBAC2C;AAC3C,QAAM,OAAO;AACb,MAAI,CAAC,KAAK,YAAY;AACpB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,aAAqD,CAAC;AAC5D,aAAW,CAAC,cAAc,QAAQ,KAAK,OAAO,QAAQ,KAAK,UAAU,GAAG;AACtE,UAAM,EAAE,UAAU,IAAI,kBAAkB,QAAQ;AAChD,eAAW,gBAAgB;AAAA,EAC7B;AAEA,SAAO;AACT;AAEA,MAAM,gBAAgB,CAAC,GAAyB,MAAkD;AAChG,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO;AAAA,MACL,QAAQ,oBAAoB,EAAE,MAAM,QAAQ,EAAE,MAAM,MAAM;AAAA,IAC5D;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ,oBAAoB,EAAE,MAAM,QAAQ,EAAE,OAAO,MAAM;AAAA,IAC7D;AAAA,EACF;AACF;AAEA,MAAM,eAAe,CAAC,GAAwB,MAAgD;AAC5F,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ,oBAAoB,EAAE,QAAQ,EAAE,MAAM;AAAA,EAChD;AACF;AAEA,MAAM,iBAAiB,CAAC,GAA0B,MAAoD;AACpG,QAAM,WAAW,MAAM,QAAQ,aAAa,EAAE,UAAU,EAAE,UAAU,aAAa;AACjF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,EACF;AACF;AAEA,MAAM,gBAAgB,CAAC,GAA0B,MAAoD;AACnG,SAAO;AAAA,IACL,QAAQ,oBAAoB,EAAE,QAAQ,EAAE,MAAM;AAAA,EAChD;AACF;AAEA,MAAM,oBAAoB,CACxB,aACuE;AACvE,QAAM,EAAE,GAAG,IAAI;AACf,QAAM,EAAE,MAAM,QAAQ,IAAI;AAE1B,QAAM,WAA8B,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC,EAAE;AAC5E,QAAM,YAAoC;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,cAAAA,QAAE,UAAU,SAAS,UAAU,CAAC,YAAY,EAAE,MAAM,OAAO,KAAK,EAAE;AAAA,IAC5E,SAAS,CAAC;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,UAAU,CAAC;AAAA,EACb;AAEA,QAAM,gBAAgB,cAAAA,QAAE,UAAU,SAAS,UAAU,CAAC,WAAW,OAAO,MAAM;AAG9E,aAAW,CAAC,YAAY,MAAM,KAAK,OAAO,QAAQ,SAAS,WAAW,WAAW,CAAC,CAAC,GAAG;AACpF,UAAM,sBAAsB,OAAO,MAAM,OAAO,YAAY,aAAa;AACzE,UAAM,uBAAuB,OAAO,OAAO,OAAO,YAAY,aAAa;AAE3E,UAAM,gBAAgB,QAAQ,UAAU,UAAU;AAClD,aAAS,QAAQ,iBAAiB;AAAA,MAChC,GAAG;AAAA,MACH,OAAO,EAAE,QAAQ,oBAAoB;AAAA,MACrC,QAAQ,EAAE,QAAQ,qBAAqB;AAAA,IACzC;AACA,cAAU,QAAQ,cAAc,EAAE,MAAM,cAAc;AAAA,EACxD;AAGA,aAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,SAAS,WAAW,UAAU,CAAC,CAAC,GAAG;AACjF,UAAM,sBAAsB,MAAM,OAAO,YAAY,aAAa;AAClE,UAAM,eAAe,QAAQ,UAAU,SAAS;AAChD,aAAS,OAAO,gBAAgB,EAAE,GAAG,OAAO,QAAQ,oBAAoB;AACxE,cAAU,OAAO,aAAa,EAAE,MAAM,aAAa;AAAA,EACrD;AAGA,aAAW,CAAC,aAAa,OAAO,KAAK,OAAO,QAAQ,SAAS,WAAW,YAAY,CAAC,CAAC,GAAG;AACvF,UAAM,WAA2D,CAAC;AAClE,eAAW,CAAC,aAAa,OAAO,KAAK,OAAO,QAAQ,QAAQ,QAAQ,GAAG;AACrE,YAAM,wBAAwB,QAAQ,OAAO,YAAY,aAAa;AAEtE,eAAS,eAAe,EAAE,GAAG,SAAS,QAAQ,sBAAsB;AAAA,IACtE;AACA,UAAM,iBAAiB,QAAQ,UAAU,WAAW;AACpD,aAAS,SAAS,kBAAkB,EAAE,GAAG,SAAS,SAAS;AAC3D,cAAU,SAAS,eAAe,EAAE,MAAM,eAAe;AAAA,EAC3D;AAEA,SAAO,EAAE,UAAU,UAAU;AAC/B;AAEA,MAAM,UAAU,CAAC,UAA8B,SAAiB;AAC9D,MAAI,CAAC,SAAS,WAAW,cAAc;AACrC,WAAO;AAAA,EACT;AACA,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,gBAAgB,cAAAA,QAAE,UAAU,UAAU,CAAC,WAAW,OAAO,IAAI;AACnE,SAAO,MAAM,SAAS,iBAAiB,SAAS,WAAW,cAAc,EAAE,GAAG,eAAe,KAAK,CAAC;AACrG;AAEA,MAAM,sBAAsB,CAAC,GAAoB,MAAwC;AACvF,MAAI,aAAa,IAAI,EAAE,aAAa,aAAa,IAAI,EAAE,WAAW;AAChE,WAAO,EAAE,MAAM,CAAC;AAAA,EAClB;AACA,MAAI,aAAa,IAAI,EAAE,aAAa,aAAa,IAAI,EAAE,WAAW;AAChE,WAAO,IAAI,EAAE,OAAO,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC;AAAA,EACtE;AAEA,QAAM,IAAI,MAAM,iDAAiD;AACnE;",
6
6
  "names": ["_"]
7
7
  }
@@ -0,0 +1,84 @@
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
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var validate_bot_exports = {};
26
+ __export(validate_bot_exports, {
27
+ validateBotDefinition: () => validateBotDefinition
28
+ });
29
+ module.exports = __toCommonJS(validate_bot_exports);
30
+ var errors = __toESM(require("../errors"));
31
+ var utils = __toESM(require("../utils"));
32
+ const validateBotDefinition = (b) => {
33
+ const { actions, events, states } = b;
34
+ const invalidActionNames = _nonCamelCaseKeys(actions ?? {});
35
+ if (invalidActionNames.length) {
36
+ throw new errors.BotpressCLIError(
37
+ `The following action names are not in camelCase: ${invalidActionNames.join(", ")}`
38
+ );
39
+ }
40
+ const invalidEventNames = _nonCamelCaseKeys(events ?? {});
41
+ if (invalidEventNames.length) {
42
+ throw new errors.BotpressCLIError(`The following event names are not in camelCase: ${invalidEventNames.join(", ")}`);
43
+ }
44
+ const invalidStateNames = _nonCamelCaseKeys(states ?? {});
45
+ if (invalidStateNames.length) {
46
+ throw new errors.BotpressCLIError(`The following state names are not in camelCase: ${invalidStateNames.join(", ")}`);
47
+ }
48
+ for (const [pluginName, plugin] of Object.entries(b.plugins ?? {})) {
49
+ const integrationDependencies = plugin.definition.integrations ?? {};
50
+ for (const dep of Object.values(integrationDependencies)) {
51
+ if (!_hasIntegrationDependency(b, dep)) {
52
+ throw new errors.BotpressCLIError(
53
+ `Plugin "${pluginName}" has a dependency on integration "${dep.name}@${dep.version}", but it is not present in the bot definition. Please install it.`
54
+ );
55
+ }
56
+ }
57
+ const interfaceDepdencies = plugin.definition.interfaces ?? {};
58
+ for (const dep of Object.values(interfaceDepdencies)) {
59
+ const interfaceImpl = plugin.interfaces[dep.name];
60
+ if (!interfaceImpl) {
61
+ throw new errors.BotpressCLIError(
62
+ `Plugin "${pluginName}" has a dependency on interface "${dep.name}@${dep.version}", but the bot does not specify an implementation for it.`
63
+ );
64
+ }
65
+ if (!_hasIntegrationDependency(b, interfaceImpl)) {
66
+ throw new errors.BotpressCLIError(
67
+ `Integration "${interfaceImpl.name}@${interfaceImpl.version}" is not installed in the bot, but specified as an implementation for interface "${dep.name}@${dep.version}"`
68
+ );
69
+ }
70
+ }
71
+ }
72
+ };
73
+ const _nonCamelCaseKeys = (obj) => Object.keys(obj).filter((k) => !utils.casing.is.camelCase(k));
74
+ const _hasIntegrationDependency = (b, dep) => {
75
+ const integrationInstances = Object.entries(b.integrations ?? {}).map(([_k, v]) => v);
76
+ return integrationInstances.some(
77
+ (integration) => integration.name === dep.name && integration.version === dep.version
78
+ );
79
+ };
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ validateBotDefinition
83
+ });
84
+ //# sourceMappingURL=validate-bot.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/sdk/validate-bot.ts"],
4
+ "sourcesContent": ["import type * as sdk from '@botpress/sdk'\nimport * as errors from '../errors'\nimport * as utils from '../utils'\n\ntype PackageRef = { name: string; version: string }\n\nexport const validateBotDefinition = (b: sdk.BotDefinition): void => {\n const { actions, events, states } = b\n\n const invalidActionNames = _nonCamelCaseKeys(actions ?? {})\n if (invalidActionNames.length) {\n throw new errors.BotpressCLIError(\n `The following action names are not in camelCase: ${invalidActionNames.join(', ')}`\n )\n }\n\n const invalidEventNames = _nonCamelCaseKeys(events ?? {})\n if (invalidEventNames.length) {\n throw new errors.BotpressCLIError(`The following event names are not in camelCase: ${invalidEventNames.join(', ')}`)\n }\n\n const invalidStateNames = _nonCamelCaseKeys(states ?? {})\n if (invalidStateNames.length) {\n throw new errors.BotpressCLIError(`The following state names are not in camelCase: ${invalidStateNames.join(', ')}`)\n }\n\n for (const [pluginName, plugin] of Object.entries(b.plugins ?? {})) {\n const integrationDependencies = plugin.definition.integrations ?? {}\n for (const dep of Object.values(integrationDependencies)) {\n if (!_hasIntegrationDependency(b, dep)) {\n throw new errors.BotpressCLIError(\n `Plugin \"${pluginName}\" has a dependency on integration \"${dep.name}@${dep.version}\", but it is not present in the bot definition. Please install it.`\n )\n }\n }\n\n const interfaceDepdencies = plugin.definition.interfaces ?? {}\n for (const dep of Object.values(interfaceDepdencies)) {\n const interfaceImpl = plugin.interfaces[dep.name]\n if (!interfaceImpl) {\n throw new errors.BotpressCLIError(\n `Plugin \"${pluginName}\" has a dependency on interface \"${dep.name}@${dep.version}\", but the bot does not specify an implementation for it.`\n )\n }\n\n if (!_hasIntegrationDependency(b, interfaceImpl)) {\n throw new errors.BotpressCLIError(\n `Integration \"${interfaceImpl.name}@${interfaceImpl.version}\" is not installed in the bot, but specified as an implementation for interface \"${dep.name}@${dep.version}\"`\n )\n }\n }\n }\n}\n\nconst _nonCamelCaseKeys = (obj: Record<string, any>): string[] =>\n Object.keys(obj).filter((k) => !utils.casing.is.camelCase(k))\n\nconst _hasIntegrationDependency = (b: sdk.BotDefinition, dep: PackageRef): boolean => {\n const integrationInstances = Object.entries(b.integrations ?? {}).map(([_k, v]) => v)\n return integrationInstances.some(\n (integration) => integration.name === dep.name && integration.version === dep.version\n )\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,aAAwB;AACxB,YAAuB;AAIhB,MAAM,wBAAwB,CAAC,MAA+B;AACnE,QAAM,EAAE,SAAS,QAAQ,OAAO,IAAI;AAEpC,QAAM,qBAAqB,kBAAkB,WAAW,CAAC,CAAC;AAC1D,MAAI,mBAAmB,QAAQ;AAC7B,UAAM,IAAI,OAAO;AAAA,MACf,oDAAoD,mBAAmB,KAAK,IAAI;AAAA,IAClF;AAAA,EACF;AAEA,QAAM,oBAAoB,kBAAkB,UAAU,CAAC,CAAC;AACxD,MAAI,kBAAkB,QAAQ;AAC5B,UAAM,IAAI,OAAO,iBAAiB,mDAAmD,kBAAkB,KAAK,IAAI,GAAG;AAAA,EACrH;AAEA,QAAM,oBAAoB,kBAAkB,UAAU,CAAC,CAAC;AACxD,MAAI,kBAAkB,QAAQ;AAC5B,UAAM,IAAI,OAAO,iBAAiB,mDAAmD,kBAAkB,KAAK,IAAI,GAAG;AAAA,EACrH;AAEA,aAAW,CAAC,YAAY,MAAM,KAAK,OAAO,QAAQ,EAAE,WAAW,CAAC,CAAC,GAAG;AAClE,UAAM,0BAA0B,OAAO,WAAW,gBAAgB,CAAC;AACnE,eAAW,OAAO,OAAO,OAAO,uBAAuB,GAAG;AACxD,UAAI,CAAC,0BAA0B,GAAG,GAAG,GAAG;AACtC,cAAM,IAAI,OAAO;AAAA,UACf,WAAW,gDAAgD,IAAI,QAAQ,IAAI;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAEA,UAAM,sBAAsB,OAAO,WAAW,cAAc,CAAC;AAC7D,eAAW,OAAO,OAAO,OAAO,mBAAmB,GAAG;AACpD,YAAM,gBAAgB,OAAO,WAAW,IAAI;AAC5C,UAAI,CAAC,eAAe;AAClB,cAAM,IAAI,OAAO;AAAA,UACf,WAAW,8CAA8C,IAAI,QAAQ,IAAI;AAAA,QAC3E;AAAA,MACF;AAEA,UAAI,CAAC,0BAA0B,GAAG,aAAa,GAAG;AAChD,cAAM,IAAI,OAAO;AAAA,UACf,gBAAgB,cAAc,QAAQ,cAAc,2FAA2F,IAAI,QAAQ,IAAI;AAAA,QACjK;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,MAAM,oBAAoB,CAAC,QACzB,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC;AAE9D,MAAM,4BAA4B,CAAC,GAAsB,QAA6B;AACpF,QAAM,uBAAuB,OAAO,QAAQ,EAAE,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACpF,SAAO,qBAAqB;AAAA,IAC1B,CAAC,gBAAgB,YAAY,SAAS,IAAI,QAAQ,YAAY,YAAY,IAAI;AAAA,EAChF;AACF;",
6
+ "names": []
7
+ }
@@ -32,7 +32,8 @@ function buildCode({
32
32
  logLevel = "silent",
33
33
  outfile,
34
34
  code,
35
- write
35
+ write,
36
+ platform = "node"
36
37
  }) {
37
38
  return (0, import_esbuild.build)({
38
39
  stdin: {
@@ -43,7 +44,7 @@ function buildCode({
43
44
  logOverride: {
44
45
  "equals-negative-zero": "silent"
45
46
  },
46
- platform: "node",
47
+ platform,
47
48
  target: "es2020",
48
49
  sourcemap,
49
50
  minify,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/esbuild-utils.ts"],
4
- "sourcesContent": ["import { build as esbuild, LogLevel, BuildResult, OutputFile } from 'esbuild'\n\ntype BaseProps<W extends boolean> = {\n cwd: string\n outfile: string\n minify?: boolean\n sourcemap?: boolean\n bundle?: boolean\n logLevel?: LogLevel\n write: W\n}\n\nexport type BuildCodeProps<W extends boolean> = BaseProps<W> & {\n code: string\n}\n\nexport type BuildEntrypointProps<W extends boolean> = BaseProps<W> & {\n entrypoint: string\n}\n\nconst keepNames = true // important : https://github.com/node-fetch/node-fetch/issues/784#issuecomment-1014768204\n\nexport function buildCode(p: BuildCodeProps<true>): Promise<BuildResult>\nexport function buildCode(p: BuildCodeProps<false>): Promise<BuildResult & { outputFiles: OutputFile[] }>\nexport function buildCode<W extends boolean>({\n cwd,\n minify = true,\n bundle = true,\n sourcemap = false,\n logLevel = 'silent',\n outfile,\n code,\n write,\n}: BuildCodeProps<W>) {\n return esbuild({\n stdin: {\n contents: code,\n resolveDir: cwd,\n loader: 'ts',\n },\n logOverride: {\n 'equals-negative-zero': 'silent',\n },\n platform: 'node',\n target: 'es2020',\n sourcemap,\n minify,\n bundle,\n outfile,\n absWorkingDir: cwd,\n logLevel,\n keepNames,\n write,\n legalComments: 'none',\n })\n}\n\nexport function buildEntrypoint(p: BuildEntrypointProps<true>): Promise<BuildResult>\nexport function buildEntrypoint(p: BuildEntrypointProps<false>): Promise<BuildResult & { outputFiles: OutputFile[] }>\nexport function buildEntrypoint<W extends boolean>({\n cwd,\n minify = true,\n bundle = true,\n sourcemap = false,\n logLevel = 'silent',\n outfile,\n entrypoint,\n write,\n}: BuildEntrypointProps<W>) {\n return esbuild({\n entryPoints: [entrypoint],\n logOverride: {\n 'equals-negative-zero': 'silent',\n },\n platform: 'node',\n target: 'es2020',\n sourcemap,\n minify,\n bundle,\n outfile,\n absWorkingDir: cwd,\n logLevel,\n keepNames,\n write,\n })\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoE;AAoBpE,MAAM,YAAY;AAIX,SAAS,UAA6B;AAAA,EAC3C;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,aAAO,eAAAA,OAAQ;AAAA,IACb,OAAO;AAAA,MACL,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,QAAQ;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACX,wBAAwB;AAAA,IAC1B;AAAA,IACA,UAAU;AAAA,IACV,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AACH;AAIO,SAAS,gBAAmC;AAAA,EACjD;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,aAAO,eAAAA,OAAQ;AAAA,IACb,aAAa,CAAC,UAAU;AAAA,IACxB,aAAa;AAAA,MACX,wBAAwB;AAAA,IAC1B;AAAA,IACA,UAAU;AAAA,IACV,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import { build as esbuild, LogLevel, Platform, BuildResult, OutputFile } from 'esbuild'\n\ntype BaseProps<W extends boolean = true> = {\n cwd: string\n outfile: string\n minify?: boolean\n sourcemap?: boolean\n bundle?: boolean\n logLevel?: LogLevel\n write: W\n platform?: Platform\n}\n\nexport type BuildCodeProps<W extends boolean = true> = BaseProps<W> & {\n code: string\n}\n\nexport type BuildEntrypointProps<W extends boolean = true> = BaseProps<W> & {\n entrypoint: string\n}\n\nconst keepNames = true // important : https://github.com/node-fetch/node-fetch/issues/784#issuecomment-1014768204\n\nexport function buildCode(p: BuildCodeProps<true>): Promise<BuildResult>\nexport function buildCode(p: BuildCodeProps<false>): Promise<BuildResult & { outputFiles: OutputFile[] }>\nexport function buildCode<W extends boolean>({\n cwd,\n minify = true,\n bundle = true,\n sourcemap = false,\n logLevel = 'silent',\n outfile,\n code,\n write,\n platform = 'node',\n}: BuildCodeProps<W>) {\n return esbuild({\n stdin: {\n contents: code,\n resolveDir: cwd,\n loader: 'ts',\n },\n logOverride: {\n 'equals-negative-zero': 'silent',\n },\n platform,\n target: 'es2020',\n sourcemap,\n minify,\n bundle,\n outfile,\n absWorkingDir: cwd,\n logLevel,\n keepNames,\n write,\n legalComments: 'none',\n })\n}\n\nexport function buildEntrypoint(p: BuildEntrypointProps<true>): Promise<BuildResult>\nexport function buildEntrypoint(p: BuildEntrypointProps<false>): Promise<BuildResult & { outputFiles: OutputFile[] }>\nexport function buildEntrypoint<W extends boolean>({\n cwd,\n minify = true,\n bundle = true,\n sourcemap = false,\n logLevel = 'silent',\n outfile,\n entrypoint,\n write,\n}: BuildEntrypointProps<W>) {\n return esbuild({\n entryPoints: [entrypoint],\n logOverride: {\n 'equals-negative-zero': 'silent',\n },\n platform: 'node',\n target: 'es2020',\n sourcemap,\n minify,\n bundle,\n outfile,\n absWorkingDir: cwd,\n logLevel,\n keepNames,\n write,\n })\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA8E;AAqB9E,MAAM,YAAY;AAIX,SAAS,UAA6B;AAAA,EAC3C;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAsB;AACpB,aAAO,eAAAA,OAAQ;AAAA,IACb,OAAO;AAAA,MACL,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,QAAQ;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACX,wBAAwB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AACH;AAIO,SAAS,gBAAmC;AAAA,EACjD;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,aAAO,eAAAA,OAAQ;AAAA,IACb,aAAa,CAAC,UAAU;AAAA,IACxB,aAAa;AAAA,MACX,wBAAwB;AAAA,IAC1B;AAAA,IACA,UAAU;AAAA,IACV,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
6
  "names": ["esbuild"]
7
7
  }
@@ -31,6 +31,7 @@ __export(utils_exports, {
31
31
  filewatcher: () => filewatcher,
32
32
  guards: () => guards,
33
33
  id: () => id,
34
+ object: () => object,
34
35
  path: () => path,
35
36
  pkgJson: () => pkgJson,
36
37
  promises: () => promises,
@@ -53,6 +54,7 @@ var esbuild = __toESM(require("./esbuild-utils"));
53
54
  var filewatcher = __toESM(require("./file-watcher"));
54
55
  var guards = __toESM(require("./guard-utils"));
55
56
  var id = __toESM(require("./id-utils"));
57
+ var object = __toESM(require("./object-utils"));
56
58
  var path = __toESM(require("./path-utils"));
57
59
  var pkgJson = __toESM(require("./pkgjson-utils"));
58
60
  var promises = __toESM(require("./promise-utils"));
@@ -75,6 +77,7 @@ var url = __toESM(require("./url-utils"));
75
77
  filewatcher,
76
78
  guards,
77
79
  id,
80
+ object,
78
81
  path,
79
82
  pkgJson,
80
83
  promises,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/index.ts"],
4
- "sourcesContent": ["export * as cache from './cache-utils'\nexport * as casing from './case-utils'\nexport * as emitter from './event-emitter'\nexport * as esbuild from './esbuild-utils'\nexport * as filewatcher from './file-watcher'\nexport * as guards from './guard-utils'\nexport * as id from './id-utils'\nexport * as path from './path-utils'\nexport * as pkgJson from './pkgjson-utils'\nexport * as promises from './promise-utils'\nexport * as prompt from './prompt-utils'\nexport * as records from './record-utils'\nexport * as require from './require-utils'\nexport * as schema from './schema-utils'\nexport * as semver from './semver-utils'\nexport * as string from './string-utils'\nexport * as template from './template-utils'\nexport * as tunnel from './tunnel-utils'\nexport * as types from './type-utils'\nexport * as url from './url-utils'\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,aAAwB;AACxB,cAAyB;AACzB,cAAyB;AACzB,kBAA6B;AAC7B,aAAwB;AACxB,SAAoB;AACpB,WAAsB;AACtB,cAAyB;AACzB,eAA0B;AAC1B,aAAwB;AACxB,cAAyB;AACzB,IAAAA,WAAyB;AACzB,aAAwB;AACxB,aAAwB;AACxB,aAAwB;AACxB,eAA0B;AAC1B,aAAwB;AACxB,YAAuB;AACvB,UAAqB;",
4
+ "sourcesContent": ["export * as cache from './cache-utils'\nexport * as casing from './case-utils'\nexport * as emitter from './event-emitter'\nexport * as esbuild from './esbuild-utils'\nexport * as filewatcher from './file-watcher'\nexport * as guards from './guard-utils'\nexport * as id from './id-utils'\nexport * as object from './object-utils'\nexport * as path from './path-utils'\nexport * as pkgJson from './pkgjson-utils'\nexport * as promises from './promise-utils'\nexport * as prompt from './prompt-utils'\nexport * as records from './record-utils'\nexport * as require from './require-utils'\nexport * as schema from './schema-utils'\nexport * as semver from './semver-utils'\nexport * as string from './string-utils'\nexport * as template from './template-utils'\nexport * as tunnel from './tunnel-utils'\nexport * as types from './type-utils'\nexport * as url from './url-utils'\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,aAAwB;AACxB,cAAyB;AACzB,cAAyB;AACzB,kBAA6B;AAC7B,aAAwB;AACxB,SAAoB;AACpB,aAAwB;AACxB,WAAsB;AACtB,cAAyB;AACzB,eAA0B;AAC1B,aAAwB;AACxB,cAAyB;AACzB,IAAAA,WAAyB;AACzB,aAAwB;AACxB,aAAwB;AACxB,aAAwB;AACxB,eAA0B;AAC1B,aAAwB;AACxB,YAAuB;AACvB,UAAqB;",
6
6
  "names": ["require"]
7
7
  }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var object_utils_exports = {};
20
+ __export(object_utils_exports, {
21
+ omit: () => omit
22
+ });
23
+ module.exports = __toCommonJS(object_utils_exports);
24
+ const omit = (obj, property) => {
25
+ const { [property]: _, ...rest } = obj;
26
+ return rest;
27
+ };
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ omit
31
+ });
32
+ //# sourceMappingURL=object-utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/object-utils.ts"],
4
+ "sourcesContent": ["export const omit = <O extends object, K extends keyof O>(obj: O, property: K): Omit<O, K> => {\n const { [property]: _, ...rest } = obj\n return rest\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,OAAO,CAAsC,KAAQ,aAA4B;AAC5F,QAAM,GAAG,WAAW,MAAM,KAAK,IAAI;AACnC,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/schema-utils.ts"],
4
- "sourcesContent": ["import { dereference } from '@apidevtools/json-schema-ref-parser'\nimport { z, transforms } from '@botpress/sdk'\nimport { JSONSchema7 } from 'json-schema'\n\ntype ZuiToJsonSchema = typeof transforms.zuiToJsonSchema\ntype JsonSchema = ReturnType<ZuiToJsonSchema>\ntype ObjectJsonSchema = Extract<JsonSchema, { type: 'object' }>\n\ntype SchemaOptions = {\n title?: string\n examples?: any[]\n}\n\ntype SchemaDefinition = {\n schema: z.ZodObject<any>\n ui?: Record<string, SchemaOptions | undefined>\n}\n\nconst isObjectSchema = (schema: JsonSchema): schema is ObjectJsonSchema => schema.type === 'object'\n\nexport async function mapZodToJsonSchema(\n definition: SchemaDefinition\n): Promise<ReturnType<typeof transforms.zuiToJsonSchema>> {\n let schema = transforms.zuiToJsonSchema(definition.schema, { target: 'jsonSchema7' })\n schema = (await dereferenceSchema(schema)) as typeof schema\n\n if (!isObjectSchema(schema) || !definition.ui) {\n return schema\n }\n\n for (const [key, value] of Object.entries(definition.ui ?? {})) {\n const property = schema.properties?.[key]\n\n if (!property) {\n continue\n }\n\n if (!!value?.title) {\n ;(property as any).title = value.title\n }\n\n if (!!value?.examples) {\n ;(property as any).examples = value.examples\n }\n }\n\n return schema\n}\n\nexport const dereferenceSchema = async (schema: JSONSchema7): Promise<JSONSchema7> => {\n return dereference(schema, {\n resolve: {\n external: false,\n file: false,\n http: false,\n },\n })\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAA4B;AAC5B,iBAA8B;AAiB9B,MAAM,iBAAiB,CAAC,WAAmD,OAAO,SAAS;AAE3F,eAAsB,mBACpB,YACwD;AACxD,MAAI,SAAS,sBAAW,gBAAgB,WAAW,QAAQ,EAAE,QAAQ,cAAc,CAAC;AACpF,WAAU,MAAM,kBAAkB,MAAM;AAExC,MAAI,CAAC,eAAe,MAAM,KAAK,CAAC,WAAW,IAAI;AAC7C,WAAO;AAAA,EACT;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,WAAW,MAAM,CAAC,CAAC,GAAG;AAC9D,UAAM,WAAW,OAAO,aAAa;AAErC,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AAEA,QAAI,CAAC,CAAC,OAAO,OAAO;AAClB;AAAC,MAAC,SAAiB,QAAQ,MAAM;AAAA,IACnC;AAEA,QAAI,CAAC,CAAC,OAAO,UAAU;AACrB;AAAC,MAAC,SAAiB,WAAW,MAAM;AAAA,IACtC;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,oBAAoB,OAAO,WAA8C;AACpF,aAAO,2CAAY,QAAQ;AAAA,IACzB,SAAS;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import { dereference } from '@apidevtools/json-schema-ref-parser'\nimport { z, transforms } from '@botpress/sdk'\nimport { JSONSchema7 } from 'json-schema'\n\ntype ZuiToJsonSchema = typeof transforms.zuiToJsonSchema\ntype JsonSchema = ReturnType<ZuiToJsonSchema>\ntype ObjectJsonSchema = Extract<JsonSchema, { type: 'object' }>\n\ntype SchemaOptions = {\n title?: string\n examples?: any[]\n}\n\ntype ZodObjectSchema = z.ZodObject | z.ZodRecord\ntype SchemaDefinition = {\n schema: ZodObjectSchema\n ui?: Record<string, SchemaOptions | undefined>\n}\n\nconst isObjectSchema = (schema: JsonSchema): schema is ObjectJsonSchema => schema.type === 'object'\n\nexport async function mapZodToJsonSchema(\n definition: SchemaDefinition\n): Promise<ReturnType<typeof transforms.zuiToJsonSchema>> {\n let schema = transforms.zuiToJsonSchema(definition.schema, { target: 'jsonSchema7' })\n schema = (await dereferenceSchema(schema)) as typeof schema\n\n if (!isObjectSchema(schema) || !definition.ui) {\n return schema\n }\n\n for (const [key, value] of Object.entries(definition.ui ?? {})) {\n const property = schema.properties?.[key]\n\n if (!property) {\n continue\n }\n\n if (!!value?.title) {\n ;(property as any).title = value.title\n }\n\n if (!!value?.examples) {\n ;(property as any).examples = value.examples\n }\n }\n\n return schema\n}\n\nexport const dereferenceSchema = async (schema: JSONSchema7): Promise<JSONSchema7> => {\n return dereference(schema, {\n resolve: {\n external: false,\n file: false,\n http: false,\n },\n })\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAA4B;AAC5B,iBAA8B;AAkB9B,MAAM,iBAAiB,CAAC,WAAmD,OAAO,SAAS;AAE3F,eAAsB,mBACpB,YACwD;AACxD,MAAI,SAAS,sBAAW,gBAAgB,WAAW,QAAQ,EAAE,QAAQ,cAAc,CAAC;AACpF,WAAU,MAAM,kBAAkB,MAAM;AAExC,MAAI,CAAC,eAAe,MAAM,KAAK,CAAC,WAAW,IAAI;AAC7C,WAAO;AAAA,EACT;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,WAAW,MAAM,CAAC,CAAC,GAAG;AAC9D,UAAM,WAAW,OAAO,aAAa;AAErC,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AAEA,QAAI,CAAC,CAAC,OAAO,OAAO;AAClB;AAAC,MAAC,SAAiB,QAAQ,MAAM;AAAA,IACnC;AAEA,QAAI,CAAC,CAAC,OAAO,UAAU;AACrB;AAAC,MAAC,SAAiB,WAAW,MAAM;AAAA,IACtC;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,oBAAoB,OAAO,WAA8C;AACpF,aAAO,2CAAY,QAAQ;AAAA,IACzB,SAAS;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/type-utils.ts"],
4
- "sourcesContent": ["export type Merge<A extends object, B extends object> = Omit<A, keyof B> & B\nexport type SafeOmit<T, K extends keyof T> = Omit<T, K>\nexport type Writable<T> = { -readonly [K in keyof T]: T[K] }\n"],
4
+ "sourcesContent": ["export type Merge<A extends object, B extends object> = Omit<A, keyof B> & B\nexport type SafeOmit<T, K extends keyof T> = Omit<T, K>\nexport type Writable<T> = { -readonly [K in keyof T]: T[K] }\n\nexport type AssertNever<_T extends never> = true\nexport type AssertExtends<_A extends B, B> = true\nexport type AssertKeyOf<_K extends keyof T, T> = true\nexport type AssertTrue<_T extends true> = true\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -125,7 +125,7 @@ export const addIntegration: Test = {
125
125
  [
126
126
  'import * as sdk from "@botpress/sdk"',
127
127
  `import anIntegration from "./bp_modules/${workspaceHandle}-${name}"`,
128
- 'export default new sdk.BotDefinition({}).add(anIntegration, {',
128
+ 'export default new sdk.BotDefinition({}).addIntegration(anIntegration, {',
129
129
  ' enabled: true,',
130
130
  ' configurationType: null,',
131
131
  ' configuration: {},',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botpress/cli",
3
- "version": "1.7.3",
3
+ "version": "2.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
  "dependencies": {
23
23
  "@apidevtools/json-schema-ref-parser": "^11.7.0",
24
24
  "@botpress/client": "0.36.1",
25
- "@botpress/sdk": "1.6.3",
25
+ "@botpress/sdk": "2.0.0",
26
26
  "@bpinternal/const": "^0.0.20",
27
27
  "@bpinternal/tunnel": "^0.1.1",
28
28
  "@bpinternal/yargs-extra": "^0.0.3",