added doga

This commit is contained in:
szabomarton
2025-02-25 09:55:29 +01:00
parent 5174ab4cc4
commit 13254e5623
1149 changed files with 80161 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
/// <reference types="node" resolution-mode="require"/>
import { PathLike } from 'fs';
import { Adapter, SyncAdapter } from '../../core/Low.js';
export declare class DataFile<T> implements Adapter<T> {
#private;
constructor(filename: PathLike, { parse, stringify, }: {
parse: (str: string) => T;
stringify: (data: T) => string;
});
read(): Promise<T | null>;
write(obj: T): Promise<void>;
}
export declare class DataFileSync<T> implements SyncAdapter<T> {
#private;
constructor(filename: PathLike, { parse, stringify, }: {
parse: (str: string) => T;
stringify: (data: T) => string;
});
read(): T | null;
write(obj: T): void;
}

View File

@@ -0,0 +1,45 @@
import { TextFile, TextFileSync } from './TextFile.js';
export class DataFile {
#adapter;
#parse;
#stringify;
constructor(filename, { parse, stringify, }) {
this.#adapter = new TextFile(filename);
this.#parse = parse;
this.#stringify = stringify;
}
async read() {
const data = await this.#adapter.read();
if (data === null) {
return null;
}
else {
return this.#parse(data);
}
}
write(obj) {
return this.#adapter.write(this.#stringify(obj));
}
}
export class DataFileSync {
#adapter;
#parse;
#stringify;
constructor(filename, { parse, stringify, }) {
this.#adapter = new TextFileSync(filename);
this.#parse = parse;
this.#stringify = stringify;
}
read() {
const data = this.#adapter.read();
if (data === null) {
return null;
}
else {
return this.#parse(data);
}
}
write(obj) {
this.#adapter.write(this.#stringify(obj));
}
}

View File

@@ -0,0 +1,9 @@
/// <reference types="node" resolution-mode="require"/>
import { PathLike } from 'fs';
import { DataFile, DataFileSync } from './DataFile.js';
export declare class JSONFile<T> extends DataFile<T> {
constructor(filename: PathLike);
}
export declare class JSONFileSync<T> extends DataFileSync<T> {
constructor(filename: PathLike);
}

View File

@@ -0,0 +1,17 @@
import { DataFile, DataFileSync } from './DataFile.js';
export class JSONFile extends DataFile {
constructor(filename) {
super(filename, {
parse: JSON.parse,
stringify: (data) => JSON.stringify(data, null, 2),
});
}
}
export class JSONFileSync extends DataFileSync {
constructor(filename) {
super(filename, {
parse: JSON.parse,
stringify: (data) => JSON.stringify(data, null, 2),
});
}
}

View File

@@ -0,0 +1,15 @@
/// <reference types="node" resolution-mode="require"/>
import { PathLike } from 'node:fs';
import { Adapter, SyncAdapter } from '../../core/Low.js';
export declare class TextFile implements Adapter<string> {
#private;
constructor(filename: PathLike);
read(): Promise<string | null>;
write(str: string): Promise<void>;
}
export declare class TextFileSync implements SyncAdapter<string> {
#private;
constructor(filename: PathLike);
read(): string | null;
write(str: string): void;
}

View File

@@ -0,0 +1,54 @@
import { readFileSync, renameSync, writeFileSync } from 'node:fs';
import { readFile } from 'node:fs/promises';
import path from 'node:path';
import { Writer } from 'steno';
export class TextFile {
#filename;
#writer;
constructor(filename) {
this.#filename = filename;
this.#writer = new Writer(filename);
}
async read() {
let data;
try {
data = await readFile(this.#filename, 'utf-8');
}
catch (e) {
if (e.code === 'ENOENT') {
return null;
}
throw e;
}
return data;
}
write(str) {
return this.#writer.write(str);
}
}
export class TextFileSync {
#tempFilename;
#filename;
constructor(filename) {
this.#filename = filename;
const f = filename.toString();
this.#tempFilename = path.join(path.dirname(f), `.${path.basename(f)}.tmp`);
}
read() {
let data;
try {
data = readFileSync(this.#filename, 'utf-8');
}
catch (e) {
if (e.code === 'ENOENT') {
return null;
}
throw e;
}
return data;
}
write(str) {
writeFileSync(this.#tempFilename, str);
renameSync(this.#tempFilename, this.#filename);
}
}