Socket
Socket
Sign inDemoInstall

@ghom/handler

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ghom/handler - npm Package Compare versions

Comparing version 1.1.0 to 1.2.0

29

dist/app/handler.d.ts

@@ -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;

2

package.json
{
"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 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc