@botpress/cli 0.0.15 → 0.0.18
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/dist/api-client.js +1 -0
- package/dist/api-client.js.map +7 -0
- package/dist/code-generation/action.js +1 -0
- package/dist/code-generation/action.js.map +7 -0
- package/dist/code-generation/channel.js +1 -0
- package/dist/code-generation/channel.js.map +7 -0
- package/dist/code-generation/configuration.js +1 -0
- package/dist/code-generation/configuration.js.map +7 -0
- package/dist/code-generation/const.js +1 -0
- package/dist/code-generation/const.js.map +7 -0
- package/dist/code-generation/event.js +1 -0
- package/dist/code-generation/event.js.map +7 -0
- package/dist/code-generation/index.js +1 -0
- package/dist/code-generation/index.js.map +7 -0
- package/dist/code-generation/integration-impl.js +1 -0
- package/dist/code-generation/integration-impl.js.map +7 -0
- package/dist/code-generation/integration-instance.js +1 -0
- package/dist/code-generation/integration-instance.js.map +7 -0
- package/dist/code-generation/integration-secret.js +1 -0
- package/dist/code-generation/integration-secret.js.map +7 -0
- package/dist/code-generation/message.js +1 -0
- package/dist/code-generation/message.js.map +7 -0
- package/dist/code-generation/module.js +1 -0
- package/dist/code-generation/module.js.map +7 -0
- package/dist/code-generation/typings.js +1 -0
- package/dist/code-generation/typings.js.map +7 -0
- package/dist/command-definitions.js +1 -0
- package/dist/command-definitions.js.map +7 -0
- package/dist/command-implementations/add-command.js +1 -0
- package/dist/command-implementations/add-command.js.map +7 -0
- package/dist/command-implementations/base-command.js +8 -1
- package/dist/command-implementations/base-command.js.map +7 -0
- package/dist/command-implementations/bot-commands.js +1 -0
- package/dist/command-implementations/bot-commands.js.map +7 -0
- package/dist/command-implementations/build-command.js +1 -0
- package/dist/command-implementations/build-command.js.map +7 -0
- package/dist/command-implementations/bundle-command.js +9 -1
- package/dist/command-implementations/bundle-command.js.map +7 -0
- package/dist/command-implementations/deploy-command.js +21 -3
- package/dist/command-implementations/deploy-command.js.map +7 -0
- package/dist/command-implementations/dev-command.js +1 -0
- package/dist/command-implementations/dev-command.js.map +7 -0
- package/dist/command-implementations/gen-command.js +1 -0
- package/dist/command-implementations/gen-command.js.map +7 -0
- package/dist/command-implementations/global-command.js +4 -1
- package/dist/command-implementations/global-command.js.map +7 -0
- package/dist/command-implementations/index.js +1 -0
- package/dist/command-implementations/index.js.map +7 -0
- package/dist/command-implementations/init-command.js +1 -0
- package/dist/command-implementations/init-command.js.map +7 -0
- package/dist/command-implementations/integration-commands.js +1 -0
- package/dist/command-implementations/integration-commands.js.map +7 -0
- package/dist/command-implementations/login-command.js +1 -0
- package/dist/command-implementations/login-command.js.map +7 -0
- package/dist/command-implementations/logout-command.js +1 -0
- package/dist/command-implementations/logout-command.js.map +7 -0
- package/dist/command-implementations/project-command.js +1 -0
- package/dist/command-implementations/project-command.js.map +7 -0
- package/dist/command-implementations/serve-command.js +1 -0
- package/dist/command-implementations/serve-command.js.map +7 -0
- package/dist/command-tree.js +1 -0
- package/dist/command-tree.js.map +7 -0
- package/dist/config.js +10 -4
- package/dist/config.js.map +7 -0
- package/dist/consts.js +1 -0
- package/dist/consts.js.map +7 -0
- package/dist/errors.js +27 -1
- package/dist/errors.js.map +7 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +7 -0
- package/dist/init.js +1 -0
- package/dist/init.js.map +7 -0
- package/dist/integration-ref.js +1 -0
- package/dist/integration-ref.js.map +7 -0
- package/dist/logger/base-logger.js +1 -0
- package/dist/logger/base-logger.js.map +7 -0
- package/dist/logger/index.js +1 -0
- package/dist/logger/index.js.map +7 -0
- package/dist/register-yargs.js +1 -0
- package/dist/register-yargs.js.map +7 -0
- package/dist/typings.js +1 -0
- package/dist/typings.js.map +7 -0
- package/dist/utils/cache-utils.js +1 -0
- package/dist/utils/cache-utils.js.map +7 -0
- package/dist/utils/case-utils.js +1 -0
- package/dist/utils/case-utils.js.map +7 -0
- package/dist/utils/esbuild-utils.js +1 -0
- package/dist/utils/esbuild-utils.js.map +7 -0
- package/dist/utils/event-emitter.js +1 -0
- package/dist/utils/event-emitter.js.map +7 -0
- package/dist/utils/file-watcher.js +1 -0
- package/dist/utils/file-watcher.js.map +7 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +7 -0
- package/dist/utils/path-utils.js +1 -0
- package/dist/utils/path-utils.js.map +7 -0
- package/dist/utils/prompt-utils.js +1 -0
- package/dist/utils/prompt-utils.js.map +7 -0
- package/dist/utils/require-utils.js +1 -0
- package/dist/utils/require-utils.js.map +7 -0
- package/dist/worker/child-entrypoint.js +1 -0
- package/dist/worker/child-entrypoint.js.map +7 -0
- package/dist/worker/child-wrapper.js +1 -0
- package/dist/worker/child-wrapper.js.map +7 -0
- package/dist/worker/config.js +1 -0
- package/dist/worker/config.js.map +7 -0
- package/dist/worker/index.js +1 -0
- package/dist/worker/index.js.map +7 -0
- package/dist/worker/is-child.js +1 -0
- package/dist/worker/is-child.js.map +7 -0
- package/dist/worker/worker-state.js +1 -0
- package/dist/worker/worker-state.js.map +7 -0
- package/dist/worker/worker.js +1 -0
- package/dist/worker/worker.js.map +7 -0
- package/package.json +5 -6
- package/templates/echo-bot/package.json +3 -3
- package/templates/empty-integration/.botpress/implementation/channels/channel/audio.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/card.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/carousel.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/choice.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/dropdown.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/file.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/image.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/location.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/markdown.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/text.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/channels/channel/video.ts +1 -1
- package/templates/empty-integration/.botpress/implementation/configuration.ts +1 -1
- package/templates/empty-integration/package.json +3 -3
- package/build.ts +0 -12
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-implementations/global-command.ts"],
|
|
4
|
+
"sourcesContent": ["import type { YargsConfig } from '@bpinternal/yargs-extra'\nimport chalk from 'chalk'\nimport fs from 'fs'\nimport latestVersion from 'latest-version'\nimport _ from 'lodash'\nimport * as pathlib from 'path'\nimport semver from 'semver'\nimport type { ApiClientFactory } from '../api-client'\nimport type * as config from '../config'\nimport * as consts from '../consts'\nimport * as errors from '../errors'\nimport type { CommandArgv, CommandDefinition } from '../typings'\nimport * as utils from '../utils'\nimport { BaseCommand } from './base-command'\n\nexport type GlobalCommandDefinition = CommandDefinition<typeof config.schemas.global>\nexport type GlobalCache = { host: string; token: string; workspaceId: string }\n\nexport type ConfigurableGlobalPaths = { botpressHomeDir: string; cliRootDir: utils.path.AbsolutePath }\nexport type ConstantGlobalPaths = typeof consts.fromHomeDir & typeof consts.fromCliRootDir\nexport type AllGlobalPaths = ConfigurableGlobalPaths & ConstantGlobalPaths\n\nclass GlobalPaths extends utils.path.PathStore<keyof AllGlobalPaths> {\n public constructor(argv: CommandArgv<GlobalCommandDefinition>) {\n const absBotpressHome = utils.path.absoluteFrom(utils.path.cwd(), argv.botpressHome)\n super({\n cliRootDir: argv.cliRootDir,\n botpressHomeDir: absBotpressHome,\n ..._.mapValues(consts.fromHomeDir, (p) => utils.path.absoluteFrom(absBotpressHome, p)),\n ..._.mapValues(consts.fromCliRootDir, (p) => utils.path.absoluteFrom(argv.cliRootDir, p)),\n })\n }\n}\n\ntype PackageJson = { name: string; version: string }\n\nconst UPDATE_MSG = (props: PackageJson & { latest: string }) =>\n `${chalk.bold('Update available')} ${chalk.dim(props.version)} \u2192 ${chalk.green(props.latest)}\n\nTo update, run:\n for npm ${chalk.cyan(`npm i -g ${props.name}`)}\n for yarn ${chalk.cyan(`yarn global add ${props.name}`)}\n for pnpm ${chalk.cyan(`pnpm i -g ${props.name}`)}`\n\nexport abstract class GlobalCommand<C extends GlobalCommandDefinition> extends BaseCommand<C> {\n protected api: ApiClientFactory\n protected prompt: utils.prompt.CLIPrompt\n\n public constructor(\n api: ApiClientFactory,\n prompt: utils.prompt.CLIPrompt,\n ...args: ConstructorParameters<typeof BaseCommand<C>>\n ) {\n super(...args)\n this.api = api\n this.prompt = prompt\n }\n\n protected get globalPaths() {\n return new GlobalPaths(this.argv)\n }\n\n protected get globalCache() {\n return new utils.cache.FSKeyValueCache<GlobalCache>(this.globalPaths.abs.globalCacheFile)\n }\n\n protected override bootstrap = async () => {\n const pkgJson = await this._readPackageJson()\n\n const versionText = chalk.bold(`v${pkgJson.version}`)\n this.logger.log(`Botpress CLI ${versionText}`, { prefix: '\uD83E\uDD16' })\n\n await this._notifyUpdate(pkgJson)\n\n const paths = this.globalPaths\n if (paths.abs.botpressHomeDir !== consts.defaultBotpressHome) {\n this.logger.log(`Using custom botpress home: ${paths.abs.botpressHomeDir}`, { prefix: '\uD83C\uDFE0' })\n }\n }\n\n protected override teardown = async () => {\n this.logger.cleanup()\n }\n\n protected async ensureLoginAndCreateClient(credentials: YargsConfig<typeof config.schemas.credentials>) {\n const cache = this.globalCache\n const token = await cache.get('token')\n const workspaceId = credentials.workspaceId ?? (await cache.get('workspaceId'))\n const host = credentials.host ?? (await cache.get('host'))\n\n if (!(token && workspaceId && host)) {\n throw new errors.NotLoggedInError()\n }\n\n return this.api.newClient({ host, token, workspaceId }, this.logger)\n }\n\n private _notifyUpdate = async (pkgJson: PackageJson): Promise<void> => {\n try {\n const latest = await latestVersion(pkgJson.name)\n const isOutdated = semver.lt(pkgJson.version, latest)\n if (isOutdated) {\n this.logger.box(UPDATE_MSG({ ...pkgJson, latest }))\n }\n } catch (thrown) {\n const err = errors.BotpressCLIError.map(thrown)\n this.logger.debug(`Failed to check for updates: ${err.message}`)\n }\n }\n\n private _readPackageJson = async (): Promise<PackageJson> => {\n const path = pathlib.join(this.globalPaths.abs.cliRootDir, 'package.json')\n const strContent = await fs.promises.readFile(path, 'utf8')\n const jsonContent = JSON.parse(strContent)\n return jsonContent\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkB;AAClB,gBAAe;AACf,4BAA0B;AAC1B,oBAAc;AACd,cAAyB;AACzB,oBAAmB;AAGnB,aAAwB;AACxB,aAAwB;AAExB,YAAuB;AACvB,0BAA4B;AAS5B,MAAM,oBAAoB,MAAM,KAAK,UAAgC;AAAA,EAC5D,YAAY,MAA4C;AAC7D,UAAM,kBAAkB,MAAM,KAAK,aAAa,MAAM,KAAK,IAAI,GAAG,KAAK,YAAY;AACnF,UAAM;AAAA,MACJ,YAAY,KAAK;AAAA,MACjB,iBAAiB;AAAA,MACjB,GAAG,cAAAA,QAAE,UAAU,OAAO,aAAa,CAAC,MAAM,MAAM,KAAK,aAAa,iBAAiB,CAAC,CAAC;AAAA,MACrF,GAAG,cAAAA,QAAE,UAAU,OAAO,gBAAgB,CAAC,MAAM,MAAM,KAAK,aAAa,KAAK,YAAY,CAAC,CAAC;AAAA,IAC1F,CAAC;AAAA,EACH;AACF;AAIA,MAAM,aAAa,CAAC,UAClB,GAAG,aAAAC,QAAM,KAAK,kBAAkB,KAAK,aAAAA,QAAM,IAAI,MAAM,OAAO,YAAO,aAAAA,QAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,aAGhF,aAAAA,QAAM,KAAK,YAAY,MAAM,MAAM;AAAA,aACnC,aAAAA,QAAM,KAAK,mBAAmB,MAAM,MAAM;AAAA,aAC1C,aAAAA,QAAM,KAAK,aAAa,MAAM,MAAM;AAE1C,MAAe,sBAAyD,gCAAe;AAAA,EAClF;AAAA,EACA;AAAA,EAEH,YACL,KACA,WACG,MACH;AACA,UAAM,GAAG,IAAI;AACb,SAAK,MAAM;AACX,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAc,cAAc;AAC1B,WAAO,IAAI,YAAY,KAAK,IAAI;AAAA,EAClC;AAAA,EAEA,IAAc,cAAc;AAC1B,WAAO,IAAI,MAAM,MAAM,gBAA6B,KAAK,YAAY,IAAI,eAAe;AAAA,EAC1F;AAAA,EAEmB,YAAY,YAAY;AACzC,UAAM,UAAU,MAAM,KAAK,iBAAiB;AAE5C,UAAM,cAAc,aAAAA,QAAM,KAAK,IAAI,QAAQ,SAAS;AACpD,SAAK,OAAO,IAAI,gBAAgB,eAAe,EAAE,QAAQ,YAAK,CAAC;AAE/D,UAAM,KAAK,cAAc,OAAO;AAEhC,UAAM,QAAQ,KAAK;AACnB,QAAI,MAAM,IAAI,oBAAoB,OAAO,qBAAqB;AAC5D,WAAK,OAAO,IAAI,+BAA+B,MAAM,IAAI,mBAAmB,EAAE,QAAQ,YAAK,CAAC;AAAA,IAC9F;AAAA,EACF;AAAA,EAEmB,WAAW,YAAY;AACxC,SAAK,OAAO,QAAQ;AAAA,EACtB;AAAA,EAEA,MAAgB,2BAA2B,aAA6D;AACtG,UAAM,QAAQ,KAAK;AACnB,UAAM,QAAQ,MAAM,MAAM,IAAI,OAAO;AACrC,UAAM,cAAc,YAAY,eAAgB,MAAM,MAAM,IAAI,aAAa;AAC7E,UAAM,OAAO,YAAY,QAAS,MAAM,MAAM,IAAI,MAAM;AAExD,QAAI,EAAE,SAAS,eAAe,OAAO;AACnC,YAAM,IAAI,OAAO,iBAAiB;AAAA,IACpC;AAEA,WAAO,KAAK,IAAI,UAAU,EAAE,MAAM,OAAO,YAAY,GAAG,KAAK,MAAM;AAAA,EACrE;AAAA,EAEQ,gBAAgB,OAAO,YAAwC;AACrE,QAAI;AACF,YAAM,SAAS,UAAM,sBAAAC,SAAc,QAAQ,IAAI;AAC/C,YAAM,aAAa,cAAAC,QAAO,GAAG,QAAQ,SAAS,MAAM;AACpD,UAAI,YAAY;AACd,aAAK,OAAO,IAAI,WAAW,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;AAAA,MACpD;AAAA,IACF,SAAS,QAAP;AACA,YAAM,MAAM,OAAO,iBAAiB,IAAI,MAAM;AAC9C,WAAK,OAAO,MAAM,gCAAgC,IAAI,SAAS;AAAA,IACjE;AAAA,EACF;AAAA,EAEQ,mBAAmB,YAAkC;AAC3D,UAAM,OAAO,QAAQ,KAAK,KAAK,YAAY,IAAI,YAAY,cAAc;AACzE,UAAM,aAAa,MAAM,UAAAC,QAAG,SAAS,SAAS,MAAM,MAAM;AAC1D,UAAM,cAAc,KAAK,MAAM,UAAU;AACzC,WAAO;AAAA,EACT;AACF;",
|
|
6
|
+
"names": ["_", "chalk", "latestVersion", "semver", "fs"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-implementations/index.ts"],
|
|
4
|
+
"sourcesContent": ["import { ApiClient } from '../api-client'\nimport type commandDefinitions from '../command-definitions'\nimport type { ImplementationTree } from '../command-tree'\nimport { Logger } from '../logger'\nimport type { CommandArgv } from '../typings'\nimport * as utils from '../utils'\nimport { AddCommand } from './add-command'\nimport type { BaseCommand } from './base-command'\nimport * as bots from './bot-commands'\nimport { BuildCommand } from './build-command'\nimport { BundleCommand } from './bundle-command'\nimport { DeployCommand } from './deploy-command'\nimport { DevCommand } from './dev-command'\nimport { GenerateCommand } from './gen-command'\nimport type { GlobalCommand, GlobalCommandDefinition } from './global-command'\nimport { InitCommand } from './init-command'\nimport * as integrations from './integration-commands'\nimport { LoginCommand } from './login-command'\nimport { LogoutCommand } from './logout-command'\nimport { ServeCommand } from './serve-command'\n\ntype GlobalCtor<C extends GlobalCommandDefinition> = new (\n ...args: ConstructorParameters<typeof GlobalCommand<C>>\n) => BaseCommand<C>\n\nconst getHandler =\n <C extends GlobalCommandDefinition>(cls: GlobalCtor<C>) =>\n async (argv: CommandArgv<C>) => {\n const logger = new Logger(argv)\n const prompt = new utils.prompt.CLIPrompt(argv, logger)\n return new cls(ApiClient, prompt, logger, argv).handler()\n }\n\nexport default {\n login: getHandler(LoginCommand),\n logout: getHandler(LogoutCommand),\n bots: {\n subcommands: {\n create: getHandler(bots.CreateBotCommand),\n get: getHandler(bots.GetBotCommand),\n delete: getHandler(bots.DeleteBotCommand),\n list: getHandler(bots.ListBotsCommand),\n },\n },\n integrations: {\n subcommands: {\n get: getHandler(integrations.GetIntegrationCommand),\n list: getHandler(integrations.ListIntegrationsCommand),\n delete: getHandler(integrations.DeleteIntegrationCommand),\n },\n },\n init: getHandler(InitCommand),\n generate: getHandler(GenerateCommand),\n bundle: getHandler(BundleCommand),\n build: getHandler(BuildCommand),\n serve: getHandler(ServeCommand),\n deploy: getHandler(DeployCommand),\n add: getHandler(AddCommand),\n dev: getHandler(DevCommand),\n} satisfies ImplementationTree<typeof commandDefinitions>\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAG1B,oBAAuB;AAEvB,YAAuB;AACvB,yBAA2B;AAE3B,WAAsB;AACtB,2BAA6B;AAC7B,4BAA8B;AAC9B,4BAA8B;AAC9B,yBAA2B;AAC3B,yBAAgC;AAEhC,0BAA4B;AAC5B,mBAA8B;AAC9B,2BAA6B;AAC7B,4BAA8B;AAC9B,2BAA6B;AAM7B,MAAM,aACJ,CAAoC,QACpC,OAAO,SAAyB;AAC9B,QAAM,SAAS,IAAI,qBAAO,IAAI;AAC9B,QAAM,SAAS,IAAI,MAAM,OAAO,UAAU,MAAM,MAAM;AACtD,SAAO,IAAI,IAAI,6BAAW,QAAQ,QAAQ,IAAI,EAAE,QAAQ;AAC1D;AAEF,IAAO,kCAAQ;AAAA,EACb,OAAO,WAAW,iCAAY;AAAA,EAC9B,QAAQ,WAAW,mCAAa;AAAA,EAChC,MAAM;AAAA,IACJ,aAAa;AAAA,MACX,QAAQ,WAAW,KAAK,gBAAgB;AAAA,MACxC,KAAK,WAAW,KAAK,aAAa;AAAA,MAClC,QAAQ,WAAW,KAAK,gBAAgB;AAAA,MACxC,MAAM,WAAW,KAAK,eAAe;AAAA,IACvC;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,aAAa;AAAA,MACX,KAAK,WAAW,aAAa,qBAAqB;AAAA,MAClD,MAAM,WAAW,aAAa,uBAAuB;AAAA,MACrD,QAAQ,WAAW,aAAa,wBAAwB;AAAA,IAC1D;AAAA,EACF;AAAA,EACA,MAAM,WAAW,+BAAW;AAAA,EAC5B,UAAU,WAAW,kCAAe;AAAA,EACpC,QAAQ,WAAW,mCAAa;AAAA,EAChC,OAAO,WAAW,iCAAY;AAAA,EAC9B,OAAO,WAAW,iCAAY;AAAA,EAC9B,QAAQ,WAAW,mCAAa;AAAA,EAChC,KAAK,WAAW,6BAAU;AAAA,EAC1B,KAAK,WAAW,6BAAU;AAC5B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-implementations/init-command.ts"],
|
|
4
|
+
"sourcesContent": ["import chalk from 'chalk'\nimport * as fs from 'fs'\nimport * as pathlib from 'path'\nimport type commandDefinitions from '../command-definitions'\nimport * as consts from '../consts'\nimport * as errors from '../errors'\nimport * as utils from '../utils'\nimport { GlobalCommand } from './global-command'\n\nexport type InitCommandDefinition = typeof commandDefinitions.init\nexport class InitCommand extends GlobalCommand<InitCommandDefinition> {\n public async run(): Promise<void> {\n let { type: projectType } = this.argv\n\n if (!projectType) {\n const promptedType = await this.prompt.select('What type of project do you wish to initialize?', {\n choices: (['bot', 'integration'] as const).map((t) => ({ title: t, value: t })),\n })\n\n if (!promptedType) {\n throw new errors.ParamRequiredError('Project Type')\n }\n\n projectType = promptedType\n }\n\n let name = this.argv.name\n if (!name) {\n const defaultName = projectType === 'bot' ? consts.echoBotDirName : consts.emptyIntegrationDirName\n const promptMessage = `What is the name of your ${projectType}?`\n const promptedName = await this.prompt.text(promptMessage, { initial: defaultName })\n if (!promptedName) {\n throw new errors.ParamRequiredError('Project Name')\n }\n name = promptedName\n }\n\n const workDir = utils.path.absoluteFrom(utils.path.cwd(), this.argv.workDir)\n\n if (projectType === 'bot') {\n await this._copy({ srcDir: this.globalPaths.abs.echoBotTemplate, destDir: workDir, name })\n this.logger.success(`Bot project initialized in ${chalk.bold(workDir)}`)\n return\n }\n\n await this._copy({ srcDir: this.globalPaths.abs.emptyIntegrationTemplate, destDir: workDir, name })\n this.logger.success(`Integration project initialized in ${chalk.bold(this.argv.workDir)}`)\n return\n }\n\n private _copy = async (props: { srcDir: string; destDir: string; name: string }) => {\n const { srcDir, destDir, name } = props\n const destination = pathlib.join(destDir, props.name)\n\n const exist = await this._checkIfDestinationExists(destination)\n if (exist) {\n return\n }\n\n await fs.promises.cp(srcDir, destination, { recursive: true })\n\n const pkgJsonPath = pathlib.join(destination, 'package.json')\n const strContent = await fs.promises.readFile(pkgJsonPath, 'utf-8')\n const { name: _, ...json } = JSON.parse(strContent)\n\n const pkgJsonName = utils.casing.to.snakeCase(name)\n const updatedJson = { name: pkgJsonName, ...json }\n await fs.promises.writeFile(pkgJsonPath, JSON.stringify(updatedJson, null, 2))\n }\n\n private _checkIfDestinationExists = async (destination: string) => {\n if (fs.existsSync(destination)) {\n const override = await this.prompt.confirm(\n `Directory ${chalk.bold(destination)} already exists. Do you want to overwrite it?`\n )\n if (!override) {\n this.logger.log('Aborting')\n return true\n }\n }\n return false\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,SAAoB;AACpB,cAAyB;AAEzB,aAAwB;AACxB,aAAwB;AACxB,YAAuB;AACvB,4BAA8B;AAGvB,MAAM,oBAAoB,oCAAqC;AAAA,EACpE,MAAa,MAAqB;AAChC,QAAI,EAAE,MAAM,YAAY,IAAI,KAAK;AAEjC,QAAI,CAAC,aAAa;AAChB,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,mDAAmD;AAAA,QAC/F,SAAU,CAAC,OAAO,aAAa,EAAY,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE;AAAA,MAChF,CAAC;AAED,UAAI,CAAC,cAAc;AACjB,cAAM,IAAI,OAAO,mBAAmB,cAAc;AAAA,MACpD;AAEA,oBAAc;AAAA,IAChB;AAEA,QAAI,OAAO,KAAK,KAAK;AACrB,QAAI,CAAC,MAAM;AACT,YAAM,cAAc,gBAAgB,QAAQ,OAAO,iBAAiB,OAAO;AAC3E,YAAM,gBAAgB,4BAA4B;AAClD,YAAM,eAAe,MAAM,KAAK,OAAO,KAAK,eAAe,EAAE,SAAS,YAAY,CAAC;AACnF,UAAI,CAAC,cAAc;AACjB,cAAM,IAAI,OAAO,mBAAmB,cAAc;AAAA,MACpD;AACA,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM,KAAK,aAAa,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,OAAO;AAE3E,QAAI,gBAAgB,OAAO;AACzB,YAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,YAAY,IAAI,iBAAiB,SAAS,SAAS,KAAK,CAAC;AACzF,WAAK,OAAO,QAAQ,8BAA8B,aAAAA,QAAM,KAAK,OAAO,GAAG;AACvE;AAAA,IACF;AAEA,UAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,YAAY,IAAI,0BAA0B,SAAS,SAAS,KAAK,CAAC;AAClG,SAAK,OAAO,QAAQ,sCAAsC,aAAAA,QAAM,KAAK,KAAK,KAAK,OAAO,GAAG;AACzF;AAAA,EACF;AAAA,EAEQ,QAAQ,OAAO,UAA6D;AAClF,UAAM,EAAE,QAAQ,SAAS,KAAK,IAAI;AAClC,UAAM,cAAc,QAAQ,KAAK,SAAS,MAAM,IAAI;AAEpD,UAAM,QAAQ,MAAM,KAAK,0BAA0B,WAAW;AAC9D,QAAI,OAAO;AACT;AAAA,IACF;AAEA,UAAM,GAAG,SAAS,GAAG,QAAQ,aAAa,EAAE,WAAW,KAAK,CAAC;AAE7D,UAAM,cAAc,QAAQ,KAAK,aAAa,cAAc;AAC5D,UAAM,aAAa,MAAM,GAAG,SAAS,SAAS,aAAa,OAAO;AAClE,UAAM,EAAE,MAAM,MAAM,KAAK,IAAI,KAAK,MAAM,UAAU;AAElD,UAAM,cAAc,MAAM,OAAO,GAAG,UAAU,IAAI;AAClD,UAAM,cAAc,EAAE,MAAM,aAAa,GAAG,KAAK;AACjD,UAAM,GAAG,SAAS,UAAU,aAAa,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAAA,EAC/E;AAAA,EAEQ,4BAA4B,OAAO,gBAAwB;AACjE,QAAI,GAAG,WAAW,WAAW,GAAG;AAC9B,YAAM,WAAW,MAAM,KAAK,OAAO;AAAA,QACjC,aAAa,aAAAA,QAAM,KAAK,WAAW;AAAA,MACrC;AACA,UAAI,CAAC,UAAU;AACb,aAAK,OAAO,IAAI,UAAU;AAC1B,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;",
|
|
6
|
+
"names": ["chalk"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-implementations/integration-commands.ts"],
|
|
4
|
+
"sourcesContent": ["import type * as bpclient from '@botpress/client'\nimport chalk from 'chalk'\nimport _ from 'lodash'\nimport type commandDefinitions from '../command-definitions'\nimport * as errors from '../errors'\nimport { parseIntegrationRef } from '../integration-ref'\nimport { GlobalCommand } from './global-command'\n\nexport type GetIntegrationCommandDefinition = typeof commandDefinitions.integrations.subcommands.get\nexport class GetIntegrationCommand extends GlobalCommand<GetIntegrationCommandDefinition> {\n public async run(): Promise<void> {\n const api = await this.ensureLoginAndCreateClient(this.argv)\n const parsedRef = parseIntegrationRef(this.argv.integrationRef)\n if (!parsedRef) {\n throw new errors.InvalidIntegrationReferenceError(this.argv.integrationRef)\n }\n\n try {\n const integration = await api.findIntegration(parsedRef)\n if (integration) {\n this.logger.success(`Integration ${chalk.bold(this.argv.integrationRef)}:`)\n this.logger.json(integration)\n return\n }\n } catch (thrown) {\n throw errors.BotpressCLIError.wrap(thrown, `Could not get integration ${this.argv.integrationRef}`)\n }\n\n throw new errors.BotpressCLIError(`Integration ${this.argv.integrationRef} not found`)\n }\n}\n\nexport type ListIntegrationCommandDefinition = typeof commandDefinitions.integrations.subcommands.list\nexport class ListIntegrationsCommand extends GlobalCommand<ListIntegrationCommandDefinition> {\n public async run(): Promise<void> {\n const api = await this.ensureLoginAndCreateClient(this.argv)\n\n const privateLister = (req: { nextToken?: string }) =>\n api.client.listIntegrations({ nextToken: req.nextToken, name: this.argv.name, version: this.argv.version })\n\n const publicLister = (req: { nextToken?: string }) =>\n api.client.listPublicIntegrations({ nextToken: req.nextToken, name: this.argv.name, version: this.argv.version })\n\n try {\n const privateIntegrations = await api.listAllPages(privateLister, (r) => r.integrations)\n const publicIntegrations = await api.listAllPages(publicLister, (r) => r.integrations)\n const integrations = _.uniqBy([...privateIntegrations, ...publicIntegrations], (i) => i.id)\n\n this.logger.success('Integrations:')\n this.logger.json(integrations)\n } catch (thrown) {\n throw errors.BotpressCLIError.wrap(thrown, 'Could not list integrations')\n }\n }\n}\n\nexport type DeleteIntegrationCommandDefinition = typeof commandDefinitions.integrations.subcommands.delete\nexport class DeleteIntegrationCommand extends GlobalCommand<DeleteIntegrationCommandDefinition> {\n public async run(): Promise<void> {\n const api = await this.ensureLoginAndCreateClient(this.argv)\n const parsedRef = parseIntegrationRef(this.argv.integrationRef)\n if (!parsedRef) {\n throw new errors.InvalidIntegrationReferenceError(this.argv.integrationRef)\n }\n\n let integration: bpclient.Integration | undefined\n try {\n integration = await api.findPrivateIntegration(parsedRef)\n } catch (thrown) {\n throw errors.BotpressCLIError.wrap(thrown, `Could not get integration ${this.argv.integrationRef}`)\n }\n\n if (!integration) {\n const publicIntegration = await api.findPublicIntegration(parsedRef)\n if (publicIntegration) {\n throw new errors.BotpressCLIError(`Integration ${this.argv.integrationRef} does not belong to your workspace`)\n }\n\n throw new errors.BotpressCLIError(`Integration ${this.argv.integrationRef} not found`)\n }\n\n try {\n await api.client.deleteIntegration({ id: integration.id })\n } catch (thrown) {\n throw errors.BotpressCLIError.wrap(thrown, `Could not delete integration ${this.argv.integrationRef}`)\n }\n\n this.logger.success(`Integration ${chalk.bold(this.argv.integrationRef)} deleted`)\n return\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["chalk", "_"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-implementations/login-command.ts"],
|
|
4
|
+
"sourcesContent": ["import type commandDefinitions from '../command-definitions'\nimport * as errors from '../errors'\nimport { GlobalCommand } from './global-command'\n\nexport type LoginCommandDefinition = typeof commandDefinitions.login\nexport class LoginCommand extends GlobalCommand<LoginCommandDefinition> {\n public async run(): Promise<void> {\n const promptedToken = await this.globalCache.sync('token', this.argv.token, async (previousToken) => {\n const prompted = await this.prompt.password('Enter your Personal Access Token', {\n initial: previousToken,\n })\n\n if (!prompted) {\n throw new errors.ParamRequiredError('Personal Access Token')\n }\n\n return prompted\n })\n\n const promptedWorkspaceId = await this.globalCache.sync('workspaceId', this.argv.workspaceId, async (defaultId) => {\n const tmpApi = this.api.newClient({ host: this.argv.host, token: promptedToken }, this.logger) // no workspaceId yet\n const userWorkspaces = await tmpApi\n .listAllPages(tmpApi.client.listWorkspaces, (r) => r.workspaces)\n .catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, 'Could not list workspaces')\n })\n\n if (userWorkspaces.length === 0) {\n throw new errors.NoWorkspacesFoundError()\n }\n\n const initial = userWorkspaces.find((ws) => ws.id === defaultId)\n\n const prompted = await this.prompt.select('Which workspace do you want to login to?', {\n initial: initial && { title: initial.name, value: initial.id },\n choices: userWorkspaces.map((ws) => ({ title: ws.name, value: ws.id })),\n })\n\n if (!prompted) {\n throw new errors.ParamRequiredError('Workspace Id')\n }\n\n return prompted\n })\n\n await this.globalCache.set('host', this.argv.host)\n\n const api = this.api.newClient(\n { host: this.argv.host, token: promptedToken, workspaceId: promptedWorkspaceId },\n this.logger\n )\n\n await api.testLogin().catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, 'Login failed. Please check your credentials')\n })\n\n this.logger.success('Logged In')\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,aAAwB;AACxB,4BAA8B;AAGvB,MAAM,qBAAqB,oCAAsC;AAAA,EACtE,MAAa,MAAqB;AAChC,UAAM,gBAAgB,MAAM,KAAK,YAAY,KAAK,SAAS,KAAK,KAAK,OAAO,OAAO,kBAAkB;AACnG,YAAM,WAAW,MAAM,KAAK,OAAO,SAAS,oCAAoC;AAAA,QAC9E,SAAS;AAAA,MACX,CAAC;AAED,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,OAAO,mBAAmB,uBAAuB;AAAA,MAC7D;AAEA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,sBAAsB,MAAM,KAAK,YAAY,KAAK,eAAe,KAAK,KAAK,aAAa,OAAO,cAAc;AACjH,YAAM,SAAS,KAAK,IAAI,UAAU,EAAE,MAAM,KAAK,KAAK,MAAM,OAAO,cAAc,GAAG,KAAK,MAAM;AAC7F,YAAM,iBAAiB,MAAM,OAC1B,aAAa,OAAO,OAAO,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAC9D,MAAM,CAAC,WAAW;AACjB,cAAM,OAAO,iBAAiB,KAAK,QAAQ,2BAA2B;AAAA,MACxE,CAAC;AAEH,UAAI,eAAe,WAAW,GAAG;AAC/B,cAAM,IAAI,OAAO,uBAAuB;AAAA,MAC1C;AAEA,YAAM,UAAU,eAAe,KAAK,CAAC,OAAO,GAAG,OAAO,SAAS;AAE/D,YAAM,WAAW,MAAM,KAAK,OAAO,OAAO,4CAA4C;AAAA,QACpF,SAAS,WAAW,EAAE,OAAO,QAAQ,MAAM,OAAO,QAAQ,GAAG;AAAA,QAC7D,SAAS,eAAe,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,OAAO,GAAG,GAAG,EAAE;AAAA,MACxE,CAAC;AAED,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,OAAO,mBAAmB,cAAc;AAAA,MACpD;AAEA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,KAAK,YAAY,IAAI,QAAQ,KAAK,KAAK,IAAI;AAEjD,UAAM,MAAM,KAAK,IAAI;AAAA,MACnB,EAAE,MAAM,KAAK,KAAK,MAAM,OAAO,eAAe,aAAa,oBAAoB;AAAA,MAC/E,KAAK;AAAA,IACP;AAEA,UAAM,IAAI,UAAU,EAAE,MAAM,CAAC,WAAW;AACtC,YAAM,OAAO,iBAAiB,KAAK,QAAQ,6CAA6C;AAAA,IAC1F,CAAC;AAED,SAAK,OAAO,QAAQ,WAAW;AAAA,EACjC;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-implementations/logout-command.ts"],
|
|
4
|
+
"sourcesContent": ["import type commandDefinitions from '../command-definitions'\nimport { GlobalCommand } from './global-command'\n\nexport type LogoutCommandDefinition = typeof commandDefinitions.logout\nexport class LogoutCommand extends GlobalCommand<LogoutCommandDefinition> {\n public async run(): Promise<void> {\n await this.globalCache.clear()\n this.logger.success('Logged Out')\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAA8B;AAGvB,MAAM,sBAAsB,oCAAuC;AAAA,EACxE,MAAa,MAAqB;AAChC,UAAM,KAAK,YAAY,MAAM;AAC7B,SAAK,OAAO,QAAQ,YAAY;AAAA,EAClC;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-implementations/project-command.ts"],
|
|
4
|
+
"sourcesContent": ["import type * as bpclient from '@botpress/client'\nimport type { IntegrationDefinition, Bot as BotImpl } from '@botpress/sdk'\nimport type { YargsConfig } from '@bpinternal/yargs-extra'\nimport chalk from 'chalk'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport pathlib from 'path'\nimport * as codegen from '../code-generation'\nimport type * as config from '../config'\nimport * as consts from '../consts'\nimport * as errors from '../errors'\nimport type { CommandArgv, CommandDefinition } from '../typings'\nimport * as utils from '../utils'\nimport { GlobalCommand } from './global-command'\n\nexport type ProjectCommandDefinition = CommandDefinition<typeof config.schemas.project>\nexport type ProjectCache = { botId: string; devId: string }\n\ntype ConfigurableProjectPaths = { entryPoint: string; outDir: string; workDir: string }\ntype ConstantProjectPaths = typeof consts.fromOutDir & typeof consts.fromWorkDir\ntype AllProjectPaths = ConfigurableProjectPaths & ConstantProjectPaths\n\nclass ProjectPaths extends utils.path.PathStore<keyof AllProjectPaths> {\n public constructor(argv: CommandArgv<ProjectCommandDefinition>) {\n const absWorkDir = utils.path.absoluteFrom(utils.path.cwd(), argv.workDir)\n const absEntrypoint = utils.path.absoluteFrom(absWorkDir, argv.entryPoint)\n const absOutDir = utils.path.absoluteFrom(absWorkDir, argv.outDir)\n super({\n workDir: absWorkDir,\n entryPoint: absEntrypoint,\n outDir: absOutDir,\n ..._.mapValues(consts.fromOutDir, (p) => utils.path.absoluteFrom(absOutDir, p)),\n ..._.mapValues(consts.fromWorkDir, (p) => utils.path.absoluteFrom(absWorkDir, p)),\n })\n }\n}\n\nexport abstract class ProjectCommand<C extends ProjectCommandDefinition> extends GlobalCommand<C> {\n protected get projectPaths() {\n return new ProjectPaths(this.argv)\n }\n\n protected get projectCache() {\n return new utils.cache.FSKeyValueCache<ProjectCache>(this.projectPaths.abs.projectCacheFile)\n }\n\n protected async readIntegrationDefinitionFromFS(): Promise<IntegrationDefinition | undefined> {\n const abs = this.projectPaths.abs\n const rel = this.projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.definition)) {\n this.logger.debug(`Integration definition not found at ${rel.definition}`)\n return\n }\n\n const { outputFiles } = await utils.esbuild.buildEntrypoint({\n cwd: abs.workDir,\n outfile: '',\n entrypoint: rel.definition,\n write: false,\n })\n\n const artifact = outputFiles[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read integration definition')\n }\n\n const { default: definition } = utils.require.requireJsCode<{ default: IntegrationDefinition }>(artifact.text)\n return definition\n }\n\n protected async writeGeneratedFilesToOutFolder(files: codegen.File[]) {\n for (const file of files) {\n const filePath = utils.path.absoluteFrom(this.projectPaths.abs.outDir, file.path)\n const dirPath = pathlib.dirname(filePath)\n await fs.promises.mkdir(dirPath, { recursive: true })\n await fs.promises.writeFile(filePath, file.content)\n }\n }\n\n protected prepareIntegrations(\n botImpl: BotImpl,\n botInfo: bpclient.Bot\n ): Parameters<bpclient.Client['updateBot']>[0]['integrations'] {\n const { integrations: integrationList } = botImpl\n\n const integrationsToUninstall = _(botInfo.integrations)\n .keys()\n .filter((key) => !integrationList?.map((i) => i.id).includes(key))\n .zipObject()\n .mapValues(() => null)\n .value()\n\n const integrationsToInstall = _(integrationList ?? [])\n .keyBy((i) => i.id)\n .mapValues(({ enabled, configuration }) => ({ enabled, configuration }))\n .value()\n\n return { ...integrationsToUninstall, ...integrationsToInstall } as Record<string, any> // TODO: fix client typings\n }\n\n protected displayWebhookUrls(bot: bpclient.Bot) {\n if (!_.keys(bot.integrations).length) {\n this.logger.log('No integrations in bot')\n return\n }\n\n this.logger.log('Integrations:')\n for (const integration of Object.values(bot.integrations)) {\n if (!integration.enabled) {\n this.logger.log(`${chalk.grey(integration.name)} ${chalk.italic('(disabled)')}: ${integration.webhookUrl}`, {\n prefix: { symbol: '\u25CB', indent: 2 },\n })\n } else {\n this.logger.log(`${chalk.bold(integration.name)} : ${integration.webhookUrl}`, {\n prefix: { symbol: '\u25CF', indent: 2 },\n })\n }\n }\n }\n\n protected async promptSecrets(\n integrationDef: IntegrationDefinition,\n argv: YargsConfig<typeof config.schemas.secrets>\n ): Promise<Record<string, string>> {\n const { secrets: secretDefinitions } = integrationDef\n if (!secretDefinitions) {\n return {}\n }\n\n const secretArgv = this._parseArgvSecrets(argv.secrets)\n const invalidSecret = Object.keys(secretArgv).find((s) => !secretDefinitions.includes(s))\n if (invalidSecret) {\n throw new errors.BotpressCLIError(`Secret ${invalidSecret} is not defined in integration definition`)\n }\n\n const values: Record<string, string> = {}\n for (const secretDef of secretDefinitions) {\n const argvSecret = secretArgv[secretDef]\n if (argvSecret) {\n this.logger.debug(`Using secret \"${secretDef}\" from argv`)\n values[secretDef] = argvSecret\n continue\n }\n\n const prompted = await this.prompt.text(`Enter value for secret \"${secretDef}\"`)\n if (!prompted) {\n throw new errors.BotpressCLIError('Secret is required')\n }\n values[secretDef] = prompted\n }\n\n const envVariables = _.mapKeys(values, (_v, k) => codegen.secretEnvVariableName(k))\n return envVariables\n }\n\n private _parseArgvSecrets(argvSecrets: string[]): Record<string, string> {\n const parsed: Record<string, string> = {}\n for (const secret of argvSecrets) {\n const [key, value] = this._splitOnce(secret, '=')\n if (!value) {\n throw new errors.BotpressCLIError(\n `Secret \"${key}\" is missing a value. Expected format: \"SECRET_NAME=secretValue\"`\n )\n }\n parsed[key!] = value\n }\n\n return parsed\n }\n\n private _splitOnce = (text: string, separator: string): [string, string | undefined] => {\n const index = text.indexOf(separator)\n if (index === -1) {\n return [text, undefined]\n }\n return [text.slice(0, index), text.slice(index + 1)]\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["_", "fs", "pathlib", "chalk"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-implementations/serve-command.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Bot as BotImpl, Integration as IntegrationImpl } from '@botpress/sdk'\nimport * as fs from 'fs'\nimport type commandDefinitions from '../command-definitions'\nimport * as errors from '../errors'\nimport * as utils from '../utils'\nimport { ProjectCommand } from './project-command'\n\ntype Serveable = BotImpl | IntegrationImpl\n\nexport type ServeCommandDefinition = typeof commandDefinitions.serve\nexport class ServeCommand extends ProjectCommand<ServeCommandDefinition> {\n public async run(): Promise<void> {\n const outfile = this.projectPaths.abs.outFile\n if (!fs.existsSync(outfile)) {\n throw new errors.NoBundleFoundError()\n }\n\n const integrationDef = await this.readIntegrationDefinitionFromFS()\n if (integrationDef) {\n const secrets = await this.promptSecrets(integrationDef, this.argv)\n for (const [key, value] of Object.entries(secrets)) {\n process.env[key] = value\n }\n }\n\n this.logger.log(`Serving ${integrationDef ? 'integration' : 'bot'}...`)\n\n const { default: serveable } = utils.require.requireJsFile<{ default: Serveable }>(outfile)\n const server = await serveable.start(this.argv.port)\n\n await new Promise<void>((resolve, reject) => {\n server.on('error', reject)\n server.on('close', resolve)\n })\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,SAAoB;AAEpB,aAAwB;AACxB,YAAuB;AACvB,6BAA+B;AAKxB,MAAM,qBAAqB,sCAAuC;AAAA,EACvE,MAAa,MAAqB;AAChC,UAAM,UAAU,KAAK,aAAa,IAAI;AACtC,QAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,YAAM,IAAI,OAAO,mBAAmB;AAAA,IACtC;AAEA,UAAM,iBAAiB,MAAM,KAAK,gCAAgC;AAClE,QAAI,gBAAgB;AAClB,YAAM,UAAU,MAAM,KAAK,cAAc,gBAAgB,KAAK,IAAI;AAClE,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,gBAAQ,IAAI,OAAO;AAAA,MACrB;AAAA,IACF;AAEA,SAAK,OAAO,IAAI,WAAW,iBAAiB,gBAAgB,UAAU;AAEtE,UAAM,EAAE,SAAS,UAAU,IAAI,MAAM,QAAQ,cAAsC,OAAO;AAC1F,UAAM,SAAS,MAAM,UAAU,MAAM,KAAK,KAAK,IAAI;AAEnD,UAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,aAAO,GAAG,SAAS,MAAM;AACzB,aAAO,GAAG,SAAS,OAAO;AAAA,IAC5B,CAAC;AAAA,EACH;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/command-tree.js
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/command-tree.ts"],
|
|
4
|
+
"sourcesContent": ["import type * as typings from './typings'\n\nexport type DefinitionSubTree = {\n description: string\n subcommands: DefinitionTree\n}\n\nexport type DefinitionTree = {\n [key: string]: DefinitionTreeNode\n}\n\nexport type DefinitionTreeNode = typings.CommandDefinition | DefinitionSubTree\n\nexport type ImplementationSubTree<D extends DefinitionSubTree = DefinitionSubTree> = {\n subcommands: ImplementationTree<D['subcommands']>\n}\n\nexport type ImplementationTreeNode<N extends DefinitionTreeNode = DefinitionTreeNode> =\n N extends typings.CommandDefinition\n ? typings.CommandImplementation<N>\n : N extends DefinitionSubTree\n ? ImplementationSubTree<N>\n : never\n\nexport type ImplementationTree<D extends DefinitionTree = DefinitionTree> = {\n [K in keyof D]: ImplementationTreeNode<D[K]>\n}\n\nexport type CommandSubTree<D extends DefinitionSubTree = DefinitionSubTree> = {\n description: string\n subcommands: CommandTree<D['subcommands']>\n}\n\nexport type CommandTreeNode<N extends DefinitionTreeNode = DefinitionTreeNode> = N extends typings.CommandDefinition\n ? typings.CommandLeaf<N>\n : N extends DefinitionSubTree\n ? CommandSubTree<N>\n : never\n\nexport type CommandTree<D extends DefinitionTree = DefinitionTree> = {\n [K in keyof D]: CommandTreeNode<D[K]>\n}\n\nexport const guards = {\n definition: {\n isDef: (x: DefinitionTreeNode): x is typings.CommandDefinition => 'schema' in x,\n isSubTree: (x: DefinitionTreeNode): x is DefinitionSubTree => 'subcommands' in x,\n },\n implementation: {\n isImpl: (x: ImplementationTreeNode): x is typings.CommandImplementation => typeof x === 'function',\n isSubTree: (x: ImplementationTreeNode): x is ImplementationSubTree => typeof x === 'object',\n },\n command: {\n isLeaf: (x: CommandTreeNode): x is typings.CommandLeaf => 'handler' in x,\n isSubTree: (x: CommandTreeNode): x is CommandSubTree => 'subcommands' in x,\n },\n}\n\nexport const zipTree = <T extends DefinitionTree>(defTree: T, implTree: ImplementationTree<T>): CommandTree<T> => {\n const tree = {} as CommandTree<T>\n\n for (const key in defTree) {\n const def = defTree[key]!\n const impl = implTree[key]!\n\n if (guards.definition.isDef(def) && guards.implementation.isImpl(impl)) {\n tree[key] = { ...def, handler: impl } as CommandTreeNode<typeof def>\n continue\n }\n\n if (guards.definition.isSubTree(def) && guards.implementation.isSubTree(impl)) {\n tree[key] = { ...def, subcommands: zipTree(def.subcommands, impl.subcommands) } as CommandTreeNode<typeof def>\n continue\n }\n }\n\n return tree\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CO,MAAM,SAAS;AAAA,EACpB,YAAY;AAAA,IACV,OAAO,CAAC,MAA0D,YAAY;AAAA,IAC9E,WAAW,CAAC,MAAkD,iBAAiB;AAAA,EACjF;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ,CAAC,MAAkE,OAAO,MAAM;AAAA,IACxF,WAAW,CAAC,MAA0D,OAAO,MAAM;AAAA,EACrF;AAAA,EACA,SAAS;AAAA,IACP,QAAQ,CAAC,MAAiD,aAAa;AAAA,IACvE,WAAW,CAAC,MAA4C,iBAAiB;AAAA,EAC3E;AACF;AAEO,MAAM,UAAU,CAA2B,SAAY,aAAoD;AAChH,QAAM,OAAO,CAAC;AAEd,aAAW,OAAO,SAAS;AACzB,UAAM,MAAM,QAAQ;AACpB,UAAM,OAAO,SAAS;AAEtB,QAAI,OAAO,WAAW,MAAM,GAAG,KAAK,OAAO,eAAe,OAAO,IAAI,GAAG;AACtE,WAAK,OAAO,EAAE,GAAG,KAAK,SAAS,KAAK;AACpC;AAAA,IACF;AAEA,QAAI,OAAO,WAAW,UAAU,GAAG,KAAK,OAAO,eAAe,UAAU,IAAI,GAAG;AAC7E,WAAK,OAAO,EAAE,GAAG,KAAK,aAAa,QAAQ,IAAI,aAAa,KAAK,WAAW,EAAE;AAC9E;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/config.js
CHANGED
|
@@ -74,6 +74,7 @@ const integrationRef = {
|
|
|
74
74
|
positional: true,
|
|
75
75
|
idx: 0
|
|
76
76
|
};
|
|
77
|
+
const sourceMap = { type: "boolean", description: "Generate sourcemaps", default: false };
|
|
77
78
|
const globalSchema = {
|
|
78
79
|
verbose: {
|
|
79
80
|
type: "boolean",
|
|
@@ -116,10 +117,12 @@ const generateSchema = {
|
|
|
116
117
|
...projectSchema
|
|
117
118
|
};
|
|
118
119
|
const bundleSchema = {
|
|
119
|
-
...projectSchema
|
|
120
|
+
...projectSchema,
|
|
121
|
+
sourceMap
|
|
120
122
|
};
|
|
121
123
|
const buildSchema = {
|
|
122
|
-
...projectSchema
|
|
124
|
+
...projectSchema,
|
|
125
|
+
sourceMap
|
|
123
126
|
};
|
|
124
127
|
const serveSchema = {
|
|
125
128
|
...projectSchema,
|
|
@@ -132,7 +135,8 @@ const deploySchema = {
|
|
|
132
135
|
...secretsSchema,
|
|
133
136
|
botId: { type: "string", description: "The bot ID to deploy. Only used when deploying a bot" },
|
|
134
137
|
noBuild,
|
|
135
|
-
createNewBot: { type: "boolean", description: "Create a new bot when deploying. Only used when deploying a bot" }
|
|
138
|
+
createNewBot: { type: "boolean", description: "Create a new bot when deploying. Only used when deploying a bot" },
|
|
139
|
+
sourceMap
|
|
136
140
|
};
|
|
137
141
|
const devSchema = {
|
|
138
142
|
...projectSchema,
|
|
@@ -144,7 +148,8 @@ const devSchema = {
|
|
|
144
148
|
demandOption: true
|
|
145
149
|
},
|
|
146
150
|
port,
|
|
147
|
-
noBuild
|
|
151
|
+
noBuild,
|
|
152
|
+
sourceMap
|
|
148
153
|
};
|
|
149
154
|
const addSchema = {
|
|
150
155
|
...projectSchema,
|
|
@@ -228,3 +233,4 @@ const schemas = {
|
|
|
228
233
|
0 && (module.exports = {
|
|
229
234
|
schemas
|
|
230
235
|
});
|
|
236
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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: process.cwd(),\n} satisfies CommandOption\n\nconst noBuild = {\n type: 'boolean',\n description: 'Skip the build step',\n default: false,\n} satisfies CommandOption\n\nconst host = {\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 integrationRef = {\n type: 'string',\n description: 'The integration ID or name with optionnal version. Ex: teams or teams@0.2.0',\n demandOption: true,\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst sourceMap = { type: 'boolean', description: 'Generate sourcemaps', default: false } 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 entryPoint: { type: 'string', description: 'The entry point of the project', default: consts.defaultEntrypoint },\n outDir: { type: 'string', description: 'The output directory', default: consts.defaultOutputFolder },\n workDir,\n} satisfies CommandSchema\n\nconst credentialsSchema = {\n host,\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} satisfies CommandSchema\n\nconst buildSchema = {\n ...projectSchema,\n sourceMap,\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} satisfies CommandSchema\n\nconst devSchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n url: {\n type: 'string',\n description: 'The publicly available URL of the bot or integration (often using ngrok)',\n demandOption: true,\n },\n port,\n noBuild,\n sourceMap,\n} satisfies CommandSchema\n\nconst addSchema = {\n ...projectSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst loginSchema = {\n ...globalSchema,\n token,\n workspaceId,\n host: { ...host, default: consts.defaultBotpressApi },\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} 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} 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 version: { type: 'string', description: 'The version filter when listing integrations' },\n} satisfies CommandSchema\n\nconst deleteIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\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\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 init: initSchema,\n generate: generateSchema,\n bundle: bundleSchema,\n build: buildSchema,\n serve: serveSchema,\n deploy: deploySchema,\n add: addSchema,\n dev: devSchema,\n} as const\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAwB;AAKxB,MAAM,OAAO;AAAA,EACX,MAAM;AAAA,EACN,aAAa;AACf;AAEA,MAAM,UAAU;AAAA,EACd,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,QAAQ,IAAI;AACvB;AAEA,MAAM,UAAU;AAAA,EACd,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AACX;AAEA,MAAM,OAAO;AAAA,EACX,MAAM;AAAA,EACN,aAAa;AACf;AAEA,MAAM,QAAQ;AAAA,EACZ,MAAM;AAAA,EACN,aAAa;AACf;AAEA,MAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,aAAa;AACf;AAEA,MAAM,UAAU;AAAA,EACd,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,EACP,SAAS,CAAC;AACZ;AAEA,MAAM,SAAS;AAAA,EACb,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,KAAK;AACP;AAEA,MAAM,iBAAiB;AAAA,EACrB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,KAAK;AACP;AAEA,MAAM,YAAY,EAAE,MAAM,WAAW,aAAa,uBAAuB,SAAS,MAAM;AAIxF,MAAM,eAAe;AAAA,EACnB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS,OAAO;AAAA,EAClB;AACF;AAEA,MAAM,gBAAgB;AAAA,EACpB,GAAG;AAAA,EACH,YAAY,EAAE,MAAM,UAAU,aAAa,kCAAkC,SAAS,OAAO,kBAAkB;AAAA,EAC/G,QAAQ,EAAE,MAAM,UAAU,aAAa,wBAAwB,SAAS,OAAO,oBAAoB;AAAA,EACnG;AACF;AAEA,MAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,gBAAgB;AAAA,EACpB;AACF;AAIA,MAAM,iBAAiB;AAAA,EACrB,GAAG;AACL;AAEA,MAAM,eAAe;AAAA,EACnB,GAAG;AAAA,EACH;AACF;AAEA,MAAM,cAAc;AAAA,EAClB,GAAG;AAAA,EACH;AACF;AAEA,MAAM,cAAc;AAAA,EAClB,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AACF;AAEA,MAAM,eAAe;AAAA,EACnB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAO,EAAE,MAAM,UAAU,aAAa,uDAAuD;AAAA,EAC7F;AAAA,EACA,cAAc,EAAE,MAAM,WAAW,aAAa,kEAAkE;AAAA,EAChH;AACF;AAEA,MAAM,YAAY;AAAA,EAChB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,KAAK;AAAA,IACH,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,YAAY;AAAA,EAChB,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AACF;AAEA,MAAM,cAAc;AAAA,EAClB,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA,MAAM,EAAE,GAAG,MAAM,SAAS,OAAO,mBAAmB;AACtD;AAEA,MAAM,eAAe;AAAA,EACnB,GAAG;AACL;AAEA,MAAM,kBAAkB;AAAA,EACtB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM,EAAE,MAAM,UAAU,aAAa,gCAAgC;AACvE;AAEA,MAAM,eAAe;AAAA,EACnB,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AACF;AAEA,MAAM,kBAAkB;AAAA,EACtB,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AACF;AAEA,MAAM,iBAAiB;AAAA,EACrB,GAAG;AAAA,EACH,GAAG;AACL;AAEA,MAAM,uBAAuB;AAAA,EAC3B,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AACF;AAEA,MAAM,yBAAyB;AAAA,EAC7B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM,EAAE,MAAM,UAAU,aAAa,4CAA4C;AAAA,EACjF,SAAS,EAAE,MAAM,UAAU,aAAa,+CAA+C;AACzF;AAEA,MAAM,0BAA0B;AAAA,EAC9B,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AACF;AAEA,MAAM,aAAa;AAAA,EACjB,GAAG;AAAA,EACH;AAAA,EACA,MAAM,EAAE,MAAM,UAAU,SAAS,CAAC,OAAO,aAAa,EAAW;AAAA,EACjE,MAAM,EAAE,MAAM,UAAU,aAAa,0BAA0B;AACjE;AAIO,MAAM,UAAU;AAAA,EACrB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AAAA,EAET,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,KAAK;AACP;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/consts.js
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/consts.ts"],
|
|
4
|
+
"sourcesContent": ["import os from 'os'\nimport pathlib from 'path'\n\n// configurable\n\nexport const defaultBotpressHome = pathlib.join(os.homedir(), '.botpress')\n\nexport const defaultOutputFolder = '.botpress'\nexport const defaultEntrypoint = pathlib.join('src', 'index.ts')\nexport const defaultBotpressApi = 'https://api.botpress.cloud'\nexport const defaultBotpressApp = 'https://app.botpress.cloud'\n\n// not configurable\n\nexport const echoBotDirName = 'echo-bot'\nexport const emptyIntegrationDirName = 'empty-integration'\n\nexport const fromCliRootDir = {\n packageJson: 'package.json',\n echoBotTemplate: pathlib.join('templates', echoBotDirName),\n emptyIntegrationTemplate: pathlib.join('templates', emptyIntegrationDirName),\n}\n\nexport const fromHomeDir = {\n globalCacheFile: 'global.cache.json',\n}\n\nexport const fromWorkDir = {\n definition: 'integration.definition.ts',\n}\n\nexport const fromOutDir = {\n distDir: 'dist',\n outFile: pathlib.join('dist', 'index.js'),\n installDir: 'installations',\n implementationDir: 'implementation',\n secretsDir: 'secrets',\n projectCacheFile: 'project.cache.json',\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,kBAAoB;AAIb,MAAM,sBAAsB,YAAAA,QAAQ,KAAK,UAAAC,QAAG,QAAQ,GAAG,WAAW;AAElE,MAAM,sBAAsB;AAC5B,MAAM,oBAAoB,YAAAD,QAAQ,KAAK,OAAO,UAAU;AACxD,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAI3B,MAAM,iBAAiB;AACvB,MAAM,0BAA0B;AAEhC,MAAM,iBAAiB;AAAA,EAC5B,aAAa;AAAA,EACb,iBAAiB,YAAAA,QAAQ,KAAK,aAAa,cAAc;AAAA,EACzD,0BAA0B,YAAAA,QAAQ,KAAK,aAAa,uBAAuB;AAC7E;AAEO,MAAM,cAAc;AAAA,EACzB,iBAAiB;AACnB;AAEO,MAAM,cAAc;AAAA,EACzB,YAAY;AACd;AAEO,MAAM,aAAa;AAAA,EACxB,SAAS;AAAA,EACT,SAAS,YAAAA,QAAQ,KAAK,QAAQ,UAAU;AAAA,EACxC,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,kBAAkB;AACpB;",
|
|
6
|
+
"names": ["pathlib", "os"]
|
|
7
|
+
}
|
package/dist/errors.js
CHANGED
|
@@ -47,8 +47,13 @@ class BotpressCLIError extends import_verror.VError {
|
|
|
47
47
|
return new BotpressCLIError(err, message ?? "");
|
|
48
48
|
}
|
|
49
49
|
static map(thrown) {
|
|
50
|
+
if (thrown instanceof BotpressCLIError) {
|
|
51
|
+
return thrown;
|
|
52
|
+
}
|
|
50
53
|
if (thrown instanceof import_client.UnknownError) {
|
|
51
|
-
|
|
54
|
+
const inst = new HTTPError(500, "An unknown error has occurred.");
|
|
55
|
+
inst.debug = thrown.message;
|
|
56
|
+
return inst;
|
|
52
57
|
}
|
|
53
58
|
if (isKnownApiError(thrown)) {
|
|
54
59
|
return HTTPError.fromApi(thrown);
|
|
@@ -62,6 +67,26 @@ class BotpressCLIError extends import_verror.VError {
|
|
|
62
67
|
}
|
|
63
68
|
return new BotpressCLIError(`${thrown}`);
|
|
64
69
|
}
|
|
70
|
+
_debug;
|
|
71
|
+
constructor(first, second) {
|
|
72
|
+
if (typeof first === "string") {
|
|
73
|
+
super(first);
|
|
74
|
+
this._debug = [];
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
super(first, second);
|
|
78
|
+
this._debug = [...first._debug];
|
|
79
|
+
}
|
|
80
|
+
set debug(msg) {
|
|
81
|
+
this._debug.push(msg);
|
|
82
|
+
}
|
|
83
|
+
get debug() {
|
|
84
|
+
const dbgMsgs = this._debug.filter((s) => s.length);
|
|
85
|
+
if (!dbgMsgs.length) {
|
|
86
|
+
return "";
|
|
87
|
+
}
|
|
88
|
+
return "Error: \n" + dbgMsgs.map((s) => ` ${s}`).join("\n");
|
|
89
|
+
}
|
|
65
90
|
}
|
|
66
91
|
class ExclusiveBotFeatureError extends BotpressCLIError {
|
|
67
92
|
constructor() {
|
|
@@ -154,3 +179,4 @@ class InvalidIntegrationReferenceError extends BotpressCLIError {
|
|
|
154
179
|
NotLoggedInError,
|
|
155
180
|
ParamRequiredError
|
|
156
181
|
});
|
|
182
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/errors.ts"],
|
|
4
|
+
"sourcesContent": ["import { isApiError, ApiError, UnknownError } from '@botpress/client'\nimport axios, { AxiosError } from 'axios'\nimport { VError } from 'verror'\nimport * as consts from './consts'\n\ntype KnownApiError = Exclude<ApiError, UnknownError>\nconst isKnownApiError = (e: unknown): e is KnownApiError => isApiError(e) && !(e instanceof UnknownError)\n\nexport class BotpressCLIError extends VError {\n public static wrap(thrown: unknown, message: string): BotpressCLIError {\n const err = BotpressCLIError.map(thrown)\n return new BotpressCLIError(err, message ?? '')\n }\n\n public static map(thrown: unknown): BotpressCLIError {\n if (thrown instanceof BotpressCLIError) {\n return thrown\n }\n if (thrown instanceof UnknownError) {\n const inst = new HTTPError(500, 'An unknown error has occurred.')\n inst.debug = thrown.message\n return inst\n }\n if (isKnownApiError(thrown)) {\n return HTTPError.fromApi(thrown)\n }\n if (axios.isAxiosError(thrown)) {\n return HTTPError.fromAxios(thrown)\n }\n if (thrown instanceof Error) {\n const { message } = thrown\n return new BotpressCLIError(message)\n }\n return new BotpressCLIError(`${thrown}`)\n }\n\n private readonly _debug: string[]\n\n constructor(error: BotpressCLIError, message: string)\n constructor(message: string)\n public constructor(first: BotpressCLIError | string, second?: string) {\n if (typeof first === 'string') {\n super(first)\n this._debug = []\n return\n }\n super(first, second!)\n this._debug = [...first._debug]\n }\n\n public set debug(msg: string) {\n this._debug.push(msg)\n }\n\n public get debug(): string {\n const dbgMsgs = this._debug.filter((s) => s.length)\n if (!dbgMsgs.length) {\n return ''\n }\n return 'Error: \\n' + dbgMsgs.map((s) => ` ${s}`).join('\\n')\n }\n}\n\nexport class ExclusiveBotFeatureError extends BotpressCLIError {\n constructor() {\n const message = 'This feature is only available for bots. This project is an integration'\n super(message)\n }\n}\n\nexport class ExclusiveIntegrationFeatureError extends BotpressCLIError {\n constructor() {\n const message = 'This feature is only available for integration. This project is a bot'\n super(message)\n }\n}\n\nexport class HTTPError extends BotpressCLIError {\n constructor(public readonly status: number | undefined, message: string) {\n super(message)\n }\n\n public static fromAxios(e: AxiosError<{ message?: string }>): HTTPError {\n const message = this._axiosMsg(e)\n return new HTTPError(e.response?.status, message)\n }\n\n public static fromApi(e: KnownApiError): HTTPError {\n const { message, code } = e\n return new HTTPError(code, message)\n }\n\n private static _axiosMsg(e: AxiosError<{ message?: string }>): string {\n let message = e.message\n if (e.response?.statusText) {\n message += `\\n ${e.response?.statusText}`\n }\n if (e.response?.status && e.request?.method && e.request?.path) {\n message += `\\n (${e.response?.status}) ${e.request.method} ${e.request.path}`\n }\n if (e.response?.data?.message) {\n message += `\\n ${e.response?.data?.message}`\n }\n return message\n }\n}\n\nexport class NoBundleFoundError extends BotpressCLIError {\n constructor() {\n const message = 'No bundle found. Please run `bp bundle` first.'\n super(message)\n }\n}\n\nexport class NoBotsFoundError extends BotpressCLIError {\n constructor() {\n const message = `No Bot found in your Workspace. Please create one first at ${consts.defaultBotpressApp}.`\n super(message)\n }\n}\n\nexport class NoWorkspacesFoundError extends BotpressCLIError {\n constructor() {\n const message = 'No Workspace found. Please create one first.'\n super(message)\n }\n}\n\nexport class NotLoggedInError extends BotpressCLIError {\n constructor() {\n const message = 'Not logged in. Please run `bp login` first.'\n super(message)\n }\n}\n\nexport class ParamRequiredError extends BotpressCLIError {\n constructor(param: string) {\n const message = `${param} is required.`\n super(message)\n }\n}\n\nexport class InvalidIntegrationReferenceError extends BotpressCLIError {\n constructor(ref: string) {\n const message = `Invalid integration reference \"${ref}\".`\n super(message)\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["axios"]
|
|
7
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -45,3 +45,4 @@ process.on("unhandledRejection", (thrown) => onError(thrown));
|
|
|
45
45
|
const commands = tree.zipTree(import_command_definitions.default, import_command_implementations.default);
|
|
46
46
|
(0, import_register_yargs.registerYargs)(import_yargs_extra.default, commands, { cliRootDir: CLI_ROOT_DIR });
|
|
47
47
|
void import_yargs_extra.default.version(false).scriptName("bp").demandCommand(1, "You didn't provide any command. Use the --help flag to see the list of available commands.").recommendCommands().strict().help().fail(yargsFail).parse();
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import yargs from '@bpinternal/yargs-extra'\nimport commandDefinitions from './command-definitions'\nimport commandImplementations from './command-implementations'\nimport * as tree from './command-tree'\nimport * as errors from './errors'\nimport { Logger } from './logger'\nimport { registerYargs } from './register-yargs'\nimport * as utils from './utils'\n\nconst CLI_ROOT_DIR = utils.path.join(__dirname as utils.path.AbsolutePath, '..')\n\nconst logError = (thrown: unknown) => {\n const error = errors.BotpressCLIError.map(thrown)\n new Logger().error(error.message)\n}\n\nconst onError = (thrown: unknown) => {\n logError(thrown)\n process.exit(1)\n}\n\nconst yargsFail = (msg: string) => {\n logError(`${msg}\\n`)\n yargs.showHelp()\n process.exit(1)\n}\n\nprocess.on('uncaughtException', (thrown: unknown) => onError(thrown))\nprocess.on('unhandledRejection', (thrown: unknown) => onError(thrown))\n\nconst commands = tree.zipTree(commandDefinitions, commandImplementations)\n\nregisterYargs(yargs, commands, { cliRootDir: CLI_ROOT_DIR })\n\nvoid yargs\n .version(false)\n .scriptName('bp')\n .demandCommand(1, \"You didn't provide any command. Use the --help flag to see the list of available commands.\")\n .recommendCommands()\n .strict()\n .help()\n .fail(yargsFail)\n .parse()\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA,yBAAkB;AAClB,iCAA+B;AAC/B,qCAAmC;AACnC,WAAsB;AACtB,aAAwB;AACxB,oBAAuB;AACvB,4BAA8B;AAC9B,YAAuB;AAEvB,MAAM,eAAe,MAAM,KAAK,KAAK,WAAsC,IAAI;AAE/E,MAAM,WAAW,CAAC,WAAoB;AACpC,QAAM,QAAQ,OAAO,iBAAiB,IAAI,MAAM;AAChD,MAAI,qBAAO,EAAE,MAAM,MAAM,OAAO;AAClC;AAEA,MAAM,UAAU,CAAC,WAAoB;AACnC,WAAS,MAAM;AACf,UAAQ,KAAK,CAAC;AAChB;AAEA,MAAM,YAAY,CAAC,QAAgB;AACjC,WAAS,GAAG;AAAA,CAAO;AACnB,qBAAAA,QAAM,SAAS;AACf,UAAQ,KAAK,CAAC;AAChB;AAEA,QAAQ,GAAG,qBAAqB,CAAC,WAAoB,QAAQ,MAAM,CAAC;AACpE,QAAQ,GAAG,sBAAsB,CAAC,WAAoB,QAAQ,MAAM,CAAC;AAErE,MAAM,WAAW,KAAK,QAAQ,2BAAAC,SAAoB,+BAAAC,OAAsB;AAAA,IAExE,qCAAc,mBAAAF,SAAO,UAAU,EAAE,YAAY,aAAa,CAAC;AAE3D,KAAK,mBAAAA,QACF,QAAQ,KAAK,EACb,WAAW,IAAI,EACf,cAAc,GAAG,4FAA4F,EAC7G,kBAAkB,EAClB,OAAO,EACP,KAAK,EACL,KAAK,SAAS,EACd,MAAM;",
|
|
6
|
+
"names": ["yargs", "commandDefinitions", "commandImplementations"]
|
|
7
|
+
}
|
package/dist/init.js
CHANGED
package/dist/init.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/init.ts"],
|
|
4
|
+
"sourcesContent": ["import Module from 'module'\nimport pathlib from 'path'\n\nconst DEFAULT_DIRNAME = '.botpress'\n\nconst getOutDir = () => {\n const { BP_OUTDIR } = process.env\n if (!BP_OUTDIR) {\n return pathlib.join(process.cwd(), DEFAULT_DIRNAME)\n }\n if (pathlib.isAbsolute(BP_OUTDIR)) {\n return BP_OUTDIR\n }\n return pathlib.join(process.cwd(), BP_OUTDIR)\n}\n\nconst outDirPath = getOutDir()\nconst outDirName = pathlib.basename(outDirPath)\nconst originalRequire = Module.prototype.require\n\nconst rewire = function (this: NodeRequire, mod: string) {\n const importParts = mod.split('/')\n\n if (importParts[0] === outDirName) {\n const newMod = importParts.slice(1).join('/')\n const fullpath = pathlib.join(outDirPath, newMod)\n return originalRequire.apply(this, [fullpath])\n }\n\n return originalRequire.apply(this, [mod])\n} as NodeRequire\n\nModule.prototype.require = rewire\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA,oBAAmB;AACnB,kBAAoB;AAEpB,MAAM,kBAAkB;AAExB,MAAM,YAAY,MAAM;AACtB,QAAM,EAAE,UAAU,IAAI,QAAQ;AAC9B,MAAI,CAAC,WAAW;AACd,WAAO,YAAAA,QAAQ,KAAK,QAAQ,IAAI,GAAG,eAAe;AAAA,EACpD;AACA,MAAI,YAAAA,QAAQ,WAAW,SAAS,GAAG;AACjC,WAAO;AAAA,EACT;AACA,SAAO,YAAAA,QAAQ,KAAK,QAAQ,IAAI,GAAG,SAAS;AAC9C;AAEA,MAAM,aAAa,UAAU;AAC7B,MAAM,aAAa,YAAAA,QAAQ,SAAS,UAAU;AAC9C,MAAM,kBAAkB,cAAAC,QAAO,UAAU;AAEzC,MAAM,SAAS,SAA6B,KAAa;AACvD,QAAM,cAAc,IAAI,MAAM,GAAG;AAEjC,MAAI,YAAY,OAAO,YAAY;AACjC,UAAM,SAAS,YAAY,MAAM,CAAC,EAAE,KAAK,GAAG;AAC5C,UAAM,WAAW,YAAAD,QAAQ,KAAK,YAAY,MAAM;AAChD,WAAO,gBAAgB,MAAM,MAAM,CAAC,QAAQ,CAAC;AAAA,EAC/C;AAEA,SAAO,gBAAgB,MAAM,MAAM,CAAC,GAAG,CAAC;AAC1C;AAEA,cAAAC,QAAO,UAAU,UAAU;",
|
|
6
|
+
"names": ["pathlib", "Module"]
|
|
7
|
+
}
|
package/dist/integration-ref.js
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/integration-ref.ts"],
|
|
4
|
+
"sourcesContent": ["import semver from 'semver'\nimport * as uuid from 'uuid'\n\nexport type UUIDIntegrationRef = {\n type: 'id'\n id: string\n}\n\nexport type NameIntegrationRef = {\n type: 'name'\n name: string\n version: string\n}\n\nexport type IntegrationRef = UUIDIntegrationRef | NameIntegrationRef\n\nconst LATEST_TAG = 'latest'\n\nexport const formatIntegrationRef = (ref: IntegrationRef): string => {\n if (ref.type === 'id') {\n return ref.id\n }\n return `${ref.name}@${ref.version}`\n}\n\nexport const parseIntegrationRef = (ref: string): IntegrationRef | undefined => {\n if (uuid.validate(ref)) {\n return { type: 'id', id: ref }\n }\n\n if (!ref.includes('@')) {\n return { type: 'name', name: ref, version: LATEST_TAG }\n }\n\n const [name, version] = ref.split('@')\n if (!name || !version) {\n return\n }\n\n const cleanedVersion = version === LATEST_TAG ? version : semver.clean(version)\n if (!cleanedVersion) {\n return\n }\n\n return { type: 'name', name, version: cleanedVersion }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,WAAsB;AAetB,MAAM,aAAa;AAEZ,MAAM,uBAAuB,CAAC,QAAgC;AACnE,MAAI,IAAI,SAAS,MAAM;AACrB,WAAO,IAAI;AAAA,EACb;AACA,SAAO,GAAG,IAAI,QAAQ,IAAI;AAC5B;AAEO,MAAM,sBAAsB,CAAC,QAA4C;AAC9E,MAAI,KAAK,SAAS,GAAG,GAAG;AACtB,WAAO,EAAE,MAAM,MAAM,IAAI,IAAI;AAAA,EAC/B;AAEA,MAAI,CAAC,IAAI,SAAS,GAAG,GAAG;AACtB,WAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,SAAS,WAAW;AAAA,EACxD;AAEA,QAAM,CAAC,MAAM,OAAO,IAAI,IAAI,MAAM,GAAG;AACrC,MAAI,CAAC,QAAQ,CAAC,SAAS;AACrB;AAAA,EACF;AAEA,QAAM,iBAAiB,YAAY,aAAa,UAAU,cAAAA,QAAO,MAAM,OAAO;AAC9E,MAAI,CAAC,gBAAgB;AACnB;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,QAAQ,MAAM,SAAS,eAAe;AACvD;",
|
|
6
|
+
"names": ["semver"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/logger/base-logger.ts"],
|
|
4
|
+
"sourcesContent": ["import boxen from 'boxen'\nimport chalk from 'chalk'\nimport _ from 'lodash'\nimport util from 'util'\n\nexport type LoggerOptions = {\n verbose: boolean\n json?: boolean // prevents loggin anything else than json\n}\n\nconst DEFAULT_OPTIONS: LoggerOptions = { verbose: false }\n\ntype ChalkColor = (str: string) => string\nconst NO_COLOR: ChalkColor = (str: string) => str\n\nconst PINK = [255, 100, 255] as const\nconst ORANGE = [255, 165, 0] as const\nconst PURPLE = [128, 0, 128] as const\n\nconst BG_COLORS: Record<Color, ChalkColor> = {\n blue: chalk.bgBlueBright,\n green: chalk.bgGreenBright,\n yellow: chalk.bgYellowBright,\n red: chalk.bgRedBright,\n white: chalk.bgWhite,\n pink: (str: string) => chalk.bgRgb(...PINK)(str),\n orange: (str: string) => chalk.bgRgb(...ORANGE)(str),\n purple: (str: string) => chalk.bgRgb(...PURPLE)(str),\n}\n\nconst FG_COLORS: Record<Color, ChalkColor> = {\n blue: chalk.blueBright,\n green: chalk.green,\n yellow: chalk.yellowBright,\n red: chalk.red,\n white: chalk.white,\n pink: (str: string) => chalk.rgb(...PINK)(str),\n orange: (str: string) => chalk.rgb(...ORANGE)(str),\n purple: (str: string) => chalk.rgb(...PURPLE)(str),\n}\n\ntype Symbol = '\u2713' | '\u26A0' | '\u00D7' | '\u25CF' | ' ' | '\u25CB'\ntype Color = 'blue' | 'green' | 'yellow' | 'red' | 'pink' | 'white' | 'orange' | 'purple'\ntype LogPrefix = { symbol: Symbol; fg?: Color; bg?: Color; indent?: number } | string\ntype SymbolRederer<T extends Symbol> = { default: T; windows?: string; mac?: string }\n\ntype LogProps = {\n metadata: any\n prefix: LogPrefix\n stderr?: boolean\n}\n\ntype PrintProps = {\n metadata: any\n prefix: string\n stderr?: boolean\n}\n\nconst checkmark: SymbolRederer<'\u2713'> = {\n default: '\u2713',\n windows: '\u221A',\n mac: '\u2714',\n}\n\nconst cross: SymbolRederer<'\u00D7'> = {\n default: '\u00D7',\n mac: '\u2716',\n}\n\nconst danger: SymbolRederer<'\u26A0'> = { default: '\u26A0' }\nconst circle: SymbolRederer<'\u25CB'> = { default: '\u25CB' }\nconst disc: SymbolRederer<'\u25CF'> = { default: '\u25CF' }\nconst space: SymbolRederer<' '> = { default: ' ' }\n\nconst renderers: Record<Symbol, SymbolRederer<Symbol>> = {\n '\u2713': checkmark,\n '\u00D7': cross,\n '\u26A0': danger,\n '\u25CB': circle,\n '\u25CF': disc,\n ' ': space,\n}\n\nconst BOX_OPTIONS: boxen.Options = {\n padding: 1,\n margin: 1,\n borderStyle: 'round',\n borderColor: 'yellow',\n}\n\nexport abstract class BaseLogger {\n protected opts: LoggerOptions\n\n constructor(opts: Partial<LoggerOptions> = {}) {\n this.opts = { ...DEFAULT_OPTIONS, ...opts }\n }\n\n public log(message: string, props: Partial<LogProps> = {}): void {\n if (this.opts.json && !props.stderr) {\n return\n }\n\n const prefix = this._resolvePrefix(props.prefix)\n this.print(message, { ...props, prefix })\n }\n\n public json(data: any, opts: Partial<{ depth: number }> = { depth: Infinity }): void {\n if (this.opts.json) {\n this.print(JSON.stringify(data, undefined, 2))\n return\n }\n\n const { depth } = opts\n const msg = util.inspect(data, { colors: true, depth })\n this.log(msg)\n }\n\n public debug(message: string, metadata?: any): void {\n if (!this.opts.verbose) {\n return\n }\n this.log(chalk.grey(message), { metadata, prefix: { symbol: '\u25CF', fg: 'blue' } })\n }\n\n public started(message: string, metadata?: any): void {\n this.log(message, { metadata, prefix: { symbol: '\u25CB', fg: 'purple' } })\n }\n\n public success(message: string, metadata?: any): void {\n this.log(message, { metadata, prefix: { symbol: '\u2713', fg: 'green' } })\n }\n\n public warn(message: string, metadata?: any): void {\n this.log(message, { metadata, prefix: { symbol: '\u26A0', fg: 'yellow' } })\n }\n\n public error(message: string, metadata?: any): void {\n this.log(message, { metadata, prefix: { symbol: '\u00D7', fg: 'red' }, stderr: true })\n }\n\n public box(message: string): void {\n const box = boxen(message, BOX_OPTIONS)\n this.log(box)\n }\n\n protected abstract print(message: string, props?: Partial<PrintProps>): void\n\n private _resolvePrefix(prefix: LogPrefix | undefined): string | undefined {\n if (!prefix) {\n return\n }\n\n if (_.isString(prefix)) {\n return prefix\n }\n\n const { symbol, fg, bg, indent } = prefix\n const renderedSymbol = this._renderSymbol(symbol)\n const fgcolor = fg ? FG_COLORS[fg] : NO_COLOR\n const bgcolor = bg ? BG_COLORS[bg] : NO_COLOR\n const indentStr = indent ? ' '.repeat(indent) : ''\n const symbolStr = fgcolor(bgcolor(renderedSymbol))\n return `${indentStr}${symbolStr}`\n }\n\n private _renderSymbol(symbol: Symbol): string {\n const renderer = renderers[symbol]\n if (process.platform === 'win32') {\n return renderer.windows || renderer.default\n } else if (process.platform === 'darwin') {\n return renderer.mac || renderer.default\n } else {\n return renderer.default\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["chalk", "util", "boxen", "_"]
|
|
7
|
+
}
|
package/dist/logger/index.js
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/logger/index.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-console */\nimport { cursorTo, clearLine } from 'readline'\nimport { BaseLogger, LoggerOptions } from './base-logger'\n\nexport class Logger extends BaseLogger {\n private static _previousLine: SingleLineLogger | undefined // this is global to the whole process\n\n protected print(message: string, props: Partial<{ metadata: any; prefix: string; stderr?: boolean }> = {}): void {\n this.cleanup()\n const log = props.stderr ? console.error : console.info\n const { metadata, prefix } = props\n if (prefix) {\n log(prefix, message, metadata ?? '')\n return\n }\n log(message, metadata ?? '')\n }\n\n public line(): SingleLineLogger {\n this.cleanup()\n const currentLine = new SingleLineLogger({ ...this.opts })\n Logger._previousLine = currentLine\n return currentLine\n }\n\n public cleanup(): void {\n if (Logger._previousLine) {\n Logger._previousLine.commit()\n Logger._previousLine = undefined\n }\n }\n}\n\nclass SingleLineLogger extends BaseLogger {\n private _commited = false\n\n constructor(opts: LoggerOptions) {\n super(opts)\n }\n\n public commit(): void {\n if (this._commited) {\n return\n }\n this._commited = true\n console.log()\n }\n\n protected print(message: string, props: Partial<{ metadata: any; prefix: string }> = {}): void {\n if (this._commited) {\n return\n }\n\n clearLine(process.stdout, 0)\n const { metadata, prefix } = props\n cursorTo(process.stdout, 0)\n if (prefix) {\n process.stdout.write(`${prefix} ${message} ${metadata ?? ''}`)\n return\n }\n process.stdout.write(`${message} ${metadata ?? ''}`)\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAoC;AACpC,yBAA0C;AAEnC,MAAM,eAAe,8BAAW;AAAA,EACrC,OAAe;AAAA,EAEL,MAAM,SAAiB,QAAsE,CAAC,GAAS;AAC/G,SAAK,QAAQ;AACb,UAAM,MAAM,MAAM,SAAS,QAAQ,QAAQ,QAAQ;AACnD,UAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,QAAI,QAAQ;AACV,UAAI,QAAQ,SAAS,YAAY,EAAE;AACnC;AAAA,IACF;AACA,QAAI,SAAS,YAAY,EAAE;AAAA,EAC7B;AAAA,EAEO,OAAyB;AAC9B,SAAK,QAAQ;AACb,UAAM,cAAc,IAAI,iBAAiB,EAAE,GAAG,KAAK,KAAK,CAAC;AACzD,WAAO,gBAAgB;AACvB,WAAO;AAAA,EACT;AAAA,EAEO,UAAgB;AACrB,QAAI,OAAO,eAAe;AACxB,aAAO,cAAc,OAAO;AAC5B,aAAO,gBAAgB;AAAA,IACzB;AAAA,EACF;AACF;AAEA,MAAM,yBAAyB,8BAAW;AAAA,EAChC,YAAY;AAAA,EAEpB,YAAY,MAAqB;AAC/B,UAAM,IAAI;AAAA,EACZ;AAAA,EAEO,SAAe;AACpB,QAAI,KAAK,WAAW;AAClB;AAAA,IACF;AACA,SAAK,YAAY;AACjB,YAAQ,IAAI;AAAA,EACd;AAAA,EAEU,MAAM,SAAiB,QAAoD,CAAC,GAAS;AAC7F,QAAI,KAAK,WAAW;AAClB;AAAA,IACF;AAEA,mCAAU,QAAQ,QAAQ,CAAC;AAC3B,UAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,kCAAS,QAAQ,QAAQ,CAAC;AAC1B,QAAI,QAAQ;AACV,cAAQ,OAAO,MAAM,GAAG,UAAU,WAAW,YAAY,IAAI;AAC7D;AAAA,IACF;AACA,YAAQ,OAAO,MAAM,GAAG,WAAW,YAAY,IAAI;AAAA,EACrD;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/register-yargs.js
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/register-yargs.ts"],
|
|
4
|
+
"sourcesContent": ["import yargs, { YargsArgv, YargsConfig, cleanupConfig, parseEnv } from '@bpinternal/yargs-extra'\nimport _ from 'lodash'\nimport * as tree from './command-tree'\nimport type * as typings from './typings'\nimport type * as utils from './utils'\n\nexport type YargsInstance = typeof yargs\n\nexport type RegisterProps = {\n cliRootDir: utils.path.AbsolutePath\n}\n\nconst parseArguments = <S extends typings.CommandSchema>(schema: S, argv: YargsArgv<S>): YargsConfig<S> => {\n const yargsEnv = parseEnv(schema, 'BP')\n return cleanupConfig(schema, { ...argv, ...yargsEnv })\n}\n\nexport const registerYargs = (yargz: YargsInstance, commands: tree.CommandTree, props: RegisterProps) => {\n for (const cmdName in commands) {\n const command = commands[cmdName] as tree.CommandTreeNode\n\n if (tree.guards.command.isSubTree(command)) {\n yargz.command(cmdName, command.description ?? cmdName, (y) => {\n registerYargs(y, command.subcommands, props)\n return y\n })\n continue\n }\n\n const { schema, description, alias } = command\n const aliases = alias ? [cmdName, alias] : [cmdName]\n\n const options = Object.entries(schema)\n let positionals = options.filter(\n (value): value is [string, typings.CommandPositionalOption] => !!value[1].positional\n )\n\n let usage = aliases\n if (positionals.length) {\n positionals = _.sortBy(positionals, ([, option]) => option.idx)\n const positionalArgs = positionals.map(([optName, option]) =>\n option.demandOption ? `<${optName}>` : `[${optName}]`\n )\n const positionalStr = positionalArgs.join(' ')\n usage = aliases.map((optAlias) => `${optAlias} ${positionalStr}`)\n }\n\n yargz.command(\n usage,\n description ?? cmdName,\n (y) => {\n for (const [key, option] of Object.entries(schema)) {\n if (option.positional) {\n y = y.positional(key, option)\n } else {\n y = y.option(key, option)\n }\n }\n return y\n },\n async (argv) => {\n const parsed = parseArguments(schema, argv)\n await command.handler({ ...parsed, ...props })\n }\n )\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAuE;AACvE,oBAAc;AACd,WAAsB;AAUtB,MAAM,iBAAiB,CAAkC,QAAW,SAAuC;AACzG,QAAM,eAAW,6BAAS,QAAQ,IAAI;AACtC,aAAO,kCAAc,QAAQ,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;AACvD;AAEO,MAAM,gBAAgB,CAAC,OAAsB,UAA4B,UAAyB;AACvG,aAAW,WAAW,UAAU;AAC9B,UAAM,UAAU,SAAS;AAEzB,QAAI,KAAK,OAAO,QAAQ,UAAU,OAAO,GAAG;AAC1C,YAAM,QAAQ,SAAS,QAAQ,eAAe,SAAS,CAAC,MAAM;AAC5D,sBAAc,GAAG,QAAQ,aAAa,KAAK;AAC3C,eAAO;AAAA,MACT,CAAC;AACD;AAAA,IACF;AAEA,UAAM,EAAE,QAAQ,aAAa,MAAM,IAAI;AACvC,UAAM,UAAU,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO;AAEnD,UAAM,UAAU,OAAO,QAAQ,MAAM;AACrC,QAAI,cAAc,QAAQ;AAAA,MACxB,CAAC,UAA8D,CAAC,CAAC,MAAM,GAAG;AAAA,IAC5E;AAEA,QAAI,QAAQ;AACZ,QAAI,YAAY,QAAQ;AACtB,oBAAc,cAAAA,QAAE,OAAO,aAAa,CAAC,CAAC,EAAE,MAAM,MAAM,OAAO,GAAG;AAC9D,YAAM,iBAAiB,YAAY;AAAA,QAAI,CAAC,CAAC,SAAS,MAAM,MACtD,OAAO,eAAe,IAAI,aAAa,IAAI;AAAA,MAC7C;AACA,YAAM,gBAAgB,eAAe,KAAK,GAAG;AAC7C,cAAQ,QAAQ,IAAI,CAAC,aAAa,GAAG,YAAY,eAAe;AAAA,IAClE;AAEA,UAAM;AAAA,MACJ;AAAA,MACA,eAAe;AAAA,MACf,CAAC,MAAM;AACL,mBAAW,CAAC,KAAK,MAAM,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,cAAI,OAAO,YAAY;AACrB,gBAAI,EAAE,WAAW,KAAK,MAAM;AAAA,UAC9B,OAAO;AACL,gBAAI,EAAE,OAAO,KAAK,MAAM;AAAA,UAC1B;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,OAAO,SAAS;AACd,cAAM,SAAS,eAAe,QAAQ,IAAI;AAC1C,cAAM,QAAQ,QAAQ,EAAE,GAAG,QAAQ,GAAG,MAAM,CAAC;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": ["_"]
|
|
7
|
+
}
|
package/dist/typings.js
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/typings.ts"],
|
|
4
|
+
"sourcesContent": ["import type yargs from '@bpinternal/yargs-extra'\n// eslint-disable-next-line no-duplicate-imports\nimport type { YargsConfig, YargsSchema } from '@bpinternal/yargs-extra'\nimport type * as utils from './utils'\n\nexport type CommandPositionalOption = yargs.PositionalOptions & { positional: true; idx: number }\nexport type CommandNamedOption = YargsSchema[string] & { positional?: false }\nexport type CommandOption = CommandPositionalOption | CommandNamedOption\nexport type CommandSchema = Record<string, CommandOption>\n\nexport type CommandArgv<C extends CommandDefinition = CommandDefinition> = YargsConfig<C['schema']> & {\n cliRootDir: utils.path.AbsolutePath\n}\n\nexport type CommandDefinition<S extends CommandSchema = CommandSchema> = {\n schema: S\n description?: string\n alias?: string\n}\n\nexport type CommandImplementation<C extends CommandDefinition = CommandDefinition> = (\n argv: CommandArgv<C>\n) => Promise<never>\n\nexport type CommandLeaf<C extends CommandDefinition = CommandDefinition> = C & {\n handler: CommandImplementation<C>\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/cache-utils.ts"],
|
|
4
|
+
"sourcesContent": ["import fs from 'fs'\nimport pathlib from 'path'\n\nexport class FSKeyValueCache<T extends Object> {\n private _initialized = false\n\n constructor(private _filepath: string) {}\n\n public async init(): Promise<void> {\n if (this._initialized) {\n return\n }\n const dirname = pathlib.dirname(this._filepath)\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n if (!fs.existsSync(this._filepath)) {\n await this._writeJSON(this._filepath, {})\n }\n this._initialized = true\n }\n\n public async sync<K extends keyof T>(\n key: K,\n value: T[K] | undefined,\n prompt: (initial?: T[K]) => Promise<T[K]>\n ): Promise<T[K]> {\n await this.init()\n if (value) {\n await this.set(key, value)\n return value\n }\n const data = await this.get(key)\n const newValue = await prompt(data)\n await this.set(key, newValue)\n return newValue\n }\n\n public async has<K extends keyof T>(key: K): Promise<boolean> {\n await this.init()\n const data = await this._readJSON(this._filepath)\n return data[key] !== undefined\n }\n\n public async get<K extends keyof T>(key: K): Promise<T[K] | undefined> {\n await this.init()\n const data: T = await this._readJSON(this._filepath)\n return data[key]\n }\n\n public async set<K extends keyof T>(key: K, value: T[K]): Promise<void> {\n await this.init()\n const data: T = await this._readJSON(this._filepath)\n data[key] = value\n return this._writeJSON(this._filepath, data)\n }\n\n public async rm<K extends keyof T>(key: K): Promise<void> {\n await this.init()\n const data: T = await this._readJSON(this._filepath)\n delete data[key]\n return this._writeJSON(this._filepath, data)\n }\n\n public async clear(): Promise<void> {\n await this.init()\n return this._writeJSON(this._filepath, {})\n }\n\n private _writeJSON = (filepath: string, data: any) => {\n const fileContent = JSON.stringify(data, null, 2)\n return fs.promises.writeFile(filepath, fileContent)\n }\n\n private _readJSON = async (filepath: string) => {\n const fileContent = await fs.promises.readFile(filepath, 'utf8')\n return JSON.parse(fileContent)\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,kBAAoB;AAEb,MAAM,gBAAkC;AAAA,EAG7C,YAAoB,WAAmB;AAAnB;AAAA,EAAoB;AAAA,EAFhC,eAAe;AAAA,EAIvB,MAAa,OAAsB;AACjC,QAAI,KAAK,cAAc;AACrB;AAAA,IACF;AACA,UAAM,UAAU,YAAAA,QAAQ,QAAQ,KAAK,SAAS;AAC9C,QAAI,CAAC,UAAAC,QAAG,WAAW,OAAO,GAAG;AAC3B,YAAM,UAAAA,QAAG,SAAS,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,IACtD;AACA,QAAI,CAAC,UAAAA,QAAG,WAAW,KAAK,SAAS,GAAG;AAClC,YAAM,KAAK,WAAW,KAAK,WAAW,CAAC,CAAC;AAAA,IAC1C;AACA,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAa,KACX,KACA,OACA,QACe;AACf,UAAM,KAAK,KAAK;AAChB,QAAI,OAAO;AACT,YAAM,KAAK,IAAI,KAAK,KAAK;AACzB,aAAO;AAAA,IACT;AACA,UAAM,OAAO,MAAM,KAAK,IAAI,GAAG;AAC/B,UAAM,WAAW,MAAM,OAAO,IAAI;AAClC,UAAM,KAAK,IAAI,KAAK,QAAQ;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,IAAuB,KAA0B;AAC5D,UAAM,KAAK,KAAK;AAChB,UAAM,OAAO,MAAM,KAAK,UAAU,KAAK,SAAS;AAChD,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,MAAa,IAAuB,KAAmC;AACrE,UAAM,KAAK,KAAK;AAChB,UAAM,OAAU,MAAM,KAAK,UAAU,KAAK,SAAS;AACnD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAa,IAAuB,KAAQ,OAA4B;AACtE,UAAM,KAAK,KAAK;AAChB,UAAM,OAAU,MAAM,KAAK,UAAU,KAAK,SAAS;AACnD,SAAK,OAAO;AACZ,WAAO,KAAK,WAAW,KAAK,WAAW,IAAI;AAAA,EAC7C;AAAA,EAEA,MAAa,GAAsB,KAAuB;AACxD,UAAM,KAAK,KAAK;AAChB,UAAM,OAAU,MAAM,KAAK,UAAU,KAAK,SAAS;AACnD,WAAO,KAAK;AACZ,WAAO,KAAK,WAAW,KAAK,WAAW,IAAI;AAAA,EAC7C;AAAA,EAEA,MAAa,QAAuB;AAClC,UAAM,KAAK,KAAK;AAChB,WAAO,KAAK,WAAW,KAAK,WAAW,CAAC,CAAC;AAAA,EAC3C;AAAA,EAEQ,aAAa,CAAC,UAAkB,SAAc;AACpD,UAAM,cAAc,KAAK,UAAU,MAAM,MAAM,CAAC;AAChD,WAAO,UAAAA,QAAG,SAAS,UAAU,UAAU,WAAW;AAAA,EACpD;AAAA,EAEQ,YAAY,OAAO,aAAqB;AAC9C,UAAM,cAAc,MAAM,UAAAA,QAAG,SAAS,SAAS,UAAU,MAAM;AAC/D,WAAO,KAAK,MAAM,WAAW;AAAA,EAC/B;AACF;",
|
|
6
|
+
"names": ["pathlib", "fs"]
|
|
7
|
+
}
|
package/dist/utils/case-utils.js
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/case-utils.ts"],
|
|
4
|
+
"sourcesContent": ["import _ from 'lodash'\n\nconst capitalizeFirstLetter = (text: string) => text.charAt(0).toUpperCase() + text.slice(1).toLowerCase()\n\nconst splitHyphens = (tokens: string[]) => tokens.flatMap((token) => token.split('-'))\nconst splitUnderscores = (tokens: string[]) => tokens.flatMap((token) => token.split('_'))\nconst splitCaseChange = (tokens: string[]) => tokens.flatMap((token) => token.split(/(?<=[a-z])(?=[A-Z])/))\nconst splitTokens = (tokens: string[]) => {\n return [splitHyphens, splitUnderscores, splitCaseChange].reduce((acc, step) => step(acc), tokens)\n}\n\ntype SupportedCase = `${'pascal' | 'kebab' | 'snake' | 'screamingSnake' | 'camel'}Case`\n\nconst fromTokens = {\n pascalCase: (tokens: string[]) => {\n return tokens.map(capitalizeFirstLetter).join('')\n },\n kebabCase: (tokens: string[]) => {\n return tokens.map((token) => token.toLowerCase()).join('-')\n },\n snakeCase: (tokens: string[]) => {\n return tokens.map((token) => token.toLowerCase()).join('_')\n },\n screamingSnakeCase: (tokens: string[]) => {\n return tokens.map((token) => token.toUpperCase()).join('_')\n },\n camelCase: (tokens: string[]) => {\n const [first, ...others] = tokens\n return [first!.toLowerCase(), ...others.map(capitalizeFirstLetter)].join('')\n },\n} as Record<SupportedCase, (tokens: string[]) => string>\n\nexport const to = _.mapValues(fromTokens, (fn) => (text: string) => {\n const tokens = splitTokens([text])\n return fn(tokens)\n}) satisfies Record<SupportedCase, (text: string) => string>\n\nexport const is = _.mapValues(to, (fn) => (text: string) => {\n const result = fn(text)\n return result === text\n}) satisfies Record<SupportedCase, (text: string) => boolean>\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAc;AAEd,MAAM,wBAAwB,CAAC,SAAiB,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,EAAE,YAAY;AAEzG,MAAM,eAAe,CAAC,WAAqB,OAAO,QAAQ,CAAC,UAAU,MAAM,MAAM,GAAG,CAAC;AACrF,MAAM,mBAAmB,CAAC,WAAqB,OAAO,QAAQ,CAAC,UAAU,MAAM,MAAM,GAAG,CAAC;AACzF,MAAM,kBAAkB,CAAC,WAAqB,OAAO,QAAQ,CAAC,UAAU,MAAM,MAAM,qBAAqB,CAAC;AAC1G,MAAM,cAAc,CAAC,WAAqB;AACxC,SAAO,CAAC,cAAc,kBAAkB,eAAe,EAAE,OAAO,CAAC,KAAK,SAAS,KAAK,GAAG,GAAG,MAAM;AAClG;AAIA,MAAM,aAAa;AAAA,EACjB,YAAY,CAAC,WAAqB;AAChC,WAAO,OAAO,IAAI,qBAAqB,EAAE,KAAK,EAAE;AAAA,EAClD;AAAA,EACA,WAAW,CAAC,WAAqB;AAC/B,WAAO,OAAO,IAAI,CAAC,UAAU,MAAM,YAAY,CAAC,EAAE,KAAK,GAAG;AAAA,EAC5D;AAAA,EACA,WAAW,CAAC,WAAqB;AAC/B,WAAO,OAAO,IAAI,CAAC,UAAU,MAAM,YAAY,CAAC,EAAE,KAAK,GAAG;AAAA,EAC5D;AAAA,EACA,oBAAoB,CAAC,WAAqB;AACxC,WAAO,OAAO,IAAI,CAAC,UAAU,MAAM,YAAY,CAAC,EAAE,KAAK,GAAG;AAAA,EAC5D;AAAA,EACA,WAAW,CAAC,WAAqB;AAC/B,UAAM,CAAC,UAAU,MAAM,IAAI;AAC3B,WAAO,CAAC,MAAO,YAAY,GAAG,GAAG,OAAO,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE;AAAA,EAC7E;AACF;AAEO,MAAM,KAAK,cAAAA,QAAE,UAAU,YAAY,CAAC,OAAO,CAAC,SAAiB;AAClE,QAAM,SAAS,YAAY,CAAC,IAAI,CAAC;AACjC,SAAO,GAAG,MAAM;AAClB,CAAC;AAEM,MAAM,KAAK,cAAAA,QAAE,UAAU,IAAI,CAAC,OAAO,CAAC,SAAiB;AAC1D,QAAM,SAAS,GAAG,IAAI;AACtB,SAAO,WAAW;AACpB,CAAC;",
|
|
6
|
+
"names": ["_"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 })\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,EACF,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
|
+
"names": ["esbuild"]
|
|
7
|
+
}
|