nsdeclare v0.1.0
nsdeclare

Safely declare a namespace using dot notation
Usage
var declare = require('nsdeclare');
var declaration = declare('MyApp.Templates');Result:
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:
var declare = require('nsdeclare');
var declaration = declare('MyApp.Templates.Main', { value: 'function() { return "Main"; }' });Result:
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:
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:
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:
var declare = require('nsdeclare');
var declaration = declare('MyApp.Templates', { separator: '' });Result:
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:
var declare = require('nsdeclare');
var declaration = declare('MyApp.Templates', { root: 'global' });Result:
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 aStringdeclaration- The declaration of the namespace as aString
var declare = require('nsdeclare');
var declaration = declare('MyApp.Templates', { response: 'object' });Result:
{
namespace: 'this["MyApp"]["Templates"]',
declaration: 'this["MyApp"] = this["MyApp"] || {};\nthis["MyApp"]["Templates"] = this["MyApp"]["Templates"] || {};'
}