BREAKING CHANGE(relative pathing): improved relative pathing

This commit is contained in:
Philipp Kunz 2021-12-01 01:14:07 +01:00
parent 7f3f2da702
commit f20657ff71

View File

@ -3,9 +3,9 @@ import * as fs from './smartfile.fs';
import * as memory from './smartfile.memory'; import * as memory from './smartfile.memory';
export interface ISmartfileConstructorOptions { export interface ISmartfileConstructorOptions {
path?: string; path: string;
contentBuffer?: Buffer; contentBuffer: Buffer;
base?: string; base: string;
} }
/** /**
@ -21,20 +21,26 @@ export class Smartfile extends plugins.smartjson.Smartjson {
* creates a Smartfile from a filePath * creates a Smartfile from a filePath
* @param filePath * @param filePath
*/ */
public static async fromFilePath(filePath: string) { public static async fromFilePath(filePath: string, baseArg: string = process.cwd()) {
filePath = plugins.path.resolve(filePath); filePath = plugins.path.resolve(filePath);
const fileBuffer = fs.toBufferSync(filePath); const fileBuffer = fs.toBufferSync(filePath);
const smartfile = new Smartfile({ const smartfile = new Smartfile({
path: filePath,
contentBuffer: fileBuffer, contentBuffer: fileBuffer,
base: baseArg,
path: plugins.path.relative(baseArg, filePath),
}); });
return smartfile; return smartfile;
} }
public static async fromBuffer(filePath: string, contentBufferArg: Buffer) { public static async fromBuffer(
filePath: string,
contentBufferArg: Buffer,
baseArg: string = process.cwd()
) {
const smartfile = new Smartfile({ const smartfile = new Smartfile({
contentBuffer: contentBufferArg, contentBuffer: contentBufferArg,
path: filePath, base: baseArg,
path: plugins.path.relative(baseArg, filePath),
}); });
return smartfile; return smartfile;
@ -43,11 +49,13 @@ export class Smartfile extends plugins.smartjson.Smartjson {
public static async fromString( public static async fromString(
filePath: string, filePath: string,
contentStringArg: string, contentStringArg: string,
encodingArg: 'utf8' | 'binary' encodingArg: 'utf8' | 'binary',
baseArg = process.cwd()
) { ) {
const smartfile = new Smartfile({ const smartfile = new Smartfile({
contentBuffer: Buffer.from(contentStringArg, encodingArg), contentBuffer: Buffer.from(contentStringArg, encodingArg),
path: filePath, base: baseArg,
path: plugins.path.relative(baseArg, filePath),
}); });
return smartfile; return smartfile;
@ -122,11 +130,12 @@ export class Smartfile extends plugins.smartjson.Smartjson {
* - no argument write to exactly where the file was picked up * - no argument write to exactly where the file was picked up
*/ */
public async write() { public async write() {
await memory.toFs(this.contentBuffer, this.path); await memory.toFs(this.contentBuffer, plugins.path.join(this.base, this.path));
} }
/** /**
* writes the file to path given as argument * writes the file to path given as argument
* note: if the path is not absolute, takes process.cwd() as base
* @param filePathArg * @param filePathArg
*/ */
public async writeToDiskAtPath(filePathArg: string) { public async writeToDiskAtPath(filePathArg: string) {
@ -152,14 +161,14 @@ export class Smartfile extends plugins.smartjson.Smartjson {
* read file from disk * read file from disk
*/ */
public async read() { public async read() {
this.contentBuffer = await fs.toBuffer(this.path); this.contentBuffer = await fs.toBuffer(plugins.path.join(this.base, this.path));
} }
/** /**
* deletes the file from disk at its original location * deletes the file from disk at its original location
*/ */
public async delete() { public async delete() {
await fs.remove(this.path); await fs.remove(plugins.path.join(this.base, this.path));
} }
// ----------------------------------------------- // -----------------------------------------------
@ -186,7 +195,7 @@ export class Smartfile extends plugins.smartjson.Smartjson {
* return relative path of file * return relative path of file
*/ */
public get relative(): string { public get relative(): string {
return plugins.path.relative(this.base, this.path); return this.path;
} }
/** /**