From 7dbd646f21fdf8a45619557741d28130d01ddd5d Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Thu, 29 Mar 2018 20:41:52 -0300 Subject: [PATCH 1/9] Tests fix for windows --- test/tests.coffee | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/tests.coffee b/test/tests.coffee index a48a423..62058b8 100644 --- a/test/tests.coffee +++ b/test/tests.coffee @@ -43,11 +43,11 @@ describe "gulp-order", -> stream.on "data", files.push.bind(files) stream.on "end", -> expect(files.length).to.equal 5 - expect(files[0].relative).to.equal "vendor/f/b.js" - expect(files[1].relative).to.equal "vendor/z/a.js" - expect(files[2].relative).to.equal "app/a.js" - expect(files[3].relative).to.equal "other/a.js" - expect(files[4].relative).to.equal "other/b/a.js" + expect(files[0].relative).to.equal path.normalize "vendor/f/b.js" + expect(files[1].relative).to.equal path.normalize "vendor/z/a.js" + expect(files[3].relative).to.equal path.normalize "other/a.js" + expect(files[2].relative).to.equal path.normalize "app/a.js" + expect(files[4].relative).to.equal path.normalize "other/b/a.js" done() stream.write newFile("vendor/f/b.js") From 6ca69971ceb9165e5060261731f491e2e0c0bf32 Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Thu, 29 Mar 2018 20:43:26 -0300 Subject: [PATCH 2/9] Coffee script and npm scripts update --- package-lock.json | 856 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 6 +- test/index.js | 2 +- 3 files changed, 860 insertions(+), 4 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e303cf6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,856 @@ +{ + "name": "gulp-order", + "version": "1.1.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "assertion-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", + "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "chai": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-1.9.2.tgz", + "integrity": "sha1-Pxog+CsLnXQ3V30k1vErGmnTtZA=", + "dev": true, + "requires": { + "assertion-error": "1.0.0", + "deep-eql": "0.1.3" + } + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true, + "requires": { + "ansi-styles": "1.1.0", + "escape-string-regexp": "1.0.5", + "has-ansi": "0.1.0", + "strip-ansi": "0.3.0", + "supports-color": "0.2.0" + } + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "coffeescript": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.2.3.tgz", + "integrity": "sha512-J+qHBN+ltCtOsWcA4X7jDRgUf+e3HHIicGhMG7pCVe3/gv/rt/OhjAaTVvfg+Mkj8wf4oADZmw97RnyhzOk0cA==", + "dev": true + }, + "commander": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz", + "integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + } + }, + "diff": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz", + "integrity": "sha1-JLuwAcSn1VIhaefKvbLCgU7ZHPQ=", + "dev": true + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "glob": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", + "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=", + "dev": true, + "requires": { + "graceful-fs": "2.0.3", + "inherits": "2.0.3", + "minimatch": "0.2.14" + }, + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz", + "integrity": "sha1-3i1mE20ALhErpw8/EMMc98NQsto=", + "dev": true + }, + "gulp-util": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", + "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", + "dev": true, + "requires": { + "chalk": "0.5.1", + "dateformat": "1.0.12", + "lodash._reinterpolate": "2.4.1", + "lodash.template": "2.4.1", + "minimist": "0.2.0", + "multipipe": "0.1.2", + "through2": "0.5.1", + "vinyl": "0.2.3" + } + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "lodash._escapehtmlchar": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", + "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", + "dev": true, + "requires": { + "lodash._htmlescapes": "2.4.1" + } + }, + "lodash._escapestringchar": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz", + "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=", + "dev": true + }, + "lodash._htmlescapes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz", + "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=", + "dev": true + }, + "lodash._isnative": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=", + "dev": true + }, + "lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", + "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=", + "dev": true + }, + "lodash._reunescapedhtml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", + "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", + "dev": true, + "requires": { + "lodash._htmlescapes": "2.4.1", + "lodash.keys": "2.4.1" + } + }, + "lodash._shimkeys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1" + } + }, + "lodash.defaults": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", + "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1", + "lodash.keys": "2.4.1" + } + }, + "lodash.escape": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", + "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", + "dev": true, + "requires": { + "lodash._escapehtmlchar": "2.4.1", + "lodash._reunescapedhtml": "2.4.1", + "lodash.keys": "2.4.1" + } + }, + "lodash.isobject": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", + "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1" + } + }, + "lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true, + "requires": { + "lodash._isnative": "2.4.1", + "lodash._shimkeys": "2.4.1", + "lodash.isobject": "2.4.1" + } + }, + "lodash.template": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", + "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", + "dev": true, + "requires": { + "lodash._escapestringchar": "2.4.1", + "lodash._reinterpolate": "2.4.1", + "lodash.defaults": "2.4.1", + "lodash.escape": "2.4.1", + "lodash.keys": "2.4.1", + "lodash.templatesettings": "2.4.1", + "lodash.values": "2.4.1" + } + }, + "lodash.templatesettings": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", + "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", + "dev": true, + "requires": { + "lodash._reinterpolate": "2.4.1", + "lodash.escape": "2.4.1" + } + }, + "lodash.values": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", + "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", + "dev": true, + "requires": { + "lodash.keys": "2.4.1" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "minimist": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz", + "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=", + "dev": true + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", + "dev": true + }, + "mocha": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-1.17.1.tgz", + "integrity": "sha1-f3Zx1oUm0HS3uuZgyQmfh+DqHMs=", + "dev": true, + "requires": { + "commander": "2.0.0", + "debug": "3.1.0", + "diff": "1.0.7", + "glob": "3.2.3", + "growl": "1.7.0", + "jade": "0.26.3", + "mkdirp": "0.3.5" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "stable": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.5.tgz", + "integrity": "sha1-CCMvYMcy6YkHhLW+0HNPizKoh7k=" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", + "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "vinyl": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", + "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", + "dev": true, + "requires": { + "clone-stats": "0.0.1" + } + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 8fab349..76b822e 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "main": "lib/index.js", "files": "lib", "scripts": { - "test": "node_modules/.bin/mocha", - "prepublish": "node_modules/.bin/coffee -o lib -c src/*.coffee" + "test": "mocha", + "prepare": "coffee -o lib -c ./src/*.coffee" }, "engines": { "node": "*" @@ -25,7 +25,7 @@ "url": "http://github.com/sirlantis/gulp-order/raw/master/LICENSE" }, "devDependencies": { - "coffee-script": "~1.7.1", + "coffeescript": "^2.2.3", "mocha": "~1.17.1", "chai": "~1.9.0", "gulp-util": "~2.2.14" diff --git a/test/index.js b/test/index.js index f3e5780..3cbaee6 100644 --- a/test/index.js +++ b/test/index.js @@ -1,2 +1,2 @@ -require("coffee-script/register"); +require("coffeescript/register"); require("./tests.coffee"); From e7a28a36f2eca87d543937215cc78d72a95e23bc Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Thu, 29 Mar 2018 21:47:52 -0300 Subject: [PATCH 3/9] Changes to support a custom rank function and tests for that --- src/index.coffee | 10 ++++++---- test/tests.coffee | 46 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/index.coffee b/src/index.coffee index ccf6806..0fb0a6b 100644 --- a/src/index.coffee +++ b/src/index.coffee @@ -20,16 +20,18 @@ module.exports = (patterns = [], options = {}) -> else file.relative - rank = (s) -> + rank = (matchers, file) -> + relativePath = relative file for matcher, index in matchers - return index if matcher.match s + return index if matcher.match relativePath return matchers.length onEnd = -> sort.inplace files, (a, b) -> - aIndex = rank relative a - bIndex = rank relative b + ranker = options.rank || rank + aIndex = ranker(matchers, a) + bIndex = ranker(matchers, b) if aIndex is bIndex String(relative a).localeCompare relative b diff --git a/test/tests.coffee b/test/tests.coffee index 62058b8..ed78f21 100644 --- a/test/tests.coffee +++ b/test/tests.coffee @@ -9,11 +9,12 @@ cwd = "/home/johndoe/" newFile = (filepath, base) -> base ?= cwd - new File - path: path.join(base, filepath) - base: base - cwd: cwd - contents: new Buffer("") + new File { + path: path.join(base, filepath) + base: base + cwd: cwd + contents: new Buffer("") + } describe "gulp-order", -> describe "order()", -> @@ -58,7 +59,7 @@ describe "gulp-order", -> stream.end() it "supports a custom base", (done) -> - stream = order(['scripts/b.css'], base: cwd) + stream = order(['scripts/b.css'], { base: cwd }) files = [] stream.on "data", files.push.bind(files) @@ -72,7 +73,38 @@ describe "gulp-order", -> stream.write newFile("b.css", path.join(cwd, "scripts/")) stream.end() + it "supports a custom custom rank function", (done) -> + byPath = (matchers, file) -> + for matcher, index in matchers + return index if matcher.match file.path + + return matchers.length + + toAbsolutePath = (p) -> path.resolve(__dirname, p) + + files = ["**/*.module.js", "**/*.config.js", "**/*.run.js"].map toAbsolutePath + console.log files + stream = order(files, { rank: byPath }) + + files = [] + stream.on "data", files.push.bind(files) + stream.on "end", -> + expect(files.length).to.equal 4 + expect(files[0].relative).to.equal "test.module.js" + expect(files[1].relative).to.equal "test.config.js" + expect(files[2].relative).to.equal "test.run.js" + expect(files[3].relative).to.equal "test.js" + done() + + absoluteBase = path.resolve(__dirname, "scripts/") + stream.write newFile("test.run.js", absoluteBase) + stream.write newFile("test.js", absoluteBase) + stream.write newFile("test.module.js", absoluteBase) + stream.write newFile("test.config.js", absoluteBase) + stream.end() + + it "warns on relative paths in order list", -> expect -> order(['./user.js']) - .to.throw "Don't start patterns with `./` - they will never match. Just leave out `./`" + .to.throw "Don't start patterns with `./` - they will never match. Just leave out `./`" \ No newline at end of file From 681dba3ae7512e5598724f1e0d2553382474fae5 Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Thu, 29 Mar 2018 21:50:01 -0300 Subject: [PATCH 4/9] Removed log fn and moved functions to top --- test/tests.coffee | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/test/tests.coffee b/test/tests.coffee index ed78f21..50c29e2 100644 --- a/test/tests.coffee +++ b/test/tests.coffee @@ -6,6 +6,14 @@ require "mocha" cwd = "/home/johndoe/" +toAbsolutePath = (p) -> path.resolve(__dirname, p) + +byPath = (matchers, file) -> + for matcher, index in matchers + return index if matcher.match file.path + + return matchers.length + newFile = (filepath, base) -> base ?= cwd @@ -14,7 +22,7 @@ newFile = (filepath, base) -> base: base cwd: cwd contents: new Buffer("") - } + } describe "gulp-order", -> describe "order()", -> @@ -74,16 +82,7 @@ describe "gulp-order", -> stream.end() it "supports a custom custom rank function", (done) -> - byPath = (matchers, file) -> - for matcher, index in matchers - return index if matcher.match file.path - - return matchers.length - - toAbsolutePath = (p) -> path.resolve(__dirname, p) - files = ["**/*.module.js", "**/*.config.js", "**/*.run.js"].map toAbsolutePath - console.log files stream = order(files, { rank: byPath }) files = [] From c201cbba092415122f017df57cef098d072c6808 Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Thu, 29 Mar 2018 22:11:43 -0300 Subject: [PATCH 5/9] Rank fn documentation --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/README.md b/README.md index 3528539..bc6e4c9 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,47 @@ gulp Some plugins might provide a wrong `base` on the Vinyl file objects. `base` allows you to set a base directory (for example: your application root directory) for all files. +#### `rank` + +Although this plugin solves most of the order problems with minimatch, sometimes you migth need to use a custom ranking function. +The params received by the rank function are: + +- `matchers` The order param mapped as minimatch matchers +- `files` vinyl pipeline files + +This function **must** return a rank number for the given file. + +A usage example would be: + +```javascript + +function customRank(matcher, file){ + for(const i in matchers){ + if(matchers[i].match(file.path)){ + return i; + } + } + return matchers.length; +} + +const files = [ + "C:/files/script.js" + "C:/files/test.config.js", + "C:/files/test.run.js" + "C:/files/test.module.js", +]; + +gulp + .src(files) + // ... + .pipe(order([ + 'C:/files/*.module.js' + 'C:/files/*.config.js' + 'C:/files/*.run.js' + 'C:/files/*.js' + ], {rank: customRank})) +``` + ## Features Uses [`minimatch`](https://github.com/isaacs/minimatch) for matching. From 6c23d73eefdcc5db756dbf2f24ecc97f983f09e5 Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Thu, 29 Mar 2018 22:29:37 -0300 Subject: [PATCH 6/9] Doc example update --- README.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index bc6e4c9..c5b5ee0 100644 --- a/README.md +++ b/README.md @@ -91,21 +91,17 @@ function customRank(matcher, file){ } const files = [ - "C:/files/script.js" - "C:/files/test.config.js", - "C:/files/test.run.js" - "C:/files/test.module.js", + "C:/files/script.js", + "C:/files/*.config.js", + "C:/files/*.run.js" + "C:/files/*.module.js", + "C:/files/**/*.controller.js", ]; gulp .src(files) // ... - .pipe(order([ - 'C:/files/*.module.js' - 'C:/files/*.config.js' - 'C:/files/*.run.js' - 'C:/files/*.js' - ], {rank: customRank})) + .pipe(order(files, {rank: customRank})) // this should keep the same order of the files array ``` ## Features From 014c31a4d6e45d0de908d4fc219947e93d91abce Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Sat, 31 Mar 2018 12:23:12 -0300 Subject: [PATCH 7/9] Fixes for package.json and removed the test folder --- .npmignore | 1 + package.json | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.npmignore b/.npmignore index a57582c..50a8e2a 100644 --- a/.npmignore +++ b/.npmignore @@ -1 +1,2 @@ /src +/test \ No newline at end of file diff --git a/package.json b/package.json index 76b822e..61ee61f 100644 --- a/package.json +++ b/package.json @@ -12,18 +12,16 @@ "url": "git://github.com/sirlantis/gulp-order.git" }, "main": "lib/index.js", - "files": "lib", + "files": ["lib"], "scripts": { "test": "mocha", - "prepare": "coffee -o lib -c ./src/*.coffee" + "prepare": "npm run compile", + "compile": "coffee -o lib -c ./src/" }, "engines": { "node": "*" }, - "license": { - "type": "MIT", - "url": "http://github.com/sirlantis/gulp-order/raw/master/LICENSE" - }, + "license": "MIT", "devDependencies": { "coffeescript": "^2.2.3", "mocha": "~1.17.1", From 3d2adca7ba3ac2736c7adece14d223f5e1ec2ce0 Mon Sep 17 00:00:00 2001 From: Gabriel Rohden Date: Sat, 31 Mar 2018 12:26:00 -0300 Subject: [PATCH 8/9] Typo fixes --- README.md | 10 +++++----- test/tests.coffee | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c5b5ee0..1b188c8 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ You'll need two streams: - A stream that emits the JavaScript files, and - a stream that emits the compiled CoffeeScript files. - + To combine the streams you can pipe into another `gulp.src` or use `es.merge` (from `event-stream`). But you'll notice that in both cases the files are emitted in the same order as they come in - and this can seem very random. With `gulp-order` you can reorder the files. ## Usage @@ -63,13 +63,13 @@ gulp .pipe(order([...], options)) ``` -#### `base` +### `base` Some plugins might provide a wrong `base` on the Vinyl file objects. `base` allows you to set a base directory (for example: your application root directory) for all files. -#### `rank` +### `rank` -Although this plugin solves most of the order problems with minimatch, sometimes you migth need to use a custom ranking function. +Although this plugin solves most of the order problems with minimatch, sometimes you might need to use a custom ranking function. The params received by the rank function are: - `matchers` The order param mapped as minimatch matchers @@ -112,7 +112,7 @@ Uses [`minimatch`](https://github.com/isaacs/minimatch) for matching. - Try to move your ordering out of your `gulp.src(...)` calls into `order(...)` instead. - You can see the order of the outputted files with [`gulp-print`](https://github.com/alexgorbatchev/gulp-print) - + ## Troubleshooting If your files aren't being ordered in the manner that you expect, try adding the [`base`](#base) option. diff --git a/test/tests.coffee b/test/tests.coffee index 50c29e2..77d19c3 100644 --- a/test/tests.coffee +++ b/test/tests.coffee @@ -81,7 +81,7 @@ describe "gulp-order", -> stream.write newFile("b.css", path.join(cwd, "scripts/")) stream.end() - it "supports a custom custom rank function", (done) -> + it "supports a custom rank function", (done) -> files = ["**/*.module.js", "**/*.config.js", "**/*.run.js"].map toAbsolutePath stream = order(files, { rank: byPath }) From 9ef6bc8c615ba1390b38e1ef6d8cce94e6980f6d Mon Sep 17 00:00:00 2001 From: Gabriel Oliveira Rohden Date: Mon, 2 Apr 2018 09:23:31 -0300 Subject: [PATCH 9/9] Added built lib folder because yarn doesn't run prepare before install --- .gitignore | 1 - lib/index.js | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 lib/index.js diff --git a/.gitignore b/.gitignore index 9d28a1f..07e6e47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ /node_modules -/lib diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..b54cc87 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,63 @@ +// Generated by CoffeeScript 2.2.3 +(function() { + var Minimatch, path, sort, through; + + through = require("through"); + + ({Minimatch} = require("minimatch")); + + path = require("path"); + + sort = require("stable"); + + module.exports = function(patterns = [], options = {}) { + var files, matchers, onEnd, onFile, rank, relative; + files = []; + matchers = patterns.map(function(pattern) { + if (pattern.indexOf("./") === 0) { + throw new Error("Don't start patterns with `./` - they will never match. Just leave out `./`"); + } + return Minimatch(pattern); + }); + onFile = function(file) { + return files.push(file); + }; + relative = function(file) { + if (options.base != null) { + return path.relative(options.base, file.path); + } else { + return file.relative; + } + }; + rank = function(matchers, file) { + var i, index, len, matcher, relativePath; + relativePath = relative(file); + for (index = i = 0, len = matchers.length; i < len; index = ++i) { + matcher = matchers[index]; + if (matcher.match(relativePath)) { + return index; + } + } + return matchers.length; + }; + onEnd = function() { + sort.inplace(files, function(a, b) { + var aIndex, bIndex, ranker; + ranker = options.rank || rank; + aIndex = ranker(matchers, a); + bIndex = ranker(matchers, b); + if (aIndex === bIndex) { + return String(relative(a)).localeCompare(relative(b)); + } else { + return aIndex - bIndex; + } + }); + files.forEach((file) => { + return this.emit("data", file); + }); + return this.emit("end"); + }; + return through(onFile, onEnd); + }; + +}).call(this);