From 741474e5138f194053402a1e07a9f8ee5a27a1d8 Mon Sep 17 00:00:00 2001 From: Jannis R Date: Fri, 2 Dec 2022 20:41:59 +0100 Subject: [PATCH] build subpackages with a script --- .gitignore | 7 +++++ build-packages.js | 70 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100755 build-packages.js diff --git a/.gitignore b/.gitignore index 4648afb..7383a08 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,11 @@ download-binaries/* bin/* +# copied from the root directory +/packages/*/LICENSE +/packages/*/index.js +/packages/*/install.js +# generated by build scripts +/packages/*/package.json +# not relevant /packages/*/package-lock.json diff --git a/build-packages.js b/build-packages.js new file mode 100755 index 0000000..38a03f9 --- /dev/null +++ b/build-packages.js @@ -0,0 +1,70 @@ +#!/usr/bin/env node + +const {join: pathJoin} = require('path') +const {cpSync, writeFileSync} = require('fs') +const basePkg = require('./package.json') + +const PACKAGES = [ + 'ffmpeg-static', + 'ffprobe-static', +] + +const copyFileIntoPackage = (pkgName, filename) => { + const src = pathJoin(__dirname, filename) + const dest = pathJoin(__dirname, 'packages', pkgName, filename) + cpSync(src, dest, { + dereference: true, // dereference symlinks + preserveTimestamps: true, + }) +} + +const generatePackageJsonForPackages = (pkgName) => { + const tplPath = pathJoin(__dirname, 'packages', pkgName, 'package.template.json') + const tpl = require(tplPath) + + const packageJson = { + ...basePkg, + + // remove fields + private: undefined, + workspaces: undefined, + ...Object.fromEntries( + PACKAGES + // remove own entry + .filter(_pkgName => _pkgName !== pkgName) + // remove others by setting `undefined` as value + .map(_pkgName => [_pkgName, undefined]) + ), + + main: 'index.js', + files: [ + 'index.js', + 'install.js', + 'example.js', + 'types', + ], + types: 'types/index.d.ts', + scripts: { + install: 'node install.js', + prepublishOnly: 'npm run install', + }, + devDependencies: { + ...basePkg.devDependencies, + eslint: undefined, // remove field + }, + + ...tpl, + } + + const dest = pathJoin(__dirname, 'packages', pkgName, 'package.json') + writeFileSync(dest, JSON.stringify(packageJson, null, '\t')) +} + +for (const pkgName of PACKAGES) { + copyFileIntoPackage(pkgName, 'LICENSE') + copyFileIntoPackage(pkgName, 'index.js') + copyFileIntoPackage(pkgName, 'install.js') + generatePackageJsonForPackages(pkgName) + + console.info(pkgName, '✔︎') +} diff --git a/package.json b/package.json index c4867b7..ce1d2de 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "scripts": { "test": "node test.js", "lint": "eslint .", - "prepublishOnly": "npm run lint && npm install --workspaces && npm test" + "build": "./build-packages.js", + "prepublishOnly": "npm run lint && npm run build && npm install --workspaces && npm test" }, "ffmpeg-static": { "binary-path-env-var": "FFMPEG_BIN",