<div align="center">
    <img src="./atils Logo.png" style="height:150px;width:150px;"><br>
    <h2><code><b>@2.0.10</b></code></h2>
    <img src="https://img.shields.io/npm/dt/atils?color=5094ef&label=total%20downloads&logoColor=5094ef&style=plastic">
    <img alt="npm" src="https://img.shields.io/npm/dw/atils?color=e0495f&label=weekly%20downloads&style=plastic">
    <img src="https://img.shields.io/npm/v/atils?color=ef5094&label=version&logoColor=5094ef&style=plastic">
    <img alt="npm collaborators" src="https://img.shields.io/npm/collaborators/atils?label=collaborators&style=plastic">
    <img src="https://img.shields.io/discord/944301669489975367?color=094e5f&label=support%20discord&style=plastic">
    <img src="https://img.shields.io/github/last-commit/itsatelo/atils?color=e4f950&label=last%20github%20commit&style=plastic">
    <img src="https://img.shields.io/github/issues-raw/itsatelo/atils?color=4e0f95&style=plastic"><br>
    Released by <code>Setrius Development</code>
</div>
<hr>

## [ ! ] Discontinuation Notice
As of `atils@2.0.10`, atils will be discontinued as I will be more focused on other projects.
The major changes that **would** have been placed with `atils@3.0.0` are as follows:
- `Interface` will receive a new overhaul and will now be able to parse through files.
    - The concept of this can be viewed [here](https://npmjs.com/package/forcetype).
- New Enum types.
    - This will be continued through a different project that I'll release later.
    - `forcetype` (the new Interface concept) will not receive updates as they will be updated within the new project.
- Better formatting + documentation.
    - atils will remain an undocumented package.

Thank you for using `atils`; it was a good learning experience.


# Getting Started
### Installing `atils`
**Installing the latest release of `atils`**
```js
npm i atils
const atils = require("atils");
import atils from "atils";
```

**Installing previous releases of `atils`**
```js
npm i atils@x.y.z
const atils = require("atils");
import atils from "atils";
```

### Using Documentation
**There is no documentation for atils. If you'd like to make your own, be my guest.**

### Utilities List
> - `Bitfield` Utility
> - `Client` Utility
> - `Collection` Utility
> - `Console` Utility (**implements** `Error` Utility)
> - `Dataset` Utility
> - `Date` Utility
> - `Enum` Utility
>   - `BitEnum` (**extends** `EnumParent`)
>   - `FrozenFlagBasedEnum` (**extends** `EnumParent`, **implements** `ThawedFlagBasedEnum`, **`default`**)
>   - `ThawedFlagBasedEnum` (**extends** `EnumParent`)
> - `Error` Utility
> - `Interface` Utility
>   - `Type` Sub-Utility
>   - `ClassInterface` Sub-Utility
> - `Merge` Utility
> - `Placebo` Utility

# Using Utilities
## Importing Utilities
```js
const { UtilityName } = require("atils");
```
### Import Names
```js
const {
    Bitfield,
    Client,
    Collection,
    Dataset,
    Date,
    Enum,
        BitEnum,
        EnumParent,
        FrozenFlagBasedEnum,
        ThawedFlagBasedEnum,
    BaseError,
    ErrorBuilder,
    ErrorSaver,
    Interface,
    InterfaceTypeAny,
    InterfaceTypeSmallInt,
    Merge,
    MKW,
    Type,
    Placebo,

    DefaultClientIntents,
    ConsoleStyles,
    InterfaceTypes,
} = require("atils");
```

# Notice Board
## **`November 11th, 2022`**
> Five days until `atils` is one year old!<br>
> ~~Also, `atils@3.0.0` is in development. Will receive many heavy changes, as well as a fully functional documentation system and intellisense.<br>
> Documentation will be updated as I work on it, but it will take quite awhile.~~

## **`January 19th, 2023`**
> I no longer see atils as a "need to be updated" package, since I've found very few bugs when messing with it. Some of the items within atils will still be transferred over to my next project, which will be more aligned with what I'm actively working on.<br><br>
> atils was a **very** nice learning experience, but I need to move onto other things so that I don't become stuck.<br><br>
> Thanks for using my package for the past year and two months; though I won't be updating it anymore, I'll probably continue using it until I make something better (nah that console still hella good, will probably be using that still).<br>
> If, at any point in the future, I do decide to resume development on atils, it will most likely take a heavy change in direction than it has, especially when it comes to dependencies. 

<br><br>

# Changelog
## **`atils@2.0.1`**
- Fixed an [issue](https://github.com/setriusdev/atils/issues/1) where `BitEnums` will only store `Functions`.

## **`atils@2.0.2`**
- Fixed an [issue](https://github.com/setriusdev/atils/issues/2) with the `Type` and `Interface` classes not detecting `Array`s and `Object`s properly.

## **`atils@2.0.3`**
- Fixed an [issue](https://github.com/setriusdev/atils/issues/3) with the `Type` class throwing incorrect errors, and not properly detecting statements.

## **`atils@2.0.4`**
- Fixed an [issue](https://github.com/setriusdev/atils/issues/4) with the `Console` class throwing errors when parameters are provided.
- Fixed an issue with the `Console` class not properly logging messages from the `.log()` method.
- Deprecated the `BaseError` class.
- Deprecated the `EnumParent` class (no, the three Enums that we have are not deprecated).

## **`atils@2.0.5`**
- Added the `setName()` method to the `Console` class. Sets the Command Prompt's name.

## **`atils@2.0.6`**
- Added a little bit of the IntelliSense for the first couple utilities (will slowly be rolled out).
- Renamed the `Interface` to `Class Interface`, implying it is primarily used for Classes.
- Added the `Object Interface`, implying it is used for Objects.
> **Usage Example**
> ```js
> const { Interface } = require("atils");
> const interface = new Interface({
>    hello: String, // The required item "hello" will be a String.
>    _world: { // The optional item "world" will have the following items.
>        type: String, // The optional item "hello" will be a String.
>        default: "world!", // The default value for this optional item will be "world!".
>    }
> });
> ```
- Changed the default export for `Interface` to the `Object Interface`, rather than the `Class Interface`.

## **`atils@2.0.7`**
- Fixed a minor naming issue with the `Class Interface`.
- Fixed a minor issue with the README file.

## **`atils@2.0.7-b`**
- Failed to fix a previous issue.

## **`atils@2.0.8`**
- You can now use Arrays as Types in the `Object Interface`.
> **Usage Example**
> ```js
> const { Interface } = require("atils");
> const interface = new Interface({
>   array: [String],
> });
>
> interface.applyTo({
>   array: ["Hello world!"],
> });
>
> interface.applyTo({
>   array: [1], // throws an error. 
> });
- Added [MKW](https://npmjs.com/package/mkw) as an export in atils.
    - The MKW package will be updated if atils' version of it receives an update.
- Deprecated the `Dataset` Class (just use a Bit Enum).

## **`atils@2.0.9`**
- Fixed an issue with the `MKW` import.
- Fixed an issue with the `Console` Class.

## **`atils@2.0.10`**
- `atils` discontinuation notice.

# Resources
> - [Official Website](https://setrius.com/)
> - [Support Server](https://setrius.com/resources)
> - [GitHub](https://github.com/setriusdev/atils)

Discontinued.

<hr>
<div align="center">
<h1><b><code>atils@2.0.10</code></b></h1>
<h3>Released by <code>Setrius Development</code></h3>
<h3>Release Date: <b><code>1/19/23</code></b></h3>
<h3>First Release: <b><code>11/26/2021</code></b></h3>

Thank you for using `atils`.
</div>