diff --git a/lib/publish.js b/lib/publish.js index a2bd0bf..146f785 100644 --- a/lib/publish.js +++ b/lib/publish.js @@ -26,6 +26,7 @@ const await_to_js_1 = require("await-to-js"); const crypto_1 = require("crypto"); const promises_1 = __importDefault(require("fs/promises")); const path = __importStar(require("path")); +const os = __importStar(require("os")); const xml2js_1 = require("xml2js"); var PublishStep; (function (PublishStep) { @@ -36,6 +37,12 @@ var PublishStep; PublishStep[PublishStep["Index"] = 4] = "Index"; PublishStep[PublishStep["Registry"] = 5] = "Registry"; })(PublishStep || (PublishStep = {})); +//* Write a string to a file, creating the directory if it doesn't exist +const writeFile = async (file, data) => { + const output = typeof data === "string" ? data : JSON.stringify(data, null, 2); + await promises_1.default.mkdir(path.dirname(file), { recursive: true }); + await promises_1.default.writeFile(file, output + os.EOL, "utf8"); +}; async function publish(src, dest) { let step = PublishStep.Init; try { @@ -128,8 +135,7 @@ async function publish(src, dest) { version.path = path.basename(version.path); // Write typing file to out directory const output = path.join(dest, path.basename(key)); - await promises_1.default.mkdir(output, { recursive: true }); - await promises_1.default.writeFile(path.join(output, version.path), data); + await writeFile(path.join(output, version.path), data); } } //* Generate an index.json for each module @@ -137,8 +143,7 @@ async function publish(src, dest) { //* ------------------------------------------------------------ for (const key of Object.keys(modules)) { const lib = modules[key]; - await promises_1.default.mkdir(path.join(dest, path.basename(key)), { recursive: true }); - await promises_1.default.writeFile(path.join(dest, path.basename(key), "index.json"), JSON.stringify(lib, null, 2)); + await writeFile(path.join(dest, path.basename(key), "index.json"), lib); } //* Generate a package registry index.json for each module step = PublishStep.Registry; @@ -151,7 +156,7 @@ async function publish(src, dest) { url: lib.url, }; } - await promises_1.default.writeFile(path.join(dest, "index.json"), JSON.stringify(registry, null, 2)); + await writeFile(path.join(dest, "index.json"), registry); } catch (e) { console.error(`${PublishStep[step]}:`, e.message); diff --git a/lib/publish.js.map b/lib/publish.js.map index 92bd3e2..099df48 100644 --- a/lib/publish.js.map +++ b/lib/publish.js.map @@ -1 +1 @@ -{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/publish.ts b/src/publish.ts index 2e40e50..1b782b3 100644 --- a/src/publish.ts +++ b/src/publish.ts @@ -2,6 +2,7 @@ import { to } from "await-to-js"; import { createHash } from "crypto"; import fs from "fs/promises"; import * as path from "path"; +import * as os from "os"; import { parseStringPromise } from "xml2js"; export interface Library { @@ -30,6 +31,13 @@ enum PublishStep { Registry, } +//* Write a string to a file, creating the directory if it doesn't exist +const writeFile = async (file: string, data: string|object) => { + const output = typeof data === "string" ? data : JSON.stringify(data, null, 2); + await fs.mkdir(path.dirname(file), { recursive: true }); + await fs.writeFile(file, output + os.EOL, "utf8"); +} + export default async function publish(src: string, dest: string) { let step = PublishStep.Init; try { @@ -41,7 +49,7 @@ export default async function publish(src: string, dest: string) { for await (const d of await fs.opendir(src)) { if (d.isDirectory()) packages.push( path.join(src, d.name) ); } - + //* Collect library metadata step = PublishStep.Libraries; //* ------------------------------------------------------------ @@ -51,7 +59,7 @@ export default async function publish(src: string, dest: string) { //* Parse and verify library.json const [err, libFile] = await to(fs.readFile(path.join(m, "library.json"))); if (err || !libFile) throw new Error('Missing library.json'); - + const lib = JSON.parse(libFile.toString()) as Library; if (!lib.name) throw new Error('Missing library name'); if (!lib.url) throw new Error('Missing library url'); @@ -82,7 +90,7 @@ export default async function publish(src: string, dest: string) { if (library.$ && library.$["version"] && library.$["src"]) { var shasum = createHash('sha1'); shasum.update(library.$["src"]) - + modules[key].versions.push({ version: library.$["version"], url: library.$["src"], @@ -140,8 +148,7 @@ export default async function publish(src: string, dest: string) { // Write typing file to out directory const output = path.join(dest, path.basename(key)); - await fs.mkdir(output, { recursive: true }); - await fs.writeFile(path.join(output, version.path), data); + await writeFile(path.join(output, version.path), data); } } @@ -150,8 +157,7 @@ export default async function publish(src: string, dest: string) { //* ------------------------------------------------------------ for (const key of Object.keys(modules)) { const lib = modules[key]; - await fs.mkdir(path.join(dest, path.basename(key)), { recursive: true }); - await fs.writeFile(path.join(dest, path.basename(key), "index.json"), JSON.stringify(lib, null, 2)); + await writeFile(path.join(dest, path.basename(key), "index.json"), lib); } //* Generate a package registry index.json for each module @@ -165,10 +171,10 @@ export default async function publish(src: string, dest: string) { url: lib.url!, } } - await fs.writeFile(path.join(dest, "index.json"), JSON.stringify(registry, null, 2)); + await writeFile(path.join(dest, "index.json"), registry); } catch (e) { console.error(`${PublishStep[step]}:`, (e as Error).message); process.exit(1); } -} \ No newline at end of file +}