open-index/open-npm huggingface dataset:
npm package: @gradebook/external-window
Description: promisify window.open
Author: Vikas Potluri
Latest version: 0.3.0

# `@gradebook/external-window`

> Promisify `window.open`

## Usage

```js
const {ExternalWindowService: ExternalWindow} = require('@gradebook/external-window');

// Opens a new window centered on the screen
const externalWindow = new ExternalWindow('https://my.authentication', 'Log in to your account');

// Very naive implementation!
/** @type {HTMLButtonElement} */
myButton.addEventListener('click', () => {
	externalWindow.requestFocus();
});

externalWindow.promise.then(fetchUserSession);
```
npm package: @gradebook/logging
Description: > Pino-based logger partially compatible with Ghost Ignition
Author: Vikas Potluri
Latest version: 0.1.2

# `@gradebook/logging`

> Pino-based logger partially compatible with Ghost Ignition

For a comparison to Ghost Ignition, check out [./comparison.md](./comparison.md)

## Usage

```ts
// Create a logger with Ignition-like config
import {createLogger} from '@gradebook/logging';

// Note: options are described in the types for now
const logger = createLogger(/* options */);

logger.info('Hello, world!');
logger.error(new Error('Uh, oh!'));

// Automatically log HTTP requests

import express from 'express';
import {useHttpLogging} from '@gradebook/logging/lib/http.js';

const app = express();

// Note: options are described in the types for now
app.use(useHttpLogging(logger, /* options */))
```
npm package: @gradebook/passport-utils
Description: Abstractions for auth integration with Google using passport
Author: Vikas Potluri
Latest version: 0.2.1

# `@gradebook/passport-utils`

> Abstractions for auth integration with Google using passport. Centered around Gradebook

## Usage

```javascript
// @ts-check
const {createProfileHandler, createUserDeserializer, serializeUser} = require('@gradebook/passport-utils');
const passport = require('passport');
const Strategy = require('passport-google-oauth20');

const handleProfile = createProfileHandler(gid => api.findUserFromGid(gid));

function setupPassport() {
	passport.use(new Strategy({clientID, clientSecret, callbackURL, passReqToCallback: true}, handleProfile));
	passport.serializeUser(serializeUser);
	passport.deserializeUser(createUserDeserializer((id, table) => api.findUser(id, table), 'my.domain'));
}
```
npm package: @gradebook/teleport
Description: Move data across @gradebook/server instances
Author: Vikas Potluri
Latest version: 0.0.4

# `@gradebook/teleport`

> Move data across @gradebook/server instances

## Importer

> Generate SQL-like queries to import a user into an @gradebook/server database

### Usage

```ts
import {readFileSync} from 'fs';
import {generateAPICalls} from './importer';
import {ValidationError} from './errors';

const exampleExport = readFileSync('./export.json');

try {
	console.log(generateAPICalls(exampleExport, {gid: '206221626381630023572'}));
} catch (error) {
	if (error instanceof ValidationError) {
		console.log(error.message);
	} else {
		console.error(error);
	}
}
```
npm package: @gradebook/together
Description: Run multiple processes in a terminal
Author: Vikas Potluri
Latest version: 0.2.0

# Together

> Run multiple processes in a terminal

## Usage

```js
const Together = require('@gradebook/together');

// Launch your frontend and backend watch tasks simultaneously:
// The output will be piped directly to stdio.
const spawnedProcesses = new Together([
	['Run the frontend', 'yarn frontend:watch'],
	['Run the backend', 'yarn backend:watch']
]);

// No need to add handlers for SIGTERM or SIGINT, it's done automatically!
// If you need to manually shut a process group down, you can:
spawnedProcesses.shutdown();

// If you spawned multiple process groups, you can clean them all up:
Together.cleanup();
```
npm package: @gradebook/trusted-request
Description: Express middleware to limit requests to trusted IPs
Author: Vikas Potluri
Latest version: 0.2.1

# `@gradebook/trusted-request`

> Express middleware to limit requests to trusted IPs

## Usage

```js
import express from 'express';
import {allowTrustedIps} from '@gradebook/trusted-request';

const onlyTrustedIps = allowTrustedIps({
	trustProxy: true,
	trustedIps: ['127.0.0.1', '192.168.124.131'] // Only allow requests from loopback and (e.g.) the parent node
});

const app = express();

app.use('/api', apiRouter);
// trusted-request DOES NOT handle authentication or authorization
app.use('/admin', onlyTrustedIps, user.isAuthenticated, adminRouter);
```

## API Reference

```ts
import {allowTrustedIps, TrustedRequestError} from '@gradebook/trusted-request';
```

If a request is not trusted, `trustedRequest` will call `next(new TrustedRequestError)`.
npm package: @gradecam/delay
Description: Delay specified amount of time then resolve/reject promise.
Author: Jarom Loveridge
Latest version: 1.0.1

# delay

> Delay a promise a specified amount of time


## Install

```
$ npm install --save @gradecam/delay
```


## Usage

```ts
import delay from '@gradecam/delay';

delay(200)
	.then(() => {
		// Executed after 200 milliseconds
	});

delay(100, 'a result')
	.then(result => {
		// Executed after 100 milliseconds
		// result === 'a result';
	});
```


## Advanced usage

```ts
import * as assert from 'assert';
import { delay } from '@gradecam/delay';

// With Node.js >=7.6 and async functions
(async () => {
	bar();

	await delay.resolve(100);

	// Executed 100 milliseconds later
	baz();
})();

// There's also `delay.reject()` which optionally accepts a value and rejects it `ms` later
delay.reject(100, 'foo'))
	.then(x => blah()) // Never executed
	.catch(err => {
		// Executed 100 milliseconds later
		// err === 'foo'
	});

// You can clear the delay by calling `.clear` on the returned promise
(async () => {
	const delayedPromise = delay.resolve(1000);
	setTimeout(() => {
		delayedPromise.clear();
	}, 500);
	await delayedPromise;
})();

// If you want to cancel (reject) the promise then call `.clear` with an argument other than `undefined`.
(async () => {
	const delayedPromise = delay.resolve(1000, 'Successfully delayed.');
	setTimeout(() => {
		delayedPromise.clear(new Error('cancelled'));
	});
	try {
		await delayedPromise;
		assert.fail('should have rejected the promise.');
	} catch (err) {
		assert.equal(err.message, 'cancelled');
	}
})();
```


## API

### delay.resolve(ms, [value])

Create a promise which resolves after the specified `ms`. Optionally pass a
`value` to resolve. For convienience this method is also the default export.

### delay.reject(ms, [value])

Create a promise which rejects after the specified `ms`. Optionally pass a
`value` to reject.

#### ms

Type: `number`

Milliseconds to delay the promise.

#### value

Type: `any`

Value to resolve or reject in the returned promise.

### promise#clear([err])

Settle the promise prior to specified delay. If `err` is specified `reject` instead of settling normally.

#### err

Type: `Error`

Reason for cancelling the delay prematurely.


## Related
- [delay](https://github.com/sindresorhus/delay) - module upon which this is based
- [delay-cli](https://github.com/sindresorhus/delay-cli) - CLI for the original delay module
- [p-min-delay](https://github.com/sindresorhus/p-min-delay) - Delay a promise a minimum amount of time
- [p-immediate](https://github.com/sindresorhus/p-immediate) - Returns a promise resolved in the next event loop - think `setImmediate()`
- [p-timeout](https://github.com/sindresorhus/p-timeout) - Timeout a promise after a specified amount of time
- [More…](https://github.com/sindresorhus/promise-fun)


## License

MIT © [GradeCam](https://gradecam.com)
npm package: @gradecam/gridfs
Description: Make working with GridFS and mongoose easier.
Author: Jarom Loveridge
Latest version: 1.1.0

@gradecam/gridfs
================

Makes working with GridFS just a little bit easier.

## Installation
```sh
$ npm install --save @gradecam/gridfs
```

## Usage

### Direct usage of GridFSBucket
```ts
import { createReadStream } from 'fs';

import mongodb from 'mongodb';
import { GridFSBucket, WriteFileOpts } from '@gradecam/gridfs';

async function main() {
  const client = await mongodb.connect('mongodb://localhost/gcgfs', {useNewUrlParser: true});
  const db = client.db();
  const bucket = new GridFSBucket(db);
  // write file to gridfs
  const readStream = createReadStream('sample.txt');
  const options: WriteFileOpts = { filename: 'sample.txt', contentType: 'text/plain' };
  const file = await bucket.writeFile(options, readStream);
  if (file) {
    const fileBuff = await bucket.readFile({_id: file._id});
    // ... do something with fileBuff
  }
  client.close();
}
```

### Usage with mongoose
```ts
import { createReadStream } from 'fs';

import mongoose from 'mongoose';
import { BucketFile, createFileSchema } from '@gradecam/gridfs';

async function main() {
  await mongoose.connect('mongodb://localhost/gcgfs', {useNewUrlParser: true});
  const schema = createFileSchema('attachments');
  const AttachmentFile = mongoose.model('AttachmentFile', schema);
  // write file to gridfs
  const readStream = createReadStream('sample.txt');
  const fileOpts: Partial<BucketFile> = { filename: 'sample.txt', contentType: 'text/plain' };
  const doc = await AttachmentFile.write(fileOpts, readStream);
  const fileBuff = await doc.read();
  // ... do something with fileBuff
  mongoose.disconnect();
}
```

## Credits

Package was inspired by [mongoose-gridfs](https://github.com/lykmapipo/mongoose-gridfs)

Notable changes from `mongoose-gridfs` include:

* Package dependencies kept to a minimum
* Can define Mongoose Schema and Model's without having an established connection
* First class TypeScript support
npm package: @gradecam/restler-q
Description: Q Wrapper for Restler
Author: Andrew Newdigate
Latest version: 0.2.0

restler-q [![Build Status](https://api.travis-ci.org/troupe/restler-q.png)](https://travis-ci.org/troupe/restler-q)
=========

(C) Andrew Newdigate (@suprememoocow), Licensed under the MIT-LICENSE

An extremely simple Q promises wrapper for [Don Wrong's Restler](https://github.com/danwrong/restler) library.


Installing
-----------------

    npm install restler-q


Using
-----------------

The interface is similar to Restler's interface:

```javascript
var rest = require('restler-q');

rest.get('https://api.github.com/orgs/Troupe/repos')
  .then(function(repos) {
    assert(Array.isArray(repos));
  })
  .nodeify(done);
```

If you would like to gain access to the response object, do it like this

```javascript
var rest = require('restler-q').spread; // Note the .spread on the end!
rest.get('https://api.github.com/orgs/Troupe/repos')
  .spread(function(repos, response) {
    // Use Q's `spread`, not `then` 
    assert(Array.isArray(repos));
  })
  .fail(function(err) {
    // err.response contains the HTTP Response
  })
  .nodeify(done);
```

Running the tests
-----------------

    npm install
    make test


TODO
-----------------
* Provide ability to call `abort` and `retry` methods.
npm package: @gradedcardcenter/react-native-zendesk-messaging
Description: Zendesk messaging SDK for React Native - Updated for Xcode 16 compatibility with iOS SDK 2.32.0
Author: leegeunhyeok
Latest version: 0.3.3

<div align="center">

  # react-native-zendesk-messaging

  <img width="300" alt="zendesk" src="https://user-images.githubusercontent.com/26512984/207395088-5b4bd509-c68e-4cd0-9c98-0162f23ff713.png">

  [Zendesk messaging SDK](https://developer.zendesk.com/documentation/zendesk-web-widget-sdks) for React Native

  [![style](https://img.shields.io/badge/vercel%20code--style-000000?logo=vercel&logoColor=white)](https://github.com/vercel/style-guide)
  [![ktlint](https://img.shields.io/badge/ktlint%20code--style-%E2%9D%A4-FF4081)](https://pinterest.github.io/ktlint)
  [![swiftlint](https://img.shields.io/badge/swiftlint%20code--style-%E2%9D%A4-51A0D5)](https://github.com/realm/SwiftLint)
  [![npm version](https://badge.fury.io/js/react-native-zendesk-messaging.svg)](https://badge.fury.io/js/react-native-zendesk-messaging)

</div>

## Features

- 🔥 Not a Classic SDKs. It's new SDKs
- 🗣️ Basic conversation features
- 🔔 Push Notifications
  - support native customizing or integrate with [@react-native-firebase/messaging](https://rnfirebase.io/reference/messaging)
- ✅ Support SDK events
- 🔑 User Authentication
- 🚗 Visitor Path
- 📝 Conversation Metadata(fields and tags)

Read official announcement about new messaging SDKs [here](https://support.zendesk.com/hc/en-us/articles/4408882490778).

## Installation

```sh
npm install react-native-zendesk-messaging
# or
yarn add react-native-zendesk-messaging
```

## Getting Started

Read [Getting Started Guide](./docs/getting-started.md).

## Usage

```js
import React, { useEffect } from 'react';
import {
  StyleSheet,
  SafeAreaView,
  Pressable,
  Text
} from 'react-native';
import * as Zendesk from 'react-native-zendesk-messaging';

const CHANNEL_KEY = 'YOUR_ZENDESK_CHANNEL_KEY';

function App() {
  useEffect(() => {
    Zendesk.initialize({ channelKey: CHANNEL_KEY })
      .then(() => /* success */)
      .catch((error) => /* failure */);
  }, []);

  const handlePressOpenButton = () => {
    Zendesk.openMessagingView();
  };

  return (
    <SafeAreaView style={styles.container}>
      <Pressable onPress={handlePressOpenButton}>
        <Text>Open Messaging</Text>
      </Pressable>
    </SafeAreaView>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
});
```

For more details, Read the [API References](./docs/apis.md).

If you're interested in contributing, check out the [Contributing Guide](CONTRIBUTING.md).

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md).

## License

[MIT](./LICENSE)

---

Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
npm package: @gradeup/asde
Description: Easy error handling with async await and destructuring
Author: Nikhil Srivastava
Latest version: 3.0.1

# asde [![Build Status](https://travis-ci.org/gradeup/asde.svg?branch=master)](https://travis-ci.org/gradeup/asde) [![codecov](https://codecov.io/gh/gradeup/asde/badge.svg?branch=master)](https://codecov.io/gh/gradeup/asde?branch=master)

> Easy error handling with async await and destructuring for promises


## Install

```
$ npm install @gradeup/asde
```


## Usage

```js
const asde = require('@gradeup/asde');
const promise = Promise.reject(new Error('Something went wrong'));
const fn = async () => await asde(p);
//=> [{ message: 'Something went wrong' }, null]
```


## API

### asde(input)

#### input

Type: `Promise`

Promise or any thenable to resolve

## License

MIT © [Nikhil Srivastava](https://gradeup.github.io)
npm package: @gradeup/tap-web-sdk
Description: Push structured events from web to any server
Author: Nikhil Srivastava
Latest version: 0.0.15

# Tap Web SDK

> Send structured events from web to any server 🚀

# Requirements

Needs Fetch API for this to work. Use [unfetch](https://github.com/developit/unfetch) if you want to support older browser

# Install

```sh
npm i @gradeup/tap
```

# Usage

```js
import tap from "@gradeup/tap";
// Must initialise sdk after user has logged in
tap.init("https://example.com/analytics", { userId: 2, name: "Example User" });
// Push event whenever you want
const event = {
    event: "UpVote"
    itemId: 1,
};
tap.event.push(event);
```
npm package: @gradian/arcminter
Description: A library for minting and configuring ARC-3, ARC-19, and ARC-69 compliant Algorand Standard Assets (ASA) NFTs.
Latest version: 1.6.0

# Arcminter

A library for minting and configuring ARC-3, ARC-19, and ARC-69 compliant Algorand Standard Assets (ASA) NFTs.

## Features

- Mint and configure ARC-3, ARC-19, and ARC-69 compliant Algorand Standard Assets (ASA) NFTs.
- Supports the Pinata IPFS pinning service and can be easily extended to include other pinning services.
- Authenticate transactions using WalletConnect or X25519 keys.

## Installation

```bash
npm install @gradian/arcminter
```

## Usage

See examples of usage in the [tests](./tests) folder.

## License

This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.

## Disclaimer

This software is intended for educational purposes only and is not meant to facilitate any illegal activity. You assume all responsibility when using this open-source software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

By using this software, you acknowledge and agree that the authors and contributors of this software are not responsible or liable, directly or indirectly, for any damage or loss caused, or alleged to be caused, by or in connection with the use of or reliance on this software. This includes, but is not limited to, any bugs, errors, defects, failures, or omissions in the software or its documentation. Additionally, the authors are not responsible for any security vulnerabilities or potential breaches that may arise from the use of this software.

You are solely responsible for the risks associated with using this software and should take any necessary precautions before utilizing it in any production or critical systems. It's strongly recommended to review the software thoroughly and test its functionalities in a controlled environment before any broader application.
npm package: @gradiences/a2a-types
Description: Shared types and constants for Gradience A2A communication
Latest version: 0.1.0

# A2A Types

TypeScript type definitions for Agent-to-Agent (A2A) protocol.

## Installation

```bash
pnpm add @gradiences/a2a-types
```

## Usage

```typescript
import { AgentMessage, TaskRequest, TaskResponse } from '@gradiences/a2a-types';

const message: AgentMessage = {
    id: 'msg-123',
    from: 'agent-a',
    to: 'agent-b',
    content: {
        /* ... */
    },
};
```

## Types

- `AgentMessage` - Base message type
- `TaskRequest` - Task creation request
- `TaskResponse` - Task response
- `AgentCapability` - Capability declaration
- `A2AEnvelope` - Message envelope

## Related

- [A2A Protocol Spec](../../protocol/design/a2a-protocol-spec.md)
- [A2A Runtime](../a2a-protocol/runtime/README.md)
npm package: @gradient-js/core
Description: Gradient-js core module
Author: Jakub Antolak
Latest version: 1.1.4

# `@gradient-js/core`

`gradient-js` module for raw (object) gradient output generation

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Installation

### CLI

#### Yarn
```
yarn add @gradient-js/core
```

#### Npm
```
npm install --save @gradient-js/core
```

### CDN

```
<script src="https://unpkg.com/gradient-js/core@x.x.x/core.js">
```

## Usage

```javascript
import { Core } from '@gradient-js/core';

const core = new Core();
const gradient = core.get(colors, options);
```

## Inputs

In order to create a gradient you will need to pass an array of `colors` and an `options` object to the Core's `get` method. `colors` should be an array of strings in any valid css format (rgb(a), hex or hsl(a)). `options` object consists of following properties:

```typescript
type CoreOptions = {
  useBezier: boolean;
  interpolation: InterpolationMode;
  samples: number;
  lightnessCorrection: boolean;
};
```
Where each property can be described as it follows:

| Option | Type | Description
| - | - | - |
| `useBezier`| `boolean` | Decide whether to use chroma's `scale()` with `bezier` interpolation |
| `interpolation` | `chroma.InterpolationMode`| Color interpolation space, one of: <br />`"rgb" | "hsl" | "hsv" | "hsi" | "lab" | "lch" | "hcl" | "lrgb"` |
| `samples` | `number` | Amount of gradient parts in the output |
| `lightnessCorrection` | `boolean` | Decide whether to apply lightness correction to your gradient.

Core's `get` method will generate an array of `chroma.Color` objects.
npm package: @gradientedge/cdk-utils-azure
Description: Azure Pulumi utilities for @gradientedge/cdk-utils
Latest version: 2.13.0

# @gradientedge/cdk-utils-azure

Azure Pulumi utilities for provisioning and managing Azure infrastructure using [Pulumi](https://www.pulumi.com/) with the [Azure Native](https://www.pulumi.com/registry/packages/azure-native/) provider (`@pulumi/azure-native`).

## Overview

This package provides high-level constructs and service managers for Azure:

- **Constructs** — patterns for REST APIs, Function Apps, Event Handlers, and web apps
- **Services** — manager classes for Azure services including API Management, CosmosDB, DNS, EventGrid, Key Vault, Redis, Storage, and more
- **Common** — base constructs, stack classes, and resource name formatting utilities

## Installation

```bash
pnpm add @gradientedge/cdk-utils-azure
```

## Usage

```typescript
import { CommonAzureConstruct } from '@gradientedge/cdk-utils-azure'

class MyAzureStack extends CommonAzureConstruct {
  constructor(name: string, args: any, opts?: pulumi.ComponentResourceOptions) {
    super(name, args, opts)
    this.initResources()
  }
}
```
npm package: @gradientedge/cdk-utils-cloudflare
Description: Cloudflare Pulumi utilities for @gradientedge/cdk-utils
Latest version: 2.4.0

# @gradientedge/cdk-utils-cloudflare

Cloudflare Pulumi utilities for provisioning and managing Cloudflare infrastructure using [Pulumi](https://www.pulumi.com/).

## Overview

This package provides high-level constructs and service managers for Cloudflare:

- **Constructs** — patterns for Worker Sites and Pages Static Sites
- **Services** — manager classes for Cloudflare services including Access, API Shield, Argo, DNS Records, Firewall, Filters, Pages, Rule Sets, Workers, and Zones
- **Common** — base constructs and stack classes

## Installation

```bash
pnpm add @gradientedge/cdk-utils-cloudflare
```

## Usage

```typescript
import { CommonCloudflareConstruct } from '@gradientedge/cdk-utils-cloudflare'

class MyCloudflareStack extends CommonCloudflareConstruct {
  constructor(name: string, args: any, opts?: pulumi.ComponentResourceOptions) {
    super(name, args, opts)
    this.initResources()
  }
}
```
npm package: @gradienthealth/ohif-gradienthealth-extension
Description: Gradient Health Specific OHIF extension
Author: Ouwen Huang
Latest version: 0.3.0

# @gradienthealth&#x2F;ohif-gradienthealth-extension 
## Description 
Gradient Health Specific OHIF extension 

These dependencies need to be yarn linked from OHIF/Viewer

```
cd ./Viewers/platform/core && yarn unlink && yarn link && cd ../../..
cd ./Viewers/extensions/cornerstone && yarn unlink && yarn link && cd ../../..
cd ./Viewers/extensions/default && yarn unlink && yarn link && cd ../../..
cd ./Viewers/platform/i18n && yarn unlink && yarn link && cd ../../..
cd ./Viewers/platform/ui && yarn unlink && yarn link && cd ../../..
cd ./cornerstone3D-beta/packages/tools && yarn unlink && yarn link && cd ../../..
cd ./cornerstone3D-beta/packages/core && yarn unlink && yarn link && cd ../../..

cd ./GradientExtensionsAndModes/extensions/ohif-gradienthealth-extension
yarn link @ohif/core
yarn link @ohif/extension-cornerstone
yarn link @ohif/extension-default
yarn link @ohif/i18n
yarn link @ohif/ui
yarn link @cornerstonejs/tools
yarn link @cornerstonejs/core

yarn unlink @ohif/core
yarn unlink @ohif/extension-cornerstone
yarn unlink @ohif/extension-default
yarn unlink @ohif/i18n
yarn unlink @ohif/ui
yarn unlink @cornerstonejs/tools
yarn unlink @cornerstonejs/core
```
## Author 
Ouwen Huang 
## License 
MIT
npm package: @gradii/fedaco
Description: [![Build Status](https://github.com/gradii/fedaco/workflows/CI/badge.svg)](https://github.com/gradii/fedaco/actions?query=workflow%3ACI)
Latest version: 2.0.6

# Fedaco Orm

[![Build Status](https://github.com/gradii/fedaco/workflows/CI/badge.svg)](https://github.com/gradii/fedaco/actions?query=workflow%3ACI)

### How To Use It

- setup a connection
  ```typescript
  const db = new DatabaseConfig();
  db.addConnection({
    'driver'  : 'sqlite',
    'database': ':memory:'
  });
  db.bootFedaco();
  db.setAsGlobal();
  ```
- define a model
  ```typescript
  @Table({
    tableName: 'user'
  })
  class User extends Model {
    @PrimaryColumn
    declare id;
    
    @Column()
    declare email;
  
    @Column()
    declare name;
  
    @Column()
    declare age;
  
    @CreatedAtColumn()
    declare created_at;
  
    @UpdateAtColumn()
    declare updated_at;
  }
  ```
- fetch data
  ```typescript
  const list = await User.createQuery().get();
  ```

### Create Table

#### create a user table.

  ```typescript
  await schema().create('users', table => {
    table.increments('id');
    table.string('email').withUnique();
    table.string('name');
    table.string('age');
  });
  ```

### Features
- wrapped driver. unify all driver query api
- compile query builder to sql
- decorate to define model
- soft delete
- use relationship to link model
- relation can set dynamic constrain
- sqlite, mysql, postgresql support


### Notice
When `target` is `es2022` or higher, TypeScript uses the modern ECMAScript class fields semantics by default, so plain field declarations outside the constructor are no longer supported (unlike `es2016`~`es2021`).

**Workaround** – use the `declare` keyword to keep fields only in the constructor:

```typescript
  @Table({
    tableName: 'user'
  })
  class User extends Model {
    @PrimaryColumn()
    declare id;
  }
  ```