@behemothjs/behemoth
TypeScript icon, indicating that this package has built-in type declarations

0.5.1 • Public • Published

Behemoth

stability node 18.x XO code style

An engine for building systems necessary for web production.

Document Translation

🇯🇵 日本語

🚫 Project stability is "Alpha"

This project is currently under development. Please refrain from using it until release as it may undergo specification changes.

Install

npm install @behemothjs/behemoth

Features

🍄 App

The main object.

Global Configuration for All Modules

import {behemoth as app} from '@behemothjs/behemoth';

app.configure({
 schema: SchemaConfig,
 logger: LoggerConfig,
});

(alias) Logger

app.log(message);
app.warn(message);
app.error(message);

(alias) Observer

// Notify
app.notify(channel, topic, payload);

// Subscribe
const subscription = app.listen(channel, topic, (event) => {
 app.log(event);
});

// Unsubscribe
subscription.remove();

🍄 Schema

A schema processing tool useful for creating model classes, etc.

Global Configuration for Schema Class

import {Schema} from '@behemothjs/behemoth';

Schema.configure({
  // [defaults]
  allowAdditionalKeys: false,
  allowUndefinedKeys: false,
  idStrategy: () => crypto.randomUUID(),
  timestampStrategy: () => new Date().toISOString(),
})

Example

import {schema} from '@behemothjs/behemoth';

// Temporary Configuration
schema.configure({
  // [defaults]
  allowAdditionalKeys: false,
  allowUndefinedKeys: false,
  idStrategy: () => crypto.randomUUID(),
  timestampStrategy: () => new Date().toISOString(),
})

class SampleSchema {
  id;
  name;
  description;

  /**
   * @param {SampleSchema} data
   */
  constructor(data) {
    // Before: Input undefined key -> Throw Error
    // After:  not set keys       -> Set undefined to null
    schema.assign(this, data);

    // If `id` is empty, set the UUID.
    schema.autoId(this, 'id');

    // If `createdAt/updatedAt` is empty, set the DateTime.
    schema.autoTimestamp(this, 'createdAt');
    schema.autoTimestamp(this, 'updatedAt');
  }
}

const sampleSchema = new SampleSchema({
  name: 'Behemoth',
  description: 'This is web tool kit.'
})

console.log(sampleSchema)
SampleSchema {
  id: '8481d7e4-478c-4233-b4a1-7ea6d7d63749',
  name: 'Behemoth',
  description: 'This is web tool kit.',
  createdAt: '2024-03-21T07:15:45.092Z',
  updatedAt: '2024-03-21T07:15:45.092Z',
}

🍄 Observer

PubSub Module

import {observer} from '@behemothjs/behemoth';

// Notify
observer.notify('channelName', 'topicName', payload);

// Subscribe
const subscription = observer.listen('channelName', 'topicName', (event) => {
  console.log(event);
});

// Unsubscribe
subscription.remove();

🍄 Log

Logging Tool

import {log} from '@behemothjs/behemoth';

// Configuration or Set environment variable: LOG_LEVEL
log.configure({logLevel: 'WARN'}); // LOG / INFO / WARN / ERROR / SILENT

log.log('LOG');     // console.log('LOG')
log.info('INFO');   // console.info('INFO')
log.warn('WARN');   // console.warn('WARN')
log.error('ERROR'); // console.error('ERROR')

Since this log is output via Observer, it is effective for streaming log collection processes.

const channel = 'Log';
const topic = 'ERROR'; // <-- "*" (wildcard) can be used.

observer.listen(channel, topic, async event => {
  const {payload} = event;
  await otherStreamingApi.push(payload);
});

Readme

Keywords

none

Package Sidebar

Install

npm i @behemothjs/behemoth

Weekly Downloads

0

Version

0.5.1

License

MIT

Unpacked Size

16.6 kB

Total Files

17

Last publish

Collaborators

  • madakaheri