Skip to content
This repository has been archived by the owner on Feb 5, 2023. It is now read-only.

Commit

Permalink
feat: Add publish-flat-copy
Browse files Browse the repository at this point in the history
  • Loading branch information
ffflorian committed Jun 22, 2019
1 parent cd5b9e7 commit f76704f
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 5 deletions.
7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"author": "Florian Keller <github@floriankeller.de>",
"bin": {
"publish-flat": "dist/cli.js"
"publish-flat": "dist/cli.js",
"publish-flat-copy": "dist/cli-copy.js"
},
"dependencies": {
"@expo/spawn-async": "1.5.0",
Expand All @@ -19,6 +20,7 @@
"@semantic-release/changelog": "3.0.4",
"@semantic-release/git": "7.0.12",
"@semantic-release/npm": "5.1.9",
"@types/commander-remaining-args": "1.2.0",
"@types/fs-extra": "7.0.0",
"@types/node": "~12",
"@types/npm-packlist": "1.1.1",
Expand Down Expand Up @@ -75,9 +77,10 @@
"lint:ts": "tslint --project tsconfig.json",
"flatten": "yarn start -o flattened",
"prettier": "prettier \"*.{json,md}\"",
"postversion": "ts-node src/cli-copy.ts version",
"release": "semantic-release",
"start": "ts-node src/cli.ts",
"test": "exit 0"
},
"version": "1.1.2"
"version": "1.1.3"
}
35 changes: 35 additions & 0 deletions src/cli-copy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/usr/bin/env node

import * as program from 'commander';
import * as fs from 'fs-extra';
import * as path from 'path';

import {copyJson} from './copyJson';

const defaultPackageJsonPath = path.join(__dirname, 'package.json');
const packageJsonPath = fs.existsSync(defaultPackageJsonPath)
? defaultPackageJsonPath
: path.join(__dirname, '../package.json');

const {bin, version} = fs.readJSONSync(packageJsonPath);
const name = Object.keys(bin)[1];

program
.name(name)
.version(version)
.description(`Copy entries from one JSON file to the other (example: ${name} version)`)
.option('-i, --input <file>', 'Set the input JSON file', './flattened/package.json')
.option('-o, --output <file>', 'Set the output JSON file', './package.json')
.parse(process.argv);

const values = program.args;

if (!values.length) {
console.error('No values to copy');
program.help();
}

copyJson(program.input, program.output, values).catch(error => {
console.error(error);
process.exit(1);
});
3 changes: 1 addition & 2 deletions src/cli.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
#!/usr/bin/env node

import * as program from 'commander';
import getRemainingArgs = require('commander-remaining-args');
import * as fs from 'fs-extra';
import * as path from 'path';

import {PublishFlat} from './PublishFlat';

const getRemainingArgs = require('commander-remaining-args');

const defaultPackageJsonPath = path.join(__dirname, 'package.json');
const packageJsonPath = fs.existsSync(defaultPackageJsonPath)
? defaultPackageJsonPath
Expand Down
51 changes: 51 additions & 0 deletions src/copyJson.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import * as fs from 'fs-extra';
import * as path from 'path';

async function checkFile(filePath: string): Promise<void> {
try {
await fs.access(filePath, fs.constants.F_OK | fs.constants.R_OK);
} catch (error) {
throw new Error(`Input file "${filePath} doesn't exist or is not readable.`);
}
}

export interface packageJson {
[key: string]: string | packageJson;
}

export async function copyJson(inputFile: string, outputFile: string, values: string[]): Promise<void> {
if (!values.length) {
return;
}

const inputResolved = path.resolve(inputFile);
const outputResolved = path.resolve(outputFile);

await checkFile(inputResolved);
await fs.ensureFile(outputResolved);

const originalJSON: packageJson = await fs.readJSON(inputResolved);
let newJSONRaw = await fs.readFile(outputResolved, 'utf-8');

let spaces = 2;

if (!newJSONRaw) {
console.log('no content');
newJSONRaw = '{}';
} else if (/^\{/.test(newJSONRaw)) {
const spacesMatch = newJSONRaw.match(/^\{[\n\r]?( *)/);
if (spacesMatch && spacesMatch[1]) {
spaces = spacesMatch[1].length;
}
}

const newJSON: packageJson = JSON.parse(newJSONRaw);

for (const value of values) {
if (value in originalJSON) {
newJSON[value] = originalJSON[value];
}
}

await fs.writeJSON(outputResolved, newJSON, {spaces});
}
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './PublishFlat';
export * from './copyJson';
10 changes: 9 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,14 @@
into-stream "^4.0.0"
lodash "^4.17.4"

"@types/commander-remaining-args@1.2.0":
version "1.2.0"
resolved "https://registry.npmjs.org/@types/commander-remaining-args/-/commander-remaining-args-1.2.0.tgz#edb08eb4f4117b2a0b82f6ed9c1986ed52173d3f"
integrity sha512-Inmxq4BV5+rwm1QpgKpoCZyZXpHphRMaeiYSndTRy9KmpabrbRYWt+oBQfe79FZihPJoNLBTIMLgaJT60dCNoQ==
dependencies:
"@types/node" "*"
commander "^2.20.0"

"@types/events@*":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
Expand Down Expand Up @@ -930,7 +938,7 @@ commander-remaining-args@1.2.0:
resolved "https://registry.yarnpkg.com/commander-remaining-args/-/commander-remaining-args-1.2.0.tgz#6fab4cce4a59db1698121f59105364adcb0b4c68"
integrity sha512-yH0yRUtHhJ/389HWgQlEMAwqKXMZr/JJH4xqDIzXCisNy2mS6YSAe3WncgjxZvhLJqZPxJn8MivRK+B0lSNXPw==

commander@2.20.0, commander@^2.12.1, commander@^2.14.1, commander@^2.9.0, commander@~2.20.0:
commander@2.20.0, commander@^2.12.1, commander@^2.14.1, commander@^2.20.0, commander@^2.9.0, commander@~2.20.0:
version "2.20.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
Expand Down

0 comments on commit f76704f

Please sign in to comment.