[Pkg-javascript-commits] [node-umd] 01/08: Import Upstream version 3.0.1

Sruthi Chandran srud-guest at moszumanska.debian.org
Thu Oct 13 10:30:09 UTC 2016


This is an automated email from the git hooks/post-receive script.

srud-guest pushed a commit to branch master
in repository node-umd.

commit 413407b0ab52c174912485dd39bd20be39bbfafd
Author: Sruthi <srud at disroot.org>
Date:   Thu Oct 13 14:35:05 2016 +0530

    Import Upstream version 3.0.1
---
 .gitignore                     |  19 +++++++++
 .travis.yml                    |   3 ++
 HISTORY.md                     |  64 +++++++++++++++++++++++++++++++
 LICENSE                        |  19 +++++++++
 README.md                      |  82 +++++++++++++++++++++++++++++++++++++++
 UMD.png                        | Bin 0 -> 21163 bytes
 bin/cli.js                     |  43 +++++++++++++++++++++
 examples/build.js              |  25 ++++++++++++
 examples/cjs/bundle.js         |   3 ++
 examples/cjs/index.js          |   1 +
 examples/constructor/bundle.js |   3 ++
 examples/constructor/index.js  |   1 +
 examples/raw/bundle.js         |   3 ++
 examples/raw/index.js          |   1 +
 package.json                   |  28 ++++++++++++++
 source.js                      |  78 +++++++++++++++++++++++++++++++++++++
 template.js                    |  30 +++++++++++++++
 test/index.js                  |  85 +++++++++++++++++++++++++++++++++++++++++
 18 files changed, 488 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dc156b8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,19 @@
+lib-cov
+*.seed
+*.log
+*.csv
+*.dat
+*.out
+*.pid
+*.gz
+
+pids
+logs
+results
+
+npm-debug.log
+
+node_modules
+
+/template.min.js
+/index.js
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..6e5919d
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+  - "0.10"
diff --git a/HISTORY.md b/HISTORY.md
new file mode 100644
index 0000000..2d4b449
--- /dev/null
+++ b/HISTORY.md
@@ -0,0 +1,64 @@
+3.0.1 / 2015-04-25
+==================
+
+- Document and test casing/sanitization behavior (thanks @bendrucker)
+
+3.0.0 / 2015-02-04
+==================
+
+ - remove dependency on ruglify (thanks to @zertosh)
+ - add `this` as an additional fallback when looking for a global (thanks to @winterbe)
+ - use `options` rather than `true` / `false` for whether to use CommonJS (with fallback for backwards compatibility).
+ - support `$` and `_` in module names (thanks to @fitnr) **(BREAKING CHANGE)**
+ - uglify as a pre-publish step - removing a dependency
+ - brfs as a pre-publish step - allowing this module to be used from the browser.
+ - remove support for streaming **(BREAKING CHANGE)**
+
+2.1.0 / 2014-04-02
+==================
+
+ - Check for definition of `module` as well as `exports` for CommonJS (fixes some custom RequireJS loaders)
+ - Pass empty array to define for AMD
+
+2.0.0 / 2013-12-29
+==================
+
+ - Use module name as a namespace for globals if it contains `.`
+
+1.3.1 / 2013-08-25
+==================
+
+ - Update uglify-js
+
+1.3.0 / 2013-08-01
+==================
+
+ - Remove SES and Montage bootstrap
+ - Add MIT LICENSE
+ - Handle web workers global
+ - Update uglify-js to fix npm warning
+
+1.2.1 / 2013-06-07
+==================
+
+ - Fix CLI
+
+1.2.0 / 2013-06-07
+==================
+
+ - Add CLI
+
+1.1.1 / 2013-04-15
+==================
+
+ - Update through
+
+1.1.0 / 2013-03-31
+==================
+
+ - Make Cammel Case less suprising/forcefull
+
+1.0.0 / 2013-03-16
+==================
+
+ - Initial Release
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..dfb0b19
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2013 Forbes Lindesay
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the 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 AND NONINFRINGEMENT. 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.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3b9b8f7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,82 @@
+# umd
+<img src="http://i.imgur.com/ypw29XY.png" align="right"/>
+
+Universal Module Definition for use in automated build systems
+
+ - simple synchronous wrapping of a string
+ - `return` style module support
+ - CommonJS support
+ - prevents internal UMDs from conflicting
+
+[![Build Status](https://img.shields.io/travis/ForbesLindesay/umd/master.svg)](https://travis-ci.org/ForbesLindesay/umd)
+[![Dependency Status](https://img.shields.io/gemnasium/ForbesLindesay/umd.svg)](https://gemnasium.com/ForbesLindesay/umd)
+[![NPM version](https://img.shields.io/npm/v/umd.svg)](http://badge.fury.io/js/umd)
+
+## Source Format
+
+In order for the UMD wrapper to work the source code for your module should `return` the export, e.g.
+
+```javascript
+function method() {
+  //code
+}
+method.helper = function () {
+  //code
+}
+return method;
+```
+
+For examples, see the examples directory.  The CommonJS module format is also supported by passing true as the second argument to methods.
+
+## API
+
+options:
+
+ - `commonJS` (default: `false`) - If commonJS is `true` then it will accept CommonJS source instead of source code which `return`s the module.
+
+### umd(name, source, [options])
+
+  The `name` should the the name of the module.  Use a string like name, all lower case with hyphens instead of spaces.
+
+  If `source` should be a string, that is wrapped in umd and returned as a string.
+
+### umd.prelude(module, [options])
+
+  return the text which will be inserted before a module.
+
+### umd.postlude(module, [options])
+
+  return the text which will be inserted after a module.
+
+## Command Line
+
+```
+Usage: umd <name> <source> <destination> [options]
+
+Pipe Usage: umd <name> [options] < source > destination
+
+Options:
+
+ -h --help     Display usage information
+ -c --commonJS Use CommonJS module format
+ ```
+
+ You can easilly pipe unix commands together like:
+
+ ```js
+ cat my-module.js | umd my-module | uglify-js > my-module.umd.min.js
+ ```
+
+## Name Casing and Characters
+
+The `name` passed to `umd` will be converted to camel case (`my-library` becomes `myLibrary`) and may only contain:
+
+* alphanumeric characters
+* $
+* _
+
+The name may not begin with a number. Invalid characters will be stripped. 
+
+## License
+
+  MIT
diff --git a/UMD.png b/UMD.png
new file mode 100644
index 0000000..94f7298
Binary files /dev/null and b/UMD.png differ
diff --git a/bin/cli.js b/bin/cli.js
new file mode 100644
index 0000000..3a2287a
--- /dev/null
+++ b/bin/cli.js
@@ -0,0 +1,43 @@
+#!/usr/bin/env node
+
+var read = require('fs').createReadStream
+var write = require('fs').createWriteStream
+
+var umd = require('../')
+
+var args = process.argv.slice(2)
+
+var help = false
+var commonJS = false
+args = args.filter(function (arg) {
+  if (arg === '-h' || arg === '--help') {
+    help = true
+    return false
+  } else if (arg === '-c' || arg === '--commonJS') {
+    commonJS = true
+    return false
+  }
+  return true
+})
+
+if (help || !args[0]) {
+  console.log('Usage: umd <name> <source> <destination> [options]')
+  console.log('')
+  console.log('Pipe Usage: umd <name> [options] < source > destination')
+  console.log('')
+  console.log('Options:')
+  console.log('')
+  console.log(' -h --help     Display usage information')
+  console.log(' -c --commonJS Use CommonJS module format')
+  console.log('')
+  if (!help) process.exit(1)
+} else {
+  var source = args[1] ? read(args[1]) : process.stdin
+  var dest = args[2] ? write(args[2]) : process.stdout
+  var prelude = umd.prelude(args[0], {commonJS: commonJS})
+  var postlude = umd.postlude(args[0], {commonJS: commonJS})
+  dest.write(prelude)
+  source.on('end', function () {
+    dest.write(postlude + '\n')
+  }).pipe(dest, {end: false})
+}
diff --git a/examples/build.js b/examples/build.js
new file mode 100644
index 0000000..a2eeb99
--- /dev/null
+++ b/examples/build.js
@@ -0,0 +1,25 @@
+var umd = require('../');
+var fs = require('fs');
+var join = require('path').join;
+
+fs.createReadStream(join(__dirname, 'cjs', 'index.js'))
+  .pipe(umd('common-js-module', true))
+  .pipe(fs.createWriteStream(join(__dirname, 'cjs', 'bundle.js')))
+  .on('close', end);
+
+fs.createReadStream(join(__dirname, 'raw', 'index.js'))
+  .pipe(umd('common-js-module', false))
+  .pipe(fs.createWriteStream(join(__dirname, 'raw', 'bundle.js')))
+  .on('close', end);
+fs.createReadStream(join(__dirname, 'constructor', 'index.js'))
+  .pipe(umd('Common-Js-Module', false))
+  .pipe(fs.createWriteStream(join(__dirname, 'constructor', 'bundle.js')))
+  .on('close', end);
+
+var remaining = 2;
+function end() {
+  if (0 !== --remaining) return;
+  console.log(require('./cjs/bundle'));
+  console.log(require('./raw/bundle'));
+  console.log(require('./constructor/bundle'));
+}
\ No newline at end of file
diff --git a/examples/cjs/bundle.js b/examples/cjs/bundle.js
new file mode 100644
index 0000000..3874f6d
--- /dev/null
+++ b/examples/cjs/bundle.js
@@ -0,0 +1,3 @@
+!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.commonJsModule=e():"undefined"!=typeof global?global.commonJsModule=e():"undefined"!=typeof self&&(self.commonJsModule=e())}(function(){var define,module,exports;module={exports:(exports={})};
+module.exports = "common JS example";
+return module.exports;});
\ No newline at end of file
diff --git a/examples/cjs/index.js b/examples/cjs/index.js
new file mode 100644
index 0000000..d6ff481
--- /dev/null
+++ b/examples/cjs/index.js
@@ -0,0 +1 @@
+module.exports = "common JS example";
\ No newline at end of file
diff --git a/examples/constructor/bundle.js b/examples/constructor/bundle.js
new file mode 100644
index 0000000..7eb6329
--- /dev/null
+++ b/examples/constructor/bundle.js
@@ -0,0 +1,3 @@
+!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.CommonJsModule=e():"undefined"!=typeof global?global.CommonJsModule=e():"undefined"!=typeof self&&(self.CommonJsModule=e())}(function(){var define,module,exports;
+return "Constructor example";
+});
\ No newline at end of file
diff --git a/examples/constructor/index.js b/examples/constructor/index.js
new file mode 100644
index 0000000..5bb5266
--- /dev/null
+++ b/examples/constructor/index.js
@@ -0,0 +1 @@
+return "Constructor example";
\ No newline at end of file
diff --git a/examples/raw/bundle.js b/examples/raw/bundle.js
new file mode 100644
index 0000000..a967d63
--- /dev/null
+++ b/examples/raw/bundle.js
@@ -0,0 +1,3 @@
+!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.commonJsModule=e():"undefined"!=typeof global?global.commonJsModule=e():"undefined"!=typeof self&&(self.commonJsModule=e())}(function(){var define,module,exports;
+return "Raw example";
+});
\ No newline at end of file
diff --git a/examples/raw/index.js b/examples/raw/index.js
new file mode 100644
index 0000000..365e225
--- /dev/null
+++ b/examples/raw/index.js
@@ -0,0 +1 @@
+return "Raw example";
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..48cb0db
--- /dev/null
+++ b/package.json
@@ -0,0 +1,28 @@
+{
+  "name": "umd",
+  "version": "3.0.1",
+  "description": "Universal Module Definition for use in automated build systems",
+  "bin": "./bin/cli.js",
+  "dependencies": {},
+  "devDependencies": {
+    "brfs": "^1.3.0",
+    "linify": "~1.0.1",
+    "mocha": "*",
+    "uglify-js": "~2.4.0"
+  },
+  "scripts": {
+    "build": "uglifyjs template.js > template.min.js && brfs source.js > index.js",
+    "test": "npm run build && mocha -R spec",
+    "prepublish": "npm run build && linify transform bin"
+  },
+  "files": [
+    "index.js",
+    "bin/cli.js"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/ForbesLindesay/umd.git"
+  },
+  "author": "ForbesLindesay",
+  "license": "MIT"
+}
diff --git a/source.js b/source.js
new file mode 100644
index 0000000..cc22308
--- /dev/null
+++ b/source.js
@@ -0,0 +1,78 @@
+'use strict';
+
+var fs = require('fs');
+var templateSTR = fs.readFileSync(__dirname + '/template.min.js', 'utf8');
+
+function template(moduleName, options) {
+  if (typeof options === 'boolean') {
+    options = {commonJS: options};
+  } else if (!options) {
+    options = {};
+  }
+  var str = templateSTR.replace(/defineNamespace\(\)/g, compileNamespace(moduleName))
+    .split('source()')
+  str[0] = str[0].trim();
+  //make sure these are undefined so as to not get confused if modules have inner UMD systems
+  str[0] += 'var define,module,exports;';
+  if (options.commonJS) str[0] += 'module={exports:(exports={})};';
+  str[0] += '\n';
+  if (options.commonJS) str[1] = 'return module.exports;' + str[1];
+  str[1] = '\n' + str[1];
+  return str;
+}
+
+exports = module.exports = function (name, src, options) {
+  if (typeof options === 'string' && typeof src === 'object') {
+    var tmp = options;
+    options = src;
+    src = tmp;
+  }
+  return exports.prelude(name, options) + src + exports.postlude(name, options);
+};
+
+exports.prelude = function (moduleName, options) {
+  return template(moduleName, options)[0];
+};
+exports.postlude = function (moduleName, options) {
+  return template(moduleName, options)[1];
+};
+
+
+function camelCase(name) {
+  name = name.replace(/\-([a-z])/g, function (_, char) { return char.toUpperCase(); });
+  if (!/^[a-zA-Z_$]$/.test(name[0])) {
+    name = name.substr(1);
+  }
+  var result = name.replace(/[^\w$]+/g, '')
+  if (!result) {
+    throw new Error('Invalid JavaScript identifier resulted from camel-casing');
+  }
+  return result
+}
+
+
+function compileNamespace(name) {
+  var names = name.split('.')
+
+  // No namespaces, yield the best case 'global.NAME = VALUE'
+  if (names.length === 1) {
+    return 'g.' + camelCase(name) + ' = f()';
+
+  // Acceptable case, with reasonable compilation
+  } else if (names.length === 2) {
+    names = names.map(camelCase);
+    return '(g.' + names[0] + ' || (g.' + names[0] + ' = {})).' + names[1] + ' = f()';
+
+  // Worst case, too many namespaces to care about
+  } else {
+    var valueContainer = names.pop()
+    return names.map(compileNamespaceStep)
+                .concat(['g.' + camelCase(valueContainer) + ' = f()'])
+                .join(';');
+  }
+}
+
+function compileNamespaceStep(name) {
+  name = camelCase(name);
+  return 'g=(g.' + name + '||(g.' + name + ' = {}))';
+}
diff --git a/template.js b/template.js
new file mode 100644
index 0000000..c9ecf2f
--- /dev/null
+++ b/template.js
@@ -0,0 +1,30 @@
+;(function (f) {
+  // CommonJS
+  if (typeof exports === "object" && typeof module !== "undefined") {
+    module.exports = f();
+
+  // RequireJS
+  } else if (typeof define === "function" && define.amd) {
+    define([], f);
+
+  // <script>
+  } else {
+    var g
+    if (typeof window !== "undefined") {
+      g = window;
+    } else if (typeof global !== "undefined") {
+      g = global;
+    } else if (typeof self !== "undefined") {
+      g = self;
+    } else {
+      // works providing we're not in "use strict";
+      // needed for Java 8 Nashorn
+      // seee https://github.com/facebook/react/issues/3037
+      g = this;
+    }
+    defineNamespace()
+  }
+
+})(function () {
+  source()//trick uglify-js into not minifying
+});
diff --git a/test/index.js b/test/index.js
new file mode 100644
index 0000000..33fca69
--- /dev/null
+++ b/test/index.js
@@ -0,0 +1,85 @@
+'use strict';
+
+var assert = require('assert')
+var umd = require('../')
+var src = umd('sentinel-prime', 'return "sentinel"')
+var namespacedSrc = umd('sentinel.prime', 'return "sentinel"')
+var multiNamespaces = umd('a.b.c.d.e', 'return "sentinel"')
+var dollared = umd('$', 'return "sentinel"')
+var number = umd('2sentinel', 'return "sentinel"')
+var strip = umd('sentinel^', 'return "sentinel"')
+
+it('throws when no valid identifier is produced', function () {
+  assert.throws(umd.bind(null, '^!', ''), /Invalid JavaScript/)
+})
+describe('with CommonJS', function () {
+  it('uses module.exports', function () {
+    var module = {exports: {}}
+    require('vm').runInNewContext(src, {module: module, exports: module.exports})
+    assert(module.exports === 'sentinel')
+  })
+})
+describe('with amd', function () {
+  it('uses define', function () {
+    var defed
+    function define(d, fn) {
+      assert.deepEqual(d, [], 'You must pass an empty array of dependencies to amd to prevent dependency scanning.');
+      defed = fn()
+    }
+    define.amd = true
+    require('vm').runInNewContext(src, {define: define});
+    assert(defed === 'sentinel')
+  })
+})
+describe('in the absense of a module system', function () {
+  it('uses window', function () {
+    var glob = {}
+    require('vm').runInNewContext(src, {window: glob})
+    assert(glob.sentinelPrime === 'sentinel')
+  })
+  it('uses global', function () {
+    var glob = {}
+    require('vm').runInNewContext(src, {global: glob})
+    assert(glob.sentinelPrime === 'sentinel')
+  })
+  it('uses self', function () {
+    var glob = {}
+    require('vm').runInNewContext(src, {self: glob})
+    assert(glob.sentinelPrime === 'sentinel')
+  })
+  it('uses `this`', function () {
+    var glob = {}
+    require('vm').runInNewContext(src, glob)
+    assert(glob.sentinelPrime === 'sentinel')
+  })
+  it('creates the proper namespaces', function() {
+    var glob = {}
+    Function('window', namespacedSrc)(glob)
+    assert(glob.sentinel.prime === 'sentinel')
+  })
+  it('creates proper multiple namespaces', function() {
+    var glob = {}
+    Function('window', multiNamespaces)(glob)
+    assert(glob.a.b.c.d.e === 'sentinel')
+  })
+  it('allows the name to be a dollar', function () {
+    var glob = {}
+    Function('window', dollared)(glob)
+    assert(glob.$ === 'sentinel')
+  })
+  it('camelCases the name', function () {
+    var glob = {}
+    Function('window', src)(glob)
+    assert(glob.sentinelPrime === 'sentinel')
+  })
+  it('strips invalid leading characters', function () {
+    var glob = {}
+    Function('window', number)(glob)
+    assert(glob.sentinel === 'sentinel')
+  })
+  it('removes invalid characters', function () {
+    var glob = {}
+    Function('window', strip)(glob)
+    assert(glob.sentinel === 'sentinel')
+  })
+})

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-umd.git



More information about the Pkg-javascript-commits mailing list