summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/npm-packlist/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/npm-packlist/index.js')
-rw-r--r--deps/npm/node_modules/npm-packlist/index.js42
1 files changed, 33 insertions, 9 deletions
diff --git a/deps/npm/node_modules/npm-packlist/index.js b/deps/npm/node_modules/npm-packlist/index.js
index 777b58590d..8bfd257794 100644
--- a/deps/npm/node_modules/npm-packlist/index.js
+++ b/deps/npm/node_modules/npm-packlist/index.js
@@ -34,6 +34,7 @@ const defaultRules = [
'npm-debug.log',
'**/.npmrc',
'.*.swp',
+ '.DS_Store',
'**/.DS_Store/**',
'._*',
'**/._*/**',
@@ -90,6 +91,16 @@ const npmWalker = Class => class Walker extends Class {
}
}
+ onReaddir (entries) {
+ if (!this.parent) {
+ entries = entries.filter(e =>
+ e !== '.git' &&
+ !(e === 'node_modules' && this.bundled.length === 0)
+ )
+ }
+ return super.onReaddir(entries)
+ }
+
filterEntry (entry, partial) {
// get the partial path from the root of the walk
const p = this.path.substr(this.root.length + 1)
@@ -147,6 +158,14 @@ const npmWalker = Class => class Walker extends Class {
// if there's a bin, browser or main, make sure we don't ignore it
// also, don't ignore the package.json itself!
+ //
+ // Weird side-effect of this: a readme (etc) file will be included
+ // if it exists anywhere within a folder with a package.json file.
+ // The original intent was only to include these files in the root,
+ // but now users in the wild are dependent on that behavior for
+ // localized documentation and other use cases. Adding a `/` to
+ // these rules, while tempting and arguably more "correct", is a
+ // breaking change.
const rules = [
pkg.browser ? '!' + pkg.browser : '',
pkg.main ? '!' + pkg.main : '',
@@ -234,15 +253,20 @@ const walkSync = options => {
return walker.result
}
-// package.json first, node_modules last, files before folders, alphasort
-const sort = (a, b) =>
- a === 'package.json' ? -1
- : b === 'package.json' ? 1
- : /^node_modules/.test(a) && !/^node_modules/.test(b) ? 1
- : /^node_modules/.test(b) && !/^node_modules/.test(a) ? -1
- : path.dirname(a) === '.' && path.dirname(b) !== '.' ? -1
- : path.dirname(b) === '.' && path.dirname(a) !== '.' ? 1
- : a.localeCompare(b)
+// optimize for compressibility
+// extname, then basename, then locale alphabetically
+// https://twitter.com/isntitvacant/status/1131094910923231232
+const sort = (a, b) => {
+ const exta = path.extname(a).toLowerCase()
+ const extb = path.extname(b).toLowerCase()
+ const basea = path.basename(a).toLowerCase()
+ const baseb = path.basename(b).toLowerCase()
+
+ return exta.localeCompare(extb) ||
+ basea.localeCompare(baseb) ||
+ a.localeCompare(b)
+}
+
module.exports = walk
walk.sync = walkSync