Skip to content

Commit

Permalink
feat: 🎸 add fstatSync() method
Browse files Browse the repository at this point in the history
  • Loading branch information
streamich committed Jun 18, 2023
1 parent 646efaf commit 6b1597a
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 24 deletions.
32 changes: 23 additions & 9 deletions src/fsa-to-node/FsaNodeFs.ts
Expand Up @@ -773,31 +773,46 @@ export class FsaNodeFs extends FsaNodeCore implements FsCallbackApi, FsSynchrono

public readonly lstatSync: FsSynchronousApi['lstatSync'] = this.statSync;

public readonly accessSync: FsSynchronousApi['accessSync'] = (path: misc.PathLike, mode: number = AMODE.F_OK): void => {
public readonly fstatSync: FsSynchronousApi['fstatSync'] = (fd: number, options?: opts.IFStatOptions) => {
const filename = this.getFileName(fd);
return this.statSync(filename, options as any) as any;
};

public readonly accessSync: FsSynchronousApi['accessSync'] = (
path: misc.PathLike,
mode: number = AMODE.F_OK,
): void => {
const filename = pathToFilename(path);
mode = mode | 0;
const adapter = this.getSyncAdapter();
adapter.call('access', {filename, mode});
adapter.call('access', { filename, mode });
};

public readonly readFileSync: FsSynchronousApi['readFileSync'] = (id: misc.TFileId, options?: opts.IReadFileOptions | string): misc.TDataOut => {
public readonly readFileSync: FsSynchronousApi['readFileSync'] = (
id: misc.TFileId,
options?: opts.IReadFileOptions | string,
): misc.TDataOut => {
const opts = getReadFileOptions(options);
const flagsNum = flagsToNumber(opts.flag);
const filename = this.getFileName(id);
const adapter = this.getSyncAdapter();
const uint8 = adapter.call('readFile', {filename, opts});
const uint8 = adapter.call('readFile', { filename, opts });
const buffer = Buffer.from(uint8.buffer, uint8.byteOffset, uint8.byteLength);
return bufferToEncoding(buffer, opts.encoding);
};

public readonly writeFileSync: FsSynchronousApi['writeFileSync'] = (id: misc.TFileId, data: misc.TData, options?: opts.IWriteFileOptions): void => {
public readonly writeFileSync: FsSynchronousApi['writeFileSync'] = (
id: misc.TFileId,
data: misc.TData,
options?: opts.IWriteFileOptions,
): void => {
const opts = getWriteFileOptions(options);
const flagsNum = flagsToNumber(opts.flag);
const modeNum = modeToNumber(opts.mode);
const buf = dataToBuffer(data, opts.encoding);
const filename = this.getFileName(id);
const adapter = this.getSyncAdapter();
adapter.call('writeFile', {filename, data: bufToUint8(buf), opts});
adapter.call('writeFile', { filename, data: bufToUint8(buf), opts });
};

public readonly closeSync: FsSynchronousApi['closeSync'] = (fd: number) => {
Expand All @@ -811,7 +826,6 @@ export class FsaNodeFs extends FsaNodeCore implements FsCallbackApi, FsSynchrono
public readonly appendFileSync: FsSynchronousApi['appendFileSync'] = notSupported;
public readonly copyFileSync: FsSynchronousApi['copyFileSync'] = notSupported;
public readonly existsSync: FsSynchronousApi['existsSync'] = notSupported;
public readonly fstatSync: FsSynchronousApi['fstatSync'] = notSupported;
public readonly ftruncateSync: FsSynchronousApi['ftruncateSync'] = notSupported;
public readonly linkSync: FsSynchronousApi['linkSync'] = notSupported;
public readonly mkdirSync: FsSynchronousApi['mkdirSync'] = notSupported;
Expand All @@ -829,13 +843,13 @@ export class FsaNodeFs extends FsaNodeCore implements FsCallbackApi, FsSynchrono
public readonly truncateSync: FsSynchronousApi['truncateSync'] = notSupported;
public readonly unlinkSync: FsSynchronousApi['unlinkSync'] = notSupported;
public readonly writeSync: FsSynchronousApi['writeSync'] = notSupported;

public readonly fsyncSync: FsSynchronousApi['fsyncSync'] = noop;

public readonly chmodSync: FsSynchronousApi['chmodSync'] = noop;
public readonly chownSync: FsSynchronousApi['chownSync'] = noop;
public readonly fchmodSync: FsSynchronousApi['fchmodSync'] = noop;
public readonly fchownSync: FsSynchronousApi['fchownSync'] = noop;
public readonly fdatasyncSync: FsSynchronousApi['fdatasyncSync'] = noop;
public readonly fsyncSync: FsSynchronousApi['fsyncSync'] = noop;
public readonly futimesSync: FsSynchronousApi['futimesSync'] = noop;
public readonly lchmodSync: FsSynchronousApi['lchmodSync'] = noop;
public readonly lchownSync: FsSynchronousApi['lchownSync'] = noop;
Expand Down
4 changes: 2 additions & 2 deletions src/fsa-to-node/json.ts
@@ -1,5 +1,5 @@
import {CborEncoder} from 'json-joy/es6/json-pack/cbor/CborEncoder';
import {CborDecoder} from 'json-joy/es6/json-pack/cbor/CborDecoder';
import { CborEncoder } from 'json-joy/es6/json-pack/cbor/CborEncoder';
import { CborDecoder } from 'json-joy/es6/json-pack/cbor/CborDecoder';

export const encoder = new CborEncoder();
export const decoder = new CborDecoder();
6 changes: 3 additions & 3 deletions src/fsa-to-node/types.ts
Expand Up @@ -7,9 +7,9 @@ export type FsLocation = [folder: string[], file: string];
*/
export interface FsaNodeSyncAdapterApi {
stat(location: FsLocation): FsaNodeSyncAdapterStats;
access(req: {filename: string, mode: number}): void;
readFile(req: {filename: string, opts?: opts.IReadFileOptions}): Uint8Array;
writeFile(req: {filename: string, data: Uint8Array, opts?: opts.IWriteFileOptions}): void;
access(req: { filename: string; mode: number }): void;
readFile(req: { filename: string; opts?: opts.IReadFileOptions }): Uint8Array;
writeFile(req: { filename: string; data: Uint8Array; opts?: opts.IWriteFileOptions }): void;
}

export interface FsaNodeSyncAdapter {
Expand Down
2 changes: 1 addition & 1 deletion src/fsa-to-node/worker/FsaNodeSyncAdapterWorker.ts
@@ -1,7 +1,7 @@
import { Defer } from 'thingies/es6/Defer';
import { FsaNodeWorkerMessageCode } from './constants';
import { SyncMessenger } from './SyncMessenger';
import {decoder, encoder} from '../json';
import { decoder, encoder } from '../json';
import type * as fsa from '../../fsa/types';
import type { FsaNodeSyncAdapter, FsaNodeSyncAdapterApi } from '../types';
import type {
Expand Down
14 changes: 7 additions & 7 deletions src/fsa-to-node/worker/FsaNodeSyncWorker.ts
@@ -1,7 +1,7 @@
import { AsyncCallback, SyncMessenger } from './SyncMessenger';
import { FsaNodeWorkerMessageCode } from './constants';
import {FsaNodeFs} from '../FsaNodeFs';
import {decoder, encoder} from '../json';
import { FsaNodeFs } from '../FsaNodeFs';
import { decoder, encoder } from '../json';
import type * as fsa from '../../fsa/types';
import type {
FsaNodeWorkerError,
Expand Down Expand Up @@ -121,16 +121,16 @@ export class FsaNodeSyncWorker {
kind: handle.kind,
};
},
access: async ({filename, mode}): Promise<void> => {
access: async ({ filename, mode }): Promise<void> => {
await this.fs.promises.access(filename, mode);
},
readFile: async ({filename, opts}): Promise<Uint8Array> => {
const buf = await this.fs.promises.readFile(filename, {...opts, encoding: 'buffer'}) as Buffer;
readFile: async ({ filename, opts }): Promise<Uint8Array> => {
const buf = (await this.fs.promises.readFile(filename, { ...opts, encoding: 'buffer' })) as Buffer;
const uint8 = new Uint8Array(buf, buf.byteOffset, buf.byteLength);
return uint8;
},
writeFile: async ({filename, data, opts}): Promise<void> => {
await this.fs.promises.writeFile(filename, data, {...opts, encoding: 'buffer'});
writeFile: async ({ filename, data, opts }): Promise<void> => {
await this.fs.promises.writeFile(filename, data, { ...opts, encoding: 'buffer' });
},
};
}
3 changes: 1 addition & 2 deletions src/node/util.ts
Expand Up @@ -177,8 +177,7 @@ export function dataToBuffer(data: misc.TData, encoding: string = ENCODING_UTF8)
else return bufferFrom(String(data), encoding);
}

export const bufToUint8 = (buf: Buffer): Uint8Array =>
new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
export const bufToUint8 = (buf: Buffer): Uint8Array => new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);

export const getWriteArgs = (
fd: number,
Expand Down

0 comments on commit 6b1597a

Please sign in to comment.