## Namespace

The concept of a namespace is already used in Campaign with regards to the database to protect your tables from conflicting with native ones if they share the same name. ACDF uses a similar concept with regards to Javascript.

The project namespace is essentially just an object which will serve as a container for your custom code. In order to avoid conflicts, you should always envelop your scripts in an [IIFE](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) and then assign those entities which you *do* want to use outside of a script to the namespace. See the section below on libraries for a more in-depth explanation.

## Filenames

ACDF uses filenames to determine how a file should be processed.

### Javascript

Format:`{name}.{suffix}.js`

The name can be anything you want it to be. The suffix will tell ACDF how to process your file during the build. Here is a breakdown of the different suffixes and what they represent:

#### Libraries

Libraries allow you to organise and/or reuse your code. In concept, it corresponds to the `xtk:javascript` entity in Campaign. A library should export the functions and objects which you want to use elsewhere by assigning them to your namespace.

For example, if you wanted to create a reusable function and call it in a workflow activity:

**hello.library.js**
```js
(() => {
    // This defines a function without saving it in the global scope.
    function helloWorld() {
        logInfo("Hello world");
    }

    // This assigns the helloWorld function to the ACDF namespace.
    ACDF.helloWorld = helloWorld;
})();
```

**hello.activity.js**
```js
(() => {
    // This loads the library, similarly to a require() in CommonJS or the 'import' statement in ES modules
    loadLibrary("acdf:hello.library.js");

    // This calls the function from the namespace
    ACDF.helloWorld();
})();
```

    - `library`: This denotes a JS library which can be called via `loadLibrary()`. This corresponds to the `xtk:javascript` entity. You should use 
    - `activity`: This is JS activity in a workflow.

Examples: 
    - `demo.library.js`: A library to be loaded using `loadLibrary()` which provides a feature described by `demo`.
    - `dev.env.js`
