1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-21 04:52:26 -05:00
This commit is contained in:
ZYSzys 2025-01-21 01:38:31 +08:00 committed by GitHub
commit cdb3ff73eb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 88 additions and 2 deletions

View file

@ -5,6 +5,7 @@
import { CallbackWithError } from "ext:deno_node/_fs/_fs_common.ts";
import { FsFile } from "ext:deno_fs/30_fs.js";
import { promisify } from "ext:deno_node/internal/util.mjs";
export function fdatasync(
fd: number,
@ -19,3 +20,7 @@ export function fdatasync(
export function fdatasyncSync(fd: number) {
new FsFile(fd, Symbol.for("Deno.internal.FsFile")).syncDataSync();
}
export const fdatasyncPromise = promisify(fdatasync) as (
fd: number,
) => Promise<void>;

View file

@ -5,6 +5,7 @@
import { CallbackWithError } from "ext:deno_node/_fs/_fs_common.ts";
import { FsFile } from "ext:deno_fs/30_fs.js";
import { promisify } from "ext:deno_node/internal/util.mjs";
export function fsync(
fd: number,
@ -19,3 +20,5 @@ export function fsync(
export function fsyncSync(fd: number) {
new FsFile(fd, Symbol.for("Deno.internal.FsFile")).syncSync();
}
export const fsyncPromise = promisify(fsync) as (fd: number) => Promise<void>;

View file

@ -16,6 +16,8 @@ import {
import { ftruncatePromise } from "ext:deno_node/_fs/_fs_ftruncate.ts";
export type { BigIntStats, Stats } from "ext:deno_node/_fs/_fs_stat.ts";
import { writevPromise, WriteVResult } from "ext:deno_node/_fs/_fs_writev.ts";
import { fdatasyncPromise } from "ext:deno_node/_fs/_fs_fdatasync.ts";
import { fsyncPromise } from "ext:deno_node/_fs/_fs_fsync.ts";
interface WriteResult {
bytesWritten: number;
@ -158,6 +160,14 @@ export class FileHandle extends EventEmitter {
return promises.chmod(this.#path, mode);
}
datasync(): Promise<void> {
return fsCall(fdatasyncPromise, this);
}
sync(): Promise<void> {
return fsCall(fsyncPromise, this);
}
utimes(
atime: number | string | Date,
mtime: number | string | Date,

View file

@ -2,6 +2,7 @@
"ignore": {
"common": ["index.js", "internet.js"],
"fixtures": [
"baz.js",
"child-process-spawn-node.js",
"echo.js",
"elipses.txt",
@ -480,6 +481,7 @@
"test-fs-opendir.js",
"test-fs-promises-exists.js",
"test-fs-promises-file-handle-stat.js",
"test-fs-promises-file-handle-sync.js",
"test-fs-promises-file-handle-write.js",
"test-fs-promises-readfile-empty.js",
"test-fs-promises-readfile-with-fd.js",

View file

@ -1,7 +1,7 @@
<!-- deno-fmt-ignore-file -->
# Remaining Node Tests
1152 tests out of 3681 have been ported from Node 20.11.1 (31.30% ported, 69.22% remaining).
1154 tests out of 3681 have been ported from Node 20.11.1 (31.35% ported, 69.19% remaining).
NOTE: This file should not be manually edited. Please edit `tests/node_compat/config.json` and run `deno task setup` in `tests/node_compat/runner` dir instead.
@ -673,7 +673,6 @@ NOTE: This file should not be manually edited. Please edit `tests/node_compat/co
- [parallel/test-fs-promises-file-handle-read.js](https://github.com/nodejs/node/tree/v20.11.1/test/parallel/test-fs-promises-file-handle-read.js)
- [parallel/test-fs-promises-file-handle-readFile.js](https://github.com/nodejs/node/tree/v20.11.1/test/parallel/test-fs-promises-file-handle-readFile.js)
- [parallel/test-fs-promises-file-handle-stream.js](https://github.com/nodejs/node/tree/v20.11.1/test/parallel/test-fs-promises-file-handle-stream.js)
- [parallel/test-fs-promises-file-handle-sync.js](https://github.com/nodejs/node/tree/v20.11.1/test/parallel/test-fs-promises-file-handle-sync.js)
- [parallel/test-fs-promises-file-handle-truncate.js](https://github.com/nodejs/node/tree/v20.11.1/test/parallel/test-fs-promises-file-handle-truncate.js)
- [parallel/test-fs-promises-file-handle-writeFile.js](https://github.com/nodejs/node/tree/v20.11.1/test/parallel/test-fs-promises-file-handle-writeFile.js)
- [parallel/test-fs-promises-readfile.js](https://github.com/nodejs/node/tree/v20.11.1/test/parallel/test-fs-promises-readfile.js)

View file

@ -0,0 +1,8 @@
// deno-fmt-ignore-file
// deno-lint-ignore-file
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
// Taken from Node 20.11.1
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
module.exports = 'perhaps I work';

View file

@ -0,0 +1,42 @@
// deno-fmt-ignore-file
// deno-lint-ignore-file
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
// Taken from Node 20.11.1
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
'use strict';
require('../common');
const assert = require('assert');
const fixtures = require('../common/fixtures');
const tmpdir = require('../common/tmpdir');
const { access, copyFile, open } = require('fs').promises;
async function validate() {
tmpdir.refresh();
const dest = tmpdir.resolve('baz.js');
await assert.rejects(
copyFile(fixtures.path('baz.js'), dest, 'r'),
{
code: 'ERR_INVALID_ARG_TYPE',
}
);
await copyFile(fixtures.path('baz.js'), dest);
await assert.rejects(
access(dest, 'r'),
{ code: 'ERR_INVALID_ARG_TYPE', message: /mode/ }
);
await access(dest);
const handle = await open(dest, 'r+');
await handle.datasync();
await handle.sync();
const buf = Buffer.from('hello world');
await handle.write(buf);
const ret = await handle.read(Buffer.alloc(11), 0, 11, 0);
assert.strictEqual(ret.bytesRead, 11);
assert.deepStrictEqual(ret.buffer, buf);
await handle.close();
}
validate();

View file

@ -300,3 +300,20 @@ Deno.test({
await fileHandle.close();
},
});
Deno.test({
name:
"[node/fs filehandle.sync] Request that all data for the open file descriptor is flushed to the storage device",
async fn() {
const fileHandle = await fs.open(testData, "r+");
await fileHandle.datasync();
await fileHandle.sync();
const buf = Buffer.from("hello world");
await fileHandle.write(buf);
const ret = await fileHandle.read(Buffer.alloc(11), 0, 11, 0);
assertEquals(ret.bytesRead, 11);
assertEquals(ret.buffer, buf);
await fileHandle.close();
},
});