@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.
- package/.turbo/turbo-build.log +8 -8
- package/dist/api/bot-body.js.map +2 -2
- package/dist/api/client.js +10 -2
- package/dist/api/client.js.map +2 -2
- package/dist/api/find-previous-version.test.js +1 -1
- package/dist/api/find-previous-version.test.js.map +2 -2
- package/dist/api/index.js +1 -0
- package/dist/api/index.js.map +2 -2
- package/dist/api/integration-body.js +6 -19
- package/dist/api/integration-body.js.map +2 -2
- package/dist/api/interface-body.js +1 -5
- package/dist/api/interface-body.js.map +2 -2
- package/dist/api/plugin-body.js +3 -0
- package/dist/api/plugin-body.js.map +2 -2
- package/dist/api/types.js.map +1 -1
- package/dist/code-generation/bot-implementation/bot-implementation.js +5 -2
- package/dist/code-generation/bot-implementation/bot-implementation.js.map +2 -2
- package/dist/code-generation/bot-implementation/bot-plugins/plugin-module.js +3 -0
- package/dist/code-generation/bot-implementation/bot-plugins/plugin-module.js.map +2 -2
- package/dist/code-generation/bot-implementation/bot-typings/index.js +11 -2
- package/dist/code-generation/bot-implementation/bot-typings/index.js.map +2 -2
- package/dist/code-generation/bot-implementation/bot-typings/tables-module.js +64 -0
- package/dist/code-generation/bot-implementation/bot-typings/tables-module.js.map +7 -0
- package/dist/code-generation/generators.js +11 -2
- package/dist/code-generation/generators.js.map +3 -3
- package/dist/code-generation/integration-package/index.js +4 -21
- package/dist/code-generation/integration-package/index.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/actions-module.js +10 -1
- package/dist/code-generation/integration-package/integration-package-definition/actions-module.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/channels-module.js +11 -1
- package/dist/code-generation/integration-package/integration-package-definition/channels-module.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/configuration-module.js +10 -8
- package/dist/code-generation/integration-package/integration-package-definition/configuration-module.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/configurations-module.js +10 -5
- package/dist/code-generation/integration-package/integration-package-definition/configurations-module.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/entities-module.js +9 -1
- package/dist/code-generation/integration-package/integration-package-definition/entities-module.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/events-module.js +9 -4
- package/dist/code-generation/integration-package/integration-package-definition/events-module.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/index.js +12 -3
- package/dist/code-generation/integration-package/integration-package-definition/index.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/interfaces-module.js +61 -0
- package/dist/code-generation/integration-package/integration-package-definition/interfaces-module.js.map +7 -0
- package/dist/code-generation/integration-package/integration-package-definition/states-module.js +6 -1
- package/dist/code-generation/integration-package/integration-package-definition/states-module.js.map +2 -2
- package/dist/code-generation/integration-package/integration-package-definition/typings.js.map +1 -1
- package/dist/code-generation/interface-package/index.js +4 -21
- package/dist/code-generation/interface-package/index.js.map +2 -2
- package/dist/code-generation/interface-package/interface-package-definition/actions-module.js +10 -1
- package/dist/code-generation/interface-package/interface-package-definition/actions-module.js.map +2 -2
- package/dist/code-generation/interface-package/interface-package-definition/channels-module.js +9 -1
- package/dist/code-generation/interface-package/interface-package-definition/channels-module.js.map +2 -2
- package/dist/code-generation/interface-package/interface-package-definition/entities-module.js +9 -1
- package/dist/code-generation/interface-package/interface-package-definition/entities-module.js.map +2 -2
- package/dist/code-generation/interface-package/interface-package-definition/events-module.js +9 -1
- package/dist/code-generation/interface-package/interface-package-definition/events-module.js.map +2 -2
- package/dist/code-generation/interface-package/interface-package-definition/index.js +0 -2
- package/dist/code-generation/interface-package/interface-package-definition/index.js.map +2 -2
- package/dist/code-generation/interface-package/interface-package-definition/typings.js.map +1 -1
- package/dist/code-generation/module.js +13 -7
- package/dist/code-generation/module.js.map +2 -2
- package/dist/code-generation/plugin-implementation/plugin-implementation.js +27 -4
- package/dist/code-generation/plugin-implementation/plugin-implementation.js.map +2 -2
- package/dist/code-generation/plugin-implementation/plugin-typings/index.js +19 -2
- package/dist/code-generation/plugin-implementation/plugin-typings/index.js.map +2 -2
- package/dist/code-generation/plugin-implementation/plugin-typings/tables-module.js +64 -0
- package/dist/code-generation/plugin-implementation/plugin-typings/tables-module.js.map +7 -0
- package/dist/code-generation/plugin-package/index.js +4 -46
- package/dist/code-generation/plugin-package/index.js.map +2 -2
- package/dist/code-generation/plugin-package/plugin-package-definition/actions-module.js +8 -1
- package/dist/code-generation/plugin-package/plugin-package-definition/actions-module.js.map +2 -2
- package/dist/code-generation/plugin-package/plugin-package-definition/configuration-module.js +10 -1
- package/dist/code-generation/plugin-package/plugin-package-definition/configuration-module.js.map +2 -2
- package/dist/code-generation/plugin-package/plugin-package-definition/events-module.js +9 -4
- package/dist/code-generation/plugin-package/plugin-package-definition/events-module.js.map +2 -2
- package/dist/code-generation/plugin-package/plugin-package-definition/index.js +15 -3
- package/dist/code-generation/plugin-package/plugin-package-definition/index.js.map +2 -2
- package/dist/code-generation/plugin-package/plugin-package-definition/interfaces-module.js +58 -0
- package/dist/code-generation/plugin-package/plugin-package-definition/interfaces-module.js.map +7 -0
- package/dist/code-generation/plugin-package/plugin-package-definition/states-module.js +6 -1
- package/dist/code-generation/plugin-package/plugin-package-definition/states-module.js.map +2 -2
- package/dist/code-generation/plugin-package/plugin-package-definition/typings.js.map +1 -1
- package/dist/code-generation/strings.js +10 -5
- package/dist/code-generation/strings.js.map +2 -2
- package/dist/code-generation/typings.js.map +1 -1
- package/dist/code-generation/typings.test.js +15 -0
- package/dist/code-generation/typings.test.js.map +7 -0
- package/dist/command-implementations/add-command.js +70 -25
- package/dist/command-implementations/add-command.js.map +2 -2
- package/dist/command-implementations/bundle-command.js +34 -27
- package/dist/command-implementations/bundle-command.js.map +2 -2
- package/dist/command-implementations/deploy-command.js +26 -68
- package/dist/command-implementations/deploy-command.js.map +2 -2
- package/dist/command-implementations/dev-command.js +13 -17
- package/dist/command-implementations/dev-command.js.map +2 -2
- package/dist/command-implementations/lint-command.js +5 -8
- package/dist/command-implementations/lint-command.js.map +3 -3
- package/dist/command-implementations/plugin-commands.js +1 -2
- package/dist/command-implementations/plugin-commands.js.map +2 -2
- package/dist/command-implementations/project-command.js +82 -34
- package/dist/command-implementations/project-command.js.map +2 -2
- package/dist/command-implementations/read-command.js +23 -8
- package/dist/command-implementations/read-command.js.map +2 -2
- package/dist/command-implementations/serve-command.js +1 -1
- package/dist/command-implementations/serve-command.js.map +1 -1
- package/dist/consts.js +4 -2
- package/dist/consts.js.map +2 -2
- package/dist/errors.js +3 -3
- package/dist/errors.js.map +2 -2
- package/dist/linter/base-linter.test.js +6 -1
- package/dist/linter/base-linter.test.js.map +2 -2
- package/dist/linter/bot-linter.js.map +2 -2
- package/dist/linter/integration-linter.js.map +1 -1
- package/dist/linter/interface-linter.js.map +2 -2
- package/dist/linter/ruleset-tests/bot.ruleset.test.js.map +2 -2
- package/dist/linter/ruleset-tests/interface.ruleset.test.js.map +2 -2
- package/dist/sdk/index.js +0 -2
- package/dist/sdk/index.js.map +2 -2
- package/dist/{sdk/resolve-bot-interfaces.js → tables/index.js} +7 -21
- package/dist/tables/index.js.map +7 -0
- package/dist/tables/schemas.js +106 -0
- package/dist/tables/schemas.js.map +7 -0
- package/dist/tables/tables-publisher.js +157 -0
- package/dist/tables/tables-publisher.js.map +7 -0
- package/dist/utils/esbuild-utils.js +15 -13
- package/dist/utils/esbuild-utils.js.map +2 -2
- package/dist/utils/type-utils.js.map +1 -1
- package/package.json +2 -2
- package/templates/empty-bot/.botpress/implementation/index.ts +5 -2
- package/templates/empty-bot/.botpress/implementation/typings/index.ts +3 -0
- package/templates/empty-bot/.botpress/implementation/typings/tables/index.ts +6 -0
- package/templates/empty-bot/package.json +1 -1
- package/templates/empty-integration/package.json +1 -1
- package/templates/empty-plugin/.botpress/implementation/index.ts +27 -4
- package/templates/empty-plugin/.botpress/implementation/typings/index.ts +3 -0
- package/templates/empty-plugin/.botpress/implementation/typings/tables/index.ts +6 -0
- package/templates/empty-plugin/package.json +1 -1
- package/templates/hello-world/package.json +1 -1
- package/templates/webhook-message/package.json +1 -1
- package/dist/sdk/resolve-bot-interfaces.js.map +0 -7
- package/dist/sdk/resolve-integration-interfaces.js +0 -161
- package/dist/sdk/resolve-integration-interfaces.js.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/code-generation/plugin-package/plugin-package-definition/events-module.ts"],
|
|
4
|
-
"sourcesContent": ["import { jsonSchemaToTypescriptZuiSchema } from '../../generators'\nimport { Module, ReExportVariableModule } from '../../module'\nimport * as strings from '../../strings'\nimport * as types from './typings'\n\nexport class EventModule extends Module {\n public constructor(\n name: string,\n private _event: types.
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAgD;AAChD,oBAA+C;AAC/C,cAAyB;AAGlB,MAAM,oBAAoB,qBAAO;AAAA,EAC/B,YACL,MACQ,QACR;AACA,UAAM,YAAY;AAClB,UAAM,aAAa,QAAQ,QAAQ,SAAS;AAC5C,UAAM,EAAE,MAAM,GAAG,WAAW,WAAW,CAAC;AAJhC;AAAA,EAKV;AAAA,EAEA,MAAa,aAAa;AACxB,
|
|
4
|
+
"sourcesContent": ["import { jsonSchemaToTypescriptZuiSchema } from '../../generators'\nimport * as gen from '../../generators'\nimport { Module, ReExportVariableModule } from '../../module'\nimport * as strings from '../../strings'\nimport * as types from './typings'\n\nexport class EventModule extends Module {\n public constructor(\n name: string,\n private _event: types.EventDefinition\n ) {\n const eventName = name\n const exportName = strings.varName(eventName)\n super({ path: `${name}.ts`, exportName })\n }\n\n public async getContent() {\n return jsonSchemaToTypescriptZuiSchema(\n this._event.schema,\n this.exportName,\n gen.primitiveRecordToTypescriptValues({\n title: this._event.title,\n description: this._event.description,\n })\n )\n }\n}\n\nexport class EventsModule extends ReExportVariableModule {\n public constructor(events: Record<string, types.EventDefinition>) {\n super({ exportName: strings.varName('events') })\n for (const [eventName, event] of Object.entries(events)) {\n const module = new EventModule(eventName, event)\n this.pushDep(module)\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAgD;AAChD,UAAqB;AACrB,oBAA+C;AAC/C,cAAyB;AAGlB,MAAM,oBAAoB,qBAAO;AAAA,EAC/B,YACL,MACQ,QACR;AACA,UAAM,YAAY;AAClB,UAAM,aAAa,QAAQ,QAAQ,SAAS;AAC5C,UAAM,EAAE,MAAM,GAAG,WAAW,WAAW,CAAC;AAJhC;AAAA,EAKV;AAAA,EAEA,MAAa,aAAa;AACxB,eAAO;AAAA,MACL,KAAK,OAAO;AAAA,MACZ,KAAK;AAAA,MACL,IAAI,kCAAkC;AAAA,QACpC,OAAO,KAAK,OAAO;AAAA,QACnB,aAAa,KAAK,OAAO;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,MAAM,qBAAqB,qCAAuB;AAAA,EAChD,YAAY,QAA+C;AAChE,UAAM,EAAE,YAAY,QAAQ,QAAQ,QAAQ,EAAE,CAAC;AAC/C,eAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACvD,YAAMA,UAAS,IAAI,YAAY,WAAW,KAAK;AAC/C,WAAK,QAAQA,OAAM;AAAA,IACrB;AAAA,EACF;AACF;",
|
|
6
6
|
"names": ["module"]
|
|
7
7
|
}
|
|
@@ -37,6 +37,7 @@ var import_module = require("../../module");
|
|
|
37
37
|
var import_actions_module = require("./actions-module");
|
|
38
38
|
var import_configuration_module = require("./configuration-module");
|
|
39
39
|
var import_events_module = require("./events-module");
|
|
40
|
+
var import_interfaces_module = require("./interfaces-module");
|
|
40
41
|
var import_states_module = require("./states-module");
|
|
41
42
|
class PluginPackageDefinitionModule extends import_module.Module {
|
|
42
43
|
constructor(_plugin) {
|
|
@@ -45,7 +46,7 @@ class PluginPackageDefinitionModule extends import_module.Module {
|
|
|
45
46
|
exportName: consts.DEFAULT_EXPORT_NAME
|
|
46
47
|
});
|
|
47
48
|
this._plugin = _plugin;
|
|
48
|
-
const defaultConfigModule = new import_configuration_module.DefaultConfigurationModule(_plugin.configuration);
|
|
49
|
+
const defaultConfigModule = new import_configuration_module.DefaultConfigurationModule(_plugin.configuration ?? {});
|
|
49
50
|
defaultConfigModule.unshift("configuration");
|
|
50
51
|
const actionsModule = new import_actions_module.ActionsModule(_plugin.actions ?? {});
|
|
51
52
|
actionsModule.unshift("actions");
|
|
@@ -53,11 +54,14 @@ class PluginPackageDefinitionModule extends import_module.Module {
|
|
|
53
54
|
eventsModule.unshift("events");
|
|
54
55
|
const statesModule = new import_states_module.StatesModule(_plugin.states ?? {});
|
|
55
56
|
statesModule.unshift("states");
|
|
57
|
+
const interfacesModule = new import_interfaces_module.InterfacesModule(_plugin.dependencies?.interfaces ?? {});
|
|
58
|
+
interfacesModule.unshift("interfaces");
|
|
56
59
|
this._dependencies = {
|
|
57
60
|
defaultConfigModule,
|
|
58
61
|
actionsModule,
|
|
59
62
|
eventsModule,
|
|
60
|
-
statesModule
|
|
63
|
+
statesModule,
|
|
64
|
+
interfacesModule
|
|
61
65
|
};
|
|
62
66
|
for (const dep of Object.values(this._dependencies)) {
|
|
63
67
|
this.pushDep(dep);
|
|
@@ -66,14 +70,18 @@ class PluginPackageDefinitionModule extends import_module.Module {
|
|
|
66
70
|
_dependencies;
|
|
67
71
|
async getContent() {
|
|
68
72
|
let content = "";
|
|
69
|
-
const { defaultConfigModule, actionsModule, eventsModule, statesModule } = this._dependencies;
|
|
73
|
+
const { defaultConfigModule, actionsModule, eventsModule, statesModule, interfacesModule } = this._dependencies;
|
|
70
74
|
const defaultConfigImport = defaultConfigModule.import(this);
|
|
71
75
|
const actionsImport = actionsModule.import(this);
|
|
72
76
|
const eventsImport = eventsModule.import(this);
|
|
73
77
|
const statesImport = statesModule.import(this);
|
|
78
|
+
const interfacesImport = interfacesModule.import(this);
|
|
74
79
|
const user = {
|
|
75
80
|
tags: this._plugin.user?.tags ?? {}
|
|
76
81
|
};
|
|
82
|
+
const conversation = {
|
|
83
|
+
tags: this._plugin.conversation?.tags ?? {}
|
|
84
|
+
};
|
|
77
85
|
content += [
|
|
78
86
|
consts.GENERATED_HEADER,
|
|
79
87
|
'import * as sdk from "@botpress/sdk"',
|
|
@@ -82,19 +90,23 @@ class PluginPackageDefinitionModule extends import_module.Module {
|
|
|
82
90
|
`import * as ${actionsModule.name} from "./${actionsImport}"`,
|
|
83
91
|
`import * as ${eventsModule.name} from "./${eventsImport}"`,
|
|
84
92
|
`import * as ${statesModule.name} from "./${statesImport}"`,
|
|
93
|
+
`import * as ${interfacesModule.name} from "./${interfacesImport}"`,
|
|
85
94
|
`export * as ${defaultConfigModule.name} from "./${defaultConfigImport}"`,
|
|
86
95
|
`export * as ${actionsModule.name} from "./${actionsImport}"`,
|
|
87
96
|
`export * as ${eventsModule.name} from "./${eventsImport}"`,
|
|
88
97
|
`export * as ${statesModule.name} from "./${statesImport}"`,
|
|
98
|
+
`export * as ${interfacesModule.name} from "./${interfacesImport}"`,
|
|
89
99
|
"",
|
|
90
100
|
"export default {",
|
|
91
101
|
` name: "${this._plugin.name}",`,
|
|
92
102
|
` version: "${this._plugin.version}",`,
|
|
93
103
|
` user: ${(0, import_generators.stringifySingleLine)(user)},`,
|
|
104
|
+
` conversation: ${(0, import_generators.stringifySingleLine)(conversation)},`,
|
|
94
105
|
` configuration: ${defaultConfigModule.name}.${defaultConfigModule.exportName},`,
|
|
95
106
|
` actions: ${actionsModule.name}.${actionsModule.exportName},`,
|
|
96
107
|
` events: ${eventsModule.name}.${eventsModule.exportName},`,
|
|
97
108
|
` states: ${statesModule.name}.${statesModule.exportName},`,
|
|
109
|
+
` interfaces: ${interfacesModule.name}.${interfacesModule.exportName},`,
|
|
98
110
|
'} satisfies sdk.PluginPackage["definition"]'
|
|
99
111
|
].join("\n");
|
|
100
112
|
return content;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/code-generation/plugin-package/plugin-package-definition/index.ts"],
|
|
4
|
-
"sourcesContent": ["import * as consts from '../../consts'\nimport { stringifySingleLine } from '../../generators'\nimport { Module } from '../../module'\nimport { ActionsModule } from './actions-module'\nimport { DefaultConfigurationModule } from './configuration-module'\nimport { EventsModule } from './events-module'\nimport { StatesModule } from './states-module'\nimport * as types from './typings'\n\ntype PluginPackageModuleDependencies = {\n defaultConfigModule: DefaultConfigurationModule\n actionsModule: ActionsModule\n eventsModule: EventsModule\n statesModule: StatesModule\n}\n\nexport class PluginPackageDefinitionModule extends Module {\n private _dependencies: PluginPackageModuleDependencies\n\n public constructor(private _plugin: types.
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAwB;AACxB,wBAAoC;AACpC,oBAAuB;AACvB,4BAA8B;AAC9B,kCAA2C;AAC3C,2BAA6B;AAC7B,2BAA6B;
|
|
4
|
+
"sourcesContent": ["import * as consts from '../../consts'\nimport { stringifySingleLine } from '../../generators'\nimport { Module } from '../../module'\nimport { ActionsModule } from './actions-module'\nimport { DefaultConfigurationModule } from './configuration-module'\nimport { EventsModule } from './events-module'\nimport { InterfacesModule } from './interfaces-module'\nimport { StatesModule } from './states-module'\nimport * as types from './typings'\n\ntype PluginPackageModuleDependencies = {\n defaultConfigModule: DefaultConfigurationModule\n actionsModule: ActionsModule\n eventsModule: EventsModule\n statesModule: StatesModule\n interfacesModule: InterfacesModule\n}\n\nexport class PluginPackageDefinitionModule extends Module {\n private _dependencies: PluginPackageModuleDependencies\n\n public constructor(private _plugin: types.PluginDefinition) {\n super({\n path: consts.INDEX_FILE,\n exportName: consts.DEFAULT_EXPORT_NAME,\n })\n\n const defaultConfigModule = new DefaultConfigurationModule(_plugin.configuration ?? {})\n defaultConfigModule.unshift('configuration')\n\n const actionsModule = new ActionsModule(_plugin.actions ?? {})\n actionsModule.unshift('actions')\n\n const eventsModule = new EventsModule(_plugin.events ?? {})\n eventsModule.unshift('events')\n\n const statesModule = new StatesModule(_plugin.states ?? {})\n statesModule.unshift('states')\n\n const interfacesModule = new InterfacesModule(_plugin.dependencies?.interfaces ?? {})\n interfacesModule.unshift('interfaces')\n\n this._dependencies = {\n defaultConfigModule,\n actionsModule,\n eventsModule,\n statesModule,\n interfacesModule,\n }\n\n for (const dep of Object.values(this._dependencies)) {\n this.pushDep(dep)\n }\n }\n\n public async getContent() {\n let content = ''\n\n const { defaultConfigModule, actionsModule, eventsModule, statesModule, interfacesModule } = this._dependencies\n\n const defaultConfigImport = defaultConfigModule.import(this)\n const actionsImport = actionsModule.import(this)\n const eventsImport = eventsModule.import(this)\n const statesImport = statesModule.import(this)\n const interfacesImport = interfacesModule.import(this)\n\n const user = {\n tags: this._plugin.user?.tags ?? {},\n }\n\n const conversation = {\n tags: this._plugin.conversation?.tags ?? {},\n }\n\n content += [\n consts.GENERATED_HEADER,\n 'import * as sdk from \"@botpress/sdk\"',\n '',\n `import * as ${defaultConfigModule.name} from \"./${defaultConfigImport}\"`,\n `import * as ${actionsModule.name} from \"./${actionsImport}\"`,\n `import * as ${eventsModule.name} from \"./${eventsImport}\"`,\n `import * as ${statesModule.name} from \"./${statesImport}\"`,\n `import * as ${interfacesModule.name} from \"./${interfacesImport}\"`,\n `export * as ${defaultConfigModule.name} from \"./${defaultConfigImport}\"`,\n `export * as ${actionsModule.name} from \"./${actionsImport}\"`,\n `export * as ${eventsModule.name} from \"./${eventsImport}\"`,\n `export * as ${statesModule.name} from \"./${statesImport}\"`,\n `export * as ${interfacesModule.name} from \"./${interfacesImport}\"`,\n '',\n 'export default {',\n ` name: \"${this._plugin.name}\",`,\n ` version: \"${this._plugin.version}\",`,\n ` user: ${stringifySingleLine(user)},`,\n ` conversation: ${stringifySingleLine(conversation)},`,\n ` configuration: ${defaultConfigModule.name}.${defaultConfigModule.exportName},`,\n ` actions: ${actionsModule.name}.${actionsModule.exportName},`,\n ` events: ${eventsModule.name}.${eventsModule.exportName},`,\n ` states: ${statesModule.name}.${statesModule.exportName},`,\n ` interfaces: ${interfacesModule.name}.${interfacesModule.exportName},`,\n '} satisfies sdk.PluginPackage[\"definition\"]',\n ].join('\\n')\n\n return content\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAwB;AACxB,wBAAoC;AACpC,oBAAuB;AACvB,4BAA8B;AAC9B,kCAA2C;AAC3C,2BAA6B;AAC7B,+BAAiC;AACjC,2BAA6B;AAWtB,MAAM,sCAAsC,qBAAO;AAAA,EAGjD,YAAoB,SAAiC;AAC1D,UAAM;AAAA,MACJ,MAAM,OAAO;AAAA,MACb,YAAY,OAAO;AAAA,IACrB,CAAC;AAJwB;AAMzB,UAAM,sBAAsB,IAAI,uDAA2B,QAAQ,iBAAiB,CAAC,CAAC;AACtF,wBAAoB,QAAQ,eAAe;AAE3C,UAAM,gBAAgB,IAAI,oCAAc,QAAQ,WAAW,CAAC,CAAC;AAC7D,kBAAc,QAAQ,SAAS;AAE/B,UAAM,eAAe,IAAI,kCAAa,QAAQ,UAAU,CAAC,CAAC;AAC1D,iBAAa,QAAQ,QAAQ;AAE7B,UAAM,eAAe,IAAI,kCAAa,QAAQ,UAAU,CAAC,CAAC;AAC1D,iBAAa,QAAQ,QAAQ;AAE7B,UAAM,mBAAmB,IAAI,0CAAiB,QAAQ,cAAc,cAAc,CAAC,CAAC;AACpF,qBAAiB,QAAQ,YAAY;AAErC,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,eAAW,OAAO,OAAO,OAAO,KAAK,aAAa,GAAG;AACnD,WAAK,QAAQ,GAAG;AAAA,IAClB;AAAA,EACF;AAAA,EAlCQ;AAAA,EAoCR,MAAa,aAAa;AACxB,QAAI,UAAU;AAEd,UAAM,EAAE,qBAAqB,eAAe,cAAc,cAAc,iBAAiB,IAAI,KAAK;AAElG,UAAM,sBAAsB,oBAAoB,OAAO,IAAI;AAC3D,UAAM,gBAAgB,cAAc,OAAO,IAAI;AAC/C,UAAM,eAAe,aAAa,OAAO,IAAI;AAC7C,UAAM,eAAe,aAAa,OAAO,IAAI;AAC7C,UAAM,mBAAmB,iBAAiB,OAAO,IAAI;AAErD,UAAM,OAAO;AAAA,MACX,MAAM,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAAA,IACpC;AAEA,UAAM,eAAe;AAAA,MACnB,MAAM,KAAK,QAAQ,cAAc,QAAQ,CAAC;AAAA,IAC5C;AAEA,eAAW;AAAA,MACT,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,eAAe,oBAAoB,gBAAgB;AAAA,MACnD,eAAe,cAAc,gBAAgB;AAAA,MAC7C,eAAe,aAAa,gBAAgB;AAAA,MAC5C,eAAe,aAAa,gBAAgB;AAAA,MAC5C,eAAe,iBAAiB,gBAAgB;AAAA,MAChD,eAAe,oBAAoB,gBAAgB;AAAA,MACnD,eAAe,cAAc,gBAAgB;AAAA,MAC7C,eAAe,aAAa,gBAAgB;AAAA,MAC5C,eAAe,aAAa,gBAAgB;AAAA,MAC5C,eAAe,iBAAiB,gBAAgB;AAAA,MAChD;AAAA,MACA;AAAA,MACA,YAAY,KAAK,QAAQ;AAAA,MACzB,eAAe,KAAK,QAAQ;AAAA,MAC5B,eAAW,uCAAoB,IAAI;AAAA,MACnC,uBAAmB,uCAAoB,YAAY;AAAA,MACnD,oBAAoB,oBAAoB,QAAQ,oBAAoB;AAAA,MACpE,cAAc,cAAc,QAAQ,cAAc;AAAA,MAClD,aAAa,aAAa,QAAQ,aAAa;AAAA,MAC/C,aAAa,aAAa,QAAQ,aAAa;AAAA,MAC/C,iBAAiB,iBAAiB,QAAQ,iBAAiB;AAAA,MAC3D;AAAA,IACF,EAAE,KAAK,IAAI;AAEX,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
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 = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__getProtoOf(mod2)) : {}, __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 || !mod2 || !mod2.__esModule ? __defProp(target, "default", { value: mod2, enumerable: true }) : target,
|
|
26
|
+
mod2
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2);
|
|
29
|
+
var interfaces_module_exports = {};
|
|
30
|
+
__export(interfaces_module_exports, {
|
|
31
|
+
InterfacesModule: () => InterfacesModule
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(interfaces_module_exports);
|
|
34
|
+
var consts = __toESM(require("../../consts"));
|
|
35
|
+
var mod = __toESM(require("../../module"));
|
|
36
|
+
class InterfacesModule extends mod.Module {
|
|
37
|
+
constructor(_interfaces) {
|
|
38
|
+
super({ exportName: "interfaces", path: "index.ts" });
|
|
39
|
+
this._interfaces = _interfaces;
|
|
40
|
+
}
|
|
41
|
+
async getContent() {
|
|
42
|
+
return [
|
|
43
|
+
consts.GENERATED_HEADER,
|
|
44
|
+
"export const interfaces = {",
|
|
45
|
+
...Object.entries(this._interfaces).map(([k, { id, name, version }]) => {
|
|
46
|
+
const keyStr = JSON.stringify(k);
|
|
47
|
+
const valueStr = JSON.stringify({ id, name, version });
|
|
48
|
+
return ` [${keyStr}]: ${valueStr},`;
|
|
49
|
+
}),
|
|
50
|
+
"}"
|
|
51
|
+
].join("\n");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
55
|
+
0 && (module.exports = {
|
|
56
|
+
InterfacesModule
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=interfaces-module.js.map
|
package/dist/code-generation/plugin-package/plugin-package-definition/interfaces-module.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/code-generation/plugin-package/plugin-package-definition/interfaces-module.ts"],
|
|
4
|
+
"sourcesContent": ["import * as consts from '../../consts'\nimport * as mod from '../../module'\nimport * as types from './typings'\n\nexport class InterfacesModule extends mod.Module {\n public constructor(private _interfaces: Record<string, types.InterfaceDefinition>) {\n super({ exportName: 'interfaces', path: 'index.ts' })\n }\n\n public async getContent() {\n return [\n consts.GENERATED_HEADER,\n 'export const interfaces = {',\n ...Object.entries(this._interfaces).map(([k, { id, name, version }]) => {\n const keyStr = JSON.stringify(k)\n const valueStr = JSON.stringify({ id, name, version })\n return ` [${keyStr}]: ${valueStr},`\n }),\n '}',\n ].join('\\n')\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAwB;AACxB,UAAqB;AAGd,MAAM,yBAAyB,IAAI,OAAO;AAAA,EACxC,YAAoB,aAAwD;AACjF,UAAM,EAAE,YAAY,cAAc,MAAM,WAAW,CAAC;AAD3B;AAAA,EAE3B;AAAA,EAEA,MAAa,aAAa;AACxB,WAAO;AAAA,MACL,OAAO;AAAA,MACP;AAAA,MACA,GAAG,OAAO,QAAQ,KAAK,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,QAAQ,CAAC,MAAM;AACtE,cAAM,SAAS,KAAK,UAAU,CAAC;AAC/B,cAAM,WAAW,KAAK,UAAU,EAAE,IAAI,MAAM,QAAQ,CAAC;AACrD,eAAO,MAAM,YAAY;AAAA,MAC3B,CAAC;AAAA,MACD;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -33,6 +33,7 @@ __export(states_module_exports, {
|
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(states_module_exports);
|
|
35
35
|
var import_generators = require("../../generators");
|
|
36
|
+
var gen = __toESM(require("../../generators"));
|
|
36
37
|
var import_module = require("../../module");
|
|
37
38
|
var strings = __toESM(require("../../strings"));
|
|
38
39
|
class StateModule extends import_module.Module {
|
|
@@ -45,7 +46,11 @@ class StateModule extends import_module.Module {
|
|
|
45
46
|
}
|
|
46
47
|
async getContent() {
|
|
47
48
|
return (0, import_generators.jsonSchemaToTypescriptZuiSchema)(this._state.schema, this.exportName, {
|
|
48
|
-
type: `"${this._state.type}" as const
|
|
49
|
+
type: `"${this._state.type}" as const`,
|
|
50
|
+
...gen.primitiveRecordToTypescriptValues({
|
|
51
|
+
title: this._state.title,
|
|
52
|
+
description: this._state.description
|
|
53
|
+
})
|
|
49
54
|
});
|
|
50
55
|
}
|
|
51
56
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/code-generation/plugin-package/plugin-package-definition/states-module.ts"],
|
|
4
|
-
"sourcesContent": ["import { jsonSchemaToTypescriptZuiSchema } from '../../generators'\nimport { Module, ReExportVariableModule } from '../../module'\nimport * as strings from '../../strings'\nimport * as types from './typings'\n\nexport class StateModule extends Module {\n public constructor(\n name: string,\n private _state: types.
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAgD;AAChD,oBAA+C;AAC/C,cAAyB;AAGlB,MAAM,oBAAoB,qBAAO;AAAA,EAC/B,YACL,MACQ,QACR;AACA,UAAM;AAAA,MACJ,MAAM,GAAG;AAAA,MACT,YAAY,QAAQ,QAAQ,IAAI;AAAA,IAClC,CAAC;AALO;AAAA,EAMV;AAAA,EAEA,MAAa,aAAa;AACxB,eAAO,mDAAgC,KAAK,OAAO,QAAQ,KAAK,YAAY;AAAA,MAC1E,MAAM,IAAI,KAAK,OAAO;AAAA,
|
|
4
|
+
"sourcesContent": ["import { jsonSchemaToTypescriptZuiSchema } from '../../generators'\nimport * as gen from '../../generators'\nimport { Module, ReExportVariableModule } from '../../module'\nimport * as strings from '../../strings'\nimport * as types from './typings'\n\nexport class StateModule extends Module {\n public constructor(\n name: string,\n private _state: types.StateDefinition\n ) {\n super({\n path: `${name}.ts`,\n exportName: strings.varName(name),\n })\n }\n\n public async getContent() {\n return jsonSchemaToTypescriptZuiSchema(this._state.schema, this.exportName, {\n type: `\"${this._state.type}\" as const`,\n ...gen.primitiveRecordToTypescriptValues({\n title: this._state.title,\n description: this._state.description,\n }),\n })\n }\n}\n\nexport class StatesModule extends ReExportVariableModule {\n public constructor(states: Record<string, types.StateDefinition>) {\n super({ exportName: strings.varName('states') })\n for (const [stateName, state] of Object.entries(states)) {\n const module = new StateModule(stateName, state)\n this.pushDep(module)\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAgD;AAChD,UAAqB;AACrB,oBAA+C;AAC/C,cAAyB;AAGlB,MAAM,oBAAoB,qBAAO;AAAA,EAC/B,YACL,MACQ,QACR;AACA,UAAM;AAAA,MACJ,MAAM,GAAG;AAAA,MACT,YAAY,QAAQ,QAAQ,IAAI;AAAA,IAClC,CAAC;AALO;AAAA,EAMV;AAAA,EAEA,MAAa,aAAa;AACxB,eAAO,mDAAgC,KAAK,OAAO,QAAQ,KAAK,YAAY;AAAA,MAC1E,MAAM,IAAI,KAAK,OAAO;AAAA,MACtB,GAAG,IAAI,kCAAkC;AAAA,QACvC,OAAO,KAAK,OAAO;AAAA,QACnB,aAAa,KAAK,OAAO;AAAA,MAC3B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAEO,MAAM,qBAAqB,qCAAuB;AAAA,EAChD,YAAY,QAA+C;AAChE,UAAM,EAAE,YAAY,QAAQ,QAAQ,QAAQ,EAAE,CAAC;AAC/C,eAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACvD,YAAMA,UAAS,IAAI,YAAY,WAAW,KAAK;AAC/C,WAAK,QAAQA,OAAM;AAAA,IACrB;AAAA,EACF;AACF;",
|
|
6
6
|
"names": ["module"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/code-generation/plugin-package/plugin-package-definition/typings.ts"],
|
|
4
|
-
"sourcesContent": ["import * as
|
|
4
|
+
"sourcesContent": ["import * as types from '../../typings'\nexport type PluginDefinition = types.PluginDefinition\nexport type ActionDefinition = NonNullable<PluginDefinition['actions']>[string]\nexport type ConfigurationDefinition = NonNullable<PluginDefinition['configuration']>\nexport type EventDefinition = NonNullable<PluginDefinition['events']>[string]\nexport type StateDefinition = NonNullable<PluginDefinition['states']>[string]\nexport type InterfaceDefinition = types.InterfaceDefinition\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -28,13 +28,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var strings_exports = {};
|
|
30
30
|
__export(strings_exports, {
|
|
31
|
+
fileName: () => fileName,
|
|
31
32
|
importAlias: () => importAlias,
|
|
32
33
|
typeName: () => typeName,
|
|
33
34
|
varName: () => varName
|
|
34
35
|
});
|
|
35
36
|
module.exports = __toCommonJS(strings_exports);
|
|
36
37
|
var utils = __toESM(require("../utils"));
|
|
37
|
-
const
|
|
38
|
+
const TYPESCRIPT_RESERVED_TOKENS = /* @__PURE__ */ new Set([
|
|
38
39
|
"break",
|
|
39
40
|
"as",
|
|
40
41
|
"any",
|
|
@@ -96,18 +97,22 @@ const TYPESCRIPT_RESERVED = /* @__PURE__ */ new Set([
|
|
|
96
97
|
"while",
|
|
97
98
|
"with"
|
|
98
99
|
]);
|
|
99
|
-
const
|
|
100
|
-
|
|
100
|
+
const SPECIAL_FILE_NAME_CHARS = /[^a-zA-Z0-9_\-\.]/g;
|
|
101
|
+
const escapeTypescriptReserved = (str) => {
|
|
102
|
+
if (TYPESCRIPT_RESERVED_TOKENS.has(str)) {
|
|
101
103
|
return `_${str}`;
|
|
102
104
|
}
|
|
103
105
|
return str;
|
|
104
106
|
};
|
|
107
|
+
const escapeFileNameSpecialChars = (str) => str.replace(SPECIAL_FILE_NAME_CHARS, "-");
|
|
105
108
|
const apply = (str, ...transforms) => transforms.reduce((acc, transform) => transform(acc), str);
|
|
106
109
|
const typeName = (name) => apply(name, utils.casing.to.pascalCase);
|
|
107
|
-
const importAlias = (name) => apply(name, utils.casing.to.camelCase,
|
|
108
|
-
const varName = (name) => apply(name, utils.casing.to.camelCase,
|
|
110
|
+
const importAlias = (name) => apply(name, utils.casing.to.camelCase, escapeTypescriptReserved);
|
|
111
|
+
const varName = (name) => apply(name, utils.casing.to.camelCase, escapeTypescriptReserved);
|
|
112
|
+
const fileName = (name) => apply(name, escapeFileNameSpecialChars);
|
|
109
113
|
// Annotate the CommonJS export names for ESM import in node:
|
|
110
114
|
0 && (module.exports = {
|
|
115
|
+
fileName,
|
|
111
116
|
importAlias,
|
|
112
117
|
typeName,
|
|
113
118
|
varName
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/code-generation/strings.ts"],
|
|
4
|
-
"sourcesContent": ["import * as utils from '../utils'\ntype StrTransform = (str: string) => string\n\nconst
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AAGvB,MAAM,
|
|
4
|
+
"sourcesContent": ["import * as utils from '../utils'\ntype StrTransform = (str: string) => string\n\nconst TYPESCRIPT_RESERVED_TOKENS = new Set([\n 'break',\n 'as',\n 'any',\n 'case',\n 'implements',\n 'boolean',\n 'catch',\n 'interface',\n 'constructor',\n 'class',\n 'let',\n 'declare',\n 'const',\n 'package',\n 'get',\n 'continue',\n 'private',\n 'module',\n 'debugger',\n 'protected',\n 'require',\n 'default',\n 'public',\n 'number',\n 'delete',\n 'static',\n 'set',\n 'do',\n 'yield',\n 'string',\n 'else',\n 'symbol',\n 'enum',\n 'type',\n 'export',\n 'from',\n 'extends',\n 'of',\n 'false',\n 'finally',\n 'for',\n 'function',\n 'if',\n 'import',\n 'in',\n 'instanceof',\n 'new',\n 'null',\n 'return',\n 'super',\n 'switch',\n 'this',\n 'throw',\n 'true',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'while',\n 'with',\n])\n\nconst SPECIAL_FILE_NAME_CHARS = /[^a-zA-Z0-9_\\-\\.]/g\n\nconst escapeTypescriptReserved = (str: string): string => {\n if (TYPESCRIPT_RESERVED_TOKENS.has(str)) {\n return `_${str}`\n }\n return str\n}\n\nconst escapeFileNameSpecialChars = (str: string): string => str.replace(SPECIAL_FILE_NAME_CHARS, '-')\n\nconst apply = (str: string, ...transforms: StrTransform[]) => transforms.reduce((acc, transform) => transform(acc), str)\n\nexport const typeName = (name: string) => apply(name, utils.casing.to.pascalCase)\nexport const importAlias = (name: string) => apply(name, utils.casing.to.camelCase, escapeTypescriptReserved)\nexport const varName = (name: string) => apply(name, utils.casing.to.camelCase, escapeTypescriptReserved)\nexport const fileName = (name: string) => apply(name, escapeFileNameSpecialChars)\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AAGvB,MAAM,6BAA6B,oBAAI,IAAI;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,MAAM,0BAA0B;AAEhC,MAAM,2BAA2B,CAAC,QAAwB;AACxD,MAAI,2BAA2B,IAAI,GAAG,GAAG;AACvC,WAAO,IAAI;AAAA,EACb;AACA,SAAO;AACT;AAEA,MAAM,6BAA6B,CAAC,QAAwB,IAAI,QAAQ,yBAAyB,GAAG;AAEpG,MAAM,QAAQ,CAAC,QAAgB,eAA+B,WAAW,OAAO,CAAC,KAAK,cAAc,UAAU,GAAG,GAAG,GAAG;AAEhH,MAAM,WAAW,CAAC,SAAiB,MAAM,MAAM,MAAM,OAAO,GAAG,UAAU;AACzE,MAAM,cAAc,CAAC,SAAiB,MAAM,MAAM,MAAM,OAAO,GAAG,WAAW,wBAAwB;AACrG,MAAM,UAAU,CAAC,SAAiB,MAAM,MAAM,MAAM,OAAO,GAAG,WAAW,wBAAwB;AACjG,MAAM,WAAW,CAAC,SAAiB,MAAM,MAAM,0BAA0B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/code-generation/typings.ts"],
|
|
4
|
-
"sourcesContent": ["import * as client from '@botpress/client'\nimport * as utils from '../utils'\n\
|
|
4
|
+
"sourcesContent": ["import * as client from '@botpress/client'\nimport * as utils from '../utils'\n\ntype NameVersion = { name: string; version: string }\ntype PackageRef = { id?: string; name: string; version: string }\ntype Schema = Record<string, any>\ntype Aliases = Record<string, { name: string }>\n\ntype TitleDescription = { title?: string; description?: string }\n\nexport type File = { path: string; content: string }\n\nexport type IntegrationDefinition = PackageRef & {\n interfaces?: Record<\n string,\n {\n id?: string\n entities?: Aliases\n actions?: Aliases\n events?: Aliases\n channels?: Aliases\n }\n >\n configuration?: TitleDescription & {\n schema?: Schema\n }\n configurations?: Record<\n string,\n TitleDescription & {\n schema?: Schema\n }\n >\n channels?: Record<\n string,\n TitleDescription & {\n messages: Record<string, TitleDescription & { schema: Schema }>\n conversation?: {\n tags?: Record<string, {}>\n creation?: {\n enabled: boolean\n requiredTags: string[]\n }\n }\n message?: {\n tags?: Record<string, {}>\n }\n }\n >\n states?: Record<\n string,\n TitleDescription & {\n type: client.State['type']\n schema: Schema\n }\n >\n events?: Record<string, TitleDescription & { schema: Schema }>\n actions?: Record<\n string,\n TitleDescription & {\n billable?: boolean\n cacheable?: boolean\n input: {\n schema: Schema\n }\n output: {\n schema: Schema\n }\n }\n >\n entities?: Record<string, TitleDescription & { schema: Schema }>\n user?: {\n tags?: Record<string, {}>\n creation?: {\n enabled: boolean\n requiredTags: string[]\n }\n }\n}\n\nexport type InterfaceDefinition = PackageRef & {\n entities?: Record<string, TitleDescription & { schema: Schema }>\n events?: Record<string, TitleDescription & { schema: Schema }>\n actions?: Record<\n string,\n TitleDescription & {\n billable?: boolean\n cacheable?: boolean\n input: { schema: Schema }\n output: { schema: Schema }\n }\n >\n channels?: Record<string, TitleDescription & { messages: Record<string, TitleDescription & { schema: Schema }> }>\n}\n\nexport type PluginDefinition = PackageRef & {\n configuration?: TitleDescription & { schema?: Schema }\n user?: { tags: Record<string, {}> }\n conversation?: { tags: Record<string, {}> }\n states?: Record<string, TitleDescription & { type: client.State['type']; schema: Schema }>\n events?: Record<string, TitleDescription & { schema: Schema }>\n actions?: Record<string, TitleDescription & { input: { schema: Schema }; output: { schema: Schema } }>\n dependencies?: {\n interfaces?: Record<string, PackageRef>\n integrations?: Record<string, PackageRef>\n }\n}\n\nexport type IntegrationInstallablePackage = NameVersion & {\n integration: IntegrationDefinition\n devId?: string\n path?: utils.path.AbsolutePath\n}\n\nexport type InterfaceInstallablePackage = NameVersion & {\n interface: InterfaceDefinition\n path?: utils.path.AbsolutePath\n}\n\nexport type PluginInstallablePackage = NameVersion & {\n plugin: PluginDefinition\n path?: utils.path.AbsolutePath\n code: string\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var import_vitest = require("vitest");
|
|
3
|
+
(0, import_vitest.test)("integration response extends integration definition", () => {
|
|
4
|
+
});
|
|
5
|
+
(0, import_vitest.test)("integration request extends integration definition", () => {
|
|
6
|
+
});
|
|
7
|
+
(0, import_vitest.test)("interface response extends interface definition", () => {
|
|
8
|
+
});
|
|
9
|
+
(0, import_vitest.test)("interface request extends interface definition", () => {
|
|
10
|
+
});
|
|
11
|
+
(0, import_vitest.test)("plugin response extends plugin definition", () => {
|
|
12
|
+
});
|
|
13
|
+
(0, import_vitest.test)("plugin request extends plugin definition", () => {
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=typings.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/code-generation/typings.test.ts"],
|
|
4
|
+
"sourcesContent": ["import * as apiUtils from '../api'\nimport * as client from '@botpress/client'\nimport * as utils from '../utils'\nimport { IntegrationDefinition, InterfaceDefinition, PluginDefinition } from './typings'\nimport { test } from 'vitest'\n\ntest('integration response extends integration definition', () => {\n type Actual = client.Integration\n type Expected = IntegrationDefinition\n type _assertion = utils.types.AssertExtends<Actual, Expected>\n})\n\ntest('integration request extends integration definition', () => {\n type Actual = client.ClientInputs['createIntegration']\n type Expected = IntegrationDefinition\n type _assertion = utils.types.AssertExtends<Actual, Expected>\n})\n\ntest('interface response extends interface definition', () => {\n type Actual = client.Interface\n type Expected = InterfaceDefinition\n type _assertion = utils.types.AssertExtends<Actual, Expected>\n})\n\ntest('interface request extends interface definition', () => {\n type Actual = client.ClientInputs['createInterface']\n type Expected = InterfaceDefinition\n type _assertion = utils.types.AssertExtends<Actual, Expected>\n})\n\ntest('plugin response extends plugin definition', () => {\n type Actual = client.Plugin\n type Expected = PluginDefinition\n type _assertion = utils.types.AssertExtends<Actual, Expected>\n})\n\ntest('plugin request extends plugin definition', () => {\n type Actual = apiUtils.CreatePluginRequestBody & { code: string }\n type Expected = PluginDefinition\n type _assertion = utils.types.AssertExtends<Actual, Expected>\n})\n"],
|
|
5
|
+
"mappings": ";AAIA,oBAAqB;AAAA,IAErB,oBAAK,uDAAuD,MAAM;AAIlE,CAAC;AAAA,IAED,oBAAK,sDAAsD,MAAM;AAIjE,CAAC;AAAA,IAED,oBAAK,mDAAmD,MAAM;AAI9D,CAAC;AAAA,IAED,oBAAK,kDAAkD,MAAM;AAI7D,CAAC;AAAA,IAED,oBAAK,6CAA6C,MAAM;AAIxD,CAAC;AAAA,IAED,oBAAK,4CAA4C,MAAM;AAIvD,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -34,7 +34,7 @@ module.exports = __toCommonJS(add_command_exports);
|
|
|
34
34
|
var sdk = __toESM(require("@botpress/sdk"));
|
|
35
35
|
var fslib = __toESM(require("fs"));
|
|
36
36
|
var pathlib = __toESM(require("path"));
|
|
37
|
-
var
|
|
37
|
+
var apiUtils = __toESM(require("../api"));
|
|
38
38
|
var codegen = __toESM(require("../code-generation"));
|
|
39
39
|
var consts = __toESM(require("../consts"));
|
|
40
40
|
var errors = __toESM(require("../errors"));
|
|
@@ -129,21 +129,30 @@ class AddCommand extends import_global_command.GlobalCommand {
|
|
|
129
129
|
const integration = await api.findIntegration(ref);
|
|
130
130
|
if (integration) {
|
|
131
131
|
const { name, version } = integration;
|
|
132
|
-
return { type: "integration", pkg: {
|
|
132
|
+
return { type: "integration", pkg: { integration, name, version } };
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
if (this._pkgCouldBe(ref, "interface")) {
|
|
136
136
|
const intrface = await api.findPublicInterface(ref);
|
|
137
137
|
if (intrface) {
|
|
138
138
|
const { name, version } = intrface;
|
|
139
|
-
return { type: "interface", pkg: {
|
|
139
|
+
return { type: "interface", pkg: { interface: intrface, name, version } };
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
if (this._pkgCouldBe(ref, "plugin")) {
|
|
143
143
|
const plugin = await api.findPublicPlugin(ref);
|
|
144
144
|
if (plugin) {
|
|
145
|
+
const { code } = await api.client.getPluginCode({ id: plugin.id, platform: "node" });
|
|
145
146
|
const { name, version } = plugin;
|
|
146
|
-
return {
|
|
147
|
+
return {
|
|
148
|
+
type: "plugin",
|
|
149
|
+
pkg: {
|
|
150
|
+
name,
|
|
151
|
+
version,
|
|
152
|
+
plugin,
|
|
153
|
+
code
|
|
154
|
+
}
|
|
155
|
+
};
|
|
147
156
|
}
|
|
148
157
|
}
|
|
149
158
|
return;
|
|
@@ -162,16 +171,28 @@ class AddCommand extends import_global_command.GlobalCommand {
|
|
|
162
171
|
this.logger.warn(`Installing integration "${name}" with dev version "${projectDevId}"`);
|
|
163
172
|
devId = projectDevId;
|
|
164
173
|
}
|
|
174
|
+
let createIntegrationReqBody = await this._getProjectCmd(ref.path).prepareCreateIntegrationBody(
|
|
175
|
+
projectDefinition.definition
|
|
176
|
+
);
|
|
177
|
+
createIntegrationReqBody = {
|
|
178
|
+
...createIntegrationReqBody,
|
|
179
|
+
interfaces: utils.records.mapValues(projectDefinition.definition.interfaces ?? {}, (i) => ({
|
|
180
|
+
id: "",
|
|
181
|
+
// TODO: do this better
|
|
182
|
+
...i
|
|
183
|
+
}))
|
|
184
|
+
};
|
|
165
185
|
return {
|
|
166
186
|
type: "integration",
|
|
167
|
-
pkg: {
|
|
187
|
+
pkg: { path: absPath, devId, name, version, integration: createIntegrationReqBody }
|
|
168
188
|
};
|
|
169
189
|
}
|
|
170
190
|
if (projectDefinition?.type === "interface") {
|
|
171
191
|
const { name, version } = projectDefinition.definition;
|
|
192
|
+
const createInterfaceReqBody = await apiUtils.prepareCreateInterfaceBody(projectDefinition.definition);
|
|
172
193
|
return {
|
|
173
194
|
type: "interface",
|
|
174
|
-
pkg: {
|
|
195
|
+
pkg: { path: absPath, name, version, interface: createInterfaceReqBody }
|
|
175
196
|
};
|
|
176
197
|
}
|
|
177
198
|
if (projectDefinition?.type === "plugin") {
|
|
@@ -181,14 +202,32 @@ class AddCommand extends import_global_command.GlobalCommand {
|
|
|
181
202
|
);
|
|
182
203
|
}
|
|
183
204
|
const { name, version } = projectDefinition.definition;
|
|
205
|
+
const code = projectImplementation;
|
|
206
|
+
const createPluginReqBody = await apiUtils.prepareCreatePluginBody(projectDefinition.definition);
|
|
184
207
|
return {
|
|
185
208
|
type: "plugin",
|
|
186
209
|
pkg: {
|
|
187
|
-
source: "local",
|
|
188
210
|
path: absPath,
|
|
189
|
-
implementationCode: projectImplementation,
|
|
190
211
|
name,
|
|
191
|
-
version
|
|
212
|
+
version,
|
|
213
|
+
code,
|
|
214
|
+
plugin: {
|
|
215
|
+
...createPluginReqBody,
|
|
216
|
+
dependencies: {
|
|
217
|
+
interfaces: await utils.promises.awaitRecord(
|
|
218
|
+
utils.records.mapValues(
|
|
219
|
+
projectDefinition.definition.interfaces ?? {},
|
|
220
|
+
apiUtils.prepareCreateInterfaceBody
|
|
221
|
+
)
|
|
222
|
+
),
|
|
223
|
+
integrations: await utils.promises.awaitRecord(
|
|
224
|
+
utils.records.mapValues(
|
|
225
|
+
projectDefinition.definition.integrations ?? {},
|
|
226
|
+
apiUtils.prepareCreateIntegrationBody
|
|
227
|
+
)
|
|
228
|
+
)
|
|
229
|
+
}
|
|
230
|
+
}
|
|
192
231
|
}
|
|
193
232
|
};
|
|
194
233
|
}
|
|
@@ -216,21 +255,7 @@ class AddCommand extends import_global_command.GlobalCommand {
|
|
|
216
255
|
await fslib.promises.rm(installPath, { recursive: true });
|
|
217
256
|
}
|
|
218
257
|
async _readProject(workDir) {
|
|
219
|
-
|
|
220
|
-
async run() {
|
|
221
|
-
throw new errors.BotpressCLIError("Not implemented");
|
|
222
|
-
}
|
|
223
|
-
async readProjectDefinitionFromFS() {
|
|
224
|
-
return super.readProjectDefinitionFromFS();
|
|
225
|
-
}
|
|
226
|
-
get projectCache() {
|
|
227
|
-
return super.projectCache;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
const cmd = new AnyProjectCommand(import_api.ApiClient, this.prompt, this.logger, {
|
|
231
|
-
...this.argv,
|
|
232
|
-
workDir
|
|
233
|
-
});
|
|
258
|
+
const cmd = this._getProjectCmd(workDir);
|
|
234
259
|
const definition = await cmd.readProjectDefinitionFromFS().catch((thrown) => {
|
|
235
260
|
if (thrown instanceof errors.ProjectDefinitionNotFoundError) {
|
|
236
261
|
return void 0;
|
|
@@ -238,7 +263,7 @@ class AddCommand extends import_global_command.GlobalCommand {
|
|
|
238
263
|
throw thrown;
|
|
239
264
|
});
|
|
240
265
|
const devId = await cmd.projectCache.get("devId");
|
|
241
|
-
const implementationAbsPath = utils.path.join(workDir, consts.fromWorkDir.
|
|
266
|
+
const implementationAbsPath = utils.path.join(workDir, consts.fromWorkDir.outFileCJS);
|
|
242
267
|
if (!fslib.existsSync(implementationAbsPath)) {
|
|
243
268
|
return { definition, devId };
|
|
244
269
|
}
|
|
@@ -254,6 +279,26 @@ class AddCommand extends import_global_command.GlobalCommand {
|
|
|
254
279
|
}
|
|
255
280
|
return ref.pkg === pkgType;
|
|
256
281
|
};
|
|
282
|
+
_getProjectCmd(workDir) {
|
|
283
|
+
return new _AnyProjectCommand(apiUtils.ApiClient, this.prompt, this.logger, {
|
|
284
|
+
...this.argv,
|
|
285
|
+
workDir
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
class _AnyProjectCommand extends import_project_command.ProjectCommand {
|
|
290
|
+
async run() {
|
|
291
|
+
throw new errors.BotpressCLIError("Not implemented");
|
|
292
|
+
}
|
|
293
|
+
async readProjectDefinitionFromFS() {
|
|
294
|
+
return super.readProjectDefinitionFromFS();
|
|
295
|
+
}
|
|
296
|
+
async prepareCreateIntegrationBody(integrationDef) {
|
|
297
|
+
return super.prepareCreateIntegrationBody(integrationDef);
|
|
298
|
+
}
|
|
299
|
+
get projectCache() {
|
|
300
|
+
return super.projectCache;
|
|
301
|
+
}
|
|
257
302
|
}
|
|
258
303
|
// Annotate the CommonJS export names for ESM import in node:
|
|
259
304
|
0 && (module.exports = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/command-implementations/add-command.ts"],
|
|
4
|
-
"sourcesContent": ["import * as sdk from '@botpress/sdk'\nimport * as fslib from 'fs'\nimport * as pathlib from 'path'\nimport { ApiClient } from '../api'\nimport * as codegen from '../code-generation'\nimport type commandDefinitions from '../command-definitions'\nimport * as consts from '../consts'\nimport * as errors from '../errors'\nimport * as pkgRef from '../package-ref'\nimport * as utils from '../utils'\nimport { GlobalCommand } from './global-command'\nimport { ProjectCache, ProjectCommand, ProjectCommandDefinition, ProjectDefinition } from './project-command'\n\ntype InstallablePackage =\n | {\n type: 'integration'\n pkg: codegen.IntegrationInstallablePackage\n }\n | {\n type: 'interface'\n pkg: codegen.InterfaceInstallablePackage\n }\n | {\n type: 'plugin'\n pkg: codegen.PluginInstallablePackage\n }\n\nexport type AddCommandDefinition = typeof commandDefinitions.add\nexport class AddCommand extends GlobalCommand<AddCommandDefinition> {\n public async run(): Promise<void> {\n const ref = this._parseArgvRef()\n if (ref) {\n return await this._addSinglePackage(ref)\n }\n\n const pkgJson = await utils.pkgJson.readPackageJson(this.argv.installPath)\n if (!pkgJson) {\n this.logger.warn('No package.json found in the install path')\n return\n }\n\n const { bpDependencies } = pkgJson\n if (!bpDependencies) {\n this.logger.log('No bp dependencies found in package.json')\n return\n }\n\n const bpDependenciesSchema = sdk.z.record(sdk.z.string())\n const parseResults = bpDependenciesSchema.safeParse(bpDependencies)\n if (!parseResults.success) {\n throw new errors.BotpressCLIError('Invalid bpDependencies found in package.json')\n }\n\n for (const [pkgAlias, pkgRefStr] of Object.entries(parseResults.data)) {\n const parsed = pkgRef.parsePackageRef(pkgRefStr)\n if (!parsed) {\n throw new errors.InvalidPackageReferenceError(pkgRefStr)\n }\n\n await this._addSinglePackage({ ...parsed, alias: pkgAlias })\n }\n }\n\n private _parseArgvRef = (): pkgRef.PackageRef | undefined => {\n if (!this.argv.packageRef) {\n return\n }\n\n const parsed = pkgRef.parsePackageRef(this.argv.packageRef)\n if (!parsed) {\n throw new errors.InvalidPackageReferenceError(this.argv.packageRef)\n }\n\n if (parsed.type !== 'name') {\n return parsed\n }\n\n const argvPkgType = this.argv.packageType\n if (!argvPkgType) {\n return parsed\n }\n\n const ref = { ...parsed, pkg: argvPkgType }\n\n const strRef = pkgRef.formatPackageRef(ref)\n this.logger.warn(`argument --packageType is deprecated; please use the package reference format \"${strRef}\"`)\n\n return ref\n }\n\n private async _addSinglePackage(ref: pkgRef.PackageRef & { alias?: string }): Promise<void> {\n const targetPackage = ref.type === 'path' ? await this._findLocalPackage(ref) : await this._findRemotePackage(ref)\n\n if (!targetPackage) {\n const strRef = pkgRef.formatPackageRef(ref)\n throw new errors.BotpressCLIError(`Could not find package \"${strRef}\"`)\n }\n\n const packageName = ref.alias ?? targetPackage.pkg.name\n const baseInstallPath = utils.path.absoluteFrom(utils.path.cwd(), this.argv.installPath)\n const packageDirName = utils.casing.to.kebabCase(packageName)\n const installPath = utils.path.join(baseInstallPath, consts.installDirName, packageDirName)\n\n const alreadyInstalled = fslib.existsSync(installPath)\n if (alreadyInstalled) {\n this.logger.warn(`Package with name \"${packageName}\" already installed.`)\n const res = await this.prompt.confirm('Do you want to overwrite the existing package?')\n if (!res) {\n this.logger.log('Aborted')\n return\n }\n\n await this._uninstall(installPath)\n }\n\n let files: codegen.File[]\n if (targetPackage.type === 'integration') {\n files = await codegen.generateIntegrationPackage(targetPackage.pkg)\n } else if (targetPackage.type === 'interface') {\n files = await codegen.generateInterfacePackage(targetPackage.pkg)\n } else if (targetPackage.type === 'plugin') {\n files = await codegen.generatePluginPackage(targetPackage.pkg)\n } else {\n type _assertion = utils.types.AssertNever<typeof targetPackage>\n throw new errors.BotpressCLIError('Invalid package type')\n }\n\n await this._install(installPath, files)\n }\n\n private async _findRemotePackage(ref: pkgRef.ApiPackageRef): Promise<InstallablePackage | undefined> {\n const api = await this.ensureLoginAndCreateClient(this.argv)\n if (this._pkgCouldBe(ref, 'integration')) {\n const integration = await api.findIntegration(ref)\n if (integration) {\n const { name, version } = integration\n return { type: 'integration', pkg: { source: 'remote', integration, name, version } }\n }\n }\n if (this._pkgCouldBe(ref, 'interface')) {\n const intrface = await api.findPublicInterface(ref)\n if (intrface) {\n const { name, version } = intrface\n return { type: 'interface', pkg: { source: 'remote', interface: intrface, name, version } }\n }\n }\n if (this._pkgCouldBe(ref, 'plugin')) {\n const plugin = await api.findPublicPlugin(ref)\n if (plugin) {\n const { name, version } = plugin\n return { type: 'plugin', pkg: { source: 'remote', plugin, name, version } }\n }\n }\n return\n }\n\n private async _findLocalPackage(ref: pkgRef.LocalPackageRef): Promise<InstallablePackage | undefined> {\n const absPath = utils.path.absoluteFrom(utils.path.cwd(), ref.path)\n const {\n definition: projectDefinition,\n implementation: projectImplementation,\n devId: projectDevId,\n } = await this._readProject(absPath)\n\n if (projectDefinition?.type === 'integration') {\n const { name, version } = projectDefinition.definition\n let devId: string | undefined\n if (this.argv.useDev && projectDevId) {\n this.logger.warn(`Installing integration \"${name}\" with dev version \"${projectDevId}\"`)\n devId = projectDevId\n }\n return {\n type: 'integration',\n pkg: { source: 'local', path: absPath, devId, name, version },\n }\n }\n\n if (projectDefinition?.type === 'interface') {\n const { name, version } = projectDefinition.definition\n return {\n type: 'interface',\n pkg: { source: 'local', path: absPath, name, version },\n }\n }\n\n if (projectDefinition?.type === 'plugin') {\n if (!projectImplementation) {\n throw new errors.BotpressCLIError(\n 'Plugin implementation not found; Please build the plugin project before installing'\n )\n }\n\n const { name, version } = projectDefinition.definition\n return {\n type: 'plugin',\n pkg: {\n source: 'local',\n path: absPath,\n implementationCode: projectImplementation,\n name,\n version,\n },\n }\n }\n\n if (projectDefinition?.type === 'bot') {\n throw new errors.BotpressCLIError('Cannot install a bot as a package')\n }\n return\n }\n\n private async _install(installPath: utils.path.AbsolutePath, files: codegen.File[]): Promise<void> {\n const line = this.logger.line()\n line.started(`Installing ${files.length} files to \"${installPath}\"`)\n try {\n for (const file of files) {\n const filePath = utils.path.absoluteFrom(installPath, file.path)\n const dirPath = pathlib.dirname(filePath)\n await fslib.promises.mkdir(dirPath, { recursive: true })\n await fslib.promises.writeFile(filePath, file.content)\n }\n line.success(`Installed ${files.length} files to \"${installPath}\"`)\n } finally {\n line.commit()\n }\n }\n\n private async _uninstall(installPath: utils.path.AbsolutePath): Promise<void> {\n await fslib.promises.rm(installPath, { recursive: true })\n }\n\n private async _readProject(workDir: utils.path.AbsolutePath): Promise<{\n definition?: ProjectDefinition\n implementation?: string\n devId?: string\n }> {\n // this is a hack to avoid refactoring the project command class\n class AnyProjectCommand extends ProjectCommand<ProjectCommandDefinition> {\n public async run(): Promise<void> {\n throw new errors.BotpressCLIError('Not implemented')\n }\n\n public async readProjectDefinitionFromFS(): Promise<ProjectDefinition> {\n return super.readProjectDefinitionFromFS()\n }\n\n public get projectCache(): utils.cache.FSKeyValueCache<ProjectCache> {\n return super.projectCache\n }\n }\n\n const cmd = new AnyProjectCommand(ApiClient, this.prompt, this.logger, {\n ...this.argv,\n workDir,\n })\n\n const definition = await cmd.readProjectDefinitionFromFS().catch((thrown) => {\n if (thrown instanceof errors.ProjectDefinitionNotFoundError) {\n return undefined\n }\n throw thrown\n })\n\n const devId = await cmd.projectCache.get('devId')\n\n const implementationAbsPath = utils.path.join(workDir, consts.fromWorkDir.outFile)\n if (!fslib.existsSync(implementationAbsPath)) {\n return { definition, devId }\n }\n\n const implementation = await fslib.promises.readFile(implementationAbsPath, 'utf8')\n return { definition, implementation, devId }\n }\n\n private _pkgCouldBe = (ref: pkgRef.ApiPackageRef, pkgType: InstallablePackage['type']) => {\n if (ref.type === 'id') {\n // TODO: use ULID prefixes to determine the type of the package\n return true\n }\n if (!ref.pkg) {\n return true // ref does not specify the package type\n }\n return ref.pkg === pkgType\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAqB;AACrB,YAAuB;AACvB,cAAyB;AACzB,
|
|
4
|
+
"sourcesContent": ["import * as sdk from '@botpress/sdk'\nimport * as fslib from 'fs'\nimport * as pathlib from 'path'\nimport * as apiUtils from '../api'\nimport * as codegen from '../code-generation'\nimport type commandDefinitions from '../command-definitions'\nimport * as consts from '../consts'\nimport * as errors from '../errors'\nimport * as pkgRef from '../package-ref'\nimport * as utils from '../utils'\nimport { GlobalCommand } from './global-command'\nimport { ProjectCache, ProjectCommand, ProjectCommandDefinition, ProjectDefinition } from './project-command'\n\ntype InstallablePackage =\n | {\n type: 'integration'\n pkg: codegen.IntegrationInstallablePackage\n }\n | {\n type: 'interface'\n pkg: codegen.InterfaceInstallablePackage\n }\n | {\n type: 'plugin'\n pkg: codegen.PluginInstallablePackage\n }\n\nexport type AddCommandDefinition = typeof commandDefinitions.add\nexport class AddCommand extends GlobalCommand<AddCommandDefinition> {\n public async run(): Promise<void> {\n const ref = this._parseArgvRef()\n if (ref) {\n return await this._addSinglePackage(ref)\n }\n\n const pkgJson = await utils.pkgJson.readPackageJson(this.argv.installPath)\n if (!pkgJson) {\n this.logger.warn('No package.json found in the install path')\n return\n }\n\n const { bpDependencies } = pkgJson\n if (!bpDependencies) {\n this.logger.log('No bp dependencies found in package.json')\n return\n }\n\n const bpDependenciesSchema = sdk.z.record(sdk.z.string())\n const parseResults = bpDependenciesSchema.safeParse(bpDependencies)\n if (!parseResults.success) {\n throw new errors.BotpressCLIError('Invalid bpDependencies found in package.json')\n }\n\n for (const [pkgAlias, pkgRefStr] of Object.entries(parseResults.data)) {\n const parsed = pkgRef.parsePackageRef(pkgRefStr)\n if (!parsed) {\n throw new errors.InvalidPackageReferenceError(pkgRefStr)\n }\n\n await this._addSinglePackage({ ...parsed, alias: pkgAlias })\n }\n }\n\n private _parseArgvRef = (): pkgRef.PackageRef | undefined => {\n if (!this.argv.packageRef) {\n return\n }\n\n const parsed = pkgRef.parsePackageRef(this.argv.packageRef)\n if (!parsed) {\n throw new errors.InvalidPackageReferenceError(this.argv.packageRef)\n }\n\n if (parsed.type !== 'name') {\n return parsed\n }\n\n const argvPkgType = this.argv.packageType\n if (!argvPkgType) {\n return parsed\n }\n\n const ref = { ...parsed, pkg: argvPkgType }\n\n const strRef = pkgRef.formatPackageRef(ref)\n this.logger.warn(`argument --packageType is deprecated; please use the package reference format \"${strRef}\"`)\n\n return ref\n }\n\n private async _addSinglePackage(ref: pkgRef.PackageRef & { alias?: string }): Promise<void> {\n const targetPackage = ref.type === 'path' ? await this._findLocalPackage(ref) : await this._findRemotePackage(ref)\n\n if (!targetPackage) {\n const strRef = pkgRef.formatPackageRef(ref)\n throw new errors.BotpressCLIError(`Could not find package \"${strRef}\"`)\n }\n\n const packageName = ref.alias ?? targetPackage.pkg.name\n const baseInstallPath = utils.path.absoluteFrom(utils.path.cwd(), this.argv.installPath)\n const packageDirName = utils.casing.to.kebabCase(packageName)\n const installPath = utils.path.join(baseInstallPath, consts.installDirName, packageDirName)\n\n const alreadyInstalled = fslib.existsSync(installPath)\n if (alreadyInstalled) {\n this.logger.warn(`Package with name \"${packageName}\" already installed.`)\n const res = await this.prompt.confirm('Do you want to overwrite the existing package?')\n if (!res) {\n this.logger.log('Aborted')\n return\n }\n\n await this._uninstall(installPath)\n }\n\n let files: codegen.File[]\n if (targetPackage.type === 'integration') {\n files = await codegen.generateIntegrationPackage(targetPackage.pkg)\n } else if (targetPackage.type === 'interface') {\n files = await codegen.generateInterfacePackage(targetPackage.pkg)\n } else if (targetPackage.type === 'plugin') {\n files = await codegen.generatePluginPackage(targetPackage.pkg)\n } else {\n type _assertion = utils.types.AssertNever<typeof targetPackage>\n throw new errors.BotpressCLIError('Invalid package type')\n }\n\n await this._install(installPath, files)\n }\n\n private async _findRemotePackage(ref: pkgRef.ApiPackageRef): Promise<InstallablePackage | undefined> {\n const api = await this.ensureLoginAndCreateClient(this.argv)\n if (this._pkgCouldBe(ref, 'integration')) {\n const integration = await api.findIntegration(ref)\n if (integration) {\n const { name, version } = integration\n return { type: 'integration', pkg: { integration, name, version } }\n }\n }\n if (this._pkgCouldBe(ref, 'interface')) {\n const intrface = await api.findPublicInterface(ref)\n if (intrface) {\n const { name, version } = intrface\n return { type: 'interface', pkg: { interface: intrface, name, version } }\n }\n }\n if (this._pkgCouldBe(ref, 'plugin')) {\n const plugin = await api.findPublicPlugin(ref)\n if (plugin) {\n const { code } = await api.client.getPluginCode({ id: plugin.id, platform: 'node' })\n const { name, version } = plugin\n return {\n type: 'plugin',\n pkg: {\n name,\n version,\n plugin,\n code,\n },\n }\n }\n }\n return\n }\n\n private async _findLocalPackage(ref: pkgRef.LocalPackageRef): Promise<InstallablePackage | undefined> {\n const absPath = utils.path.absoluteFrom(utils.path.cwd(), ref.path)\n const {\n definition: projectDefinition,\n implementation: projectImplementation,\n devId: projectDevId,\n } = await this._readProject(absPath)\n\n if (projectDefinition?.type === 'integration') {\n const { name, version } = projectDefinition.definition\n let devId: string | undefined\n if (this.argv.useDev && projectDevId) {\n this.logger.warn(`Installing integration \"${name}\" with dev version \"${projectDevId}\"`)\n devId = projectDevId\n }\n\n let createIntegrationReqBody = await this._getProjectCmd(ref.path).prepareCreateIntegrationBody(\n projectDefinition.definition\n )\n createIntegrationReqBody = {\n ...createIntegrationReqBody,\n interfaces: utils.records.mapValues(projectDefinition.definition.interfaces ?? {}, (i) => ({\n id: '', // TODO: do this better\n ...i,\n })),\n }\n return {\n type: 'integration',\n pkg: { path: absPath, devId, name, version, integration: createIntegrationReqBody },\n }\n }\n\n if (projectDefinition?.type === 'interface') {\n const { name, version } = projectDefinition.definition\n const createInterfaceReqBody = await apiUtils.prepareCreateInterfaceBody(projectDefinition.definition)\n return {\n type: 'interface',\n pkg: { path: absPath, name, version, interface: createInterfaceReqBody },\n }\n }\n\n if (projectDefinition?.type === 'plugin') {\n if (!projectImplementation) {\n throw new errors.BotpressCLIError(\n 'Plugin implementation not found; Please build the plugin project before installing'\n )\n }\n\n const { name, version } = projectDefinition.definition\n const code = projectImplementation\n\n const createPluginReqBody = await apiUtils.prepareCreatePluginBody(projectDefinition.definition)\n return {\n type: 'plugin',\n pkg: {\n path: absPath,\n name,\n version,\n code,\n plugin: {\n ...createPluginReqBody,\n dependencies: {\n interfaces: await utils.promises.awaitRecord(\n utils.records.mapValues(\n projectDefinition.definition.interfaces ?? {},\n apiUtils.prepareCreateInterfaceBody\n )\n ),\n integrations: await utils.promises.awaitRecord(\n utils.records.mapValues(\n projectDefinition.definition.integrations ?? {},\n apiUtils.prepareCreateIntegrationBody\n )\n ),\n },\n },\n },\n }\n }\n\n if (projectDefinition?.type === 'bot') {\n throw new errors.BotpressCLIError('Cannot install a bot as a package')\n }\n return\n }\n\n private async _install(installPath: utils.path.AbsolutePath, files: codegen.File[]): Promise<void> {\n const line = this.logger.line()\n line.started(`Installing ${files.length} files to \"${installPath}\"`)\n try {\n for (const file of files) {\n const filePath = utils.path.absoluteFrom(installPath, file.path)\n const dirPath = pathlib.dirname(filePath)\n await fslib.promises.mkdir(dirPath, { recursive: true })\n await fslib.promises.writeFile(filePath, file.content)\n }\n line.success(`Installed ${files.length} files to \"${installPath}\"`)\n } finally {\n line.commit()\n }\n }\n\n private async _uninstall(installPath: utils.path.AbsolutePath): Promise<void> {\n await fslib.promises.rm(installPath, { recursive: true })\n }\n\n private async _readProject(workDir: utils.path.AbsolutePath): Promise<{\n definition?: ProjectDefinition\n implementation?: string\n devId?: string\n }> {\n const cmd = this._getProjectCmd(workDir)\n\n const definition = await cmd.readProjectDefinitionFromFS().catch((thrown) => {\n if (thrown instanceof errors.ProjectDefinitionNotFoundError) {\n return undefined\n }\n throw thrown\n })\n\n const devId = await cmd.projectCache.get('devId')\n\n const implementationAbsPath = utils.path.join(workDir, consts.fromWorkDir.outFileCJS)\n if (!fslib.existsSync(implementationAbsPath)) {\n return { definition, devId }\n }\n\n const implementation = await fslib.promises.readFile(implementationAbsPath, 'utf8')\n return { definition, implementation, devId }\n }\n\n private _pkgCouldBe = (ref: pkgRef.ApiPackageRef, pkgType: InstallablePackage['type']) => {\n if (ref.type === 'id') {\n // TODO: use ULID prefixes to determine the type of the package\n return true\n }\n if (!ref.pkg) {\n return true // ref does not specify the package type\n }\n return ref.pkg === pkgType\n }\n\n private _getProjectCmd(workDir: string): _AnyProjectCommand {\n return new _AnyProjectCommand(apiUtils.ApiClient, this.prompt, this.logger, {\n ...this.argv,\n workDir,\n })\n }\n}\n\n// this is a hack to avoid refactoring the project command class\nclass _AnyProjectCommand extends ProjectCommand<ProjectCommandDefinition> {\n public async run(): Promise<void> {\n throw new errors.BotpressCLIError('Not implemented')\n }\n\n public async readProjectDefinitionFromFS(): Promise<ProjectDefinition> {\n return super.readProjectDefinitionFromFS()\n }\n\n public async prepareCreateIntegrationBody(\n integrationDef: sdk.IntegrationDefinition\n ): Promise<apiUtils.CreateIntegrationRequestBody> {\n return super.prepareCreateIntegrationBody(integrationDef)\n }\n\n public get projectCache(): utils.cache.FSKeyValueCache<ProjectCache> {\n return super.projectCache\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|