# nsdeclare

> Safely declare a namespace using dot notation

Latest version **0.1.0** (published 2014-07-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install nsdeclare
pnpm add nsdeclare
yarn add nsdeclare
bun add nsdeclare
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.0 |
| Published | 2014-07-28 |
| First published | 2014-03-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 5 |
| Author | Larry Davis |
| Maintainers | lazd |
| Keywords | namespace, declare, declaration |

## Links

- npm: https://www.npmjs.com/package/nsdeclare
- Repository: https://github.com/lazd/nsdeclare
- Issues: https://github.com/lazd/nsdeclare/issues
- npm.io page: https://npm.io/package/nsdeclare

## Recent versions

- 0.1.0 (latest) — 2014-07-28
- 0.0.0 — 2014-03-07

## README

# nsdeclare [![NPM version][npm-image]][npm-url] [![Build status][travis-image]][travis]
> Safely declare a namespace using dot notation

## Usage

```js
var declare = require('nsdeclare');

var declaration = declare('MyApp.Templates');
```

Result:
```js
this["MyApp"] = this["MyApp"] || {};
this["MyApp"]["Templates"] = this["MyApp"]["Templates"] || {};
```

## Options

Options can be passed as the second argument to `nsdeclare`.

### value
Type: `String`

By passing `options.value`, you can use `nsdeclare` to both declare and safely assign properties of a namespace:

```js
var declare = require('nsdeclare');

var declaration = declare('MyApp.Templates.Main', { value: 'function() { return "Main"; }' });
```

Result:
```js
this["MyApp"] = this["MyApp"] || {};
this["MyApp"]["Templates"] = this["MyApp"]["Templates"] || {};
this["MyApp"]["Templates"]["Main"] = function() { return "Main"; };
```

### declared
Type: `Object`

To avoid redeclaration, you can pass a list of already declared namespace parts as `options.declared`:

```js
var declare = require('nsdeclare');

var options = {
  declared: {
    'MyApp': true
  }
};

var declaration = [
  declare('MyApp.Views', options),
  declare('MyApp.Templates', options),
  declare('MyApp.Models', options),
  declare('MyApp.Collections', options)
].join('\n');
```

Result:
```js
this["MyApp"]["Views"] = this["MyApp"]["Views"] || {};
this["MyApp"]["Templates"] = this["MyApp"]["Templates"] || {};
this["MyApp"]["Models"] = this["MyApp"]["Models"] || {};
this["MyApp"]["Collections"] = this["MyApp"]["Collections"] || {};
```

Note that, if you don't pass `options.declared` and a namespace part is already declared, `nsdeclare` will not overwrite it.

### separator
Type: `String`

Default: `'\n'`

If you would like to separate declaration parts with something other than `\n`, you can pass it as `options.separator`:

```js
var declare = require('nsdeclare');

var declaration = declare('MyApp.Templates', { separator: '' });
```

Result:
```js
this["MyApp"] = this["MyApp"] || {};this["MyApp"]["Templates"] = this["MyApp"]["Templates"] || {};
```

### root
Type: `String`

Default: `'this'`

By default, `nsdeclare` will declare namespaces within the `this` object (which defaults to `window` in browser environments). You can change this behavior with `options.root`:

```js
var declare = require('nsdeclare');

var declaration = declare('MyApp.Templates', { root: 'global' });
```

Result:
```js
global["MyApp"] = global["MyApp"] || {};
global["MyApp"]["Templates"] = global["MyApp"]["Templates"] || {};
```

### response
Type: `String`  
Default: `declaration`

By default, `nsdeclare` will return the declaration as a string. In some cases, you might want additional details such as a safe reference to the namespace itself. Passing `response: 'details'` will cause `nsdeclare` to return an object with the following properties:

  * `namespace` - The namespace itself as a `String`
  * `declaration` - The declaration of the namespace as a `String`

```js
var declare = require('nsdeclare');

var declaration = declare('MyApp.Templates', { response: 'object' });
```

Result:
```js
{
  namespace: 'this["MyApp"]["Templates"]',
  declaration: 'this["MyApp"] = this["MyApp"] || {};\nthis["MyApp"]["Templates"] = this["MyApp"]["Templates"] || {};'
}
```

[travis]: http://travis-ci.org/lazd/nsdeclare
[travis-image]: https://secure.travis-ci.org/lazd/nsdeclare.png?branch=master

[npm-url]: https://npmjs.org/package/nsdeclare
[npm-image]: https://badge.fury.io/js/nsdeclare.png

---
_Source: https://npm.io/package/nsdeclare · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
