diff --git a/desktop/pkg/README.md b/desktop/pkg/README.md index 883e0c900..9ff8c1bed 100644 --- a/desktop/pkg/README.md +++ b/desktop/pkg/README.md @@ -24,8 +24,26 @@ USAGE # Commands +* [`flipper-pkg bundle [DIRECTORY]`](#flipper-pkg-bundle-directory) * [`flipper-pkg help [COMMAND]`](#flipper-pkg-help-command) -* [`flipper-pkg pack DIRECTORY`](#flipper-pkg-pack-directory) +* [`flipper-pkg pack [DIRECTORY]`](#flipper-pkg-pack-directory) + +## `flipper-pkg bundle [DIRECTORY]` + +transpiles and bundles plugin + +``` +USAGE + $ flipper-pkg bundle [DIRECTORY] + +ARGUMENTS + DIRECTORY [default: .] Path to plugin package directory for bundling. Defaults to the current working directory. + +EXAMPLE + $ flipper-pkg bundle optional/path/to/directory +``` + +_See code: [src/commands/bundle.ts](https://github.com/facebook/flipper/blob/v0.37.0/src/commands/bundle.ts)_ ## `flipper-pkg help [COMMAND]` @@ -44,16 +62,20 @@ OPTIONS _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v2.2.3/src/commands/help.ts)_ -## `flipper-pkg pack DIRECTORY` +## `flipper-pkg pack [DIRECTORY]` packs a plugin folder into a distributable archive ``` USAGE - $ flipper-pkg pack DIRECTORY + $ flipper-pkg pack [DIRECTORY] + +ARGUMENTS + DIRECTORY [default: .] Path to plugin package directory to pack. Defaults to the current working directory. OPTIONS - -o, --output=output [default: .] Where to output the package, file or directory. Defaults to '.'. + -o, --output=output [default: .] Where to output the package, file or directory. Defaults to the current working + directory. EXAMPLE $ flipper-pkg pack path/to/plugin diff --git a/desktop/pkg/src/commands/bundle.ts b/desktop/pkg/src/commands/bundle.ts new file mode 100644 index 000000000..e61b94e28 --- /dev/null +++ b/desktop/pkg/src/commands/bundle.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import {Command} from '@oclif/command'; +import {args} from '@oclif/parser'; +import fs from 'fs-extra'; +import path from 'path'; +import {runBuild, getPluginDetails} from 'flipper-pkg-lib'; + +export default class Bundle extends Command { + public static description = 'transpiles and bundles plugin'; + + public static examples = [`$ flipper-pkg bundle optional/path/to/directory`]; + + public static args: args.IArg[] = [ + { + name: 'directory', + required: false, + default: '.', + description: + 'Path to plugin package directory for bundling. Defaults to the current working directory.', + }, + ]; + + public async run() { + const {args} = this.parse(Bundle); + const inputDirectory: string = path.resolve(process.cwd(), args.directory); + const stat = await fs.lstat(inputDirectory); + if (!stat.isDirectory()) { + this.error(`Plugin source ${inputDirectory} is not a directory.`); + } + const packageJsonPath = path.join(inputDirectory, 'package.json'); + if (!(await fs.pathExists(packageJsonPath))) { + this.error( + `package.json is not found in plugin source directory ${inputDirectory}.`, + ); + } + const plugin = await getPluginDetails(inputDirectory); + const out = path.resolve(inputDirectory, plugin.main); + await fs.ensureDir(path.dirname(out)); + await runBuild(inputDirectory, plugin.source, out); + } +} diff --git a/desktop/pkg/src/commands/pack.ts b/desktop/pkg/src/commands/pack.ts index 514e21175..77d15ff7c 100644 --- a/desktop/pkg/src/commands/pack.ts +++ b/desktop/pkg/src/commands/pack.ts @@ -8,6 +8,7 @@ */ import {Command, flags} from '@oclif/command'; +import {args} from '@oclif/parser'; import {promises as fs} from 'fs'; import {mkdirp, pathExists, readJSON, ensureDir} from 'fs-extra'; import * as inquirer from 'inquirer'; @@ -32,11 +33,19 @@ export default class Pack extends Command { char: 'o', default: '.', description: - "Where to output the package, file or directory. Defaults to '.'.", + 'Where to output the package, file or directory. Defaults to the current working directory.', }), }; - public static args = [{name: 'directory', required: true}]; + public static args: args.IArg[] = [ + { + name: 'directory', + required: false, + default: '.', + description: + 'Path to plugin package directory to pack. Defaults to the current working directory.', + }, + ]; public async run() { const {args, flags: parsedFlags} = this.parse(Pack);