[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