@ghom/handler
Advanced tools
Comparing version 1.1.0 to 1.2.0
@@ -6,6 +6,31 @@ import { EventEmitter, BaseEventNames } from "@ghom/event-emitter"; | ||
} | ||
export declare class Handler extends EventEmitter<HandlerEvents> { | ||
export interface HandlerOptions<Element> { | ||
logger?: { | ||
log: (message: string) => void; | ||
}; | ||
/** | ||
* Use $path to replace by file path <br> | ||
* Use $basename to replace by file name <br> | ||
* Use $filename to replace by file name without extension <br> | ||
* @example ```ts | ||
* const handler = new Handler("./commands", { | ||
* loggerPattern: "$filename loaded" | ||
* logger: console | ||
* }) | ||
* ``` | ||
*/ | ||
loggerPattern?: string; | ||
loader?: (path: string) => Promise<Element>; | ||
} | ||
export declare class Handler<Element> extends EventEmitter<HandlerEvents> { | ||
private path; | ||
constructor(path: string); | ||
private options?; | ||
elements: Map<string, Element>; | ||
constructor(path: string, options?: HandlerOptions<Element> | undefined); | ||
/** | ||
* Here to prevent breaking changes. | ||
* @deprecated Use `load` instead. | ||
*/ | ||
load(): Promise<void>; | ||
init(): Promise<void>; | ||
} |
@@ -11,12 +11,32 @@ "use strict"; | ||
class Handler extends event_emitter_1.EventEmitter { | ||
constructor(path) { | ||
constructor(path, options) { | ||
super(); | ||
this.path = path; | ||
this.options = options; | ||
this.elements = new Map(); | ||
} | ||
/** | ||
* Here to prevent breaking changes. | ||
* @deprecated Use `load` instead. | ||
*/ | ||
async load() { | ||
await this.init(); | ||
} | ||
async init() { | ||
this.elements.clear(); | ||
const filenames = await promises_1.default.readdir(this.path); | ||
const filepathList = []; | ||
for (const filename of filenames) { | ||
const filepath = path_1.default.join(this.path, filename); | ||
for (const basename of filenames) { | ||
const filepath = path_1.default.join(this.path, basename); | ||
const filename = path_1.default.basename(filepath, path_1.default.extname(filepath)); | ||
filepathList.push(filepath); | ||
if (this.options?.logger) | ||
this.options.logger.log(this.options.loggerPattern | ||
? this.options.loggerPattern | ||
.replace("$path", filepath) | ||
.replace("$basename", basename) | ||
.replace("$filename", filename) | ||
: `loaded ${filename}`); | ||
if (this.options?.loader) | ||
this.elements.set(filepath, await this.options.loader(filepath)); | ||
await this.emit("load", filepath); | ||
@@ -23,0 +43,0 @@ } |
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
@@ -6,0 +10,0 @@ if (k2 === undefined) k2 = k; |
{ | ||
"name": "@ghom/handler", | ||
"version": "1.1.0", | ||
"version": "1.2.0", | ||
"license": "MIT", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
# File handler | ||
## Example for table handler | ||
## Example for simple table handler | ||
@@ -8,22 +8,15 @@ ```ts | ||
export const tableHandler = new Handler(path.join(process.cwd(), "dist", "tables")) | ||
export const handler = new Handler("dist/table", { | ||
logger: console, | ||
loggerPattern: "loaded new table: $filename", | ||
loader: (path) => import(`file://${path}`), | ||
}) | ||
tableHandler.once("finish", async (pathList) => { | ||
const tables = await Promise.all( | ||
pathList.map(async (filepath) => { | ||
const file = await import("file://" + filepath) | ||
if (filepath.endsWith(".native.js")) file.default.options.native = true | ||
file.default.filepath = filepath | ||
return file.default | ||
}) | ||
) | ||
try { | ||
await handler.init() | ||
} catch(e) { | ||
console.error(e) | ||
} | ||
return Promise.all( | ||
tables | ||
.sort((a, b) => { | ||
return (b.options.priority ?? 0) - (a.options.priority ?? 0) | ||
}) | ||
.map((table) => table.make()) | ||
) | ||
}) | ||
``` | ||
console.log(handler.elements) | ||
``` |
@@ -11,13 +11,60 @@ import path from "path" | ||
export class Handler extends EventEmitter<HandlerEvents> { | ||
constructor(private path: string) { | ||
export interface HandlerOptions<Element> { | ||
logger?: { | ||
log: (message: string) => void | ||
} | ||
/** | ||
* Use $path to replace by file path <br> | ||
* Use $basename to replace by file name <br> | ||
* Use $filename to replace by file name without extension <br> | ||
* @example ```ts | ||
* const handler = new Handler("./commands", { | ||
* loggerPattern: "$filename loaded" | ||
* logger: console | ||
* }) | ||
* ``` | ||
*/ | ||
loggerPattern?: string | ||
loader?: (path: string) => Promise<Element> | ||
} | ||
export class Handler<Element> extends EventEmitter<HandlerEvents> { | ||
public elements: Map<string, Element> = new Map() | ||
constructor(private path: string, private options?: HandlerOptions<Element>) { | ||
super() | ||
} | ||
/** | ||
* Here to prevent breaking changes. | ||
* @deprecated Use `load` instead. | ||
*/ | ||
async load() { | ||
await this.init() | ||
} | ||
async init() { | ||
this.elements.clear() | ||
const filenames = await fs.readdir(this.path) | ||
const filepathList: string[] = [] | ||
for (const filename of filenames) { | ||
const filepath = path.join(this.path, filename) | ||
for (const basename of filenames) { | ||
const filepath = path.join(this.path, basename) | ||
const filename = path.basename(filepath, path.extname(filepath)) | ||
filepathList.push(filepath) | ||
if (this.options?.logger) | ||
this.options.logger.log( | ||
this.options.loggerPattern | ||
? this.options.loggerPattern | ||
.replace("$path", filepath) | ||
.replace("$basename", basename) | ||
.replace("$filename", filename) | ||
: `loaded ${filename}` | ||
) | ||
if (this.options?.loader) | ||
this.elements.set(filepath, await this.options.loader(filepath)) | ||
await this.emit("load", filepath) | ||
@@ -24,0 +71,0 @@ } |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
7479
187
21