commit
						e30d26d9a0
					
				 1015 changed files with 195137 additions and 0 deletions
			
			
		- 
					1.gitignore
 - 
					1.semver_git_tag
 - 
					9.vscode/extensions.json
 - 
					7.vscode/settings.json
 - 
					7README.md
 - 
					1node_modules/.bin/acorn
 - 
					1node_modules/.bin/cssesc
 - 
					1node_modules/.bin/detective
 - 
					1node_modules/.bin/nanoid
 - 
					1node_modules/.bin/resolve
 - 
					1node_modules/.bin/tailwind
 - 
					1node_modules/.bin/tailwindcss
 - 
					778node_modules/.package-lock.json
 - 
					21node_modules/@nodelib/fs.scandir/LICENSE
 - 
					171node_modules/@nodelib/fs.scandir/README.md
 - 
					20node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts
 - 
					19node_modules/@nodelib/fs.scandir/out/adapters/fs.js
 - 
					4node_modules/@nodelib/fs.scandir/out/constants.d.ts
 - 
					17node_modules/@nodelib/fs.scandir/out/constants.js
 - 
					12node_modules/@nodelib/fs.scandir/out/index.d.ts
 - 
					26node_modules/@nodelib/fs.scandir/out/index.js
 - 
					7node_modules/@nodelib/fs.scandir/out/providers/async.d.ts
 - 
					104node_modules/@nodelib/fs.scandir/out/providers/async.js
 - 
					1node_modules/@nodelib/fs.scandir/out/providers/common.d.ts
 - 
					13node_modules/@nodelib/fs.scandir/out/providers/common.js
 - 
					5node_modules/@nodelib/fs.scandir/out/providers/sync.d.ts
 - 
					54node_modules/@nodelib/fs.scandir/out/providers/sync.js
 - 
					20node_modules/@nodelib/fs.scandir/out/settings.d.ts
 - 
					24node_modules/@nodelib/fs.scandir/out/settings.js
 - 
					20node_modules/@nodelib/fs.scandir/out/types/index.d.ts
 - 
					2node_modules/@nodelib/fs.scandir/out/types/index.js
 - 
					2node_modules/@nodelib/fs.scandir/out/utils/fs.d.ts
 - 
					19node_modules/@nodelib/fs.scandir/out/utils/fs.js
 - 
					2node_modules/@nodelib/fs.scandir/out/utils/index.d.ts
 - 
					5node_modules/@nodelib/fs.scandir/out/utils/index.js
 - 
					44node_modules/@nodelib/fs.scandir/package.json
 - 
					21node_modules/@nodelib/fs.stat/LICENSE
 - 
					126node_modules/@nodelib/fs.stat/README.md
 - 
					13node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts
 - 
					17node_modules/@nodelib/fs.stat/out/adapters/fs.js
 - 
					12node_modules/@nodelib/fs.stat/out/index.d.ts
 - 
					26node_modules/@nodelib/fs.stat/out/index.js
 - 
					4node_modules/@nodelib/fs.stat/out/providers/async.d.ts
 - 
					36node_modules/@nodelib/fs.stat/out/providers/async.js
 - 
					3node_modules/@nodelib/fs.stat/out/providers/sync.d.ts
 - 
					23node_modules/@nodelib/fs.stat/out/providers/sync.js
 - 
					16node_modules/@nodelib/fs.stat/out/settings.d.ts
 - 
					16node_modules/@nodelib/fs.stat/out/settings.js
 - 
					4node_modules/@nodelib/fs.stat/out/types/index.d.ts
 - 
					2node_modules/@nodelib/fs.stat/out/types/index.js
 - 
					37node_modules/@nodelib/fs.stat/package.json
 - 
					21node_modules/@nodelib/fs.walk/LICENSE
 - 
					215node_modules/@nodelib/fs.walk/README.md
 - 
					14node_modules/@nodelib/fs.walk/out/index.d.ts
 - 
					34node_modules/@nodelib/fs.walk/out/index.js
 - 
					12node_modules/@nodelib/fs.walk/out/providers/async.d.ts
 - 
					30node_modules/@nodelib/fs.walk/out/providers/async.js
 - 
					4node_modules/@nodelib/fs.walk/out/providers/index.d.ts
 - 
					9node_modules/@nodelib/fs.walk/out/providers/index.js
 - 
					12node_modules/@nodelib/fs.walk/out/providers/stream.d.ts
 - 
					34node_modules/@nodelib/fs.walk/out/providers/stream.js
 - 
					10node_modules/@nodelib/fs.walk/out/providers/sync.d.ts
 - 
					14node_modules/@nodelib/fs.walk/out/providers/sync.js
 - 
					30node_modules/@nodelib/fs.walk/out/readers/async.d.ts
 - 
					97node_modules/@nodelib/fs.walk/out/readers/async.js
 - 
					7node_modules/@nodelib/fs.walk/out/readers/common.d.ts
 - 
					31node_modules/@nodelib/fs.walk/out/readers/common.js
 - 
					6node_modules/@nodelib/fs.walk/out/readers/reader.d.ts
 - 
					11node_modules/@nodelib/fs.walk/out/readers/reader.js
 - 
					15node_modules/@nodelib/fs.walk/out/readers/sync.d.ts
 - 
					59node_modules/@nodelib/fs.walk/out/readers/sync.js
 - 
					30node_modules/@nodelib/fs.walk/out/settings.d.ts
 - 
					26node_modules/@nodelib/fs.walk/out/settings.js
 - 
					8node_modules/@nodelib/fs.walk/out/types/index.d.ts
 - 
					2node_modules/@nodelib/fs.walk/out/types/index.js
 - 
					44node_modules/@nodelib/fs.walk/package.json
 - 
					22node_modules/acorn-node/.travis.yml
 - 
					94node_modules/acorn-node/CHANGELOG.md
 - 
					95node_modules/acorn-node/LICENSE.md
 - 
					65node_modules/acorn-node/README.md
 - 
					36node_modules/acorn-node/build.js
 - 
					38node_modules/acorn-node/index.js
 - 
					71node_modules/acorn-node/lib/bigint/index.js
 - 
					70node_modules/acorn-node/lib/class-fields/index.js
 - 
					86node_modules/acorn-node/lib/dynamic-import/index.js
 - 
					43node_modules/acorn-node/lib/export-ns-from/index.js
 - 
					55node_modules/acorn-node/lib/import-meta/index.js
 - 
					61node_modules/acorn-node/lib/numeric-separator/index.js
 - 
					135node_modules/acorn-node/lib/private-class-elements/index.js
 - 
					139node_modules/acorn-node/lib/static-class-features/index.js
 - 
					51node_modules/acorn-node/package.json
 - 
					154node_modules/acorn-node/test/index.js
 - 
					57node_modules/acorn-node/walk.js
 - 
					131node_modules/acorn-walk/CHANGELOG.md
 - 
					19node_modules/acorn-walk/LICENSE
 - 
					126node_modules/acorn-walk/README.md
 - 
					112node_modules/acorn-walk/dist/walk.d.ts
 - 
					463node_modules/acorn-walk/dist/walk.js
 - 
					1node_modules/acorn-walk/dist/walk.js.map
 - 
					443node_modules/acorn-walk/dist/walk.mjs
 
@ -0,0 +1 @@ | 
				
			|||
node_modules | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
0.0.1 | 
				
			|||
@ -0,0 +1,9 @@ | 
				
			|||
{ | 
				
			|||
    "recommendations": [ | 
				
			|||
      "dbaeumer.vscode-eslint", | 
				
			|||
      "esbenp.prettier-vscode", | 
				
			|||
      "streetsidesoftware.code-spell-checker", | 
				
			|||
      "streetsidesoftware.code-spell-checker-french-reforme", | 
				
			|||
      "bradlc.vscode-tailwindcss", | 
				
			|||
    ] | 
				
			|||
  } | 
				
			|||
@ -0,0 +1,7 @@ | 
				
			|||
{ | 
				
			|||
  "cSpell.language": "en,fr-FR", | 
				
			|||
  "cSpell.words": [ | 
				
			|||
    "crealise", | 
				
			|||
    "Créalise" | 
				
			|||
  ], | 
				
			|||
} | 
				
			|||
@ -0,0 +1,7 @@ | 
				
			|||
Web Development example 01 | 
				
			|||
========================== | 
				
			|||
 | 
				
			|||
* [x] Tailwind | 
				
			|||
* [x] Font Awesome | 
				
			|||
* [x] Alpine JS | 
				
			|||
  * [x] transition | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
../acorn/bin/acorn | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
../cssesc/bin/cssesc | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
../detective/bin/detective.js | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
../nanoid/bin/nanoid.cjs | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
../resolve/bin/resolve | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
../tailwindcss/lib/cli.js | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
../tailwindcss/lib/cli.js | 
				
			|||
@ -0,0 +1,778 @@ | 
				
			|||
{ | 
				
			|||
  "name": "webdev-minimal", | 
				
			|||
  "lockfileVersion": 2, | 
				
			|||
  "requires": true, | 
				
			|||
  "packages": { | 
				
			|||
    "node_modules/@nodelib/fs.scandir": { | 
				
			|||
      "version": "2.1.5", | 
				
			|||
      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", | 
				
			|||
      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "@nodelib/fs.stat": "2.0.5", | 
				
			|||
        "run-parallel": "^1.1.9" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/@nodelib/fs.stat": { | 
				
			|||
      "version": "2.0.5", | 
				
			|||
      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", | 
				
			|||
      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/@nodelib/fs.walk": { | 
				
			|||
      "version": "1.2.8", | 
				
			|||
      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", | 
				
			|||
      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "@nodelib/fs.scandir": "2.1.5", | 
				
			|||
        "fastq": "^1.6.0" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/acorn": { | 
				
			|||
      "version": "7.4.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", | 
				
			|||
      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", | 
				
			|||
      "dev": true, | 
				
			|||
      "bin": { | 
				
			|||
        "acorn": "bin/acorn" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.4.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/acorn-node": { | 
				
			|||
      "version": "1.8.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", | 
				
			|||
      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "acorn": "^7.0.0", | 
				
			|||
        "acorn-walk": "^7.0.0", | 
				
			|||
        "xtend": "^4.0.2" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/acorn-walk": { | 
				
			|||
      "version": "7.2.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", | 
				
			|||
      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.4.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/anymatch": { | 
				
			|||
      "version": "3.1.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", | 
				
			|||
      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "normalize-path": "^3.0.0", | 
				
			|||
        "picomatch": "^2.0.4" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/arg": { | 
				
			|||
      "version": "5.0.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", | 
				
			|||
      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/binary-extensions": { | 
				
			|||
      "version": "2.2.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", | 
				
			|||
      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/braces": { | 
				
			|||
      "version": "3.0.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", | 
				
			|||
      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "fill-range": "^7.0.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/camelcase-css": { | 
				
			|||
      "version": "2.0.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", | 
				
			|||
      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 6" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/chokidar": { | 
				
			|||
      "version": "3.5.3", | 
				
			|||
      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", | 
				
			|||
      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "funding": [ | 
				
			|||
        { | 
				
			|||
          "type": "individual", | 
				
			|||
          "url": "https://paulmillr.com/funding/" | 
				
			|||
        } | 
				
			|||
      ], | 
				
			|||
      "dependencies": { | 
				
			|||
        "anymatch": "~3.1.2", | 
				
			|||
        "braces": "~3.0.2", | 
				
			|||
        "glob-parent": "~5.1.2", | 
				
			|||
        "is-binary-path": "~2.1.0", | 
				
			|||
        "is-glob": "~4.0.1", | 
				
			|||
        "normalize-path": "~3.0.0", | 
				
			|||
        "readdirp": "~3.6.0" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 8.10.0" | 
				
			|||
      }, | 
				
			|||
      "optionalDependencies": { | 
				
			|||
        "fsevents": "~2.3.2" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/chokidar/node_modules/glob-parent": { | 
				
			|||
      "version": "5.1.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", | 
				
			|||
      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "is-glob": "^4.0.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 6" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/color-name": { | 
				
			|||
      "version": "1.1.4", | 
				
			|||
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | 
				
			|||
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/cssesc": { | 
				
			|||
      "version": "3.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", | 
				
			|||
      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "bin": { | 
				
			|||
        "cssesc": "bin/cssesc" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=4" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/defined": { | 
				
			|||
      "version": "1.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", | 
				
			|||
      "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/detective": { | 
				
			|||
      "version": "5.2.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", | 
				
			|||
      "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "acorn-node": "^1.8.2", | 
				
			|||
        "defined": "^1.0.0", | 
				
			|||
        "minimist": "^1.2.6" | 
				
			|||
      }, | 
				
			|||
      "bin": { | 
				
			|||
        "detective": "bin/detective.js" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.8.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/didyoumean": { | 
				
			|||
      "version": "1.2.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", | 
				
			|||
      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/dlv": { | 
				
			|||
      "version": "1.1.3", | 
				
			|||
      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", | 
				
			|||
      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/fast-glob": { | 
				
			|||
      "version": "3.2.12", | 
				
			|||
      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", | 
				
			|||
      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "@nodelib/fs.stat": "^2.0.2", | 
				
			|||
        "@nodelib/fs.walk": "^1.2.3", | 
				
			|||
        "glob-parent": "^5.1.2", | 
				
			|||
        "merge2": "^1.3.0", | 
				
			|||
        "micromatch": "^4.0.4" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8.6.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/fast-glob/node_modules/glob-parent": { | 
				
			|||
      "version": "5.1.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", | 
				
			|||
      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "is-glob": "^4.0.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 6" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/fastq": { | 
				
			|||
      "version": "1.13.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", | 
				
			|||
      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "reusify": "^1.0.4" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/fill-range": { | 
				
			|||
      "version": "7.0.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", | 
				
			|||
      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "to-regex-range": "^5.0.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/function-bind": { | 
				
			|||
      "version": "1.1.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", | 
				
			|||
      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/glob-parent": { | 
				
			|||
      "version": "6.0.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", | 
				
			|||
      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "is-glob": "^4.0.3" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=10.13.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/has": { | 
				
			|||
      "version": "1.0.3", | 
				
			|||
      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", | 
				
			|||
      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "function-bind": "^1.1.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 0.4.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/is-binary-path": { | 
				
			|||
      "version": "2.1.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", | 
				
			|||
      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "binary-extensions": "^2.0.0" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/is-core-module": { | 
				
			|||
      "version": "2.10.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", | 
				
			|||
      "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "has": "^1.0.3" | 
				
			|||
      }, | 
				
			|||
      "funding": { | 
				
			|||
        "url": "https://github.com/sponsors/ljharb" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/is-extglob": { | 
				
			|||
      "version": "2.1.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", | 
				
			|||
      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.10.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/is-glob": { | 
				
			|||
      "version": "4.0.3", | 
				
			|||
      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", | 
				
			|||
      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "is-extglob": "^2.1.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.10.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/is-number": { | 
				
			|||
      "version": "7.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", | 
				
			|||
      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.12.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/lilconfig": { | 
				
			|||
      "version": "2.0.6", | 
				
			|||
      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", | 
				
			|||
      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=10" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/merge2": { | 
				
			|||
      "version": "1.4.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", | 
				
			|||
      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 8" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/micromatch": { | 
				
			|||
      "version": "4.0.5", | 
				
			|||
      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", | 
				
			|||
      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "braces": "^3.0.2", | 
				
			|||
        "picomatch": "^2.3.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8.6" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/minimist": { | 
				
			|||
      "version": "1.2.6", | 
				
			|||
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", | 
				
			|||
      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/nanoid": { | 
				
			|||
      "version": "3.3.4", | 
				
			|||
      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", | 
				
			|||
      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "peer": true, | 
				
			|||
      "bin": { | 
				
			|||
        "nanoid": "bin/nanoid.cjs" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/normalize-path": { | 
				
			|||
      "version": "3.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | 
				
			|||
      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.10.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/object-hash": { | 
				
			|||
      "version": "3.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", | 
				
			|||
      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 6" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/path-parse": { | 
				
			|||
      "version": "1.0.7", | 
				
			|||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", | 
				
			|||
      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/picocolors": { | 
				
			|||
      "version": "1.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", | 
				
			|||
      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/picomatch": { | 
				
			|||
      "version": "2.3.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", | 
				
			|||
      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8.6" | 
				
			|||
      }, | 
				
			|||
      "funding": { | 
				
			|||
        "url": "https://github.com/sponsors/jonschlinkert" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/pify": { | 
				
			|||
      "version": "2.3.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", | 
				
			|||
      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.10.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/postcss": { | 
				
			|||
      "version": "8.4.17", | 
				
			|||
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", | 
				
			|||
      "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", | 
				
			|||
      "dev": true, | 
				
			|||
      "funding": [ | 
				
			|||
        { | 
				
			|||
          "type": "opencollective", | 
				
			|||
          "url": "https://opencollective.com/postcss/" | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          "type": "tidelift", | 
				
			|||
          "url": "https://tidelift.com/funding/github/npm/postcss" | 
				
			|||
        } | 
				
			|||
      ], | 
				
			|||
      "peer": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "nanoid": "^3.3.4", | 
				
			|||
        "picocolors": "^1.0.0", | 
				
			|||
        "source-map-js": "^1.0.2" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": "^10 || ^12 || >=14" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/postcss-import": { | 
				
			|||
      "version": "14.1.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", | 
				
			|||
      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "postcss-value-parser": "^4.0.0", | 
				
			|||
        "read-cache": "^1.0.0", | 
				
			|||
        "resolve": "^1.1.7" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=10.0.0" | 
				
			|||
      }, | 
				
			|||
      "peerDependencies": { | 
				
			|||
        "postcss": "^8.0.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/postcss-js": { | 
				
			|||
      "version": "4.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", | 
				
			|||
      "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "camelcase-css": "^2.0.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": "^12 || ^14 || >= 16" | 
				
			|||
      }, | 
				
			|||
      "funding": { | 
				
			|||
        "type": "opencollective", | 
				
			|||
        "url": "https://opencollective.com/postcss/" | 
				
			|||
      }, | 
				
			|||
      "peerDependencies": { | 
				
			|||
        "postcss": "^8.3.3" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/postcss-load-config": { | 
				
			|||
      "version": "3.1.4", | 
				
			|||
      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", | 
				
			|||
      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "lilconfig": "^2.0.5", | 
				
			|||
        "yaml": "^1.10.2" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 10" | 
				
			|||
      }, | 
				
			|||
      "funding": { | 
				
			|||
        "type": "opencollective", | 
				
			|||
        "url": "https://opencollective.com/postcss/" | 
				
			|||
      }, | 
				
			|||
      "peerDependencies": { | 
				
			|||
        "postcss": ">=8.0.9", | 
				
			|||
        "ts-node": ">=9.0.0" | 
				
			|||
      }, | 
				
			|||
      "peerDependenciesMeta": { | 
				
			|||
        "postcss": { | 
				
			|||
          "optional": true | 
				
			|||
        }, | 
				
			|||
        "ts-node": { | 
				
			|||
          "optional": true | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/postcss-nested": { | 
				
			|||
      "version": "5.0.6", | 
				
			|||
      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", | 
				
			|||
      "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "postcss-selector-parser": "^6.0.6" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=12.0" | 
				
			|||
      }, | 
				
			|||
      "funding": { | 
				
			|||
        "type": "opencollective", | 
				
			|||
        "url": "https://opencollective.com/postcss/" | 
				
			|||
      }, | 
				
			|||
      "peerDependencies": { | 
				
			|||
        "postcss": "^8.2.14" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/postcss-selector-parser": { | 
				
			|||
      "version": "6.0.10", | 
				
			|||
      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", | 
				
			|||
      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "cssesc": "^3.0.0", | 
				
			|||
        "util-deprecate": "^1.0.2" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=4" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/postcss-value-parser": { | 
				
			|||
      "version": "4.2.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", | 
				
			|||
      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/queue-microtask": { | 
				
			|||
      "version": "1.2.3", | 
				
			|||
      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", | 
				
			|||
      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", | 
				
			|||
      "dev": true, | 
				
			|||
      "funding": [ | 
				
			|||
        { | 
				
			|||
          "type": "github", | 
				
			|||
          "url": "https://github.com/sponsors/feross" | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          "type": "patreon", | 
				
			|||
          "url": "https://www.patreon.com/feross" | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          "type": "consulting", | 
				
			|||
          "url": "https://feross.org/support" | 
				
			|||
        } | 
				
			|||
      ] | 
				
			|||
    }, | 
				
			|||
    "node_modules/quick-lru": { | 
				
			|||
      "version": "5.1.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", | 
				
			|||
      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=10" | 
				
			|||
      }, | 
				
			|||
      "funding": { | 
				
			|||
        "url": "https://github.com/sponsors/sindresorhus" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/read-cache": { | 
				
			|||
      "version": "1.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", | 
				
			|||
      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "pify": "^2.3.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/readdirp": { | 
				
			|||
      "version": "3.6.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", | 
				
			|||
      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "picomatch": "^2.2.1" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8.10.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/resolve": { | 
				
			|||
      "version": "1.22.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", | 
				
			|||
      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "is-core-module": "^2.9.0", | 
				
			|||
        "path-parse": "^1.0.7", | 
				
			|||
        "supports-preserve-symlinks-flag": "^1.0.0" | 
				
			|||
      }, | 
				
			|||
      "bin": { | 
				
			|||
        "resolve": "bin/resolve" | 
				
			|||
      }, | 
				
			|||
      "funding": { | 
				
			|||
        "url": "https://github.com/sponsors/ljharb" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/reusify": { | 
				
			|||
      "version": "1.0.4", | 
				
			|||
      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", | 
				
			|||
      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "iojs": ">=1.0.0", | 
				
			|||
        "node": ">=0.10.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/run-parallel": { | 
				
			|||
      "version": "1.2.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", | 
				
			|||
      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", | 
				
			|||
      "dev": true, | 
				
			|||
      "funding": [ | 
				
			|||
        { | 
				
			|||
          "type": "github", | 
				
			|||
          "url": "https://github.com/sponsors/feross" | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          "type": "patreon", | 
				
			|||
          "url": "https://www.patreon.com/feross" | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          "type": "consulting", | 
				
			|||
          "url": "https://feross.org/support" | 
				
			|||
        } | 
				
			|||
      ], | 
				
			|||
      "dependencies": { | 
				
			|||
        "queue-microtask": "^1.2.2" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/source-map-js": { | 
				
			|||
      "version": "1.0.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", | 
				
			|||
      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", | 
				
			|||
      "dev": true, | 
				
			|||
      "peer": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.10.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/supports-preserve-symlinks-flag": { | 
				
			|||
      "version": "1.0.0", | 
				
			|||
      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", | 
				
			|||
      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 0.4" | 
				
			|||
      }, | 
				
			|||
      "funding": { | 
				
			|||
        "url": "https://github.com/sponsors/ljharb" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/tailwindcss": { | 
				
			|||
      "version": "3.1.8", | 
				
			|||
      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", | 
				
			|||
      "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "arg": "^5.0.2", | 
				
			|||
        "chokidar": "^3.5.3", | 
				
			|||
        "color-name": "^1.1.4", | 
				
			|||
        "detective": "^5.2.1", | 
				
			|||
        "didyoumean": "^1.2.2", | 
				
			|||
        "dlv": "^1.1.3", | 
				
			|||
        "fast-glob": "^3.2.11", | 
				
			|||
        "glob-parent": "^6.0.2", | 
				
			|||
        "is-glob": "^4.0.3", | 
				
			|||
        "lilconfig": "^2.0.6", | 
				
			|||
        "normalize-path": "^3.0.0", | 
				
			|||
        "object-hash": "^3.0.0", | 
				
			|||
        "picocolors": "^1.0.0", | 
				
			|||
        "postcss": "^8.4.14", | 
				
			|||
        "postcss-import": "^14.1.0", | 
				
			|||
        "postcss-js": "^4.0.0", | 
				
			|||
        "postcss-load-config": "^3.1.4", | 
				
			|||
        "postcss-nested": "5.0.6", | 
				
			|||
        "postcss-selector-parser": "^6.0.10", | 
				
			|||
        "postcss-value-parser": "^4.2.0", | 
				
			|||
        "quick-lru": "^5.1.1", | 
				
			|||
        "resolve": "^1.22.1" | 
				
			|||
      }, | 
				
			|||
      "bin": { | 
				
			|||
        "tailwind": "lib/cli.js", | 
				
			|||
        "tailwindcss": "lib/cli.js" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=12.13.0" | 
				
			|||
      }, | 
				
			|||
      "peerDependencies": { | 
				
			|||
        "postcss": "^8.0.9" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/to-regex-range": { | 
				
			|||
      "version": "5.0.1", | 
				
			|||
      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", | 
				
			|||
      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", | 
				
			|||
      "dev": true, | 
				
			|||
      "dependencies": { | 
				
			|||
        "is-number": "^7.0.0" | 
				
			|||
      }, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=8.0" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/util-deprecate": { | 
				
			|||
      "version": "1.0.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | 
				
			|||
      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", | 
				
			|||
      "dev": true | 
				
			|||
    }, | 
				
			|||
    "node_modules/xtend": { | 
				
			|||
      "version": "4.0.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", | 
				
			|||
      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">=0.4" | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    "node_modules/yaml": { | 
				
			|||
      "version": "1.10.2", | 
				
			|||
      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", | 
				
			|||
      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", | 
				
			|||
      "dev": true, | 
				
			|||
      "engines": { | 
				
			|||
        "node": ">= 6" | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,21 @@ | 
				
			|||
The MIT License (MIT) | 
				
			|||
 | 
				
			|||
Copyright (c) Denis Malinochkin | 
				
			|||
 | 
				
			|||
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. | 
				
			|||
@ -0,0 +1,171 @@ | 
				
			|||
# @nodelib/fs.scandir | 
				
			|||
 | 
				
			|||
> List files and directories inside the specified directory. | 
				
			|||
 | 
				
			|||
## :bulb: Highlights | 
				
			|||
 | 
				
			|||
The package is aimed at obtaining information about entries in the directory. | 
				
			|||
 | 
				
			|||
* :moneybag: Returns useful information: `name`, `path`, `dirent` and `stats` (optional). | 
				
			|||
* :gear: On Node.js 10.10+ uses the mechanism without additional calls to determine the entry type. See [`old` and `modern` mode](#old-and-modern-mode). | 
				
			|||
* :link: Can safely work with broken symbolic links. | 
				
			|||
 | 
				
			|||
## Install | 
				
			|||
 | 
				
			|||
```console | 
				
			|||
npm install @nodelib/fs.scandir | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Usage | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
import * as fsScandir from '@nodelib/fs.scandir'; | 
				
			|||
 | 
				
			|||
fsScandir.scandir('path', (error, stats) => { /* … */ }); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## API | 
				
			|||
 | 
				
			|||
### .scandir(path, [optionsOrSettings], callback) | 
				
			|||
 | 
				
			|||
Returns an array of plain objects ([`Entry`](#entry)) with information about entry for provided path with standard callback-style. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
fsScandir.scandir('path', (error, entries) => { /* … */ }); | 
				
			|||
fsScandir.scandir('path', {}, (error, entries) => { /* … */ }); | 
				
			|||
fsScandir.scandir('path', new fsScandir.Settings(), (error, entries) => { /* … */ }); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### .scandirSync(path, [optionsOrSettings]) | 
				
			|||
 | 
				
			|||
Returns an array of plain objects ([`Entry`](#entry)) with information about entry for provided path. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
const entries = fsScandir.scandirSync('path'); | 
				
			|||
const entries = fsScandir.scandirSync('path', {}); | 
				
			|||
const entries = fsScandir.scandirSync(('path', new fsScandir.Settings()); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
#### path | 
				
			|||
 | 
				
			|||
* Required: `true` | 
				
			|||
* Type: `string | Buffer | URL` | 
				
			|||
 | 
				
			|||
A path to a file. If a URL is provided, it must use the `file:` protocol. | 
				
			|||
 | 
				
			|||
#### optionsOrSettings | 
				
			|||
 | 
				
			|||
* Required: `false` | 
				
			|||
* Type: `Options | Settings` | 
				
			|||
* Default: An instance of `Settings` class | 
				
			|||
 | 
				
			|||
An [`Options`](#options) object or an instance of [`Settings`](#settingsoptions) class. | 
				
			|||
 | 
				
			|||
> :book: When you pass a plain object, an instance of the `Settings` class will be created automatically. If you plan to call the method frequently, use a pre-created instance of the `Settings` class. | 
				
			|||
 | 
				
			|||
### Settings([options]) | 
				
			|||
 | 
				
			|||
A class of full settings of the package. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
const settings = new fsScandir.Settings({ followSymbolicLinks: false }); | 
				
			|||
 | 
				
			|||
const entries = fsScandir.scandirSync('path', settings); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Entry | 
				
			|||
 | 
				
			|||
* `name` — The name of the entry (`unknown.txt`). | 
				
			|||
* `path` — The path of the entry relative to call directory (`root/unknown.txt`). | 
				
			|||
* `dirent` — An instance of [`fs.Dirent`](./src/types/index.ts) class. On Node.js below 10.10 will be emulated by [`DirentFromStats`](./src/utils/fs.ts) class. | 
				
			|||
* `stats` (optional) — An instance of `fs.Stats` class. | 
				
			|||
 | 
				
			|||
For example, the `scandir` call for `tools` directory with one directory inside: | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
{ | 
				
			|||
	dirent: Dirent { name: 'typedoc', /* … */ }, | 
				
			|||
	name: 'typedoc', | 
				
			|||
	path: 'tools/typedoc' | 
				
			|||
} | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Options | 
				
			|||
 | 
				
			|||
### stats | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `false` | 
				
			|||
 | 
				
			|||
Adds an instance of `fs.Stats` class to the [`Entry`](#entry). | 
				
			|||
 | 
				
			|||
> :book: Always use `fs.readdir` without the `withFileTypes` option. ??TODO?? | 
				
			|||
 | 
				
			|||
### followSymbolicLinks | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `false` | 
				
			|||
 | 
				
			|||
Follow symbolic links or not. Call `fs.stat` on symbolic link if `true`. | 
				
			|||
 | 
				
			|||
### `throwErrorOnBrokenSymbolicLink` | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `true` | 
				
			|||
 | 
				
			|||
Throw an error when symbolic link is broken if `true` or safely use `lstat` call if `false`. | 
				
			|||
 | 
				
			|||
### `pathSegmentSeparator` | 
				
			|||
 | 
				
			|||
* Type: `string` | 
				
			|||
* Default: `path.sep` | 
				
			|||
 | 
				
			|||
By default, this package uses the correct path separator for your OS (`\` on Windows, `/` on Unix-like systems). But you can set this option to any separator character(s) that you want to use instead. | 
				
			|||
 | 
				
			|||
### `fs` | 
				
			|||
 | 
				
			|||
* Type: [`FileSystemAdapter`](./src/adapters/fs.ts) | 
				
			|||
* Default: A default FS methods | 
				
			|||
 | 
				
			|||
By default, the built-in Node.js module (`fs`) is used to work with the file system. You can replace any method with your own. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
interface FileSystemAdapter { | 
				
			|||
	lstat?: typeof fs.lstat; | 
				
			|||
	stat?: typeof fs.stat; | 
				
			|||
	lstatSync?: typeof fs.lstatSync; | 
				
			|||
	statSync?: typeof fs.statSync; | 
				
			|||
	readdir?: typeof fs.readdir; | 
				
			|||
	readdirSync?: typeof fs.readdirSync; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
const settings = new fsScandir.Settings({ | 
				
			|||
	fs: { lstat: fakeLstat } | 
				
			|||
}); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## `old` and `modern` mode | 
				
			|||
 | 
				
			|||
This package has two modes that are used depending on the environment and parameters of use. | 
				
			|||
 | 
				
			|||
### old | 
				
			|||
 | 
				
			|||
* Node.js below `10.10` or when the `stats` option is enabled | 
				
			|||
 | 
				
			|||
When working in the old mode, the directory is read first (`fs.readdir`), then the type of entries is determined (`fs.lstat` and/or `fs.stat` for symbolic links). | 
				
			|||
 | 
				
			|||
### modern | 
				
			|||
 | 
				
			|||
* Node.js 10.10+ and the `stats` option is disabled | 
				
			|||
 | 
				
			|||
In the modern mode, reading the directory (`fs.readdir` with the `withFileTypes` option) is combined with obtaining information about its entries. An additional call for symbolic links (`fs.stat`) is still present. | 
				
			|||
 | 
				
			|||
This mode makes fewer calls to the file system. It's faster. | 
				
			|||
 | 
				
			|||
## Changelog | 
				
			|||
 | 
				
			|||
See the [Releases section of our GitHub project](https://github.com/nodelib/nodelib/releases) for changelog for each release version. | 
				
			|||
 | 
				
			|||
## License | 
				
			|||
 | 
				
			|||
This software is released under the terms of the MIT license. | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
import type * as fsStat from '@nodelib/fs.stat'; | 
				
			|||
import type { Dirent, ErrnoException } from '../types'; | 
				
			|||
export interface ReaddirAsynchronousMethod { | 
				
			|||
    (filepath: string, options: { | 
				
			|||
        withFileTypes: true; | 
				
			|||
    }, callback: (error: ErrnoException | null, files: Dirent[]) => void): void; | 
				
			|||
    (filepath: string, callback: (error: ErrnoException | null, files: string[]) => void): void; | 
				
			|||
} | 
				
			|||
export interface ReaddirSynchronousMethod { | 
				
			|||
    (filepath: string, options: { | 
				
			|||
        withFileTypes: true; | 
				
			|||
    }): Dirent[]; | 
				
			|||
    (filepath: string): string[]; | 
				
			|||
} | 
				
			|||
export declare type FileSystemAdapter = fsStat.FileSystemAdapter & { | 
				
			|||
    readdir: ReaddirAsynchronousMethod; | 
				
			|||
    readdirSync: ReaddirSynchronousMethod; | 
				
			|||
}; | 
				
			|||
export declare const FILE_SYSTEM_ADAPTER: FileSystemAdapter; | 
				
			|||
export declare function createFileSystemAdapter(fsMethods?: Partial<FileSystemAdapter>): FileSystemAdapter; | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0; | 
				
			|||
const fs = require("fs"); | 
				
			|||
exports.FILE_SYSTEM_ADAPTER = { | 
				
			|||
    lstat: fs.lstat, | 
				
			|||
    stat: fs.stat, | 
				
			|||
    lstatSync: fs.lstatSync, | 
				
			|||
    statSync: fs.statSync, | 
				
			|||
    readdir: fs.readdir, | 
				
			|||
    readdirSync: fs.readdirSync | 
				
			|||
}; | 
				
			|||
function createFileSystemAdapter(fsMethods) { | 
				
			|||
    if (fsMethods === undefined) { | 
				
			|||
        return exports.FILE_SYSTEM_ADAPTER; | 
				
			|||
    } | 
				
			|||
    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods); | 
				
			|||
} | 
				
			|||
exports.createFileSystemAdapter = createFileSystemAdapter; | 
				
			|||
@ -0,0 +1,4 @@ | 
				
			|||
/** | 
				
			|||
 * IS `true` for Node.js 10.10 and greater. | 
				
			|||
 */ | 
				
			|||
export declare const IS_SUPPORT_READDIR_WITH_FILE_TYPES: boolean; | 
				
			|||
@ -0,0 +1,17 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0; | 
				
			|||
const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.'); | 
				
			|||
if (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) { | 
				
			|||
    throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`); | 
				
			|||
} | 
				
			|||
const MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10); | 
				
			|||
const MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10); | 
				
			|||
const SUPPORTED_MAJOR_VERSION = 10; | 
				
			|||
const SUPPORTED_MINOR_VERSION = 10; | 
				
			|||
const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION; | 
				
			|||
const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION; | 
				
			|||
/** | 
				
			|||
 * IS `true` for Node.js 10.10 and greater. | 
				
			|||
 */ | 
				
			|||
exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR; | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
import type { FileSystemAdapter, ReaddirAsynchronousMethod, ReaddirSynchronousMethod } from './adapters/fs'; | 
				
			|||
import * as async from './providers/async'; | 
				
			|||
import Settings, { Options } from './settings'; | 
				
			|||
import type { Dirent, Entry } from './types'; | 
				
			|||
declare type AsyncCallback = async.AsyncCallback; | 
				
			|||
declare function scandir(path: string, callback: AsyncCallback): void; | 
				
			|||
declare function scandir(path: string, optionsOrSettings: Options | Settings, callback: AsyncCallback): void; | 
				
			|||
declare namespace scandir { | 
				
			|||
    function __promisify__(path: string, optionsOrSettings?: Options | Settings): Promise<Entry[]>; | 
				
			|||
} | 
				
			|||
declare function scandirSync(path: string, optionsOrSettings?: Options | Settings): Entry[]; | 
				
			|||
export { scandir, scandirSync, Settings, AsyncCallback, Dirent, Entry, FileSystemAdapter, ReaddirAsynchronousMethod, ReaddirSynchronousMethod, Options }; | 
				
			|||
@ -0,0 +1,26 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.Settings = exports.scandirSync = exports.scandir = void 0; | 
				
			|||
const async = require("./providers/async"); | 
				
			|||
const sync = require("./providers/sync"); | 
				
			|||
const settings_1 = require("./settings"); | 
				
			|||
exports.Settings = settings_1.default; | 
				
			|||
function scandir(path, optionsOrSettingsOrCallback, callback) { | 
				
			|||
    if (typeof optionsOrSettingsOrCallback === 'function') { | 
				
			|||
        async.read(path, getSettings(), optionsOrSettingsOrCallback); | 
				
			|||
        return; | 
				
			|||
    } | 
				
			|||
    async.read(path, getSettings(optionsOrSettingsOrCallback), callback); | 
				
			|||
} | 
				
			|||
exports.scandir = scandir; | 
				
			|||
function scandirSync(path, optionsOrSettings) { | 
				
			|||
    const settings = getSettings(optionsOrSettings); | 
				
			|||
    return sync.read(path, settings); | 
				
			|||
} | 
				
			|||
exports.scandirSync = scandirSync; | 
				
			|||
function getSettings(settingsOrOptions = {}) { | 
				
			|||
    if (settingsOrOptions instanceof settings_1.default) { | 
				
			|||
        return settingsOrOptions; | 
				
			|||
    } | 
				
			|||
    return new settings_1.default(settingsOrOptions); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,7 @@ | 
				
			|||
/// <reference types="node" />
 | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
import type { Entry } from '../types'; | 
				
			|||
export declare type AsyncCallback = (error: NodeJS.ErrnoException, entries: Entry[]) => void; | 
				
			|||
export declare function read(directory: string, settings: Settings, callback: AsyncCallback): void; | 
				
			|||
export declare function readdirWithFileTypes(directory: string, settings: Settings, callback: AsyncCallback): void; | 
				
			|||
export declare function readdir(directory: string, settings: Settings, callback: AsyncCallback): void; | 
				
			|||
@ -0,0 +1,104 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.readdir = exports.readdirWithFileTypes = exports.read = void 0; | 
				
			|||
const fsStat = require("@nodelib/fs.stat"); | 
				
			|||
const rpl = require("run-parallel"); | 
				
			|||
const constants_1 = require("../constants"); | 
				
			|||
const utils = require("../utils"); | 
				
			|||
const common = require("./common"); | 
				
			|||
function read(directory, settings, callback) { | 
				
			|||
    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { | 
				
			|||
        readdirWithFileTypes(directory, settings, callback); | 
				
			|||
        return; | 
				
			|||
    } | 
				
			|||
    readdir(directory, settings, callback); | 
				
			|||
} | 
				
			|||
exports.read = read; | 
				
			|||
function readdirWithFileTypes(directory, settings, callback) { | 
				
			|||
    settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => { | 
				
			|||
        if (readdirError !== null) { | 
				
			|||
            callFailureCallback(callback, readdirError); | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        const entries = dirents.map((dirent) => ({ | 
				
			|||
            dirent, | 
				
			|||
            name: dirent.name, | 
				
			|||
            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) | 
				
			|||
        })); | 
				
			|||
        if (!settings.followSymbolicLinks) { | 
				
			|||
            callSuccessCallback(callback, entries); | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings)); | 
				
			|||
        rpl(tasks, (rplError, rplEntries) => { | 
				
			|||
            if (rplError !== null) { | 
				
			|||
                callFailureCallback(callback, rplError); | 
				
			|||
                return; | 
				
			|||
            } | 
				
			|||
            callSuccessCallback(callback, rplEntries); | 
				
			|||
        }); | 
				
			|||
    }); | 
				
			|||
} | 
				
			|||
exports.readdirWithFileTypes = readdirWithFileTypes; | 
				
			|||
function makeRplTaskEntry(entry, settings) { | 
				
			|||
    return (done) => { | 
				
			|||
        if (!entry.dirent.isSymbolicLink()) { | 
				
			|||
            done(null, entry); | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        settings.fs.stat(entry.path, (statError, stats) => { | 
				
			|||
            if (statError !== null) { | 
				
			|||
                if (settings.throwErrorOnBrokenSymbolicLink) { | 
				
			|||
                    done(statError); | 
				
			|||
                    return; | 
				
			|||
                } | 
				
			|||
                done(null, entry); | 
				
			|||
                return; | 
				
			|||
            } | 
				
			|||
            entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); | 
				
			|||
            done(null, entry); | 
				
			|||
        }); | 
				
			|||
    }; | 
				
			|||
} | 
				
			|||
function readdir(directory, settings, callback) { | 
				
			|||
    settings.fs.readdir(directory, (readdirError, names) => { | 
				
			|||
        if (readdirError !== null) { | 
				
			|||
            callFailureCallback(callback, readdirError); | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        const tasks = names.map((name) => { | 
				
			|||
            const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); | 
				
			|||
            return (done) => { | 
				
			|||
                fsStat.stat(path, settings.fsStatSettings, (error, stats) => { | 
				
			|||
                    if (error !== null) { | 
				
			|||
                        done(error); | 
				
			|||
                        return; | 
				
			|||
                    } | 
				
			|||
                    const entry = { | 
				
			|||
                        name, | 
				
			|||
                        path, | 
				
			|||
                        dirent: utils.fs.createDirentFromStats(name, stats) | 
				
			|||
                    }; | 
				
			|||
                    if (settings.stats) { | 
				
			|||
                        entry.stats = stats; | 
				
			|||
                    } | 
				
			|||
                    done(null, entry); | 
				
			|||
                }); | 
				
			|||
            }; | 
				
			|||
        }); | 
				
			|||
        rpl(tasks, (rplError, entries) => { | 
				
			|||
            if (rplError !== null) { | 
				
			|||
                callFailureCallback(callback, rplError); | 
				
			|||
                return; | 
				
			|||
            } | 
				
			|||
            callSuccessCallback(callback, entries); | 
				
			|||
        }); | 
				
			|||
    }); | 
				
			|||
} | 
				
			|||
exports.readdir = readdir; | 
				
			|||
function callFailureCallback(callback, error) { | 
				
			|||
    callback(error); | 
				
			|||
} | 
				
			|||
function callSuccessCallback(callback, result) { | 
				
			|||
    callback(null, result); | 
				
			|||
} | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
export declare function joinPathSegments(a: string, b: string, separator: string): string; | 
				
			|||
@ -0,0 +1,13 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.joinPathSegments = void 0; | 
				
			|||
function joinPathSegments(a, b, separator) { | 
				
			|||
    /** | 
				
			|||
     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`). | 
				
			|||
     */ | 
				
			|||
    if (a.endsWith(separator)) { | 
				
			|||
        return a + b; | 
				
			|||
    } | 
				
			|||
    return a + separator + b; | 
				
			|||
} | 
				
			|||
exports.joinPathSegments = joinPathSegments; | 
				
			|||
@ -0,0 +1,5 @@ | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
import type { Entry } from '../types'; | 
				
			|||
export declare function read(directory: string, settings: Settings): Entry[]; | 
				
			|||
export declare function readdirWithFileTypes(directory: string, settings: Settings): Entry[]; | 
				
			|||
export declare function readdir(directory: string, settings: Settings): Entry[]; | 
				
			|||
@ -0,0 +1,54 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.readdir = exports.readdirWithFileTypes = exports.read = void 0; | 
				
			|||
const fsStat = require("@nodelib/fs.stat"); | 
				
			|||
const constants_1 = require("../constants"); | 
				
			|||
const utils = require("../utils"); | 
				
			|||
const common = require("./common"); | 
				
			|||
function read(directory, settings) { | 
				
			|||
    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { | 
				
			|||
        return readdirWithFileTypes(directory, settings); | 
				
			|||
    } | 
				
			|||
    return readdir(directory, settings); | 
				
			|||
} | 
				
			|||
exports.read = read; | 
				
			|||
function readdirWithFileTypes(directory, settings) { | 
				
			|||
    const dirents = settings.fs.readdirSync(directory, { withFileTypes: true }); | 
				
			|||
    return dirents.map((dirent) => { | 
				
			|||
        const entry = { | 
				
			|||
            dirent, | 
				
			|||
            name: dirent.name, | 
				
			|||
            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) | 
				
			|||
        }; | 
				
			|||
        if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) { | 
				
			|||
            try { | 
				
			|||
                const stats = settings.fs.statSync(entry.path); | 
				
			|||
                entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); | 
				
			|||
            } | 
				
			|||
            catch (error) { | 
				
			|||
                if (settings.throwErrorOnBrokenSymbolicLink) { | 
				
			|||
                    throw error; | 
				
			|||
                } | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
        return entry; | 
				
			|||
    }); | 
				
			|||
} | 
				
			|||
exports.readdirWithFileTypes = readdirWithFileTypes; | 
				
			|||
function readdir(directory, settings) { | 
				
			|||
    const names = settings.fs.readdirSync(directory); | 
				
			|||
    return names.map((name) => { | 
				
			|||
        const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); | 
				
			|||
        const stats = fsStat.statSync(entryPath, settings.fsStatSettings); | 
				
			|||
        const entry = { | 
				
			|||
            name, | 
				
			|||
            path: entryPath, | 
				
			|||
            dirent: utils.fs.createDirentFromStats(name, stats) | 
				
			|||
        }; | 
				
			|||
        if (settings.stats) { | 
				
			|||
            entry.stats = stats; | 
				
			|||
        } | 
				
			|||
        return entry; | 
				
			|||
    }); | 
				
			|||
} | 
				
			|||
exports.readdir = readdir; | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
import * as fsStat from '@nodelib/fs.stat'; | 
				
			|||
import * as fs from './adapters/fs'; | 
				
			|||
export interface Options { | 
				
			|||
    followSymbolicLinks?: boolean; | 
				
			|||
    fs?: Partial<fs.FileSystemAdapter>; | 
				
			|||
    pathSegmentSeparator?: string; | 
				
			|||
    stats?: boolean; | 
				
			|||
    throwErrorOnBrokenSymbolicLink?: boolean; | 
				
			|||
} | 
				
			|||
export default class Settings { | 
				
			|||
    private readonly _options; | 
				
			|||
    readonly followSymbolicLinks: boolean; | 
				
			|||
    readonly fs: fs.FileSystemAdapter; | 
				
			|||
    readonly pathSegmentSeparator: string; | 
				
			|||
    readonly stats: boolean; | 
				
			|||
    readonly throwErrorOnBrokenSymbolicLink: boolean; | 
				
			|||
    readonly fsStatSettings: fsStat.Settings; | 
				
			|||
    constructor(_options?: Options); | 
				
			|||
    private _getValue; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,24 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const path = require("path"); | 
				
			|||
const fsStat = require("@nodelib/fs.stat"); | 
				
			|||
const fs = require("./adapters/fs"); | 
				
			|||
class Settings { | 
				
			|||
    constructor(_options = {}) { | 
				
			|||
        this._options = _options; | 
				
			|||
        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false); | 
				
			|||
        this.fs = fs.createFileSystemAdapter(this._options.fs); | 
				
			|||
        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep); | 
				
			|||
        this.stats = this._getValue(this._options.stats, false); | 
				
			|||
        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true); | 
				
			|||
        this.fsStatSettings = new fsStat.Settings({ | 
				
			|||
            followSymbolicLink: this.followSymbolicLinks, | 
				
			|||
            fs: this.fs, | 
				
			|||
            throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink | 
				
			|||
        }); | 
				
			|||
    } | 
				
			|||
    _getValue(option, value) { | 
				
			|||
        return option !== null && option !== void 0 ? option : value; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = Settings; | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
/// <reference types="node" />
 | 
				
			|||
import type * as fs from 'fs'; | 
				
			|||
export interface Entry { | 
				
			|||
    dirent: Dirent; | 
				
			|||
    name: string; | 
				
			|||
    path: string; | 
				
			|||
    stats?: Stats; | 
				
			|||
} | 
				
			|||
export declare type Stats = fs.Stats; | 
				
			|||
export declare type ErrnoException = NodeJS.ErrnoException; | 
				
			|||
export interface Dirent { | 
				
			|||
    isBlockDevice: () => boolean; | 
				
			|||
    isCharacterDevice: () => boolean; | 
				
			|||
    isDirectory: () => boolean; | 
				
			|||
    isFIFO: () => boolean; | 
				
			|||
    isFile: () => boolean; | 
				
			|||
    isSocket: () => boolean; | 
				
			|||
    isSymbolicLink: () => boolean; | 
				
			|||
    name: string; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
import type { Dirent, Stats } from '../types'; | 
				
			|||
export declare function createDirentFromStats(name: string, stats: Stats): Dirent; | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.createDirentFromStats = void 0; | 
				
			|||
class DirentFromStats { | 
				
			|||
    constructor(name, stats) { | 
				
			|||
        this.name = name; | 
				
			|||
        this.isBlockDevice = stats.isBlockDevice.bind(stats); | 
				
			|||
        this.isCharacterDevice = stats.isCharacterDevice.bind(stats); | 
				
			|||
        this.isDirectory = stats.isDirectory.bind(stats); | 
				
			|||
        this.isFIFO = stats.isFIFO.bind(stats); | 
				
			|||
        this.isFile = stats.isFile.bind(stats); | 
				
			|||
        this.isSocket = stats.isSocket.bind(stats); | 
				
			|||
        this.isSymbolicLink = stats.isSymbolicLink.bind(stats); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
function createDirentFromStats(name, stats) { | 
				
			|||
    return new DirentFromStats(name, stats); | 
				
			|||
} | 
				
			|||
exports.createDirentFromStats = createDirentFromStats; | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
import * as fs from './fs'; | 
				
			|||
export { fs }; | 
				
			|||
@ -0,0 +1,5 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.fs = void 0; | 
				
			|||
const fs = require("./fs"); | 
				
			|||
exports.fs = fs; | 
				
			|||
@ -0,0 +1,44 @@ | 
				
			|||
{ | 
				
			|||
  "name": "@nodelib/fs.scandir", | 
				
			|||
  "version": "2.1.5", | 
				
			|||
  "description": "List files and directories inside the specified directory", | 
				
			|||
  "license": "MIT", | 
				
			|||
  "repository": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir", | 
				
			|||
  "keywords": [ | 
				
			|||
    "NodeLib", | 
				
			|||
    "fs", | 
				
			|||
    "FileSystem", | 
				
			|||
    "file system", | 
				
			|||
    "scandir", | 
				
			|||
    "readdir", | 
				
			|||
    "dirent" | 
				
			|||
  ], | 
				
			|||
  "engines": { | 
				
			|||
    "node": ">= 8" | 
				
			|||
  }, | 
				
			|||
  "files": [ | 
				
			|||
    "out/**", | 
				
			|||
    "!out/**/*.map", | 
				
			|||
    "!out/**/*.spec.*" | 
				
			|||
  ], | 
				
			|||
  "main": "out/index.js", | 
				
			|||
  "typings": "out/index.d.ts", | 
				
			|||
  "scripts": { | 
				
			|||
    "clean": "rimraf {tsconfig.tsbuildinfo,out}", | 
				
			|||
    "lint": "eslint \"src/**/*.ts\" --cache", | 
				
			|||
    "compile": "tsc -b .", | 
				
			|||
    "compile:watch": "tsc -p . --watch --sourceMap", | 
				
			|||
    "test": "mocha \"out/**/*.spec.js\" -s 0", | 
				
			|||
    "build": "npm run clean && npm run compile && npm run lint && npm test", | 
				
			|||
    "watch": "npm run clean && npm run compile:watch" | 
				
			|||
  }, | 
				
			|||
  "dependencies": { | 
				
			|||
    "@nodelib/fs.stat": "2.0.5", | 
				
			|||
    "run-parallel": "^1.1.9" | 
				
			|||
  }, | 
				
			|||
  "devDependencies": { | 
				
			|||
    "@nodelib/fs.macchiato": "1.0.4", | 
				
			|||
    "@types/run-parallel": "^1.1.0" | 
				
			|||
  }, | 
				
			|||
  "gitHead": "d6a7960d5281d3dd5f8e2efba49bb552d090f562" | 
				
			|||
} | 
				
			|||
@ -0,0 +1,21 @@ | 
				
			|||
The MIT License (MIT) | 
				
			|||
 | 
				
			|||
Copyright (c) Denis Malinochkin | 
				
			|||
 | 
				
			|||
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. | 
				
			|||
@ -0,0 +1,126 @@ | 
				
			|||
# @nodelib/fs.stat | 
				
			|||
 | 
				
			|||
> Get the status of a file with some features. | 
				
			|||
 | 
				
			|||
## :bulb: Highlights | 
				
			|||
 | 
				
			|||
Wrapper around standard method `fs.lstat` and `fs.stat` with some features. | 
				
			|||
 | 
				
			|||
* :beginner: Normally follows symbolic link. | 
				
			|||
* :gear: Can safely work with broken symbolic link. | 
				
			|||
 | 
				
			|||
## Install | 
				
			|||
 | 
				
			|||
```console | 
				
			|||
npm install @nodelib/fs.stat | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Usage | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
import * as fsStat from '@nodelib/fs.stat'; | 
				
			|||
 | 
				
			|||
fsStat.stat('path', (error, stats) => { /* … */ }); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## API | 
				
			|||
 | 
				
			|||
### .stat(path, [optionsOrSettings], callback) | 
				
			|||
 | 
				
			|||
Returns an instance of `fs.Stats` class for provided path with standard callback-style. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
fsStat.stat('path', (error, stats) => { /* … */ }); | 
				
			|||
fsStat.stat('path', {}, (error, stats) => { /* … */ }); | 
				
			|||
fsStat.stat('path', new fsStat.Settings(), (error, stats) => { /* … */ }); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### .statSync(path, [optionsOrSettings]) | 
				
			|||
 | 
				
			|||
Returns an instance of `fs.Stats` class for provided path. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
const stats = fsStat.stat('path'); | 
				
			|||
const stats = fsStat.stat('path', {}); | 
				
			|||
const stats = fsStat.stat('path', new fsStat.Settings()); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
#### path | 
				
			|||
 | 
				
			|||
* Required: `true` | 
				
			|||
* Type: `string | Buffer | URL` | 
				
			|||
 | 
				
			|||
A path to a file. If a URL is provided, it must use the `file:` protocol. | 
				
			|||
 | 
				
			|||
#### optionsOrSettings | 
				
			|||
 | 
				
			|||
* Required: `false` | 
				
			|||
* Type: `Options | Settings` | 
				
			|||
* Default: An instance of `Settings` class | 
				
			|||
 | 
				
			|||
An [`Options`](#options) object or an instance of [`Settings`](#settings) class. | 
				
			|||
 | 
				
			|||
> :book: When you pass a plain object, an instance of the `Settings` class will be created automatically. If you plan to call the method frequently, use a pre-created instance of the `Settings` class. | 
				
			|||
 | 
				
			|||
### Settings([options]) | 
				
			|||
 | 
				
			|||
A class of full settings of the package. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
const settings = new fsStat.Settings({ followSymbolicLink: false }); | 
				
			|||
 | 
				
			|||
const stats = fsStat.stat('path', settings); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Options | 
				
			|||
 | 
				
			|||
### `followSymbolicLink` | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `true` | 
				
			|||
 | 
				
			|||
Follow symbolic link or not. Call `fs.stat` on symbolic link if `true`. | 
				
			|||
 | 
				
			|||
### `markSymbolicLink` | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `false` | 
				
			|||
 | 
				
			|||
Mark symbolic link by setting the return value of `isSymbolicLink` function to always `true` (even after `fs.stat`). | 
				
			|||
 | 
				
			|||
> :book: Can be used if you want to know what is hidden behind a symbolic link, but still continue to know that it is a symbolic link. | 
				
			|||
 | 
				
			|||
### `throwErrorOnBrokenSymbolicLink` | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `true` | 
				
			|||
 | 
				
			|||
Throw an error when symbolic link is broken if `true` or safely return `lstat` call if `false`. | 
				
			|||
 | 
				
			|||
### `fs` | 
				
			|||
 | 
				
			|||
* Type: [`FileSystemAdapter`](./src/adapters/fs.ts) | 
				
			|||
* Default: A default FS methods | 
				
			|||
 | 
				
			|||
By default, the built-in Node.js module (`fs`) is used to work with the file system. You can replace any method with your own. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
interface FileSystemAdapter { | 
				
			|||
	lstat?: typeof fs.lstat; | 
				
			|||
	stat?: typeof fs.stat; | 
				
			|||
	lstatSync?: typeof fs.lstatSync; | 
				
			|||
	statSync?: typeof fs.statSync; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
const settings = new fsStat.Settings({ | 
				
			|||
	fs: { lstat: fakeLstat } | 
				
			|||
}); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Changelog | 
				
			|||
 | 
				
			|||
See the [Releases section of our GitHub project](https://github.com/nodelib/nodelib/releases) for changelog for each release version. | 
				
			|||
 | 
				
			|||
## License | 
				
			|||
 | 
				
			|||
This software is released under the terms of the MIT license. | 
				
			|||
@ -0,0 +1,13 @@ | 
				
			|||
/// <reference types="node" />
 | 
				
			|||
import * as fs from 'fs'; | 
				
			|||
import type { ErrnoException } from '../types'; | 
				
			|||
export declare type StatAsynchronousMethod = (path: string, callback: (error: ErrnoException | null, stats: fs.Stats) => void) => void; | 
				
			|||
export declare type StatSynchronousMethod = (path: string) => fs.Stats; | 
				
			|||
export interface FileSystemAdapter { | 
				
			|||
    lstat: StatAsynchronousMethod; | 
				
			|||
    stat: StatAsynchronousMethod; | 
				
			|||
    lstatSync: StatSynchronousMethod; | 
				
			|||
    statSync: StatSynchronousMethod; | 
				
			|||
} | 
				
			|||
export declare const FILE_SYSTEM_ADAPTER: FileSystemAdapter; | 
				
			|||
export declare function createFileSystemAdapter(fsMethods?: Partial<FileSystemAdapter>): FileSystemAdapter; | 
				
			|||
@ -0,0 +1,17 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0; | 
				
			|||
const fs = require("fs"); | 
				
			|||
exports.FILE_SYSTEM_ADAPTER = { | 
				
			|||
    lstat: fs.lstat, | 
				
			|||
    stat: fs.stat, | 
				
			|||
    lstatSync: fs.lstatSync, | 
				
			|||
    statSync: fs.statSync | 
				
			|||
}; | 
				
			|||
function createFileSystemAdapter(fsMethods) { | 
				
			|||
    if (fsMethods === undefined) { | 
				
			|||
        return exports.FILE_SYSTEM_ADAPTER; | 
				
			|||
    } | 
				
			|||
    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods); | 
				
			|||
} | 
				
			|||
exports.createFileSystemAdapter = createFileSystemAdapter; | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
import type { FileSystemAdapter, StatAsynchronousMethod, StatSynchronousMethod } from './adapters/fs'; | 
				
			|||
import * as async from './providers/async'; | 
				
			|||
import Settings, { Options } from './settings'; | 
				
			|||
import type { Stats } from './types'; | 
				
			|||
declare type AsyncCallback = async.AsyncCallback; | 
				
			|||
declare function stat(path: string, callback: AsyncCallback): void; | 
				
			|||
declare function stat(path: string, optionsOrSettings: Options | Settings, callback: AsyncCallback): void; | 
				
			|||
declare namespace stat { | 
				
			|||
    function __promisify__(path: string, optionsOrSettings?: Options | Settings): Promise<Stats>; | 
				
			|||
} | 
				
			|||
declare function statSync(path: string, optionsOrSettings?: Options | Settings): Stats; | 
				
			|||
export { Settings, stat, statSync, AsyncCallback, FileSystemAdapter, StatAsynchronousMethod, StatSynchronousMethod, Options, Stats }; | 
				
			|||
@ -0,0 +1,26 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.statSync = exports.stat = exports.Settings = void 0; | 
				
			|||
const async = require("./providers/async"); | 
				
			|||
const sync = require("./providers/sync"); | 
				
			|||
const settings_1 = require("./settings"); | 
				
			|||
exports.Settings = settings_1.default; | 
				
			|||
function stat(path, optionsOrSettingsOrCallback, callback) { | 
				
			|||
    if (typeof optionsOrSettingsOrCallback === 'function') { | 
				
			|||
        async.read(path, getSettings(), optionsOrSettingsOrCallback); | 
				
			|||
        return; | 
				
			|||
    } | 
				
			|||
    async.read(path, getSettings(optionsOrSettingsOrCallback), callback); | 
				
			|||
} | 
				
			|||
exports.stat = stat; | 
				
			|||
function statSync(path, optionsOrSettings) { | 
				
			|||
    const settings = getSettings(optionsOrSettings); | 
				
			|||
    return sync.read(path, settings); | 
				
			|||
} | 
				
			|||
exports.statSync = statSync; | 
				
			|||
function getSettings(settingsOrOptions = {}) { | 
				
			|||
    if (settingsOrOptions instanceof settings_1.default) { | 
				
			|||
        return settingsOrOptions; | 
				
			|||
    } | 
				
			|||
    return new settings_1.default(settingsOrOptions); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,4 @@ | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
import type { ErrnoException, Stats } from '../types'; | 
				
			|||
export declare type AsyncCallback = (error: ErrnoException, stats: Stats) => void; | 
				
			|||
export declare function read(path: string, settings: Settings, callback: AsyncCallback): void; | 
				
			|||
@ -0,0 +1,36 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.read = void 0; | 
				
			|||
function read(path, settings, callback) { | 
				
			|||
    settings.fs.lstat(path, (lstatError, lstat) => { | 
				
			|||
        if (lstatError !== null) { | 
				
			|||
            callFailureCallback(callback, lstatError); | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) { | 
				
			|||
            callSuccessCallback(callback, lstat); | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        settings.fs.stat(path, (statError, stat) => { | 
				
			|||
            if (statError !== null) { | 
				
			|||
                if (settings.throwErrorOnBrokenSymbolicLink) { | 
				
			|||
                    callFailureCallback(callback, statError); | 
				
			|||
                    return; | 
				
			|||
                } | 
				
			|||
                callSuccessCallback(callback, lstat); | 
				
			|||
                return; | 
				
			|||
            } | 
				
			|||
            if (settings.markSymbolicLink) { | 
				
			|||
                stat.isSymbolicLink = () => true; | 
				
			|||
            } | 
				
			|||
            callSuccessCallback(callback, stat); | 
				
			|||
        }); | 
				
			|||
    }); | 
				
			|||
} | 
				
			|||
exports.read = read; | 
				
			|||
function callFailureCallback(callback, error) { | 
				
			|||
    callback(error); | 
				
			|||
} | 
				
			|||
function callSuccessCallback(callback, result) { | 
				
			|||
    callback(null, result); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,3 @@ | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
import type { Stats } from '../types'; | 
				
			|||
export declare function read(path: string, settings: Settings): Stats; | 
				
			|||
@ -0,0 +1,23 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.read = void 0; | 
				
			|||
function read(path, settings) { | 
				
			|||
    const lstat = settings.fs.lstatSync(path); | 
				
			|||
    if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) { | 
				
			|||
        return lstat; | 
				
			|||
    } | 
				
			|||
    try { | 
				
			|||
        const stat = settings.fs.statSync(path); | 
				
			|||
        if (settings.markSymbolicLink) { | 
				
			|||
            stat.isSymbolicLink = () => true; | 
				
			|||
        } | 
				
			|||
        return stat; | 
				
			|||
    } | 
				
			|||
    catch (error) { | 
				
			|||
        if (!settings.throwErrorOnBrokenSymbolicLink) { | 
				
			|||
            return lstat; | 
				
			|||
        } | 
				
			|||
        throw error; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.read = read; | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
import * as fs from './adapters/fs'; | 
				
			|||
export interface Options { | 
				
			|||
    followSymbolicLink?: boolean; | 
				
			|||
    fs?: Partial<fs.FileSystemAdapter>; | 
				
			|||
    markSymbolicLink?: boolean; | 
				
			|||
    throwErrorOnBrokenSymbolicLink?: boolean; | 
				
			|||
} | 
				
			|||
export default class Settings { | 
				
			|||
    private readonly _options; | 
				
			|||
    readonly followSymbolicLink: boolean; | 
				
			|||
    readonly fs: fs.FileSystemAdapter; | 
				
			|||
    readonly markSymbolicLink: boolean; | 
				
			|||
    readonly throwErrorOnBrokenSymbolicLink: boolean; | 
				
			|||
    constructor(_options?: Options); | 
				
			|||
    private _getValue; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const fs = require("./adapters/fs"); | 
				
			|||
class Settings { | 
				
			|||
    constructor(_options = {}) { | 
				
			|||
        this._options = _options; | 
				
			|||
        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true); | 
				
			|||
        this.fs = fs.createFileSystemAdapter(this._options.fs); | 
				
			|||
        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false); | 
				
			|||
        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true); | 
				
			|||
    } | 
				
			|||
    _getValue(option, value) { | 
				
			|||
        return option !== null && option !== void 0 ? option : value; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = Settings; | 
				
			|||
@ -0,0 +1,4 @@ | 
				
			|||
/// <reference types="node" />
 | 
				
			|||
import type * as fs from 'fs'; | 
				
			|||
export declare type Stats = fs.Stats; | 
				
			|||
export declare type ErrnoException = NodeJS.ErrnoException; | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
@ -0,0 +1,37 @@ | 
				
			|||
{ | 
				
			|||
  "name": "@nodelib/fs.stat", | 
				
			|||
  "version": "2.0.5", | 
				
			|||
  "description": "Get the status of a file with some features", | 
				
			|||
  "license": "MIT", | 
				
			|||
  "repository": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat", | 
				
			|||
  "keywords": [ | 
				
			|||
    "NodeLib", | 
				
			|||
    "fs", | 
				
			|||
    "FileSystem", | 
				
			|||
    "file system", | 
				
			|||
    "stat" | 
				
			|||
  ], | 
				
			|||
  "engines": { | 
				
			|||
    "node": ">= 8" | 
				
			|||
  }, | 
				
			|||
  "files": [ | 
				
			|||
    "out/**", | 
				
			|||
    "!out/**/*.map", | 
				
			|||
    "!out/**/*.spec.*" | 
				
			|||
  ], | 
				
			|||
  "main": "out/index.js", | 
				
			|||
  "typings": "out/index.d.ts", | 
				
			|||
  "scripts": { | 
				
			|||
    "clean": "rimraf {tsconfig.tsbuildinfo,out}", | 
				
			|||
    "lint": "eslint \"src/**/*.ts\" --cache", | 
				
			|||
    "compile": "tsc -b .", | 
				
			|||
    "compile:watch": "tsc -p . --watch --sourceMap", | 
				
			|||
    "test": "mocha \"out/**/*.spec.js\" -s 0", | 
				
			|||
    "build": "npm run clean && npm run compile && npm run lint && npm test", | 
				
			|||
    "watch": "npm run clean && npm run compile:watch" | 
				
			|||
  }, | 
				
			|||
  "devDependencies": { | 
				
			|||
    "@nodelib/fs.macchiato": "1.0.4" | 
				
			|||
  }, | 
				
			|||
  "gitHead": "d6a7960d5281d3dd5f8e2efba49bb552d090f562" | 
				
			|||
} | 
				
			|||
@ -0,0 +1,21 @@ | 
				
			|||
The MIT License (MIT) | 
				
			|||
 | 
				
			|||
Copyright (c) Denis Malinochkin | 
				
			|||
 | 
				
			|||
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. | 
				
			|||
@ -0,0 +1,215 @@ | 
				
			|||
# @nodelib/fs.walk | 
				
			|||
 | 
				
			|||
> A library for efficiently walking a directory recursively. | 
				
			|||
 | 
				
			|||
## :bulb: Highlights | 
				
			|||
 | 
				
			|||
* :moneybag: Returns useful information: `name`, `path`, `dirent` and `stats` (optional). | 
				
			|||
* :rocket: On Node.js 10.10+ uses the mechanism without additional calls to determine the entry type for performance reasons. See [`old` and `modern` mode](https://github.com/nodelib/nodelib/blob/master/packages/fs/fs.scandir/README.md#old-and-modern-mode). | 
				
			|||
* :gear: Built-in directories/files and error filtering system. | 
				
			|||
* :link: Can safely work with broken symbolic links. | 
				
			|||
 | 
				
			|||
## Install | 
				
			|||
 | 
				
			|||
```console | 
				
			|||
npm install @nodelib/fs.walk | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Usage | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
import * as fsWalk from '@nodelib/fs.walk'; | 
				
			|||
 | 
				
			|||
fsWalk.walk('path', (error, entries) => { /* … */ }); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## API | 
				
			|||
 | 
				
			|||
### .walk(path, [optionsOrSettings], callback) | 
				
			|||
 | 
				
			|||
Reads the directory recursively and asynchronously. Requires a callback function. | 
				
			|||
 | 
				
			|||
> :book: If you want to use the Promise API, use `util.promisify`. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
fsWalk.walk('path', (error, entries) => { /* … */ }); | 
				
			|||
fsWalk.walk('path', {}, (error, entries) => { /* … */ }); | 
				
			|||
fsWalk.walk('path', new fsWalk.Settings(), (error, entries) => { /* … */ }); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### .walkStream(path, [optionsOrSettings]) | 
				
			|||
 | 
				
			|||
Reads the directory recursively and asynchronously. [Readable Stream](https://nodejs.org/dist/latest-v12.x/docs/api/stream.html#stream_readable_streams) is used as a provider. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
const stream = fsWalk.walkStream('path'); | 
				
			|||
const stream = fsWalk.walkStream('path', {}); | 
				
			|||
const stream = fsWalk.walkStream('path', new fsWalk.Settings()); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### .walkSync(path, [optionsOrSettings]) | 
				
			|||
 | 
				
			|||
Reads the directory recursively and synchronously. Returns an array of entries. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
const entries = fsWalk.walkSync('path'); | 
				
			|||
const entries = fsWalk.walkSync('path', {}); | 
				
			|||
const entries = fsWalk.walkSync('path', new fsWalk.Settings()); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
#### path | 
				
			|||
 | 
				
			|||
* Required: `true` | 
				
			|||
* Type: `string | Buffer | URL` | 
				
			|||
 | 
				
			|||
A path to a file. If a URL is provided, it must use the `file:` protocol. | 
				
			|||
 | 
				
			|||
#### optionsOrSettings | 
				
			|||
 | 
				
			|||
* Required: `false` | 
				
			|||
* Type: `Options | Settings` | 
				
			|||
* Default: An instance of `Settings` class | 
				
			|||
 | 
				
			|||
An [`Options`](#options) object or an instance of [`Settings`](#settings) class. | 
				
			|||
 | 
				
			|||
> :book: When you pass a plain object, an instance of the `Settings` class will be created automatically. If you plan to call the method frequently, use a pre-created instance of the `Settings` class. | 
				
			|||
 | 
				
			|||
### Settings([options]) | 
				
			|||
 | 
				
			|||
A class of full settings of the package. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
const settings = new fsWalk.Settings({ followSymbolicLinks: true }); | 
				
			|||
 | 
				
			|||
const entries = fsWalk.walkSync('path', settings); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Entry | 
				
			|||
 | 
				
			|||
* `name` — The name of the entry (`unknown.txt`). | 
				
			|||
* `path` — The path of the entry relative to call directory (`root/unknown.txt`). | 
				
			|||
* `dirent` — An instance of [`fs.Dirent`](./src/types/index.ts) class. | 
				
			|||
* [`stats`] — An instance of `fs.Stats` class. | 
				
			|||
 | 
				
			|||
## Options | 
				
			|||
 | 
				
			|||
### basePath | 
				
			|||
 | 
				
			|||
* Type: `string` | 
				
			|||
* Default: `undefined` | 
				
			|||
 | 
				
			|||
By default, all paths are built relative to the root path. You can use this option to set custom root path. | 
				
			|||
 | 
				
			|||
In the example below we read the files from the `root` directory, but in the results the root path will be `custom`. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
fsWalk.walkSync('root'); // → ['root/file.txt'] | 
				
			|||
fsWalk.walkSync('root', { basePath: 'custom' }); // → ['custom/file.txt'] | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### concurrency | 
				
			|||
 | 
				
			|||
* Type: `number` | 
				
			|||
* Default: `Infinity` | 
				
			|||
 | 
				
			|||
The maximum number of concurrent calls to `fs.readdir`. | 
				
			|||
 | 
				
			|||
> :book: The higher the number, the higher performance and the load on the File System. If you want to read in quiet mode, set the value to `4 * os.cpus().length` (4 is default size of [thread pool work scheduling](http://docs.libuv.org/en/v1.x/threadpool.html#thread-pool-work-scheduling)). | 
				
			|||
 | 
				
			|||
### deepFilter | 
				
			|||
 | 
				
			|||
* Type: [`DeepFilterFunction`](./src/settings.ts) | 
				
			|||
* Default: `undefined` | 
				
			|||
 | 
				
			|||
A function that indicates whether the directory will be read deep or not. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
// Skip all directories that starts with `node_modules` | 
				
			|||
const filter: DeepFilterFunction = (entry) => !entry.path.startsWith('node_modules'); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### entryFilter | 
				
			|||
 | 
				
			|||
* Type: [`EntryFilterFunction`](./src/settings.ts) | 
				
			|||
* Default: `undefined` | 
				
			|||
 | 
				
			|||
A function that indicates whether the entry will be included to results or not. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
// Exclude all `.js` files from results | 
				
			|||
const filter: EntryFilterFunction = (entry) => !entry.name.endsWith('.js'); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### errorFilter | 
				
			|||
 | 
				
			|||
* Type: [`ErrorFilterFunction`](./src/settings.ts) | 
				
			|||
* Default: `undefined` | 
				
			|||
 | 
				
			|||
A function that allows you to skip errors that occur when reading directories. | 
				
			|||
 | 
				
			|||
For example, you can skip `ENOENT` errors if required: | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
// Skip all ENOENT errors | 
				
			|||
const filter: ErrorFilterFunction = (error) => error.code == 'ENOENT'; | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### stats | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `false` | 
				
			|||
 | 
				
			|||
Adds an instance of `fs.Stats` class to the [`Entry`](#entry). | 
				
			|||
 | 
				
			|||
> :book: Always use `fs.readdir` with additional `fs.lstat/fs.stat` calls to determine the entry type. | 
				
			|||
 | 
				
			|||
### followSymbolicLinks | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `false` | 
				
			|||
 | 
				
			|||
Follow symbolic links or not. Call `fs.stat` on symbolic link if `true`. | 
				
			|||
 | 
				
			|||
### `throwErrorOnBrokenSymbolicLink` | 
				
			|||
 | 
				
			|||
* Type: `boolean` | 
				
			|||
* Default: `true` | 
				
			|||
 | 
				
			|||
Throw an error when symbolic link is broken if `true` or safely return `lstat` call if `false`. | 
				
			|||
 | 
				
			|||
### `pathSegmentSeparator` | 
				
			|||
 | 
				
			|||
* Type: `string` | 
				
			|||
* Default: `path.sep` | 
				
			|||
 | 
				
			|||
By default, this package uses the correct path separator for your OS (`\` on Windows, `/` on Unix-like systems). But you can set this option to any separator character(s) that you want to use instead. | 
				
			|||
 | 
				
			|||
### `fs` | 
				
			|||
 | 
				
			|||
* Type: `FileSystemAdapter` | 
				
			|||
* Default: A default FS methods | 
				
			|||
 | 
				
			|||
By default, the built-in Node.js module (`fs`) is used to work with the file system. You can replace any method with your own. | 
				
			|||
 | 
				
			|||
```ts | 
				
			|||
interface FileSystemAdapter { | 
				
			|||
	lstat: typeof fs.lstat; | 
				
			|||
	stat: typeof fs.stat; | 
				
			|||
	lstatSync: typeof fs.lstatSync; | 
				
			|||
	statSync: typeof fs.statSync; | 
				
			|||
	readdir: typeof fs.readdir; | 
				
			|||
	readdirSync: typeof fs.readdirSync; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
const settings = new fsWalk.Settings({ | 
				
			|||
	fs: { lstat: fakeLstat } | 
				
			|||
}); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Changelog | 
				
			|||
 | 
				
			|||
See the [Releases section of our GitHub project](https://github.com/nodelib/nodelib/releases) for changelog for each release version. | 
				
			|||
 | 
				
			|||
## License | 
				
			|||
 | 
				
			|||
This software is released under the terms of the MIT license. | 
				
			|||
@ -0,0 +1,14 @@ | 
				
			|||
/// <reference types="node" />
 | 
				
			|||
import type { Readable } from 'stream'; | 
				
			|||
import type { Dirent, FileSystemAdapter } from '@nodelib/fs.scandir'; | 
				
			|||
import { AsyncCallback } from './providers/async'; | 
				
			|||
import Settings, { DeepFilterFunction, EntryFilterFunction, ErrorFilterFunction, Options } from './settings'; | 
				
			|||
import type { Entry } from './types'; | 
				
			|||
declare function walk(directory: string, callback: AsyncCallback): void; | 
				
			|||
declare function walk(directory: string, optionsOrSettings: Options | Settings, callback: AsyncCallback): void; | 
				
			|||
declare namespace walk { | 
				
			|||
    function __promisify__(directory: string, optionsOrSettings?: Options | Settings): Promise<Entry[]>; | 
				
			|||
} | 
				
			|||
declare function walkSync(directory: string, optionsOrSettings?: Options | Settings): Entry[]; | 
				
			|||
declare function walkStream(directory: string, optionsOrSettings?: Options | Settings): Readable; | 
				
			|||
export { walk, walkSync, walkStream, Settings, AsyncCallback, Dirent, Entry, FileSystemAdapter, Options, DeepFilterFunction, EntryFilterFunction, ErrorFilterFunction }; | 
				
			|||
@ -0,0 +1,34 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0; | 
				
			|||
const async_1 = require("./providers/async"); | 
				
			|||
const stream_1 = require("./providers/stream"); | 
				
			|||
const sync_1 = require("./providers/sync"); | 
				
			|||
const settings_1 = require("./settings"); | 
				
			|||
exports.Settings = settings_1.default; | 
				
			|||
function walk(directory, optionsOrSettingsOrCallback, callback) { | 
				
			|||
    if (typeof optionsOrSettingsOrCallback === 'function') { | 
				
			|||
        new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback); | 
				
			|||
        return; | 
				
			|||
    } | 
				
			|||
    new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback); | 
				
			|||
} | 
				
			|||
exports.walk = walk; | 
				
			|||
function walkSync(directory, optionsOrSettings) { | 
				
			|||
    const settings = getSettings(optionsOrSettings); | 
				
			|||
    const provider = new sync_1.default(directory, settings); | 
				
			|||
    return provider.read(); | 
				
			|||
} | 
				
			|||
exports.walkSync = walkSync; | 
				
			|||
function walkStream(directory, optionsOrSettings) { | 
				
			|||
    const settings = getSettings(optionsOrSettings); | 
				
			|||
    const provider = new stream_1.default(directory, settings); | 
				
			|||
    return provider.read(); | 
				
			|||
} | 
				
			|||
exports.walkStream = walkStream; | 
				
			|||
function getSettings(settingsOrOptions = {}) { | 
				
			|||
    if (settingsOrOptions instanceof settings_1.default) { | 
				
			|||
        return settingsOrOptions; | 
				
			|||
    } | 
				
			|||
    return new settings_1.default(settingsOrOptions); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
import AsyncReader from '../readers/async'; | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
import type { Entry, Errno } from '../types'; | 
				
			|||
export declare type AsyncCallback = (error: Errno, entries: Entry[]) => void; | 
				
			|||
export default class AsyncProvider { | 
				
			|||
    private readonly _root; | 
				
			|||
    private readonly _settings; | 
				
			|||
    protected readonly _reader: AsyncReader; | 
				
			|||
    private readonly _storage; | 
				
			|||
    constructor(_root: string, _settings: Settings); | 
				
			|||
    read(callback: AsyncCallback): void; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,30 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const async_1 = require("../readers/async"); | 
				
			|||
class AsyncProvider { | 
				
			|||
    constructor(_root, _settings) { | 
				
			|||
        this._root = _root; | 
				
			|||
        this._settings = _settings; | 
				
			|||
        this._reader = new async_1.default(this._root, this._settings); | 
				
			|||
        this._storage = []; | 
				
			|||
    } | 
				
			|||
    read(callback) { | 
				
			|||
        this._reader.onError((error) => { | 
				
			|||
            callFailureCallback(callback, error); | 
				
			|||
        }); | 
				
			|||
        this._reader.onEntry((entry) => { | 
				
			|||
            this._storage.push(entry); | 
				
			|||
        }); | 
				
			|||
        this._reader.onEnd(() => { | 
				
			|||
            callSuccessCallback(callback, this._storage); | 
				
			|||
        }); | 
				
			|||
        this._reader.read(); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = AsyncProvider; | 
				
			|||
function callFailureCallback(callback, error) { | 
				
			|||
    callback(error); | 
				
			|||
} | 
				
			|||
function callSuccessCallback(callback, entries) { | 
				
			|||
    callback(null, entries); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,4 @@ | 
				
			|||
import AsyncProvider from './async'; | 
				
			|||
import StreamProvider from './stream'; | 
				
			|||
import SyncProvider from './sync'; | 
				
			|||
export { AsyncProvider, StreamProvider, SyncProvider }; | 
				
			|||
@ -0,0 +1,9 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.SyncProvider = exports.StreamProvider = exports.AsyncProvider = void 0; | 
				
			|||
const async_1 = require("./async"); | 
				
			|||
exports.AsyncProvider = async_1.default; | 
				
			|||
const stream_1 = require("./stream"); | 
				
			|||
exports.StreamProvider = stream_1.default; | 
				
			|||
const sync_1 = require("./sync"); | 
				
			|||
exports.SyncProvider = sync_1.default; | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
/// <reference types="node" />
 | 
				
			|||
import { Readable } from 'stream'; | 
				
			|||
import AsyncReader from '../readers/async'; | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
export default class StreamProvider { | 
				
			|||
    private readonly _root; | 
				
			|||
    private readonly _settings; | 
				
			|||
    protected readonly _reader: AsyncReader; | 
				
			|||
    protected readonly _stream: Readable; | 
				
			|||
    constructor(_root: string, _settings: Settings); | 
				
			|||
    read(): Readable; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,34 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const stream_1 = require("stream"); | 
				
			|||
const async_1 = require("../readers/async"); | 
				
			|||
class StreamProvider { | 
				
			|||
    constructor(_root, _settings) { | 
				
			|||
        this._root = _root; | 
				
			|||
        this._settings = _settings; | 
				
			|||
        this._reader = new async_1.default(this._root, this._settings); | 
				
			|||
        this._stream = new stream_1.Readable({ | 
				
			|||
            objectMode: true, | 
				
			|||
            read: () => { }, | 
				
			|||
            destroy: () => { | 
				
			|||
                if (!this._reader.isDestroyed) { | 
				
			|||
                    this._reader.destroy(); | 
				
			|||
                } | 
				
			|||
            } | 
				
			|||
        }); | 
				
			|||
    } | 
				
			|||
    read() { | 
				
			|||
        this._reader.onError((error) => { | 
				
			|||
            this._stream.emit('error', error); | 
				
			|||
        }); | 
				
			|||
        this._reader.onEntry((entry) => { | 
				
			|||
            this._stream.push(entry); | 
				
			|||
        }); | 
				
			|||
        this._reader.onEnd(() => { | 
				
			|||
            this._stream.push(null); | 
				
			|||
        }); | 
				
			|||
        this._reader.read(); | 
				
			|||
        return this._stream; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = StreamProvider; | 
				
			|||
@ -0,0 +1,10 @@ | 
				
			|||
import SyncReader from '../readers/sync'; | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
import type { Entry } from '../types'; | 
				
			|||
export default class SyncProvider { | 
				
			|||
    private readonly _root; | 
				
			|||
    private readonly _settings; | 
				
			|||
    protected readonly _reader: SyncReader; | 
				
			|||
    constructor(_root: string, _settings: Settings); | 
				
			|||
    read(): Entry[]; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,14 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const sync_1 = require("../readers/sync"); | 
				
			|||
class SyncProvider { | 
				
			|||
    constructor(_root, _settings) { | 
				
			|||
        this._root = _root; | 
				
			|||
        this._settings = _settings; | 
				
			|||
        this._reader = new sync_1.default(this._root, this._settings); | 
				
			|||
    } | 
				
			|||
    read() { | 
				
			|||
        return this._reader.read(); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = SyncProvider; | 
				
			|||
@ -0,0 +1,30 @@ | 
				
			|||
/// <reference types="node" />
 | 
				
			|||
import { EventEmitter } from 'events'; | 
				
			|||
import * as fsScandir from '@nodelib/fs.scandir'; | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
import type { Entry, Errno } from '../types'; | 
				
			|||
import Reader from './reader'; | 
				
			|||
declare type EntryEventCallback = (entry: Entry) => void; | 
				
			|||
declare type ErrorEventCallback = (error: Errno) => void; | 
				
			|||
declare type EndEventCallback = () => void; | 
				
			|||
export default class AsyncReader extends Reader { | 
				
			|||
    protected readonly _settings: Settings; | 
				
			|||
    protected readonly _scandir: typeof fsScandir.scandir; | 
				
			|||
    protected readonly _emitter: EventEmitter; | 
				
			|||
    private readonly _queue; | 
				
			|||
    private _isFatalError; | 
				
			|||
    private _isDestroyed; | 
				
			|||
    constructor(_root: string, _settings: Settings); | 
				
			|||
    read(): EventEmitter; | 
				
			|||
    get isDestroyed(): boolean; | 
				
			|||
    destroy(): void; | 
				
			|||
    onEntry(callback: EntryEventCallback): void; | 
				
			|||
    onError(callback: ErrorEventCallback): void; | 
				
			|||
    onEnd(callback: EndEventCallback): void; | 
				
			|||
    private _pushToQueue; | 
				
			|||
    private _worker; | 
				
			|||
    private _handleError; | 
				
			|||
    private _handleEntry; | 
				
			|||
    private _emitEntry; | 
				
			|||
} | 
				
			|||
export {}; | 
				
			|||
@ -0,0 +1,97 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const events_1 = require("events"); | 
				
			|||
const fsScandir = require("@nodelib/fs.scandir"); | 
				
			|||
const fastq = require("fastq"); | 
				
			|||
const common = require("./common"); | 
				
			|||
const reader_1 = require("./reader"); | 
				
			|||
class AsyncReader extends reader_1.default { | 
				
			|||
    constructor(_root, _settings) { | 
				
			|||
        super(_root, _settings); | 
				
			|||
        this._settings = _settings; | 
				
			|||
        this._scandir = fsScandir.scandir; | 
				
			|||
        this._emitter = new events_1.EventEmitter(); | 
				
			|||
        this._queue = fastq(this._worker.bind(this), this._settings.concurrency); | 
				
			|||
        this._isFatalError = false; | 
				
			|||
        this._isDestroyed = false; | 
				
			|||
        this._queue.drain = () => { | 
				
			|||
            if (!this._isFatalError) { | 
				
			|||
                this._emitter.emit('end'); | 
				
			|||
            } | 
				
			|||
        }; | 
				
			|||
    } | 
				
			|||
    read() { | 
				
			|||
        this._isFatalError = false; | 
				
			|||
        this._isDestroyed = false; | 
				
			|||
        setImmediate(() => { | 
				
			|||
            this._pushToQueue(this._root, this._settings.basePath); | 
				
			|||
        }); | 
				
			|||
        return this._emitter; | 
				
			|||
    } | 
				
			|||
    get isDestroyed() { | 
				
			|||
        return this._isDestroyed; | 
				
			|||
    } | 
				
			|||
    destroy() { | 
				
			|||
        if (this._isDestroyed) { | 
				
			|||
            throw new Error('The reader is already destroyed'); | 
				
			|||
        } | 
				
			|||
        this._isDestroyed = true; | 
				
			|||
        this._queue.killAndDrain(); | 
				
			|||
    } | 
				
			|||
    onEntry(callback) { | 
				
			|||
        this._emitter.on('entry', callback); | 
				
			|||
    } | 
				
			|||
    onError(callback) { | 
				
			|||
        this._emitter.once('error', callback); | 
				
			|||
    } | 
				
			|||
    onEnd(callback) { | 
				
			|||
        this._emitter.once('end', callback); | 
				
			|||
    } | 
				
			|||
    _pushToQueue(directory, base) { | 
				
			|||
        const queueItem = { directory, base }; | 
				
			|||
        this._queue.push(queueItem, (error) => { | 
				
			|||
            if (error !== null) { | 
				
			|||
                this._handleError(error); | 
				
			|||
            } | 
				
			|||
        }); | 
				
			|||
    } | 
				
			|||
    _worker(item, done) { | 
				
			|||
        this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => { | 
				
			|||
            if (error !== null) { | 
				
			|||
                done(error, undefined); | 
				
			|||
                return; | 
				
			|||
            } | 
				
			|||
            for (const entry of entries) { | 
				
			|||
                this._handleEntry(entry, item.base); | 
				
			|||
            } | 
				
			|||
            done(null, undefined); | 
				
			|||
        }); | 
				
			|||
    } | 
				
			|||
    _handleError(error) { | 
				
			|||
        if (this._isDestroyed || !common.isFatalError(this._settings, error)) { | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        this._isFatalError = true; | 
				
			|||
        this._isDestroyed = true; | 
				
			|||
        this._emitter.emit('error', error); | 
				
			|||
    } | 
				
			|||
    _handleEntry(entry, base) { | 
				
			|||
        if (this._isDestroyed || this._isFatalError) { | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        const fullpath = entry.path; | 
				
			|||
        if (base !== undefined) { | 
				
			|||
            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); | 
				
			|||
        } | 
				
			|||
        if (common.isAppliedFilter(this._settings.entryFilter, entry)) { | 
				
			|||
            this._emitEntry(entry); | 
				
			|||
        } | 
				
			|||
        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { | 
				
			|||
            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path); | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
    _emitEntry(entry) { | 
				
			|||
        this._emitter.emit('entry', entry); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = AsyncReader; | 
				
			|||
@ -0,0 +1,7 @@ | 
				
			|||
import type { FilterFunction } from '../settings'; | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
import type { Errno } from '../types'; | 
				
			|||
export declare function isFatalError(settings: Settings, error: Errno): boolean; | 
				
			|||
export declare function isAppliedFilter<T>(filter: FilterFunction<T> | null, value: T): boolean; | 
				
			|||
export declare function replacePathSegmentSeparator(filepath: string, separator: string): string; | 
				
			|||
export declare function joinPathSegments(a: string, b: string, separator: string): string; | 
				
			|||
@ -0,0 +1,31 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
exports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0; | 
				
			|||
function isFatalError(settings, error) { | 
				
			|||
    if (settings.errorFilter === null) { | 
				
			|||
        return true; | 
				
			|||
    } | 
				
			|||
    return !settings.errorFilter(error); | 
				
			|||
} | 
				
			|||
exports.isFatalError = isFatalError; | 
				
			|||
function isAppliedFilter(filter, value) { | 
				
			|||
    return filter === null || filter(value); | 
				
			|||
} | 
				
			|||
exports.isAppliedFilter = isAppliedFilter; | 
				
			|||
function replacePathSegmentSeparator(filepath, separator) { | 
				
			|||
    return filepath.split(/[/\\]/).join(separator); | 
				
			|||
} | 
				
			|||
exports.replacePathSegmentSeparator = replacePathSegmentSeparator; | 
				
			|||
function joinPathSegments(a, b, separator) { | 
				
			|||
    if (a === '') { | 
				
			|||
        return b; | 
				
			|||
    } | 
				
			|||
    /** | 
				
			|||
     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`). | 
				
			|||
     */ | 
				
			|||
    if (a.endsWith(separator)) { | 
				
			|||
        return a + b; | 
				
			|||
    } | 
				
			|||
    return a + separator + b; | 
				
			|||
} | 
				
			|||
exports.joinPathSegments = joinPathSegments; | 
				
			|||
@ -0,0 +1,6 @@ | 
				
			|||
import type Settings from '../settings'; | 
				
			|||
export default class Reader { | 
				
			|||
    protected readonly _root: string; | 
				
			|||
    protected readonly _settings: Settings; | 
				
			|||
    constructor(_root: string, _settings: Settings); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,11 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const common = require("./common"); | 
				
			|||
class Reader { | 
				
			|||
    constructor(_root, _settings) { | 
				
			|||
        this._root = _root; | 
				
			|||
        this._settings = _settings; | 
				
			|||
        this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = Reader; | 
				
			|||
@ -0,0 +1,15 @@ | 
				
			|||
import * as fsScandir from '@nodelib/fs.scandir'; | 
				
			|||
import type { Entry } from '../types'; | 
				
			|||
import Reader from './reader'; | 
				
			|||
export default class SyncReader extends Reader { | 
				
			|||
    protected readonly _scandir: typeof fsScandir.scandirSync; | 
				
			|||
    private readonly _storage; | 
				
			|||
    private readonly _queue; | 
				
			|||
    read(): Entry[]; | 
				
			|||
    private _pushToQueue; | 
				
			|||
    private _handleQueue; | 
				
			|||
    private _handleDirectory; | 
				
			|||
    private _handleError; | 
				
			|||
    private _handleEntry; | 
				
			|||
    private _pushToStorage; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,59 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const fsScandir = require("@nodelib/fs.scandir"); | 
				
			|||
const common = require("./common"); | 
				
			|||
const reader_1 = require("./reader"); | 
				
			|||
class SyncReader extends reader_1.default { | 
				
			|||
    constructor() { | 
				
			|||
        super(...arguments); | 
				
			|||
        this._scandir = fsScandir.scandirSync; | 
				
			|||
        this._storage = []; | 
				
			|||
        this._queue = new Set(); | 
				
			|||
    } | 
				
			|||
    read() { | 
				
			|||
        this._pushToQueue(this._root, this._settings.basePath); | 
				
			|||
        this._handleQueue(); | 
				
			|||
        return this._storage; | 
				
			|||
    } | 
				
			|||
    _pushToQueue(directory, base) { | 
				
			|||
        this._queue.add({ directory, base }); | 
				
			|||
    } | 
				
			|||
    _handleQueue() { | 
				
			|||
        for (const item of this._queue.values()) { | 
				
			|||
            this._handleDirectory(item.directory, item.base); | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
    _handleDirectory(directory, base) { | 
				
			|||
        try { | 
				
			|||
            const entries = this._scandir(directory, this._settings.fsScandirSettings); | 
				
			|||
            for (const entry of entries) { | 
				
			|||
                this._handleEntry(entry, base); | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
        catch (error) { | 
				
			|||
            this._handleError(error); | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
    _handleError(error) { | 
				
			|||
        if (!common.isFatalError(this._settings, error)) { | 
				
			|||
            return; | 
				
			|||
        } | 
				
			|||
        throw error; | 
				
			|||
    } | 
				
			|||
    _handleEntry(entry, base) { | 
				
			|||
        const fullpath = entry.path; | 
				
			|||
        if (base !== undefined) { | 
				
			|||
            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); | 
				
			|||
        } | 
				
			|||
        if (common.isAppliedFilter(this._settings.entryFilter, entry)) { | 
				
			|||
            this._pushToStorage(entry); | 
				
			|||
        } | 
				
			|||
        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { | 
				
			|||
            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path); | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
    _pushToStorage(entry) { | 
				
			|||
        this._storage.push(entry); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = SyncReader; | 
				
			|||
@ -0,0 +1,30 @@ | 
				
			|||
import * as fsScandir from '@nodelib/fs.scandir'; | 
				
			|||
import type { Entry, Errno } from './types'; | 
				
			|||
export declare type FilterFunction<T> = (value: T) => boolean; | 
				
			|||
export declare type DeepFilterFunction = FilterFunction<Entry>; | 
				
			|||
export declare type EntryFilterFunction = FilterFunction<Entry>; | 
				
			|||
export declare type ErrorFilterFunction = FilterFunction<Errno>; | 
				
			|||
export interface Options { | 
				
			|||
    basePath?: string; | 
				
			|||
    concurrency?: number; | 
				
			|||
    deepFilter?: DeepFilterFunction; | 
				
			|||
    entryFilter?: EntryFilterFunction; | 
				
			|||
    errorFilter?: ErrorFilterFunction; | 
				
			|||
    followSymbolicLinks?: boolean; | 
				
			|||
    fs?: Partial<fsScandir.FileSystemAdapter>; | 
				
			|||
    pathSegmentSeparator?: string; | 
				
			|||
    stats?: boolean; | 
				
			|||
    throwErrorOnBrokenSymbolicLink?: boolean; | 
				
			|||
} | 
				
			|||
export default class Settings { | 
				
			|||
    private readonly _options; | 
				
			|||
    readonly basePath?: string; | 
				
			|||
    readonly concurrency: number; | 
				
			|||
    readonly deepFilter: DeepFilterFunction | null; | 
				
			|||
    readonly entryFilter: EntryFilterFunction | null; | 
				
			|||
    readonly errorFilter: ErrorFilterFunction | null; | 
				
			|||
    readonly pathSegmentSeparator: string; | 
				
			|||
    readonly fsScandirSettings: fsScandir.Settings; | 
				
			|||
    constructor(_options?: Options); | 
				
			|||
    private _getValue; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,26 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
const path = require("path"); | 
				
			|||
const fsScandir = require("@nodelib/fs.scandir"); | 
				
			|||
class Settings { | 
				
			|||
    constructor(_options = {}) { | 
				
			|||
        this._options = _options; | 
				
			|||
        this.basePath = this._getValue(this._options.basePath, undefined); | 
				
			|||
        this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY); | 
				
			|||
        this.deepFilter = this._getValue(this._options.deepFilter, null); | 
				
			|||
        this.entryFilter = this._getValue(this._options.entryFilter, null); | 
				
			|||
        this.errorFilter = this._getValue(this._options.errorFilter, null); | 
				
			|||
        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep); | 
				
			|||
        this.fsScandirSettings = new fsScandir.Settings({ | 
				
			|||
            followSymbolicLinks: this._options.followSymbolicLinks, | 
				
			|||
            fs: this._options.fs, | 
				
			|||
            pathSegmentSeparator: this._options.pathSegmentSeparator, | 
				
			|||
            stats: this._options.stats, | 
				
			|||
            throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink | 
				
			|||
        }); | 
				
			|||
    } | 
				
			|||
    _getValue(option, value) { | 
				
			|||
        return option !== null && option !== void 0 ? option : value; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
exports.default = Settings; | 
				
			|||
@ -0,0 +1,8 @@ | 
				
			|||
/// <reference types="node" />
 | 
				
			|||
import type * as scandir from '@nodelib/fs.scandir'; | 
				
			|||
export declare type Entry = scandir.Entry; | 
				
			|||
export declare type Errno = NodeJS.ErrnoException; | 
				
			|||
export interface QueueItem { | 
				
			|||
    directory: string; | 
				
			|||
    base?: string; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
"use strict"; | 
				
			|||
Object.defineProperty(exports, "__esModule", { value: true }); | 
				
			|||
@ -0,0 +1,44 @@ | 
				
			|||
{ | 
				
			|||
  "name": "@nodelib/fs.walk", | 
				
			|||
  "version": "1.2.8", | 
				
			|||
  "description": "A library for efficiently walking a directory recursively", | 
				
			|||
  "license": "MIT", | 
				
			|||
  "repository": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk", | 
				
			|||
  "keywords": [ | 
				
			|||
    "NodeLib", | 
				
			|||
    "fs", | 
				
			|||
    "FileSystem", | 
				
			|||
    "file system", | 
				
			|||
    "walk", | 
				
			|||
    "scanner", | 
				
			|||
    "crawler" | 
				
			|||
  ], | 
				
			|||
  "engines": { | 
				
			|||
    "node": ">= 8" | 
				
			|||
  }, | 
				
			|||
  "files": [ | 
				
			|||
    "out/**", | 
				
			|||
    "!out/**/*.map", | 
				
			|||
    "!out/**/*.spec.*", | 
				
			|||
    "!out/**/tests/**" | 
				
			|||
  ], | 
				
			|||
  "main": "out/index.js", | 
				
			|||
  "typings": "out/index.d.ts", | 
				
			|||
  "scripts": { | 
				
			|||
    "clean": "rimraf {tsconfig.tsbuildinfo,out}", | 
				
			|||
    "lint": "eslint \"src/**/*.ts\" --cache", | 
				
			|||
    "compile": "tsc -b .", | 
				
			|||
    "compile:watch": "tsc -p . --watch --sourceMap", | 
				
			|||
    "test": "mocha \"out/**/*.spec.js\" -s 0", | 
				
			|||
    "build": "npm run clean && npm run compile && npm run lint && npm test", | 
				
			|||
    "watch": "npm run clean && npm run compile:watch" | 
				
			|||
  }, | 
				
			|||
  "dependencies": { | 
				
			|||
    "@nodelib/fs.scandir": "2.1.5", | 
				
			|||
    "fastq": "^1.6.0" | 
				
			|||
  }, | 
				
			|||
  "devDependencies": { | 
				
			|||
    "@nodelib/fs.macchiato": "1.0.4" | 
				
			|||
  }, | 
				
			|||
  "gitHead": "1e5bad48565da2b06b8600e744324ea240bf49d8" | 
				
			|||
} | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
language: node_js | 
				
			|||
node_js: | 
				
			|||
  - '12' | 
				
			|||
  - '11' | 
				
			|||
  - '10' | 
				
			|||
  - '9' | 
				
			|||
  - '8' | 
				
			|||
  - '6' | 
				
			|||
  - '4' | 
				
			|||
  - '0.12' | 
				
			|||
  - '0.10' | 
				
			|||
  - '0.8' | 
				
			|||
  - '0.6' | 
				
			|||
before_install: | 
				
			|||
  - 'nvm install-latest-npm' | 
				
			|||
install: | 
				
			|||
  - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' | 
				
			|||
sudo: false | 
				
			|||
matrix: | 
				
			|||
  fast_finish: true | 
				
			|||
  allow_failures: | 
				
			|||
    - node_js: "0.6" | 
				
			|||
@ -0,0 +1,94 @@ | 
				
			|||
# acorn-node change log | 
				
			|||
 | 
				
			|||
All notable changes to this project will be documented in this file. | 
				
			|||
 | 
				
			|||
This project adheres to [Semantic Versioning](http://semver.org/). | 
				
			|||
 | 
				
			|||
## 1.8.2 | 
				
			|||
 * Revert a breaking change in import.meta parsing. | 
				
			|||
 | 
				
			|||
## 1.8.1 | 
				
			|||
 * Fix crash in compiled private-class-elements code. | 
				
			|||
 | 
				
			|||
## 1.8.0 | 
				
			|||
 * Upgrade acorn to v7. | 
				
			|||
 | 
				
			|||
   For backwards compatibility, `acorn-node` still uses the `Import` node type for dynamic imports, _NOT_ `ImportExpression` like acorn v7 and estree. | 
				
			|||
 * Add numeric separator support: | 
				
			|||
   ```js | 
				
			|||
   var a = 10_000_000_000_000_000_000_000_000n; | 
				
			|||
   ``` | 
				
			|||
 | 
				
			|||
## 1.7.0 | 
				
			|||
 * Add class instance fields support: | 
				
			|||
   ```js | 
				
			|||
   class X { | 
				
			|||
     pub = 1; | 
				
			|||
     #priv = 2; | 
				
			|||
   } | 
				
			|||
   ``` | 
				
			|||
 * Add class static fields support: | 
				
			|||
   ```js | 
				
			|||
   class X { | 
				
			|||
     static pub = 1; | 
				
			|||
     static #priv = 2; | 
				
			|||
   } | 
				
			|||
   ``` | 
				
			|||
 * Add `export * as ns` support when `sourceType` is 'module': | 
				
			|||
   ```js | 
				
			|||
   export * as ns from './ns.mjs'; | 
				
			|||
   ``` | 
				
			|||
 | 
				
			|||
## 1.6.2 | 
				
			|||
 | 
				
			|||
 * Allow dynamic `import()` in scripts. | 
				
			|||
 * Update minimum dependency versions, fixing a peerDependency warning. | 
				
			|||
 * Add Node 10 and 11 to CI. | 
				
			|||
 | 
				
			|||
## 1.6.1 | 
				
			|||
 | 
				
			|||
 * Update acorn-dynamic-import to v4. | 
				
			|||
 | 
				
			|||
## 1.6.0 | 
				
			|||
 | 
				
			|||
 * Upgrade acorn to v6. | 
				
			|||
 * Add bigint support. | 
				
			|||
 | 
				
			|||
## 1.5.2 | 
				
			|||
 | 
				
			|||
 * Upgrade acorn to support optional catch binding in the AST walker. | 
				
			|||
 | 
				
			|||
## 1.5.1 | 
				
			|||
 | 
				
			|||
 * Fix tests on Node <= 0.12. | 
				
			|||
 | 
				
			|||
## 1.5.0 | 
				
			|||
 | 
				
			|||
 * Add tests for async iteration, optional catch binding, import.meta, | 
				
			|||
   dynamic import, bigint (currently unsupported). | 
				
			|||
 * Add import.meta support. (`sourceType: 'module'` only) | 
				
			|||
 * Add dynamic import support. (`sourceType: 'module'` only) | 
				
			|||
 * Fix optional catch binding support in the walker. | 
				
			|||
 | 
				
			|||
## 1.4.0 | 
				
			|||
 | 
				
			|||
 * Upgrade acorn to 5.6, which supports optional catch bindings and other | 
				
			|||
   new syntax features. | 
				
			|||
 * Set ecmaVersion to 2019 to opt in to optional catch bindings etc. | 
				
			|||
 | 
				
			|||
## 1.3.0 | 
				
			|||
 | 
				
			|||
 * Upgrade acorn to 5.4, which supports object spread and async iteration. | 
				
			|||
 * Remove acorn5-object-spread plugin. | 
				
			|||
 | 
				
			|||
## 1.2.0 | 
				
			|||
 | 
				
			|||
 * Expose `acorn/dist/walk` as `acorn-node/walk`. | 
				
			|||
 | 
				
			|||
## 1.1.0 | 
				
			|||
 | 
				
			|||
 * Enable `allowHashBang` and `allowReturnOutsideFunction` by default. | 
				
			|||
 | 
				
			|||
## 1.0.0 | 
				
			|||
 | 
				
			|||
 * Initial release. | 
				
			|||
@ -0,0 +1,95 @@ | 
				
			|||
# [Apache License 2.0](https://spdx.org/licenses/Apache-2.0) | 
				
			|||
 | 
				
			|||
Copyright 2018 Renée Kooi <renee@kooi.me> | 
				
			|||
 | 
				
			|||
Licensed under the Apache License, Version 2.0 (the "License"); | 
				
			|||
you may not use this file except in compliance with the License. | 
				
			|||
You may obtain a copy of the License at | 
				
			|||
 | 
				
			|||
> http://www.apache.org/licenses/LICENSE-2.0 | 
				
			|||
 | 
				
			|||
Unless required by applicable law or agreed to in writing, software | 
				
			|||
distributed under the License is distributed on an "AS IS" BASIS, | 
				
			|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
				
			|||
See the License for the specific language governing permissions and | 
				
			|||
limitations under the License. | 
				
			|||
 | 
				
			|||
## acorn-bigint | 
				
			|||
 | 
				
			|||
The code in the `lib/bigint` folder is compiled from code licensed as MIT: | 
				
			|||
 | 
				
			|||
> Copyright (C) 2017-2018 by Adrian Heine | 
				
			|||
> | 
				
			|||
> 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. | 
				
			|||
 | 
				
			|||
Find the source code at https://github.com/acornjs/acorn-bigint. | 
				
			|||
 | 
				
			|||
## acorn-import-meta | 
				
			|||
 | 
				
			|||
The code in the `lib/import-meta` folder is compiled from code licensed as MIT: | 
				
			|||
 | 
				
			|||
> Copyright (C) 2017-2018 by Adrian Heine | 
				
			|||
> | 
				
			|||
> 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. | 
				
			|||
 | 
				
			|||
Find the source code at https://github.com/acornjs/acorn-import-meta. | 
				
			|||
 | 
				
			|||
## acorn-dynamic-import | 
				
			|||
 | 
				
			|||
The code in the `lib/dynamic-import` folder is licensed as MIT: | 
				
			|||
 | 
				
			|||
> MIT License | 
				
			|||
> | 
				
			|||
> Copyright (c) 2016 Jordan Gensler | 
				
			|||
> | 
				
			|||
> 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. | 
				
			|||
 | 
				
			|||
Find the source code at https://github.com/kesne/acorn-dynamic-import. | 
				
			|||
@ -0,0 +1,65 @@ | 
				
			|||
# acorn-node | 
				
			|||
 | 
				
			|||
[Acorn](https://github.com/acornjs/acorn) preloaded with plugins for syntax parity with recent Node versions. | 
				
			|||
 | 
				
			|||
It also includes versions of the plugins compiled with [Bublé](https://github.com/rich-harris/buble), so they can be run on old Node versions (0.6 and up). | 
				
			|||
 | 
				
			|||
[![npm][npm-image]][npm-url] | 
				
			|||
[![travis][travis-image]][travis-url] | 
				
			|||
[![standard][standard-image]][standard-url] | 
				
			|||
 | 
				
			|||
[npm-image]: https://img.shields.io/npm/v/acorn-node.svg?style=flat-square | 
				
			|||
[npm-url]: https://www.npmjs.com/package/acorn-node | 
				
			|||
[travis-image]: https://img.shields.io/travis/browserify/acorn-node/master.svg?style=flat-square | 
				
			|||
[travis-url]: https://travis-ci.org/browserify/acorn-node | 
				
			|||
[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square | 
				
			|||
[standard-url]: http://npm.im/standard | 
				
			|||
 | 
				
			|||
## Install | 
				
			|||
 | 
				
			|||
``` | 
				
			|||
npm install acorn-node | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Usage | 
				
			|||
 | 
				
			|||
```js | 
				
			|||
var acorn = require('acorn-node') | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
The API is the same as [acorn](https://github.com/acornjs/acorn), but the following syntax features are enabled by default: | 
				
			|||
 | 
				
			|||
 - Bigint syntax `10n` | 
				
			|||
 - Numeric separators syntax `10_000` | 
				
			|||
 - Public and private class instance fields | 
				
			|||
 - Public and private class static fields | 
				
			|||
 - Dynamic `import()` | 
				
			|||
 - The `import.meta` property | 
				
			|||
 - `export * as ns from` syntax | 
				
			|||
 | 
				
			|||
And the following options have different defaults from acorn, to match Node modules: | 
				
			|||
 | 
				
			|||
 - `ecmaVersion: 2019` | 
				
			|||
 - `allowHashBang: true` | 
				
			|||
 - `allowReturnOutsideFunction: true` | 
				
			|||
 | 
				
			|||
```js | 
				
			|||
var walk = require('acorn-node/walk') | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
The Acorn syntax tree walker. Comes preconfigured for the syntax plugins if necessary. | 
				
			|||
See the [acorn documentation](https://github.com/acornjs/acorn#distwalkjs) for details. | 
				
			|||
 | 
				
			|||
## License | 
				
			|||
 | 
				
			|||
The files in the repo root and the ./test folder are licensed as [Apache-2.0](LICENSE.md). | 
				
			|||
 | 
				
			|||
The files in lib/ are generated from other packages: | 
				
			|||
 | 
				
			|||
- lib/bigint: [acorn-bigint](https://github.com/acornjs/acorn-bigint]), MIT | 
				
			|||
- lib/class-private-elements: [acorn-class-private-elements](https://github.com/acornjs/acorn-class-private-elements), MIT | 
				
			|||
- lib/dynamic-import: [acorn-dynamic-import](https://github.com/acornjs/acorn-dynamic-import), MIT | 
				
			|||
- lib/export-ns-from: [acorn-export-ns-from](https://github.com/acornjs/acorn-export-ns-from), MIT | 
				
			|||
- lib/import-meta: [acorn-import-meta](https://github.com/acornjs/acorn-import-meta), MIT | 
				
			|||
- lib/numeric-separator: [acorn-numeric-separator](https://github.com/acornjs/acorn-numeric-separator]), MIT | 
				
			|||
- lib/static-class-features: [acorn-static-class-features](https://github.com/acornjs/acorn-static-class-features), MIT | 
				
			|||
@ -0,0 +1,36 @@ | 
				
			|||
var fs = require('fs') | 
				
			|||
var path = require('path') | 
				
			|||
var mkdirp = require('mkdirp') | 
				
			|||
var buble = require('buble') | 
				
			|||
 | 
				
			|||
var HEADER = '/* Generated by `npm run build`, do not edit! */\n\n' | 
				
			|||
 | 
				
			|||
function compile (name, output, fix) { | 
				
			|||
  console.log(name, '→', output) | 
				
			|||
  mkdirp.sync(path.dirname(path.join(__dirname, output))) | 
				
			|||
  var source = fs.readFileSync(require.resolve(name), 'utf8') | 
				
			|||
  if (fix) source = fix(source) | 
				
			|||
  var result = buble.transform(source, { | 
				
			|||
    transforms: { | 
				
			|||
      dangerousForOf: true | 
				
			|||
    } | 
				
			|||
  }) | 
				
			|||
  fs.writeFileSync(path.join(__dirname, output), HEADER + result.code, 'utf8') | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function privateClassElements (str) { | 
				
			|||
  return str.replace('acorn-private-class-elements', '../private-class-elements') | 
				
			|||
} | 
				
			|||
 | 
				
			|||
compile('acorn-bigint', './lib/bigint/index.js') | 
				
			|||
compile('acorn-numeric-separator', './lib/numeric-separator/index.js') | 
				
			|||
compile('acorn-dynamic-import', './lib/dynamic-import/index.js') | 
				
			|||
compile('acorn-import-meta', './lib/import-meta/index.js') | 
				
			|||
compile('acorn-export-ns-from', './lib/export-ns-from/index.js') | 
				
			|||
compile('acorn-class-fields', './lib/class-fields/index.js', privateClassElements) | 
				
			|||
compile('acorn-static-class-features', './lib/static-class-features/index.js', privateClassElements) | 
				
			|||
compile('acorn-private-class-elements', './lib/private-class-elements/index.js', function (str) { | 
				
			|||
  return str.replace('class extends Parser', 'class Parser_ extends Parser') | 
				
			|||
    // it also works with v7
 | 
				
			|||
    .replace('if (acorn.version.indexOf("6.") != 0 || acorn.version.indexOf("6.0.") == 0) {', 'if (false) {') | 
				
			|||
}) | 
				
			|||
@ -0,0 +1,38 @@ | 
				
			|||
var acorn = require('acorn') | 
				
			|||
var xtend = require('xtend') | 
				
			|||
 | 
				
			|||
var CJSParser = acorn.Parser | 
				
			|||
  .extend(require('./lib/bigint')) | 
				
			|||
  .extend(require('./lib/class-fields')) | 
				
			|||
  .extend(require('./lib/static-class-features')) | 
				
			|||
  .extend(require('./lib/numeric-separator')) | 
				
			|||
  .extend(require('./lib/dynamic-import').default) | 
				
			|||
var ESModulesParser = CJSParser | 
				
			|||
  .extend(require('./lib/export-ns-from')) | 
				
			|||
  .extend(require('./lib/import-meta')) | 
				
			|||
 | 
				
			|||
function mapOptions (opts) { | 
				
			|||
  if (!opts) opts = {} | 
				
			|||
  return xtend({ | 
				
			|||
    ecmaVersion: 2020, | 
				
			|||
    allowHashBang: true, | 
				
			|||
    allowReturnOutsideFunction: true | 
				
			|||
  }, opts) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function getParser (opts) { | 
				
			|||
  if (!opts) opts = {} | 
				
			|||
  return opts.sourceType === 'module' ? ESModulesParser : CJSParser | 
				
			|||
} | 
				
			|||
 | 
				
			|||
module.exports = exports = xtend(acorn, { | 
				
			|||
  parse: function parse (src, opts) { | 
				
			|||
    return getParser(opts).parse(src, mapOptions(opts)) | 
				
			|||
  }, | 
				
			|||
  parseExpressionAt: function parseExpressionAt (src, offset, opts) { | 
				
			|||
    return getParser(opts).parseExpressionAt(src, offset, mapOptions(opts)) | 
				
			|||
  }, | 
				
			|||
  tokenizer: function tokenizer (src, opts) { | 
				
			|||
    return getParser(opts).tokenizer(src, mapOptions(opts)) | 
				
			|||
  } | 
				
			|||
}) | 
				
			|||
@ -0,0 +1,71 @@ | 
				
			|||
/* Generated by `npm run build`, do not edit! */ | 
				
			|||
 | 
				
			|||
"use strict" | 
				
			|||
 | 
				
			|||
var acorn = require("acorn") | 
				
			|||
var tt = acorn.tokTypes | 
				
			|||
var isIdentifierStart = acorn.isIdentifierStart | 
				
			|||
 | 
				
			|||
module.exports = function(Parser) { | 
				
			|||
  return /*@__PURE__*/(function (Parser) { | 
				
			|||
    function anonymous () { | 
				
			|||
      Parser.apply(this, arguments); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    if ( Parser ) anonymous.__proto__ = Parser; | 
				
			|||
    anonymous.prototype = Object.create( Parser && Parser.prototype ); | 
				
			|||
    anonymous.prototype.constructor = anonymous; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.parseLiteral = function parseLiteral (value) { | 
				
			|||
      var node = Parser.prototype.parseLiteral.call(this, value) | 
				
			|||
      if (node.raw.charCodeAt(node.raw.length - 1) == 110) { node.bigint = this.getNumberInput(node.start, node.end) } | 
				
			|||
      return node | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.readRadixNumber = function readRadixNumber (radix) { | 
				
			|||
      var start = this.pos | 
				
			|||
      this.pos += 2 // 0x
 | 
				
			|||
      var val = this.readInt(radix) | 
				
			|||
      if (val === null) { this.raise(this.start + 2, ("Expected number in radix " + radix)) } | 
				
			|||
      if (this.input.charCodeAt(this.pos) == 110) { | 
				
			|||
        var str = this.getNumberInput(start, this.pos) | 
				
			|||
        val = typeof BigInt !== "undefined" ? BigInt(str) : null | 
				
			|||
        ++this.pos | 
				
			|||
      } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number") } | 
				
			|||
      return this.finishToken(tt.num, val) | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.readNumber = function readNumber (startsWithDot) { | 
				
			|||
      var start = this.pos | 
				
			|||
 | 
				
			|||
      // Not an int
 | 
				
			|||
      if (startsWithDot) { return Parser.prototype.readNumber.call(this, startsWithDot) } | 
				
			|||
 | 
				
			|||
      // Legacy octal
 | 
				
			|||
      if (this.input.charCodeAt(start) === 48 && this.input.charCodeAt(start + 1) !== 110) { | 
				
			|||
        return Parser.prototype.readNumber.call(this, startsWithDot) | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      if (this.readInt(10) === null) { this.raise(start, "Invalid number") } | 
				
			|||
 | 
				
			|||
      // Not a BigInt, reset and parse again
 | 
				
			|||
      if (this.input.charCodeAt(this.pos) != 110) { | 
				
			|||
        this.pos = start | 
				
			|||
        return Parser.prototype.readNumber.call(this, startsWithDot) | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      var str = this.getNumberInput(start, this.pos) | 
				
			|||
      var val = typeof BigInt !== "undefined" ? BigInt(str) : null | 
				
			|||
      ++this.pos | 
				
			|||
      return this.finishToken(tt.num, val) | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // This is basically a hook for acorn-numeric-separator
 | 
				
			|||
    anonymous.prototype.getNumberInput = function getNumberInput (start, end) { | 
				
			|||
      if (Parser.prototype.getNumberInput) { return Parser.prototype.getNumberInput.call(this, start, end) } | 
				
			|||
      return this.input.slice(start, end) | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    return anonymous; | 
				
			|||
  }(Parser)) | 
				
			|||
} | 
				
			|||
@ -0,0 +1,70 @@ | 
				
			|||
/* Generated by `npm run build`, do not edit! */ | 
				
			|||
 | 
				
			|||
"use strict" | 
				
			|||
 | 
				
			|||
var acorn = require("acorn") | 
				
			|||
var tt = acorn.tokTypes | 
				
			|||
var privateClassElements = require("../private-class-elements") | 
				
			|||
 | 
				
			|||
function maybeParseFieldValue(field) { | 
				
			|||
  if (this.eat(tt.eq)) { | 
				
			|||
    var oldInFieldValue = this._inFieldValue | 
				
			|||
    this._inFieldValue = true | 
				
			|||
    field.value = this.parseExpression() | 
				
			|||
    this._inFieldValue = oldInFieldValue | 
				
			|||
  } else { field.value = null } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
module.exports = function(Parser) { | 
				
			|||
  Parser = privateClassElements(Parser) | 
				
			|||
  return /*@__PURE__*/(function (Parser) { | 
				
			|||
    function anonymous () { | 
				
			|||
      Parser.apply(this, arguments); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    if ( Parser ) anonymous.__proto__ = Parser; | 
				
			|||
    anonymous.prototype = Object.create( Parser && Parser.prototype ); | 
				
			|||
    anonymous.prototype.constructor = anonymous; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.parseClassElement = function parseClassElement (_constructorAllowsSuper) { | 
				
			|||
      if (this.options.ecmaVersion >= 8 && (this.type == tt.name || this.type == this.privateNameToken || this.type == tt.bracketL || this.type == tt.string)) { | 
				
			|||
        var branch = this._branch() | 
				
			|||
        if (branch.type == tt.bracketL) { | 
				
			|||
          var count = 0 | 
				
			|||
          do { | 
				
			|||
            if (branch.eat(tt.bracketL)) { ++count } | 
				
			|||
            else if (branch.eat(tt.bracketR)) { --count } | 
				
			|||
            else { branch.next() } | 
				
			|||
          } while (count > 0) | 
				
			|||
        } else { branch.next() } | 
				
			|||
        if (branch.type == tt.eq || branch.canInsertSemicolon() || branch.type == tt.semi) { | 
				
			|||
          var node = this.startNode() | 
				
			|||
          if (this.type == this.privateNameToken) { | 
				
			|||
            this.parsePrivateClassElementName(node) | 
				
			|||
          } else { | 
				
			|||
            this.parsePropertyName(node) | 
				
			|||
          } | 
				
			|||
          if ((node.key.type === "Identifier" && node.key.name === "constructor") || | 
				
			|||
              (node.key.type === "Literal" && node.key.value === "constructor")) { | 
				
			|||
            this.raise(node.key.start, "Classes may not have a field called constructor") | 
				
			|||
          } | 
				
			|||
          maybeParseFieldValue.call(this, node) | 
				
			|||
          this.finishNode(node, "FieldDefinition") | 
				
			|||
          this.semicolon() | 
				
			|||
          return node | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      return Parser.prototype.parseClassElement.apply(this, arguments) | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // Prohibit arguments in class field initializers
 | 
				
			|||
    anonymous.prototype.parseIdent = function parseIdent (liberal, isBinding) { | 
				
			|||
      var ident = Parser.prototype.parseIdent.call(this, liberal, isBinding) | 
				
			|||
      if (this._inFieldValue && ident.name == "arguments") { this.raise(ident.start, "A class field initializer may not contain arguments") } | 
				
			|||
      return ident | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    return anonymous; | 
				
			|||
  }(Parser)) | 
				
			|||
} | 
				
			|||
@ -0,0 +1,86 @@ | 
				
			|||
/* Generated by `npm run build`, do not edit! */ | 
				
			|||
 | 
				
			|||
'use strict'; | 
				
			|||
 | 
				
			|||
Object.defineProperty(exports, "__esModule", { | 
				
			|||
  value: true | 
				
			|||
}); | 
				
			|||
exports.DynamicImportKey = undefined; | 
				
			|||
 | 
				
			|||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) { descriptor.writable = true; } Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) { defineProperties(Constructor.prototype, protoProps); } if (staticProps) { defineProperties(Constructor, staticProps); } return Constructor; }; }(); | 
				
			|||
 | 
				
			|||
var _get = function () { | 
				
			|||
  function get(object, property, receiver) { if (object === null) { object = Function.prototype; } var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } | 
				
			|||
 | 
				
			|||
  return get; | 
				
			|||
}(); | 
				
			|||
 | 
				
			|||
exports['default'] = dynamicImport; | 
				
			|||
 | 
				
			|||
var _acorn = require('acorn'); | 
				
			|||
 | 
				
			|||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | 
				
			|||
 | 
				
			|||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | 
				
			|||
 | 
				
			|||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) { Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } } /* eslint-disable no-underscore-dangle */ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
var DynamicImportKey = exports.DynamicImportKey = 'Import'; | 
				
			|||
 | 
				
			|||
// NOTE: This allows `yield import()` to parse correctly.
 | 
				
			|||
_acorn.tokTypes._import.startsExpr = true; | 
				
			|||
 | 
				
			|||
function parseDynamicImport() { | 
				
			|||
  var node = this.startNode(); | 
				
			|||
  this.next(); | 
				
			|||
  if (this.type !== _acorn.tokTypes.parenL) { | 
				
			|||
    this.unexpected(); | 
				
			|||
  } | 
				
			|||
  return this.finishNode(node, DynamicImportKey); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function parenAfter() { | 
				
			|||
  return (/^(\s|\/\/.*|\/\*[^]*?\*\/)*\(/.test(this.input.slice(this.pos)) | 
				
			|||
  ); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function dynamicImport(Parser) { | 
				
			|||
  return function (_Parser) { | 
				
			|||
    _inherits(_class, _Parser); | 
				
			|||
 | 
				
			|||
    function _class() { | 
				
			|||
      _classCallCheck(this, _class); | 
				
			|||
 | 
				
			|||
      return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    _createClass(_class, [{ | 
				
			|||
      key: 'parseStatement', | 
				
			|||
      value: function () { | 
				
			|||
        function parseStatement(context, topLevel, exports) { | 
				
			|||
          if (this.type === _acorn.tokTypes._import && parenAfter.call(this)) { | 
				
			|||
            return this.parseExpressionStatement(this.startNode(), this.parseExpression()); | 
				
			|||
          } | 
				
			|||
          return _get(_class.prototype.__proto__ || Object.getPrototypeOf(_class.prototype), 'parseStatement', this).call(this, context, topLevel, exports); | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
        return parseStatement; | 
				
			|||
      }() | 
				
			|||
    }, { | 
				
			|||
      key: 'parseExprAtom', | 
				
			|||
      value: function () { | 
				
			|||
        function parseExprAtom(refDestructuringErrors) { | 
				
			|||
          if (this.type === _acorn.tokTypes._import) { | 
				
			|||
            return parseDynamicImport.call(this); | 
				
			|||
          } | 
				
			|||
          return _get(_class.prototype.__proto__ || Object.getPrototypeOf(_class.prototype), 'parseExprAtom', this).call(this, refDestructuringErrors); | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
        return parseExprAtom; | 
				
			|||
      }() | 
				
			|||
    }]); | 
				
			|||
 | 
				
			|||
    return _class; | 
				
			|||
  }(Parser); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,43 @@ | 
				
			|||
/* Generated by `npm run build`, do not edit! */ | 
				
			|||
 | 
				
			|||
"use strict" | 
				
			|||
 | 
				
			|||
var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g | 
				
			|||
 | 
				
			|||
var tt = require("acorn").tokTypes | 
				
			|||
 | 
				
			|||
module.exports = function(Parser) { | 
				
			|||
  return /*@__PURE__*/(function (Parser) { | 
				
			|||
    function anonymous () { | 
				
			|||
      Parser.apply(this, arguments); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    if ( Parser ) anonymous.__proto__ = Parser; | 
				
			|||
    anonymous.prototype = Object.create( Parser && Parser.prototype ); | 
				
			|||
    anonymous.prototype.constructor = anonymous; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.parseExport = function parseExport (node, exports) { | 
				
			|||
      skipWhiteSpace.lastIndex = this.pos | 
				
			|||
      var skip = skipWhiteSpace.exec(this.input) | 
				
			|||
      var next = this.input.charAt(this.pos + skip[0].length) | 
				
			|||
      if (next !== "*") { return Parser.prototype.parseExport.call(this, node, exports) } | 
				
			|||
 | 
				
			|||
      this.next() | 
				
			|||
      var specifier = this.startNode() | 
				
			|||
      this.expect(tt.star) | 
				
			|||
      if (this.eatContextual("as")) { | 
				
			|||
        node.declaration = null | 
				
			|||
        specifier.exported = this.parseIdent(true) | 
				
			|||
        this.checkExport(exports, specifier.exported.name, this.lastTokStart) | 
				
			|||
        node.specifiers = [this.finishNode(specifier, "ExportNamespaceSpecifier")] | 
				
			|||
      } | 
				
			|||
      this.expectContextual("from") | 
				
			|||
      if (this.type !== tt.string) { this.unexpected() } | 
				
			|||
      node.source = this.parseExprAtom() | 
				
			|||
      this.semicolon() | 
				
			|||
      return this.finishNode(node, node.specifiers ? "ExportNamedDeclaration" : "ExportAllDeclaration") | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    return anonymous; | 
				
			|||
  }(Parser)) | 
				
			|||
} | 
				
			|||
@ -0,0 +1,55 @@ | 
				
			|||
/* Generated by `npm run build`, do not edit! */ | 
				
			|||
 | 
				
			|||
"use strict" | 
				
			|||
 | 
				
			|||
var tt = require("acorn").tokTypes | 
				
			|||
 | 
				
			|||
var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g | 
				
			|||
 | 
				
			|||
var nextTokenIsDot = function (parser) { | 
				
			|||
  skipWhiteSpace.lastIndex = parser.pos | 
				
			|||
  var skip = skipWhiteSpace.exec(parser.input) | 
				
			|||
  var next = parser.pos + skip[0].length | 
				
			|||
  return parser.input.slice(next, next + 1) === "." | 
				
			|||
} | 
				
			|||
 | 
				
			|||
module.exports = function(Parser) { | 
				
			|||
  return /*@__PURE__*/(function (Parser) { | 
				
			|||
    function anonymous () { | 
				
			|||
      Parser.apply(this, arguments); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    if ( Parser ) anonymous.__proto__ = Parser; | 
				
			|||
    anonymous.prototype = Object.create( Parser && Parser.prototype ); | 
				
			|||
    anonymous.prototype.constructor = anonymous; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.parseExprAtom = function parseExprAtom (refDestructuringErrors) { | 
				
			|||
      if (this.type !== tt._import || !nextTokenIsDot(this)) { return Parser.prototype.parseExprAtom.call(this, refDestructuringErrors) } | 
				
			|||
 | 
				
			|||
      if (!this.options.allowImportExportEverywhere && !this.inModule) { | 
				
			|||
        this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'") | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      var node = this.startNode() | 
				
			|||
      node.meta = this.parseIdent(true) | 
				
			|||
      this.expect(tt.dot) | 
				
			|||
      node.property = this.parseIdent(true) | 
				
			|||
      if (node.property.name !== "meta") { | 
				
			|||
        this.raiseRecoverable(node.property.start, "The only valid meta property for import is import.meta") | 
				
			|||
      } | 
				
			|||
      return this.finishNode(node, "MetaProperty") | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.parseStatement = function parseStatement (context, topLevel, exports) { | 
				
			|||
      if (this.type !== tt._import || !nextTokenIsDot(this)) { | 
				
			|||
        return Parser.prototype.parseStatement.call(this, context, topLevel, exports) | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      var node = this.startNode() | 
				
			|||
      var expr = this.parseExpression() | 
				
			|||
      return this.parseExpressionStatement(node, expr) | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    return anonymous; | 
				
			|||
  }(Parser)) | 
				
			|||
} | 
				
			|||
@ -0,0 +1,61 @@ | 
				
			|||
/* Generated by `npm run build`, do not edit! */ | 
				
			|||
 | 
				
			|||
"use strict" | 
				
			|||
 | 
				
			|||
module.exports = function(Parser) { | 
				
			|||
  return /*@__PURE__*/(function (Parser) { | 
				
			|||
    function anonymous () { | 
				
			|||
      Parser.apply(this, arguments); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    if ( Parser ) anonymous.__proto__ = Parser; | 
				
			|||
    anonymous.prototype = Object.create( Parser && Parser.prototype ); | 
				
			|||
    anonymous.prototype.constructor = anonymous; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.readInt = function readInt (radix, len) { | 
				
			|||
      // Hack: len is only != null for unicode escape sequences,
 | 
				
			|||
      // where numeric separators are not allowed
 | 
				
			|||
      if (len != null) { return Parser.prototype.readInt.call(this, radix, len) } | 
				
			|||
 | 
				
			|||
      var start = this.pos, total = 0, acceptUnderscore = false | 
				
			|||
      for (;;) { | 
				
			|||
        var code = this.input.charCodeAt(this.pos), val = (void 0) | 
				
			|||
        if (code >= 97) { val = code - 97 + 10 } // a
 | 
				
			|||
        else if (code == 95) { | 
				
			|||
          if (!acceptUnderscore) { this.raise(this.pos, "Invalid numeric separator") } | 
				
			|||
          ++this.pos | 
				
			|||
          acceptUnderscore = false | 
				
			|||
          continue | 
				
			|||
        } else if (code >= 65) { val = code - 65 + 10 } // A
 | 
				
			|||
        else if (code >= 48 && code <= 57) { val = code - 48 } // 0-9
 | 
				
			|||
        else { val = Infinity } | 
				
			|||
        if (val >= radix) { break } | 
				
			|||
        ++this.pos | 
				
			|||
        total = total * radix + val | 
				
			|||
        acceptUnderscore = true | 
				
			|||
      } | 
				
			|||
      if (this.pos === start) { return null } | 
				
			|||
      if (!acceptUnderscore) { this.raise(this.pos - 1, "Invalid numeric separator") } | 
				
			|||
 | 
				
			|||
      return total | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.readNumber = function readNumber (startsWithDot) { | 
				
			|||
      var token = Parser.prototype.readNumber.call(this, startsWithDot) | 
				
			|||
      var octal = this.end - this.start >= 2 && this.input.charCodeAt(this.start) === 48 | 
				
			|||
      var stripped = this.getNumberInput(this.start, this.end) | 
				
			|||
      if (stripped.length < this.end - this.start) { | 
				
			|||
        if (octal) { this.raise(this.start, "Invalid number") } | 
				
			|||
        this.value = parseFloat(stripped) | 
				
			|||
      } | 
				
			|||
      return token | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // This is used by acorn-bigint
 | 
				
			|||
    anonymous.prototype.getNumberInput = function getNumberInput (start, end) { | 
				
			|||
      return this.input.slice(start, end).replace(/_/g, "") | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    return anonymous; | 
				
			|||
  }(Parser)) | 
				
			|||
} | 
				
			|||
@ -0,0 +1,135 @@ | 
				
			|||
/* Generated by `npm run build`, do not edit! */ | 
				
			|||
 | 
				
			|||
"use strict" | 
				
			|||
 | 
				
			|||
var acorn = require("acorn") | 
				
			|||
if (false) { | 
				
			|||
  throw new Error(("acorn-private-class-elements requires acorn@^6.1.0, not " + (acorn.version))) | 
				
			|||
} | 
				
			|||
var tt = acorn.tokTypes | 
				
			|||
var TokenType = acorn.TokenType | 
				
			|||
 | 
				
			|||
module.exports = function(Parser) { | 
				
			|||
  // Only load this plugin once.
 | 
				
			|||
  if (Parser.prototype.parsePrivateName) { | 
				
			|||
    return Parser | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // Make sure `Parser` comes from the same acorn as our `tt`,
 | 
				
			|||
  // otherwise the comparisons fail.
 | 
				
			|||
  var cur = Parser | 
				
			|||
  while (cur && cur !== acorn.Parser) { | 
				
			|||
    cur = cur.__proto__ | 
				
			|||
  } | 
				
			|||
  if (cur !== acorn.Parser) { | 
				
			|||
    throw new Error("acorn-private-class-elements does not support mixing different acorn copies") | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  Parser = /*@__PURE__*/(function (Parser) { | 
				
			|||
    function Parser_ () { | 
				
			|||
      Parser.apply(this, arguments); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    if ( Parser ) Parser_.__proto__ = Parser; | 
				
			|||
    Parser_.prototype = Object.create( Parser && Parser.prototype ); | 
				
			|||
    Parser_.prototype.constructor = Parser_; | 
				
			|||
 | 
				
			|||
    Parser_.prototype._branch = function _branch () { | 
				
			|||
      this.__branch = this.__branch || new Parser({ecmaVersion: this.options.ecmaVersion}, this.input) | 
				
			|||
      this.__branch.end = this.end | 
				
			|||
      this.__branch.pos = this.pos | 
				
			|||
      this.__branch.type = this.type | 
				
			|||
      this.__branch.value = this.value | 
				
			|||
      this.__branch.containsEsc = this.containsEsc | 
				
			|||
      return this.__branch | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    Parser_.prototype.parsePrivateClassElementName = function parsePrivateClassElementName (element) { | 
				
			|||
      element.computed = false | 
				
			|||
      element.key = this.parsePrivateName() | 
				
			|||
      if (element.key.name == "constructor") { this.raise(element.key.start, "Classes may not have a private element named constructor") } | 
				
			|||
      var accept = {get: "set", set: "get"}[element.kind] | 
				
			|||
      var privateBoundNames = this._privateBoundNamesStack[this._privateBoundNamesStack.length - 1] | 
				
			|||
      if (Object.prototype.hasOwnProperty.call(privateBoundNames, element.key.name) && privateBoundNames[element.key.name] !== accept) { | 
				
			|||
        this.raise(element.start, "Duplicate private element") | 
				
			|||
      } | 
				
			|||
      privateBoundNames[element.key.name] = element.kind || true | 
				
			|||
      delete this._unresolvedPrivateNamesStack[this._unresolvedPrivateNamesStack.length - 1][element.key.name] | 
				
			|||
      return element.key | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    Parser_.prototype.parsePrivateName = function parsePrivateName () { | 
				
			|||
      var node = this.startNode() | 
				
			|||
      node.name = this.value | 
				
			|||
      this.next() | 
				
			|||
      this.finishNode(node, "PrivateName") | 
				
			|||
      if (this.options.allowReserved == "never") { this.checkUnreserved(node) } | 
				
			|||
      return node | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // Parse # token
 | 
				
			|||
    Parser_.prototype.getTokenFromCode = function getTokenFromCode (code) { | 
				
			|||
      if (code === 35) { | 
				
			|||
        ++this.pos | 
				
			|||
        var word = this.readWord1() | 
				
			|||
        return this.finishToken(this.privateNameToken, word) | 
				
			|||
      } | 
				
			|||
      return Parser.prototype.getTokenFromCode.call(this, code) | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // Manage stacks and check for undeclared private names
 | 
				
			|||
    Parser_.prototype.parseClass = function parseClass (node, isStatement) { | 
				
			|||
      this._privateBoundNamesStack = this._privateBoundNamesStack || [] | 
				
			|||
      var privateBoundNames = Object.create(this._privateBoundNamesStack[this._privateBoundNamesStack.length - 1] || null) | 
				
			|||
      this._privateBoundNamesStack.push(privateBoundNames) | 
				
			|||
      this._unresolvedPrivateNamesStack = this._unresolvedPrivateNamesStack || [] | 
				
			|||
      var unresolvedPrivateNames = Object.create(null) | 
				
			|||
      this._unresolvedPrivateNamesStack.push(unresolvedPrivateNames) | 
				
			|||
      var _return = Parser.prototype.parseClass.call(this, node, isStatement) | 
				
			|||
      this._privateBoundNamesStack.pop() | 
				
			|||
      this._unresolvedPrivateNamesStack.pop() | 
				
			|||
      if (!this._unresolvedPrivateNamesStack.length) { | 
				
			|||
        var names = Object.keys(unresolvedPrivateNames) | 
				
			|||
        if (names.length) { | 
				
			|||
          names.sort(function (n1, n2) { return unresolvedPrivateNames[n1] - unresolvedPrivateNames[n2]; }) | 
				
			|||
          this.raise(unresolvedPrivateNames[names[0]], "Usage of undeclared private name") | 
				
			|||
        } | 
				
			|||
      } else { Object.assign(this._unresolvedPrivateNamesStack[this._unresolvedPrivateNamesStack.length - 1], unresolvedPrivateNames) } | 
				
			|||
      return _return | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // Parse private element access
 | 
				
			|||
    Parser_.prototype.parseSubscript = function parseSubscript (base, startPos, startLoc, noCalls, maybeAsyncArrow) { | 
				
			|||
      if (!this.eat(tt.dot)) { | 
				
			|||
        return Parser.prototype.parseSubscript.call(this, base, startPos, startLoc, noCalls, maybeAsyncArrow) | 
				
			|||
      } | 
				
			|||
      var node = this.startNodeAt(startPos, startLoc) | 
				
			|||
      node.object = base | 
				
			|||
      node.computed = false | 
				
			|||
      if (this.type == this.privateNameToken) { | 
				
			|||
        node.property = this.parsePrivateName() | 
				
			|||
        if (!this._privateBoundNamesStack.length || !this._privateBoundNamesStack[this._privateBoundNamesStack.length - 1][node.property.name]) { | 
				
			|||
          this._unresolvedPrivateNamesStack[this._unresolvedPrivateNamesStack.length - 1][node.property.name] = node.property.start | 
				
			|||
        } | 
				
			|||
      } else { | 
				
			|||
        node.property = this.parseIdent(true) | 
				
			|||
      } | 
				
			|||
      return this.finishNode(node, "MemberExpression") | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // Prohibit delete of private class elements
 | 
				
			|||
    Parser_.prototype.parseMaybeUnary = function parseMaybeUnary (refDestructuringErrors, sawUnary) { | 
				
			|||
      var _return = Parser.prototype.parseMaybeUnary.call(this, refDestructuringErrors, sawUnary) | 
				
			|||
      if (_return.operator == "delete") { | 
				
			|||
        if (_return.argument.type == "MemberExpression" && _return.argument.property.type == "PrivateName") { | 
				
			|||
          this.raise(_return.start, "Private elements may not be deleted") | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
      return _return | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    return Parser_; | 
				
			|||
  }(Parser)) | 
				
			|||
  Parser.prototype.privateNameToken = new TokenType("privateName") | 
				
			|||
  return Parser | 
				
			|||
} | 
				
			|||
@ -0,0 +1,139 @@ | 
				
			|||
/* Generated by `npm run build`, do not edit! */ | 
				
			|||
 | 
				
			|||
"use strict" | 
				
			|||
 | 
				
			|||
var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g | 
				
			|||
 | 
				
			|||
var acorn = require("acorn") | 
				
			|||
var tt = acorn.tokTypes | 
				
			|||
 | 
				
			|||
function maybeParseFieldValue(field) { | 
				
			|||
  if (this.eat(tt.eq)) { | 
				
			|||
    var oldInFieldValue = this._inStaticFieldValue | 
				
			|||
    this._inStaticFieldValue = true | 
				
			|||
    field.value = this.parseExpression() | 
				
			|||
    this._inStaticFieldValue = oldInFieldValue | 
				
			|||
  } else { field.value = null } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
var privateClassElements = require("../private-class-elements") | 
				
			|||
 | 
				
			|||
module.exports = function(Parser) { | 
				
			|||
  var ExtendedParser = privateClassElements(Parser) | 
				
			|||
 | 
				
			|||
  return /*@__PURE__*/(function (ExtendedParser) { | 
				
			|||
    function anonymous () { | 
				
			|||
      ExtendedParser.apply(this, arguments); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    if ( ExtendedParser ) anonymous.__proto__ = ExtendedParser; | 
				
			|||
    anonymous.prototype = Object.create( ExtendedParser && ExtendedParser.prototype ); | 
				
			|||
    anonymous.prototype.constructor = anonymous; | 
				
			|||
 | 
				
			|||
    anonymous.prototype.parseClassElement = function parseClassElement (_constructorAllowsSuper) { | 
				
			|||
      var this$1 = this; | 
				
			|||
 | 
				
			|||
      if (this.eat(tt.semi)) { return null } | 
				
			|||
 | 
				
			|||
      var node = this.startNode() | 
				
			|||
 | 
				
			|||
      var tryContextual = function (k, noLineBreak) { | 
				
			|||
        if (typeof noLineBreak == "undefined") { noLineBreak = false } | 
				
			|||
        var start = this$1.start, startLoc = this$1.startLoc | 
				
			|||
        if (!this$1.eatContextual(k)) { return false } | 
				
			|||
        if (this$1.type !== tt.parenL && (!noLineBreak || !this$1.canInsertSemicolon())) { return true } | 
				
			|||
        if (node.key) { this$1.unexpected() } | 
				
			|||
        node.computed = false | 
				
			|||
        node.key = this$1.startNodeAt(start, startLoc) | 
				
			|||
        node.key.name = k | 
				
			|||
        this$1.finishNode(node.key, "Identifier") | 
				
			|||
        return false | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      node.static = tryContextual("static") | 
				
			|||
      if (!node.static) { return ExtendedParser.prototype.parseClassElement.apply(this, arguments) } | 
				
			|||
 | 
				
			|||
      var isGenerator = this.eat(tt.star) | 
				
			|||
      var isAsync = false | 
				
			|||
      if (!isGenerator) { | 
				
			|||
        // Special-case for `async`, since `parseClassMember` currently looks
 | 
				
			|||
        // for `(` to determine whether `async` is a method name
 | 
				
			|||
        if (this.options.ecmaVersion >= 8 && this.isContextual("async")) { | 
				
			|||
          skipWhiteSpace.lastIndex = this.pos | 
				
			|||
          var skip = skipWhiteSpace.exec(this.input) | 
				
			|||
          var next = this.input.charAt(this.pos + skip[0].length) | 
				
			|||
          if (next === ";" || next === "=") { | 
				
			|||
            node.key = this.parseIdent(true) | 
				
			|||
            node.computed = false | 
				
			|||
            maybeParseFieldValue.call(this, node) | 
				
			|||
            this.finishNode(node, "FieldDefinition") | 
				
			|||
            this.semicolon() | 
				
			|||
            return node | 
				
			|||
          } else if (this.options.ecmaVersion >= 8 && tryContextual("async", true)) { | 
				
			|||
            isAsync = true | 
				
			|||
            isGenerator = this.options.ecmaVersion >= 9 && this.eat(tt.star) | 
				
			|||
          } | 
				
			|||
        } else if (tryContextual("get")) { | 
				
			|||
          node.kind = "get" | 
				
			|||
        } else if (tryContextual("set")) { | 
				
			|||
          node.kind = "set" | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
      if (this.type === this.privateNameToken) { | 
				
			|||
        this.parsePrivateClassElementName(node) | 
				
			|||
        if (this.type !== tt.parenL) { | 
				
			|||
          if (node.key.name === "prototype") { | 
				
			|||
            this.raise(node.key.start, "Classes may not have a private static property named prototype") | 
				
			|||
          } | 
				
			|||
          maybeParseFieldValue.call(this, node) | 
				
			|||
          this.finishNode(node, "FieldDefinition") | 
				
			|||
          this.semicolon() | 
				
			|||
          return node | 
				
			|||
        } | 
				
			|||
      } else if (!node.key) { | 
				
			|||
        this.parsePropertyName(node) | 
				
			|||
        if ((node.key.name || node.key.value) === "prototype" && !node.computed) { | 
				
			|||
          this.raise(node.key.start, "Classes may not have a static property named prototype") | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
      if (!node.kind) { node.kind = "method" } | 
				
			|||
      this.parseClassMethod(node, isGenerator, isAsync) | 
				
			|||
      if (!node.kind && (node.key.name || node.key.value) === "constructor" && !node.computed) { | 
				
			|||
        this.raise(node.key.start, "Classes may not have a static field named constructor") | 
				
			|||
      } | 
				
			|||
      if (node.kind === "get" && node.value.params.length !== 0) { | 
				
			|||
        this.raiseRecoverable(node.value.start, "getter should have no params") | 
				
			|||
      } | 
				
			|||
      if (node.kind === "set" && node.value.params.length !== 1) { | 
				
			|||
        this.raiseRecoverable(node.value.start, "setter should have exactly one param") | 
				
			|||
      } | 
				
			|||
      if (node.kind === "set" && node.value.params[0].type === "RestElement") { | 
				
			|||
        this.raiseRecoverable(node.value.params[0].start, "Setter cannot use rest params") | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      return node | 
				
			|||
 | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // Parse public static fields
 | 
				
			|||
    anonymous.prototype.parseClassMethod = function parseClassMethod (method, isGenerator, isAsync, _allowsDirectSuper) { | 
				
			|||
      if (isGenerator || isAsync || method.kind != "method" || !method.static || this.options.ecmaVersion < 8 || this.type == tt.parenL) { | 
				
			|||
        return ExtendedParser.prototype.parseClassMethod.apply(this, arguments) | 
				
			|||
      } | 
				
			|||
      maybeParseFieldValue.call(this, method) | 
				
			|||
      delete method.kind | 
				
			|||
      method = this.finishNode(method, "FieldDefinition") | 
				
			|||
      this.semicolon() | 
				
			|||
      return method | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    // Prohibit arguments in class field initializers
 | 
				
			|||
    anonymous.prototype.parseIdent = function parseIdent (liberal, isBinding) { | 
				
			|||
      var ident = ExtendedParser.prototype.parseIdent.call(this, liberal, isBinding) | 
				
			|||
      if (this._inStaticFieldValue && ident.name == "arguments") { this.raise(ident.start, "A static class field initializer may not contain arguments") } | 
				
			|||
      return ident | 
				
			|||
    }; | 
				
			|||
 | 
				
			|||
    return anonymous; | 
				
			|||
  }(ExtendedParser)) | 
				
			|||
} | 
				
			|||
@ -0,0 +1,51 @@ | 
				
			|||
{ | 
				
			|||
  "name": "acorn-node", | 
				
			|||
  "description": "the acorn javascript parser, preloaded with plugins for syntax parity with recent node versions", | 
				
			|||
  "version": "1.8.2", | 
				
			|||
  "author": "Renée Kooi <renee@kooi.me>", | 
				
			|||
  "bugs": { | 
				
			|||
    "url": "https://github.com/browserify/acorn-node/issues" | 
				
			|||
  }, | 
				
			|||
  "dependencies": { | 
				
			|||
    "acorn": "^7.0.0", | 
				
			|||
    "acorn-walk": "^7.0.0", | 
				
			|||
    "xtend": "^4.0.2" | 
				
			|||
  }, | 
				
			|||
  "devDependencies": { | 
				
			|||
    "acorn-bigint": "^0.4.0", | 
				
			|||
    "acorn-class-fields": "^0.3.1", | 
				
			|||
    "acorn-dynamic-import": "^4.0.0", | 
				
			|||
    "acorn-export-ns-from": "^0.1.0", | 
				
			|||
    "acorn-import-meta": "^0.3.0", | 
				
			|||
    "acorn-numeric-separator": "^0.3.0", | 
				
			|||
    "acorn-private-class-elements": "^0.1.1", | 
				
			|||
    "acorn-static-class-features": "^0.2.0", | 
				
			|||
    "buble": "^0.19.8", | 
				
			|||
    "mkdirp": "^0.5.1", | 
				
			|||
    "standard": "^13.1.0", | 
				
			|||
    "tape": "^4.11.0" | 
				
			|||
  }, | 
				
			|||
  "homepage": "https://github.com/browserify/acorn-node", | 
				
			|||
  "keywords": [ | 
				
			|||
    "acorn", | 
				
			|||
    "browserify", | 
				
			|||
    "javascript", | 
				
			|||
    "parser" | 
				
			|||
  ], | 
				
			|||
  "license": "Apache-2.0", | 
				
			|||
  "main": "index.js", | 
				
			|||
  "repository": { | 
				
			|||
    "type": "git", | 
				
			|||
    "url": "https://github.com/browserify/acorn-node.git" | 
				
			|||
  }, | 
				
			|||
  "scripts": { | 
				
			|||
    "test": "standard && node test/index.js", | 
				
			|||
    "prepublishOnly": "npm run build", | 
				
			|||
    "build": "node build.js" | 
				
			|||
  }, | 
				
			|||
  "standard": { | 
				
			|||
    "ignore": [ | 
				
			|||
      "lib/*/*.js" | 
				
			|||
    ] | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,154 @@ | 
				
			|||
var test = require('tape') | 
				
			|||
var acorn = require('../') | 
				
			|||
var walk = require('../walk') | 
				
			|||
var baseAcorn = require('acorn') | 
				
			|||
 | 
				
			|||
test('parses object spread syntax', function (t) { | 
				
			|||
  var ast = acorn.parse('var a = { ...b }') | 
				
			|||
  t.equal(ast.body[0].declarations[0].init.type, 'ObjectExpression') | 
				
			|||
  t.equal(ast.body[0].declarations[0].init.properties[0].type, 'SpreadElement') | 
				
			|||
 | 
				
			|||
  ast = acorn.parse('function a ({ ...b }) {}') | 
				
			|||
  t.equal(ast.body[0].params[0].type, 'ObjectPattern') | 
				
			|||
  t.equal(ast.body[0].params[0].properties[0].type, 'RestElement') | 
				
			|||
 | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('does not change main acorn module', function (t) { | 
				
			|||
  t.throws(function () { | 
				
			|||
    baseAcorn.parse('var a = 10n') | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('tokenizes object spread syntax', function (t) { | 
				
			|||
  var tokenizer = acorn.tokenizer('var a = { ...b }') | 
				
			|||
 | 
				
			|||
  t.doesNotThrow(function (t) { | 
				
			|||
    while (tokenizer.getToken().type !== acorn.tokTypes.eof) {} | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('allows hashbangs by default', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('#!/usr/bin/env node\nconsole.log("ok")') | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('allows top level return by default', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('console.log("ok"); return; console.log("not ok")') | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports async generators', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('async function* a () { await x; yield 1 }') | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports async iteration', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('async function l (y) { for await (const x of y) {} }') | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports optional catch', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('try { throw null } catch {}') | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports bigint', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('50n ** 50n') | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports numeric separators', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('50_000_000n ** 1n') | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports import.meta with sourceType: module', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('console.log(import.meta.url)', { sourceType: 'module' }) | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports dynamic import() with sourceType: module', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('import("./whatever.mjs")', { sourceType: 'module' }) | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports dynamic import() with sourceType: script', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('import("./whatever.mjs")', { sourceType: 'script' }) | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports class instance properties', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('class X { x = y }', { sourceType: 'script' }) | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports private class instance properties', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('class X { #x = y }', { sourceType: 'script' }) | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports class static properties', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('class X { static x = y }', { sourceType: 'script' }) | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports private class static properties', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('class X { static #x = y }', { sourceType: 'script' }) | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('supports namespace export syntax with sourceType: module', function (t) { | 
				
			|||
  t.doesNotThrow(function () { | 
				
			|||
    acorn.parse('export * as x from "./x.mjs";', { sourceType: 'module' }) | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
 | 
				
			|||
test('walk supports plugin syntax', function (t) { | 
				
			|||
  var ast = acorn.parse( | 
				
			|||
    'async function* a() { try { await import(xyz); } catch { for await (x of null) {} } yield import.meta.url }', | 
				
			|||
    { sourceType: 'module' } | 
				
			|||
  ) | 
				
			|||
  t.plan(2) | 
				
			|||
  walk.simple(ast, { | 
				
			|||
    Import: function () { | 
				
			|||
      t.pass('import()') | 
				
			|||
    }, | 
				
			|||
    MetaProperty: function () { | 
				
			|||
      t.pass('import.meta') | 
				
			|||
    } | 
				
			|||
  }) | 
				
			|||
  t.end() | 
				
			|||
}) | 
				
			|||
@ -0,0 +1,57 @@ | 
				
			|||
var xtend = require('xtend') | 
				
			|||
var walk = require('acorn-walk') | 
				
			|||
 | 
				
			|||
var base = xtend(walk.base) | 
				
			|||
base.Import = function () {} | 
				
			|||
 | 
				
			|||
function simple (node, visitors, baseVisitor, state, override) { | 
				
			|||
  return walk.simple(node, visitors, baseVisitor || base, state, override) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function ancestor (node, visitors, baseVisitor, state) { | 
				
			|||
  return walk.ancestor(node, visitors, baseVisitor || base, state) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function recursive (node, state, funcs, baseVisitor, override) { | 
				
			|||
  return walk.recursive(node, state, funcs, baseVisitor || base, override) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function full (node, callback, baseVisitor, state, override) { | 
				
			|||
  return walk.full(node, callback, baseVisitor || base, state, override) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function fullAncestor (node, callback, baseVisitor, state) { | 
				
			|||
  return walk.fullAncestor(node, callback, baseVisitor || base, state) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function findNodeAt (node, start, end, test, baseVisitor, state) { | 
				
			|||
  return walk.findNodeAt(node, start, end, test, baseVisitor || base, state) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function findNodeAround (node, pos, test, baseVisitor, state) { | 
				
			|||
  return walk.findNodeAround(node, pos, test, baseVisitor || base, state) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function findNodeAfter (node, pos, test, baseVisitor, state) { | 
				
			|||
  return walk.findNodeAfter(node, pos, test, baseVisitor || base, state) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function findNodeBefore (node, pos, test, baseVisitor, state) { | 
				
			|||
  return walk.findNodeBefore(node, pos, test, baseVisitor || base, state) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function make (funcs, baseVisitor) { | 
				
			|||
  return walk.make(funcs, baseVisitor || base) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
exports.simple = simple | 
				
			|||
exports.ancestor = ancestor | 
				
			|||
exports.recursive = recursive | 
				
			|||
exports.full = full | 
				
			|||
exports.fullAncestor = fullAncestor | 
				
			|||
exports.findNodeAt = findNodeAt | 
				
			|||
exports.findNodeAround = findNodeAround | 
				
			|||
exports.findNodeAfter = findNodeAfter | 
				
			|||
exports.findNodeBefore = findNodeBefore | 
				
			|||
exports.make = make | 
				
			|||
exports.base = base | 
				
			|||
@ -0,0 +1,131 @@ | 
				
			|||
## 7.2.0 (2020-06-17) | 
				
			|||
 | 
				
			|||
### New features | 
				
			|||
 | 
				
			|||
Support optional chaining and nullish coalescing. | 
				
			|||
 | 
				
			|||
Support `import.meta`. | 
				
			|||
 | 
				
			|||
Add support for `export * as ns from "source"`. | 
				
			|||
 | 
				
			|||
## 7.1.1 (2020-02-13) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
Clean up the type definitions to actually work well with the main parser. | 
				
			|||
 | 
				
			|||
## 7.1.0 (2020-02-11) | 
				
			|||
 | 
				
			|||
### New features | 
				
			|||
 | 
				
			|||
Add a TypeScript definition file for the library. | 
				
			|||
 | 
				
			|||
## 7.0.0 (2017-08-12) | 
				
			|||
 | 
				
			|||
### New features | 
				
			|||
 | 
				
			|||
Support walking `ImportExpression` nodes. | 
				
			|||
 | 
				
			|||
## 6.2.0 (2017-07-04) | 
				
			|||
 | 
				
			|||
### New features | 
				
			|||
 | 
				
			|||
Add support for `Import` nodes. | 
				
			|||
 | 
				
			|||
## 6.1.0 (2018-09-28) | 
				
			|||
 | 
				
			|||
### New features | 
				
			|||
 | 
				
			|||
The walker now walks `TemplateElement` nodes. | 
				
			|||
 | 
				
			|||
## 6.0.1 (2018-09-14) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
Fix bad "main" field in package.json. | 
				
			|||
 | 
				
			|||
## 6.0.0 (2018-09-14) | 
				
			|||
 | 
				
			|||
### Breaking changes | 
				
			|||
 | 
				
			|||
This is now a separate package, `acorn-walk`, rather than part of the main `acorn` package. | 
				
			|||
 | 
				
			|||
The `ScopeBody` and `ScopeExpression` meta-node-types are no longer supported. | 
				
			|||
 | 
				
			|||
## 5.7.1 (2018-06-15) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
Make sure the walker and bin files are rebuilt on release (the previous release didn't get the up-to-date versions). | 
				
			|||
 | 
				
			|||
## 5.7.0 (2018-06-15) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
Fix crash in walker when walking a binding-less catch node. | 
				
			|||
 | 
				
			|||
## 5.6.2 (2018-06-05) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
In the walker, go back to allowing the `baseVisitor` argument to be null to default to the default base everywhere. | 
				
			|||
 | 
				
			|||
## 5.6.1 (2018-06-01) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
Fix regression when passing `null` as fourth argument to `walk.recursive`. | 
				
			|||
 | 
				
			|||
## 5.6.0 (2018-05-31) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
Fix a bug in the walker that caused a crash when walking an object pattern spread. | 
				
			|||
 | 
				
			|||
## 5.5.1 (2018-03-06) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
Fix regression in walker causing property values in object patterns to be walked as expressions. | 
				
			|||
 | 
				
			|||
## 5.5.0 (2018-02-27) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
Support object spread in the AST walker. | 
				
			|||
 | 
				
			|||
## 5.4.1 (2018-02-02) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
5.4.0 somehow accidentally included an old version of walk.js. | 
				
			|||
 | 
				
			|||
## 5.2.0 (2017-10-30) | 
				
			|||
 | 
				
			|||
### Bug fixes | 
				
			|||
 | 
				
			|||
The `full` and `fullAncestor` walkers no longer visit nodes multiple times. | 
				
			|||
 | 
				
			|||
## 5.1.0 (2017-07-05) | 
				
			|||
 | 
				
			|||
### New features | 
				
			|||
 | 
				
			|||
New walker functions `full` and `fullAncestor`. | 
				
			|||
 | 
				
			|||
## 3.2.0 (2016-06-07) | 
				
			|||
 | 
				
			|||
### New features | 
				
			|||
 | 
				
			|||
Make it possible to use `visit.ancestor` with a walk state. | 
				
			|||
 | 
				
			|||
## 3.1.0 (2016-04-18) | 
				
			|||
 | 
				
			|||
### New features | 
				
			|||
 | 
				
			|||
The walker now allows defining handlers for `CatchClause` nodes. | 
				
			|||
 | 
				
			|||
## 2.5.2 (2015-10-27) | 
				
			|||
 | 
				
			|||
### Fixes | 
				
			|||
 | 
				
			|||
Fix bug where the walker walked an exported `let` statement as an expression. | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
Copyright (C) 2012-2018 by various contributors (see AUTHORS) | 
				
			|||
 | 
				
			|||
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. | 
				
			|||
@ -0,0 +1,126 @@ | 
				
			|||
# Acorn AST walker | 
				
			|||
 | 
				
			|||
An abstract syntax tree walker for the | 
				
			|||
[ESTree](https://github.com/estree/estree) format. | 
				
			|||
 | 
				
			|||
## Community | 
				
			|||
 | 
				
			|||
Acorn is open source software released under an | 
				
			|||
[MIT license](https://github.com/acornjs/acorn/blob/master/acorn-walk/LICENSE). | 
				
			|||
 | 
				
			|||
You are welcome to | 
				
			|||
[report bugs](https://github.com/acornjs/acorn/issues) or create pull | 
				
			|||
requests on [github](https://github.com/acornjs/acorn). For questions | 
				
			|||
and discussion, please use the | 
				
			|||
[Tern discussion forum](https://discuss.ternjs.net). | 
				
			|||
 | 
				
			|||
## Installation | 
				
			|||
 | 
				
			|||
The easiest way to install acorn is from [`npm`](https://www.npmjs.com/): | 
				
			|||
 | 
				
			|||
```sh | 
				
			|||
npm install acorn-walk | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
Alternately, you can download the source and build acorn yourself: | 
				
			|||
 | 
				
			|||
```sh | 
				
			|||
git clone https://github.com/acornjs/acorn.git | 
				
			|||
cd acorn | 
				
			|||
npm install | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## Interface | 
				
			|||
 | 
				
			|||
An algorithm for recursing through a syntax tree is stored as an | 
				
			|||
object, with a property for each tree node type holding a function | 
				
			|||
that will recurse through such a node. There are several ways to run | 
				
			|||
such a walker. | 
				
			|||
 | 
				
			|||
**simple**`(node, visitors, base, state)` does a 'simple' walk over a | 
				
			|||
tree. `node` should be the AST node to walk, and `visitors` an object | 
				
			|||
with properties whose names correspond to node types in the [ESTree | 
				
			|||
spec](https://github.com/estree/estree). The properties should contain | 
				
			|||
functions that will be called with the node object and, if applicable | 
				
			|||
the state at that point. The last two arguments are optional. `base` | 
				
			|||
is a walker algorithm, and `state` is a start state. The default | 
				
			|||
walker will simply visit all statements and expressions and not | 
				
			|||
produce a meaningful state. (An example of a use of state is to track | 
				
			|||
scope at each point in the tree.) | 
				
			|||
 | 
				
			|||
```js | 
				
			|||
const acorn = require("acorn") | 
				
			|||
const walk = require("acorn-walk") | 
				
			|||
 | 
				
			|||
walk.simple(acorn.parse("let x = 10"), { | 
				
			|||
  Literal(node) { | 
				
			|||
    console.log(`Found a literal: ${node.value}`) | 
				
			|||
  } | 
				
			|||
}) | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
**ancestor**`(node, visitors, base, state)` does a 'simple' walk over | 
				
			|||
a tree, building up an array of ancestor nodes (including the current node) | 
				
			|||
and passing the array to the callbacks as a third parameter. | 
				
			|||
 | 
				
			|||
```js | 
				
			|||
const acorn = require("acorn") | 
				
			|||
const walk = require("acorn-walk") | 
				
			|||
 | 
				
			|||
walk.ancestor(acorn.parse("foo('hi')"), { | 
				
			|||
  Literal(_, ancestors) { | 
				
			|||
    console.log("This literal's ancestors are:", ancestors.map(n => n.type)) | 
				
			|||
  } | 
				
			|||
}) | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
**recursive**`(node, state, functions, base)` does a 'recursive' | 
				
			|||
walk, where the walker functions are responsible for continuing the | 
				
			|||
walk on the child nodes of their target node. `state` is the start | 
				
			|||
state, and `functions` should contain an object that maps node types | 
				
			|||
to walker functions. Such functions are called with `(node, state, c)` | 
				
			|||
arguments, and can cause the walk to continue on a sub-node by calling | 
				
			|||
the `c` argument on it with `(node, state)` arguments. The optional | 
				
			|||
`base` argument provides the fallback walker functions for node types | 
				
			|||
that aren't handled in the `functions` object. If not given, the | 
				
			|||
default walkers will be used. | 
				
			|||
 | 
				
			|||
**make**`(functions, base)` builds a new walker object by using the | 
				
			|||
walker functions in `functions` and filling in the missing ones by | 
				
			|||
taking defaults from `base`. | 
				
			|||
 | 
				
			|||
**full**`(node, callback, base, state)` does a 'full' walk over a | 
				
			|||
tree, calling the callback with the arguments (node, state, type) for | 
				
			|||
each node | 
				
			|||
 | 
				
			|||
**fullAncestor**`(node, callback, base, state)` does a 'full' walk | 
				
			|||
over a tree, building up an array of ancestor nodes (including the | 
				
			|||
current node) and passing the array to the callbacks as a third | 
				
			|||
parameter. | 
				
			|||
 | 
				
			|||
```js | 
				
			|||
const acorn = require("acorn") | 
				
			|||
const walk = require("acorn-walk") | 
				
			|||
 | 
				
			|||
walk.full(acorn.parse("1 + 1"), node => { | 
				
			|||
  console.log(`There's a ${node.type} node at ${node.ch}`) | 
				
			|||
}) | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
**findNodeAt**`(node, start, end, test, base, state)` tries to locate | 
				
			|||
a node in a tree at the given start and/or end offsets, which | 
				
			|||
satisfies the predicate `test`. `start` and `end` can be either `null` | 
				
			|||
(as wildcard) or a number. `test` may be a string (indicating a node | 
				
			|||
type) or a function that takes `(nodeType, node)` arguments and | 
				
			|||
returns a boolean indicating whether this node is interesting. `base` | 
				
			|||
and `state` are optional, and can be used to specify a custom walker. | 
				
			|||
Nodes are tested from inner to outer, so if two nodes match the | 
				
			|||
boundaries, the inner one will be preferred. | 
				
			|||
 | 
				
			|||
**findNodeAround**`(node, pos, test, base, state)` is a lot like | 
				
			|||
`findNodeAt`, but will match any node that exists 'around' (spanning) | 
				
			|||
the given position. | 
				
			|||
 | 
				
			|||
**findNodeAfter**`(node, pos, test, base, state)` is similar to | 
				
			|||
`findNodeAround`, but will match all nodes *after* the given position | 
				
			|||
(testing outer nodes before inner nodes). | 
				
			|||
@ -0,0 +1,112 @@ | 
				
			|||
import {Node} from 'acorn'; | 
				
			|||
 | 
				
			|||
declare module "acorn-walk" { | 
				
			|||
  type FullWalkerCallback<TState> = ( | 
				
			|||
    node: Node, | 
				
			|||
    state: TState, | 
				
			|||
    type: string | 
				
			|||
  ) => void; | 
				
			|||
 | 
				
			|||
  type FullAncestorWalkerCallback<TState> = ( | 
				
			|||
    node: Node, | 
				
			|||
    state: TState | Node[], | 
				
			|||
    ancestors: Node[], | 
				
			|||
    type: string | 
				
			|||
  ) => void; | 
				
			|||
  type WalkerCallback<TState> = (node: Node, state: TState) => void; | 
				
			|||
 | 
				
			|||
  type SimpleWalkerFn<TState> = ( | 
				
			|||
    node: Node, | 
				
			|||
    state: TState | 
				
			|||
  ) => void; | 
				
			|||
   | 
				
			|||
  type AncestorWalkerFn<TState> = ( | 
				
			|||
    node: Node, | 
				
			|||
    state: TState| Node[], | 
				
			|||
    ancestors: Node[] | 
				
			|||
  ) => void; | 
				
			|||
 | 
				
			|||
  type RecursiveWalkerFn<TState> = ( | 
				
			|||
    node: Node, | 
				
			|||
    state: TState, | 
				
			|||
    callback: WalkerCallback<TState> | 
				
			|||
  ) => void; | 
				
			|||
   | 
				
			|||
  type SimpleVisitors<TState> = { | 
				
			|||
    [type: string]: SimpleWalkerFn<TState> | 
				
			|||
  }; | 
				
			|||
 | 
				
			|||
  type AncestorVisitors<TState> = { | 
				
			|||
    [type: string]: AncestorWalkerFn<TState> | 
				
			|||
  }; | 
				
			|||
   | 
				
			|||
  type RecursiveVisitors<TState> = { | 
				
			|||
    [type: string]: RecursiveWalkerFn<TState> | 
				
			|||
  }; | 
				
			|||
 | 
				
			|||
  type FindPredicate = (type: string, node: Node) => boolean; | 
				
			|||
 | 
				
			|||
  interface Found<TState> { | 
				
			|||
    node: Node, | 
				
			|||
    state: TState | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  export function simple<TState>( | 
				
			|||
    node: Node, | 
				
			|||
    visitors: SimpleVisitors<TState>, | 
				
			|||
    base?: RecursiveVisitors<TState>, | 
				
			|||
    state?: TState | 
				
			|||
  ): void; | 
				
			|||
 | 
				
			|||
  export function ancestor<TState>( | 
				
			|||
    node: Node, | 
				
			|||
    visitors: AncestorVisitors<TState>, | 
				
			|||
    base?: RecursiveVisitors<TState>, | 
				
			|||
    state?: TState | 
				
			|||
  ): void; | 
				
			|||
 | 
				
			|||
  export function recursive<TState>( | 
				
			|||
    node: Node, | 
				
			|||
    state: TState, | 
				
			|||
    functions: RecursiveVisitors<TState>, | 
				
			|||
    base?: RecursiveVisitors<TState> | 
				
			|||
  ): void; | 
				
			|||
 | 
				
			|||
  export function full<TState>( | 
				
			|||
    node: Node, | 
				
			|||
    callback: FullWalkerCallback<TState>, | 
				
			|||
    base?: RecursiveVisitors<TState>, | 
				
			|||
    state?: TState | 
				
			|||
  ): void; | 
				
			|||
 | 
				
			|||
  export function fullAncestor<TState>( | 
				
			|||
    node: Node, | 
				
			|||
    callback: FullAncestorWalkerCallback<TState>, | 
				
			|||
    base?: RecursiveVisitors<TState>, | 
				
			|||
    state?: TState | 
				
			|||
  ): void; | 
				
			|||
 | 
				
			|||
  export function make<TState>( | 
				
			|||
    functions: RecursiveVisitors<TState>, | 
				
			|||
    base?: RecursiveVisitors<TState> | 
				
			|||
  ): RecursiveVisitors<TState>; | 
				
			|||
 | 
				
			|||
  export function findNodeAt<TState>( | 
				
			|||
    node: Node, | 
				
			|||
    start: number | undefined, | 
				
			|||
    end?: number | undefined, | 
				
			|||
    type?: FindPredicate | string, | 
				
			|||
    base?: RecursiveVisitors<TState>, | 
				
			|||
    state?: TState | 
				
			|||
  ): Found<TState> | undefined; | 
				
			|||
 | 
				
			|||
  export function findNodeAround<TState>( | 
				
			|||
    node: Node, | 
				
			|||
    start: number | undefined, | 
				
			|||
    type?: FindPredicate | string, | 
				
			|||
    base?: RecursiveVisitors<TState>, | 
				
			|||
    state?: TState | 
				
			|||
  ): Found<TState> | undefined; | 
				
			|||
 | 
				
			|||
  export const findNodeAfter: typeof findNodeAround; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,463 @@ | 
				
			|||
(function (global, factory) { | 
				
			|||
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | 
				
			|||
  typeof define === 'function' && define.amd ? define(['exports'], factory) : | 
				
			|||
  (global = global || self, factory((global.acorn = global.acorn || {}, global.acorn.walk = {}))); | 
				
			|||
}(this, (function (exports) { 'use strict'; | 
				
			|||
 | 
				
			|||
  // AST walker module for Mozilla Parser API compatible trees
 | 
				
			|||
 | 
				
			|||
  // A simple walk is one where you simply specify callbacks to be
 | 
				
			|||
  // called on specific nodes. The last two arguments are optional. A
 | 
				
			|||
  // simple use would be
 | 
				
			|||
  //
 | 
				
			|||
  //     walk.simple(myTree, {
 | 
				
			|||
  //         Expression: function(node) { ... }
 | 
				
			|||
  //     });
 | 
				
			|||
  //
 | 
				
			|||
  // to do something with all expressions. All Parser API node types
 | 
				
			|||
  // can be used to identify node types, as well as Expression and
 | 
				
			|||
  // Statement, which denote categories of nodes.
 | 
				
			|||
  //
 | 
				
			|||
  // The base argument can be used to pass a custom (recursive)
 | 
				
			|||
  // walker, and state can be used to give this walked an initial
 | 
				
			|||
  // state.
 | 
				
			|||
 | 
				
			|||
  function simple(node, visitors, baseVisitor, state, override) { | 
				
			|||
    if (!baseVisitor) { baseVisitor = base | 
				
			|||
    ; }(function c(node, st, override) { | 
				
			|||
      var type = override || node.type, found = visitors[type]; | 
				
			|||
      baseVisitor[type](node, st, c); | 
				
			|||
      if (found) { found(node, st); } | 
				
			|||
    })(node, state, override); | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // An ancestor walk keeps an array of ancestor nodes (including the
 | 
				
			|||
  // current node) and passes them to the callback as third parameter
 | 
				
			|||
  // (and also as state parameter when no other state is present).
 | 
				
			|||
  function ancestor(node, visitors, baseVisitor, state, override) { | 
				
			|||
    var ancestors = []; | 
				
			|||
    if (!baseVisitor) { baseVisitor = base | 
				
			|||
    ; }(function c(node, st, override) { | 
				
			|||
      var type = override || node.type, found = visitors[type]; | 
				
			|||
      var isNew = node !== ancestors[ancestors.length - 1]; | 
				
			|||
      if (isNew) { ancestors.push(node); } | 
				
			|||
      baseVisitor[type](node, st, c); | 
				
			|||
      if (found) { found(node, st || ancestors, ancestors); } | 
				
			|||
      if (isNew) { ancestors.pop(); } | 
				
			|||
    })(node, state, override); | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // A recursive walk is one where your functions override the default
 | 
				
			|||
  // walkers. They can modify and replace the state parameter that's
 | 
				
			|||
  // threaded through the walk, and can opt how and whether to walk
 | 
				
			|||
  // their child nodes (by calling their third argument on these
 | 
				
			|||
  // nodes).
 | 
				
			|||
  function recursive(node, state, funcs, baseVisitor, override) { | 
				
			|||
    var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor | 
				
			|||
    ;(function c(node, st, override) { | 
				
			|||
      visitor[override || node.type](node, st, c); | 
				
			|||
    })(node, state, override); | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  function makeTest(test) { | 
				
			|||
    if (typeof test === "string") | 
				
			|||
      { return function (type) { return type === test; } } | 
				
			|||
    else if (!test) | 
				
			|||
      { return function () { return true; } } | 
				
			|||
    else | 
				
			|||
      { return test } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  var Found = function Found(node, state) { this.node = node; this.state = state; }; | 
				
			|||
 | 
				
			|||
  // A full walk triggers the callback on each node
 | 
				
			|||
  function full(node, callback, baseVisitor, state, override) { | 
				
			|||
    if (!baseVisitor) { baseVisitor = base | 
				
			|||
    ; }(function c(node, st, override) { | 
				
			|||
      var type = override || node.type; | 
				
			|||
      baseVisitor[type](node, st, c); | 
				
			|||
      if (!override) { callback(node, st, type); } | 
				
			|||
    })(node, state, override); | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // An fullAncestor walk is like an ancestor walk, but triggers
 | 
				
			|||
  // the callback on each node
 | 
				
			|||
  function fullAncestor(node, callback, baseVisitor, state) { | 
				
			|||
    if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
    var ancestors = [] | 
				
			|||
    ;(function c(node, st, override) { | 
				
			|||
      var type = override || node.type; | 
				
			|||
      var isNew = node !== ancestors[ancestors.length - 1]; | 
				
			|||
      if (isNew) { ancestors.push(node); } | 
				
			|||
      baseVisitor[type](node, st, c); | 
				
			|||
      if (!override) { callback(node, st || ancestors, ancestors, type); } | 
				
			|||
      if (isNew) { ancestors.pop(); } | 
				
			|||
    })(node, state); | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // Find a node with a given start, end, and type (all are optional,
 | 
				
			|||
  // null can be used as wildcard). Returns a {node, state} object, or
 | 
				
			|||
  // undefined when it doesn't find a matching node.
 | 
				
			|||
  function findNodeAt(node, start, end, test, baseVisitor, state) { | 
				
			|||
    if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
    test = makeTest(test); | 
				
			|||
    try { | 
				
			|||
      (function c(node, st, override) { | 
				
			|||
        var type = override || node.type; | 
				
			|||
        if ((start == null || node.start <= start) && | 
				
			|||
            (end == null || node.end >= end)) | 
				
			|||
          { baseVisitor[type](node, st, c); } | 
				
			|||
        if ((start == null || node.start === start) && | 
				
			|||
            (end == null || node.end === end) && | 
				
			|||
            test(type, node)) | 
				
			|||
          { throw new Found(node, st) } | 
				
			|||
      })(node, state); | 
				
			|||
    } catch (e) { | 
				
			|||
      if (e instanceof Found) { return e } | 
				
			|||
      throw e | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // Find the innermost node of a given type that contains the given
 | 
				
			|||
  // position. Interface similar to findNodeAt.
 | 
				
			|||
  function findNodeAround(node, pos, test, baseVisitor, state) { | 
				
			|||
    test = makeTest(test); | 
				
			|||
    if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
    try { | 
				
			|||
      (function c(node, st, override) { | 
				
			|||
        var type = override || node.type; | 
				
			|||
        if (node.start > pos || node.end < pos) { return } | 
				
			|||
        baseVisitor[type](node, st, c); | 
				
			|||
        if (test(type, node)) { throw new Found(node, st) } | 
				
			|||
      })(node, state); | 
				
			|||
    } catch (e) { | 
				
			|||
      if (e instanceof Found) { return e } | 
				
			|||
      throw e | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // Find the outermost matching node after a given position.
 | 
				
			|||
  function findNodeAfter(node, pos, test, baseVisitor, state) { | 
				
			|||
    test = makeTest(test); | 
				
			|||
    if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
    try { | 
				
			|||
      (function c(node, st, override) { | 
				
			|||
        if (node.end < pos) { return } | 
				
			|||
        var type = override || node.type; | 
				
			|||
        if (node.start >= pos && test(type, node)) { throw new Found(node, st) } | 
				
			|||
        baseVisitor[type](node, st, c); | 
				
			|||
      })(node, state); | 
				
			|||
    } catch (e) { | 
				
			|||
      if (e instanceof Found) { return e } | 
				
			|||
      throw e | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // Find the outermost matching node before a given position.
 | 
				
			|||
  function findNodeBefore(node, pos, test, baseVisitor, state) { | 
				
			|||
    test = makeTest(test); | 
				
			|||
    if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
    var max | 
				
			|||
    ;(function c(node, st, override) { | 
				
			|||
      if (node.start > pos) { return } | 
				
			|||
      var type = override || node.type; | 
				
			|||
      if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node)) | 
				
			|||
        { max = new Found(node, st); } | 
				
			|||
      baseVisitor[type](node, st, c); | 
				
			|||
    })(node, state); | 
				
			|||
    return max | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // Fallback to an Object.create polyfill for older environments.
 | 
				
			|||
  var create = Object.create || function(proto) { | 
				
			|||
    function Ctor() {} | 
				
			|||
    Ctor.prototype = proto; | 
				
			|||
    return new Ctor | 
				
			|||
  }; | 
				
			|||
 | 
				
			|||
  // Used to create a custom walker. Will fill in all missing node
 | 
				
			|||
  // type properties with the defaults.
 | 
				
			|||
  function make(funcs, baseVisitor) { | 
				
			|||
    var visitor = create(baseVisitor || base); | 
				
			|||
    for (var type in funcs) { visitor[type] = funcs[type]; } | 
				
			|||
    return visitor | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  function skipThrough(node, st, c) { c(node, st); } | 
				
			|||
  function ignore(_node, _st, _c) {} | 
				
			|||
 | 
				
			|||
  // Node walkers.
 | 
				
			|||
 | 
				
			|||
  var base = {}; | 
				
			|||
 | 
				
			|||
  base.Program = base.BlockStatement = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.body; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var stmt = list[i]; | 
				
			|||
 | 
				
			|||
      c(stmt, st, "Statement"); | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.Statement = skipThrough; | 
				
			|||
  base.EmptyStatement = ignore; | 
				
			|||
  base.ExpressionStatement = base.ParenthesizedExpression = base.ChainExpression = | 
				
			|||
    function (node, st, c) { return c(node.expression, st, "Expression"); }; | 
				
			|||
  base.IfStatement = function (node, st, c) { | 
				
			|||
    c(node.test, st, "Expression"); | 
				
			|||
    c(node.consequent, st, "Statement"); | 
				
			|||
    if (node.alternate) { c(node.alternate, st, "Statement"); } | 
				
			|||
  }; | 
				
			|||
  base.LabeledStatement = function (node, st, c) { return c(node.body, st, "Statement"); }; | 
				
			|||
  base.BreakStatement = base.ContinueStatement = ignore; | 
				
			|||
  base.WithStatement = function (node, st, c) { | 
				
			|||
    c(node.object, st, "Expression"); | 
				
			|||
    c(node.body, st, "Statement"); | 
				
			|||
  }; | 
				
			|||
  base.SwitchStatement = function (node, st, c) { | 
				
			|||
    c(node.discriminant, st, "Expression"); | 
				
			|||
    for (var i$1 = 0, list$1 = node.cases; i$1 < list$1.length; i$1 += 1) { | 
				
			|||
      var cs = list$1[i$1]; | 
				
			|||
 | 
				
			|||
      if (cs.test) { c(cs.test, st, "Expression"); } | 
				
			|||
      for (var i = 0, list = cs.consequent; i < list.length; i += 1) | 
				
			|||
        { | 
				
			|||
        var cons = list[i]; | 
				
			|||
 | 
				
			|||
        c(cons, st, "Statement"); | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.SwitchCase = function (node, st, c) { | 
				
			|||
    if (node.test) { c(node.test, st, "Expression"); } | 
				
			|||
    for (var i = 0, list = node.consequent; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var cons = list[i]; | 
				
			|||
 | 
				
			|||
      c(cons, st, "Statement"); | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.ReturnStatement = base.YieldExpression = base.AwaitExpression = function (node, st, c) { | 
				
			|||
    if (node.argument) { c(node.argument, st, "Expression"); } | 
				
			|||
  }; | 
				
			|||
  base.ThrowStatement = base.SpreadElement = | 
				
			|||
    function (node, st, c) { return c(node.argument, st, "Expression"); }; | 
				
			|||
  base.TryStatement = function (node, st, c) { | 
				
			|||
    c(node.block, st, "Statement"); | 
				
			|||
    if (node.handler) { c(node.handler, st); } | 
				
			|||
    if (node.finalizer) { c(node.finalizer, st, "Statement"); } | 
				
			|||
  }; | 
				
			|||
  base.CatchClause = function (node, st, c) { | 
				
			|||
    if (node.param) { c(node.param, st, "Pattern"); } | 
				
			|||
    c(node.body, st, "Statement"); | 
				
			|||
  }; | 
				
			|||
  base.WhileStatement = base.DoWhileStatement = function (node, st, c) { | 
				
			|||
    c(node.test, st, "Expression"); | 
				
			|||
    c(node.body, st, "Statement"); | 
				
			|||
  }; | 
				
			|||
  base.ForStatement = function (node, st, c) { | 
				
			|||
    if (node.init) { c(node.init, st, "ForInit"); } | 
				
			|||
    if (node.test) { c(node.test, st, "Expression"); } | 
				
			|||
    if (node.update) { c(node.update, st, "Expression"); } | 
				
			|||
    c(node.body, st, "Statement"); | 
				
			|||
  }; | 
				
			|||
  base.ForInStatement = base.ForOfStatement = function (node, st, c) { | 
				
			|||
    c(node.left, st, "ForInit"); | 
				
			|||
    c(node.right, st, "Expression"); | 
				
			|||
    c(node.body, st, "Statement"); | 
				
			|||
  }; | 
				
			|||
  base.ForInit = function (node, st, c) { | 
				
			|||
    if (node.type === "VariableDeclaration") { c(node, st); } | 
				
			|||
    else { c(node, st, "Expression"); } | 
				
			|||
  }; | 
				
			|||
  base.DebuggerStatement = ignore; | 
				
			|||
 | 
				
			|||
  base.FunctionDeclaration = function (node, st, c) { return c(node, st, "Function"); }; | 
				
			|||
  base.VariableDeclaration = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.declarations; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var decl = list[i]; | 
				
			|||
 | 
				
			|||
      c(decl, st); | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.VariableDeclarator = function (node, st, c) { | 
				
			|||
    c(node.id, st, "Pattern"); | 
				
			|||
    if (node.init) { c(node.init, st, "Expression"); } | 
				
			|||
  }; | 
				
			|||
 | 
				
			|||
  base.Function = function (node, st, c) { | 
				
			|||
    if (node.id) { c(node.id, st, "Pattern"); } | 
				
			|||
    for (var i = 0, list = node.params; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var param = list[i]; | 
				
			|||
 | 
				
			|||
      c(param, st, "Pattern"); | 
				
			|||
    } | 
				
			|||
    c(node.body, st, node.expression ? "Expression" : "Statement"); | 
				
			|||
  }; | 
				
			|||
 | 
				
			|||
  base.Pattern = function (node, st, c) { | 
				
			|||
    if (node.type === "Identifier") | 
				
			|||
      { c(node, st, "VariablePattern"); } | 
				
			|||
    else if (node.type === "MemberExpression") | 
				
			|||
      { c(node, st, "MemberPattern"); } | 
				
			|||
    else | 
				
			|||
      { c(node, st); } | 
				
			|||
  }; | 
				
			|||
  base.VariablePattern = ignore; | 
				
			|||
  base.MemberPattern = skipThrough; | 
				
			|||
  base.RestElement = function (node, st, c) { return c(node.argument, st, "Pattern"); }; | 
				
			|||
  base.ArrayPattern = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.elements; i < list.length; i += 1) { | 
				
			|||
      var elt = list[i]; | 
				
			|||
 | 
				
			|||
      if (elt) { c(elt, st, "Pattern"); } | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.ObjectPattern = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.properties; i < list.length; i += 1) { | 
				
			|||
      var prop = list[i]; | 
				
			|||
 | 
				
			|||
      if (prop.type === "Property") { | 
				
			|||
        if (prop.computed) { c(prop.key, st, "Expression"); } | 
				
			|||
        c(prop.value, st, "Pattern"); | 
				
			|||
      } else if (prop.type === "RestElement") { | 
				
			|||
        c(prop.argument, st, "Pattern"); | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
 | 
				
			|||
  base.Expression = skipThrough; | 
				
			|||
  base.ThisExpression = base.Super = base.MetaProperty = ignore; | 
				
			|||
  base.ArrayExpression = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.elements; i < list.length; i += 1) { | 
				
			|||
      var elt = list[i]; | 
				
			|||
 | 
				
			|||
      if (elt) { c(elt, st, "Expression"); } | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.ObjectExpression = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.properties; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var prop = list[i]; | 
				
			|||
 | 
				
			|||
      c(prop, st); | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.FunctionExpression = base.ArrowFunctionExpression = base.FunctionDeclaration; | 
				
			|||
  base.SequenceExpression = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.expressions; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var expr = list[i]; | 
				
			|||
 | 
				
			|||
      c(expr, st, "Expression"); | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.TemplateLiteral = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.quasis; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var quasi = list[i]; | 
				
			|||
 | 
				
			|||
      c(quasi, st); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    for (var i$1 = 0, list$1 = node.expressions; i$1 < list$1.length; i$1 += 1) | 
				
			|||
      { | 
				
			|||
      var expr = list$1[i$1]; | 
				
			|||
 | 
				
			|||
      c(expr, st, "Expression"); | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.TemplateElement = ignore; | 
				
			|||
  base.UnaryExpression = base.UpdateExpression = function (node, st, c) { | 
				
			|||
    c(node.argument, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
  base.BinaryExpression = base.LogicalExpression = function (node, st, c) { | 
				
			|||
    c(node.left, st, "Expression"); | 
				
			|||
    c(node.right, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
  base.AssignmentExpression = base.AssignmentPattern = function (node, st, c) { | 
				
			|||
    c(node.left, st, "Pattern"); | 
				
			|||
    c(node.right, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
  base.ConditionalExpression = function (node, st, c) { | 
				
			|||
    c(node.test, st, "Expression"); | 
				
			|||
    c(node.consequent, st, "Expression"); | 
				
			|||
    c(node.alternate, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
  base.NewExpression = base.CallExpression = function (node, st, c) { | 
				
			|||
    c(node.callee, st, "Expression"); | 
				
			|||
    if (node.arguments) | 
				
			|||
      { for (var i = 0, list = node.arguments; i < list.length; i += 1) | 
				
			|||
        { | 
				
			|||
          var arg = list[i]; | 
				
			|||
 | 
				
			|||
          c(arg, st, "Expression"); | 
				
			|||
        } } | 
				
			|||
  }; | 
				
			|||
  base.MemberExpression = function (node, st, c) { | 
				
			|||
    c(node.object, st, "Expression"); | 
				
			|||
    if (node.computed) { c(node.property, st, "Expression"); } | 
				
			|||
  }; | 
				
			|||
  base.ExportNamedDeclaration = base.ExportDefaultDeclaration = function (node, st, c) { | 
				
			|||
    if (node.declaration) | 
				
			|||
      { c(node.declaration, st, node.type === "ExportNamedDeclaration" || node.declaration.id ? "Statement" : "Expression"); } | 
				
			|||
    if (node.source) { c(node.source, st, "Expression"); } | 
				
			|||
  }; | 
				
			|||
  base.ExportAllDeclaration = function (node, st, c) { | 
				
			|||
    if (node.exported) | 
				
			|||
      { c(node.exported, st); } | 
				
			|||
    c(node.source, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
  base.ImportDeclaration = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.specifiers; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var spec = list[i]; | 
				
			|||
 | 
				
			|||
      c(spec, st); | 
				
			|||
    } | 
				
			|||
    c(node.source, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
  base.ImportExpression = function (node, st, c) { | 
				
			|||
    c(node.source, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
  base.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.Literal = ignore; | 
				
			|||
 | 
				
			|||
  base.TaggedTemplateExpression = function (node, st, c) { | 
				
			|||
    c(node.tag, st, "Expression"); | 
				
			|||
    c(node.quasi, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
  base.ClassDeclaration = base.ClassExpression = function (node, st, c) { return c(node, st, "Class"); }; | 
				
			|||
  base.Class = function (node, st, c) { | 
				
			|||
    if (node.id) { c(node.id, st, "Pattern"); } | 
				
			|||
    if (node.superClass) { c(node.superClass, st, "Expression"); } | 
				
			|||
    c(node.body, st); | 
				
			|||
  }; | 
				
			|||
  base.ClassBody = function (node, st, c) { | 
				
			|||
    for (var i = 0, list = node.body; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var elt = list[i]; | 
				
			|||
 | 
				
			|||
      c(elt, st); | 
				
			|||
    } | 
				
			|||
  }; | 
				
			|||
  base.MethodDefinition = base.Property = function (node, st, c) { | 
				
			|||
    if (node.computed) { c(node.key, st, "Expression"); } | 
				
			|||
    c(node.value, st, "Expression"); | 
				
			|||
  }; | 
				
			|||
 | 
				
			|||
  exports.ancestor = ancestor; | 
				
			|||
  exports.base = base; | 
				
			|||
  exports.findNodeAfter = findNodeAfter; | 
				
			|||
  exports.findNodeAround = findNodeAround; | 
				
			|||
  exports.findNodeAt = findNodeAt; | 
				
			|||
  exports.findNodeBefore = findNodeBefore; | 
				
			|||
  exports.full = full; | 
				
			|||
  exports.fullAncestor = fullAncestor; | 
				
			|||
  exports.make = make; | 
				
			|||
  exports.recursive = recursive; | 
				
			|||
  exports.simple = simple; | 
				
			|||
 | 
				
			|||
  Object.defineProperty(exports, '__esModule', { value: true }); | 
				
			|||
 | 
				
			|||
}))); | 
				
			|||
						
							
						
						
							1
	
						
						node_modules/acorn-walk/dist/walk.js.map
						
							File diff suppressed because it is too large
							
							
								
									View File
								
							
						
					
				File diff suppressed because it is too large
							
							
								
									View File
								
							
						@ -0,0 +1,443 @@ | 
				
			|||
// AST walker module for Mozilla Parser API compatible trees | 
				
			|||
 | 
				
			|||
// A simple walk is one where you simply specify callbacks to be | 
				
			|||
// called on specific nodes. The last two arguments are optional. A | 
				
			|||
// simple use would be | 
				
			|||
// | 
				
			|||
//     walk.simple(myTree, { | 
				
			|||
//         Expression: function(node) { ... } | 
				
			|||
//     }); | 
				
			|||
// | 
				
			|||
// to do something with all expressions. All Parser API node types | 
				
			|||
// can be used to identify node types, as well as Expression and | 
				
			|||
// Statement, which denote categories of nodes. | 
				
			|||
// | 
				
			|||
// The base argument can be used to pass a custom (recursive) | 
				
			|||
// walker, and state can be used to give this walked an initial | 
				
			|||
// state. | 
				
			|||
 | 
				
			|||
function simple(node, visitors, baseVisitor, state, override) { | 
				
			|||
  if (!baseVisitor) { baseVisitor = base | 
				
			|||
  ; }(function c(node, st, override) { | 
				
			|||
    var type = override || node.type, found = visitors[type]; | 
				
			|||
    baseVisitor[type](node, st, c); | 
				
			|||
    if (found) { found(node, st); } | 
				
			|||
  })(node, state, override); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// An ancestor walk keeps an array of ancestor nodes (including the | 
				
			|||
// current node) and passes them to the callback as third parameter | 
				
			|||
// (and also as state parameter when no other state is present). | 
				
			|||
function ancestor(node, visitors, baseVisitor, state, override) { | 
				
			|||
  var ancestors = []; | 
				
			|||
  if (!baseVisitor) { baseVisitor = base | 
				
			|||
  ; }(function c(node, st, override) { | 
				
			|||
    var type = override || node.type, found = visitors[type]; | 
				
			|||
    var isNew = node !== ancestors[ancestors.length - 1]; | 
				
			|||
    if (isNew) { ancestors.push(node); } | 
				
			|||
    baseVisitor[type](node, st, c); | 
				
			|||
    if (found) { found(node, st || ancestors, ancestors); } | 
				
			|||
    if (isNew) { ancestors.pop(); } | 
				
			|||
  })(node, state, override); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// A recursive walk is one where your functions override the default | 
				
			|||
// walkers. They can modify and replace the state parameter that's | 
				
			|||
// threaded through the walk, and can opt how and whether to walk | 
				
			|||
// their child nodes (by calling their third argument on these | 
				
			|||
// nodes). | 
				
			|||
function recursive(node, state, funcs, baseVisitor, override) { | 
				
			|||
  var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor | 
				
			|||
  ;(function c(node, st, override) { | 
				
			|||
    visitor[override || node.type](node, st, c); | 
				
			|||
  })(node, state, override); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function makeTest(test) { | 
				
			|||
  if (typeof test === "string") | 
				
			|||
    { return function (type) { return type === test; } } | 
				
			|||
  else if (!test) | 
				
			|||
    { return function () { return true; } } | 
				
			|||
  else | 
				
			|||
    { return test } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
var Found = function Found(node, state) { this.node = node; this.state = state; }; | 
				
			|||
 | 
				
			|||
// A full walk triggers the callback on each node | 
				
			|||
function full(node, callback, baseVisitor, state, override) { | 
				
			|||
  if (!baseVisitor) { baseVisitor = base | 
				
			|||
  ; }(function c(node, st, override) { | 
				
			|||
    var type = override || node.type; | 
				
			|||
    baseVisitor[type](node, st, c); | 
				
			|||
    if (!override) { callback(node, st, type); } | 
				
			|||
  })(node, state, override); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// An fullAncestor walk is like an ancestor walk, but triggers | 
				
			|||
// the callback on each node | 
				
			|||
function fullAncestor(node, callback, baseVisitor, state) { | 
				
			|||
  if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
  var ancestors = [] | 
				
			|||
  ;(function c(node, st, override) { | 
				
			|||
    var type = override || node.type; | 
				
			|||
    var isNew = node !== ancestors[ancestors.length - 1]; | 
				
			|||
    if (isNew) { ancestors.push(node); } | 
				
			|||
    baseVisitor[type](node, st, c); | 
				
			|||
    if (!override) { callback(node, st || ancestors, ancestors, type); } | 
				
			|||
    if (isNew) { ancestors.pop(); } | 
				
			|||
  })(node, state); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// Find a node with a given start, end, and type (all are optional, | 
				
			|||
// null can be used as wildcard). Returns a {node, state} object, or | 
				
			|||
// undefined when it doesn't find a matching node. | 
				
			|||
function findNodeAt(node, start, end, test, baseVisitor, state) { | 
				
			|||
  if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
  test = makeTest(test); | 
				
			|||
  try { | 
				
			|||
    (function c(node, st, override) { | 
				
			|||
      var type = override || node.type; | 
				
			|||
      if ((start == null || node.start <= start) && | 
				
			|||
          (end == null || node.end >= end)) | 
				
			|||
        { baseVisitor[type](node, st, c); } | 
				
			|||
      if ((start == null || node.start === start) && | 
				
			|||
          (end == null || node.end === end) && | 
				
			|||
          test(type, node)) | 
				
			|||
        { throw new Found(node, st) } | 
				
			|||
    })(node, state); | 
				
			|||
  } catch (e) { | 
				
			|||
    if (e instanceof Found) { return e } | 
				
			|||
    throw e | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// Find the innermost node of a given type that contains the given | 
				
			|||
// position. Interface similar to findNodeAt. | 
				
			|||
function findNodeAround(node, pos, test, baseVisitor, state) { | 
				
			|||
  test = makeTest(test); | 
				
			|||
  if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
  try { | 
				
			|||
    (function c(node, st, override) { | 
				
			|||
      var type = override || node.type; | 
				
			|||
      if (node.start > pos || node.end < pos) { return } | 
				
			|||
      baseVisitor[type](node, st, c); | 
				
			|||
      if (test(type, node)) { throw new Found(node, st) } | 
				
			|||
    })(node, state); | 
				
			|||
  } catch (e) { | 
				
			|||
    if (e instanceof Found) { return e } | 
				
			|||
    throw e | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// Find the outermost matching node after a given position. | 
				
			|||
function findNodeAfter(node, pos, test, baseVisitor, state) { | 
				
			|||
  test = makeTest(test); | 
				
			|||
  if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
  try { | 
				
			|||
    (function c(node, st, override) { | 
				
			|||
      if (node.end < pos) { return } | 
				
			|||
      var type = override || node.type; | 
				
			|||
      if (node.start >= pos && test(type, node)) { throw new Found(node, st) } | 
				
			|||
      baseVisitor[type](node, st, c); | 
				
			|||
    })(node, state); | 
				
			|||
  } catch (e) { | 
				
			|||
    if (e instanceof Found) { return e } | 
				
			|||
    throw e | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// Find the outermost matching node before a given position. | 
				
			|||
function findNodeBefore(node, pos, test, baseVisitor, state) { | 
				
			|||
  test = makeTest(test); | 
				
			|||
  if (!baseVisitor) { baseVisitor = base; } | 
				
			|||
  var max | 
				
			|||
  ;(function c(node, st, override) { | 
				
			|||
    if (node.start > pos) { return } | 
				
			|||
    var type = override || node.type; | 
				
			|||
    if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node)) | 
				
			|||
      { max = new Found(node, st); } | 
				
			|||
    baseVisitor[type](node, st, c); | 
				
			|||
  })(node, state); | 
				
			|||
  return max | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// Fallback to an Object.create polyfill for older environments. | 
				
			|||
var create = Object.create || function(proto) { | 
				
			|||
  function Ctor() {} | 
				
			|||
  Ctor.prototype = proto; | 
				
			|||
  return new Ctor | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
// Used to create a custom walker. Will fill in all missing node | 
				
			|||
// type properties with the defaults. | 
				
			|||
function make(funcs, baseVisitor) { | 
				
			|||
  var visitor = create(baseVisitor || base); | 
				
			|||
  for (var type in funcs) { visitor[type] = funcs[type]; } | 
				
			|||
  return visitor | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function skipThrough(node, st, c) { c(node, st); } | 
				
			|||
function ignore(_node, _st, _c) {} | 
				
			|||
 | 
				
			|||
// Node walkers. | 
				
			|||
 | 
				
			|||
var base = {}; | 
				
			|||
 | 
				
			|||
base.Program = base.BlockStatement = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.body; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var stmt = list[i]; | 
				
			|||
 | 
				
			|||
    c(stmt, st, "Statement"); | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.Statement = skipThrough; | 
				
			|||
base.EmptyStatement = ignore; | 
				
			|||
base.ExpressionStatement = base.ParenthesizedExpression = base.ChainExpression = | 
				
			|||
  function (node, st, c) { return c(node.expression, st, "Expression"); }; | 
				
			|||
base.IfStatement = function (node, st, c) { | 
				
			|||
  c(node.test, st, "Expression"); | 
				
			|||
  c(node.consequent, st, "Statement"); | 
				
			|||
  if (node.alternate) { c(node.alternate, st, "Statement"); } | 
				
			|||
}; | 
				
			|||
base.LabeledStatement = function (node, st, c) { return c(node.body, st, "Statement"); }; | 
				
			|||
base.BreakStatement = base.ContinueStatement = ignore; | 
				
			|||
base.WithStatement = function (node, st, c) { | 
				
			|||
  c(node.object, st, "Expression"); | 
				
			|||
  c(node.body, st, "Statement"); | 
				
			|||
}; | 
				
			|||
base.SwitchStatement = function (node, st, c) { | 
				
			|||
  c(node.discriminant, st, "Expression"); | 
				
			|||
  for (var i$1 = 0, list$1 = node.cases; i$1 < list$1.length; i$1 += 1) { | 
				
			|||
    var cs = list$1[i$1]; | 
				
			|||
 | 
				
			|||
    if (cs.test) { c(cs.test, st, "Expression"); } | 
				
			|||
    for (var i = 0, list = cs.consequent; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
      var cons = list[i]; | 
				
			|||
 | 
				
			|||
      c(cons, st, "Statement"); | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.SwitchCase = function (node, st, c) { | 
				
			|||
  if (node.test) { c(node.test, st, "Expression"); } | 
				
			|||
  for (var i = 0, list = node.consequent; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var cons = list[i]; | 
				
			|||
 | 
				
			|||
    c(cons, st, "Statement"); | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.ReturnStatement = base.YieldExpression = base.AwaitExpression = function (node, st, c) { | 
				
			|||
  if (node.argument) { c(node.argument, st, "Expression"); } | 
				
			|||
}; | 
				
			|||
base.ThrowStatement = base.SpreadElement = | 
				
			|||
  function (node, st, c) { return c(node.argument, st, "Expression"); }; | 
				
			|||
base.TryStatement = function (node, st, c) { | 
				
			|||
  c(node.block, st, "Statement"); | 
				
			|||
  if (node.handler) { c(node.handler, st); } | 
				
			|||
  if (node.finalizer) { c(node.finalizer, st, "Statement"); } | 
				
			|||
}; | 
				
			|||
base.CatchClause = function (node, st, c) { | 
				
			|||
  if (node.param) { c(node.param, st, "Pattern"); } | 
				
			|||
  c(node.body, st, "Statement"); | 
				
			|||
}; | 
				
			|||
base.WhileStatement = base.DoWhileStatement = function (node, st, c) { | 
				
			|||
  c(node.test, st, "Expression"); | 
				
			|||
  c(node.body, st, "Statement"); | 
				
			|||
}; | 
				
			|||
base.ForStatement = function (node, st, c) { | 
				
			|||
  if (node.init) { c(node.init, st, "ForInit"); } | 
				
			|||
  if (node.test) { c(node.test, st, "Expression"); } | 
				
			|||
  if (node.update) { c(node.update, st, "Expression"); } | 
				
			|||
  c(node.body, st, "Statement"); | 
				
			|||
}; | 
				
			|||
base.ForInStatement = base.ForOfStatement = function (node, st, c) { | 
				
			|||
  c(node.left, st, "ForInit"); | 
				
			|||
  c(node.right, st, "Expression"); | 
				
			|||
  c(node.body, st, "Statement"); | 
				
			|||
}; | 
				
			|||
base.ForInit = function (node, st, c) { | 
				
			|||
  if (node.type === "VariableDeclaration") { c(node, st); } | 
				
			|||
  else { c(node, st, "Expression"); } | 
				
			|||
}; | 
				
			|||
base.DebuggerStatement = ignore; | 
				
			|||
 | 
				
			|||
base.FunctionDeclaration = function (node, st, c) { return c(node, st, "Function"); }; | 
				
			|||
base.VariableDeclaration = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.declarations; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var decl = list[i]; | 
				
			|||
 | 
				
			|||
    c(decl, st); | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.VariableDeclarator = function (node, st, c) { | 
				
			|||
  c(node.id, st, "Pattern"); | 
				
			|||
  if (node.init) { c(node.init, st, "Expression"); } | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
base.Function = function (node, st, c) { | 
				
			|||
  if (node.id) { c(node.id, st, "Pattern"); } | 
				
			|||
  for (var i = 0, list = node.params; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var param = list[i]; | 
				
			|||
 | 
				
			|||
    c(param, st, "Pattern"); | 
				
			|||
  } | 
				
			|||
  c(node.body, st, node.expression ? "Expression" : "Statement"); | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
base.Pattern = function (node, st, c) { | 
				
			|||
  if (node.type === "Identifier") | 
				
			|||
    { c(node, st, "VariablePattern"); } | 
				
			|||
  else if (node.type === "MemberExpression") | 
				
			|||
    { c(node, st, "MemberPattern"); } | 
				
			|||
  else | 
				
			|||
    { c(node, st); } | 
				
			|||
}; | 
				
			|||
base.VariablePattern = ignore; | 
				
			|||
base.MemberPattern = skipThrough; | 
				
			|||
base.RestElement = function (node, st, c) { return c(node.argument, st, "Pattern"); }; | 
				
			|||
base.ArrayPattern = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.elements; i < list.length; i += 1) { | 
				
			|||
    var elt = list[i]; | 
				
			|||
 | 
				
			|||
    if (elt) { c(elt, st, "Pattern"); } | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.ObjectPattern = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.properties; i < list.length; i += 1) { | 
				
			|||
    var prop = list[i]; | 
				
			|||
 | 
				
			|||
    if (prop.type === "Property") { | 
				
			|||
      if (prop.computed) { c(prop.key, st, "Expression"); } | 
				
			|||
      c(prop.value, st, "Pattern"); | 
				
			|||
    } else if (prop.type === "RestElement") { | 
				
			|||
      c(prop.argument, st, "Pattern"); | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
base.Expression = skipThrough; | 
				
			|||
base.ThisExpression = base.Super = base.MetaProperty = ignore; | 
				
			|||
base.ArrayExpression = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.elements; i < list.length; i += 1) { | 
				
			|||
    var elt = list[i]; | 
				
			|||
 | 
				
			|||
    if (elt) { c(elt, st, "Expression"); } | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.ObjectExpression = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.properties; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var prop = list[i]; | 
				
			|||
 | 
				
			|||
    c(prop, st); | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.FunctionExpression = base.ArrowFunctionExpression = base.FunctionDeclaration; | 
				
			|||
base.SequenceExpression = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.expressions; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var expr = list[i]; | 
				
			|||
 | 
				
			|||
    c(expr, st, "Expression"); | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.TemplateLiteral = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.quasis; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var quasi = list[i]; | 
				
			|||
 | 
				
			|||
    c(quasi, st); | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  for (var i$1 = 0, list$1 = node.expressions; i$1 < list$1.length; i$1 += 1) | 
				
			|||
    { | 
				
			|||
    var expr = list$1[i$1]; | 
				
			|||
 | 
				
			|||
    c(expr, st, "Expression"); | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.TemplateElement = ignore; | 
				
			|||
base.UnaryExpression = base.UpdateExpression = function (node, st, c) { | 
				
			|||
  c(node.argument, st, "Expression"); | 
				
			|||
}; | 
				
			|||
base.BinaryExpression = base.LogicalExpression = function (node, st, c) { | 
				
			|||
  c(node.left, st, "Expression"); | 
				
			|||
  c(node.right, st, "Expression"); | 
				
			|||
}; | 
				
			|||
base.AssignmentExpression = base.AssignmentPattern = function (node, st, c) { | 
				
			|||
  c(node.left, st, "Pattern"); | 
				
			|||
  c(node.right, st, "Expression"); | 
				
			|||
}; | 
				
			|||
base.ConditionalExpression = function (node, st, c) { | 
				
			|||
  c(node.test, st, "Expression"); | 
				
			|||
  c(node.consequent, st, "Expression"); | 
				
			|||
  c(node.alternate, st, "Expression"); | 
				
			|||
}; | 
				
			|||
base.NewExpression = base.CallExpression = function (node, st, c) { | 
				
			|||
  c(node.callee, st, "Expression"); | 
				
			|||
  if (node.arguments) | 
				
			|||
    { for (var i = 0, list = node.arguments; i < list.length; i += 1) | 
				
			|||
      { | 
				
			|||
        var arg = list[i]; | 
				
			|||
 | 
				
			|||
        c(arg, st, "Expression"); | 
				
			|||
      } } | 
				
			|||
}; | 
				
			|||
base.MemberExpression = function (node, st, c) { | 
				
			|||
  c(node.object, st, "Expression"); | 
				
			|||
  if (node.computed) { c(node.property, st, "Expression"); } | 
				
			|||
}; | 
				
			|||
base.ExportNamedDeclaration = base.ExportDefaultDeclaration = function (node, st, c) { | 
				
			|||
  if (node.declaration) | 
				
			|||
    { c(node.declaration, st, node.type === "ExportNamedDeclaration" || node.declaration.id ? "Statement" : "Expression"); } | 
				
			|||
  if (node.source) { c(node.source, st, "Expression"); } | 
				
			|||
}; | 
				
			|||
base.ExportAllDeclaration = function (node, st, c) { | 
				
			|||
  if (node.exported) | 
				
			|||
    { c(node.exported, st); } | 
				
			|||
  c(node.source, st, "Expression"); | 
				
			|||
}; | 
				
			|||
base.ImportDeclaration = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.specifiers; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var spec = list[i]; | 
				
			|||
 | 
				
			|||
    c(spec, st); | 
				
			|||
  } | 
				
			|||
  c(node.source, st, "Expression"); | 
				
			|||
}; | 
				
			|||
base.ImportExpression = function (node, st, c) { | 
				
			|||
  c(node.source, st, "Expression"); | 
				
			|||
}; | 
				
			|||
base.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.Literal = ignore; | 
				
			|||
 | 
				
			|||
base.TaggedTemplateExpression = function (node, st, c) { | 
				
			|||
  c(node.tag, st, "Expression"); | 
				
			|||
  c(node.quasi, st, "Expression"); | 
				
			|||
}; | 
				
			|||
base.ClassDeclaration = base.ClassExpression = function (node, st, c) { return c(node, st, "Class"); }; | 
				
			|||
base.Class = function (node, st, c) { | 
				
			|||
  if (node.id) { c(node.id, st, "Pattern"); } | 
				
			|||
  if (node.superClass) { c(node.superClass, st, "Expression"); } | 
				
			|||
  c(node.body, st); | 
				
			|||
}; | 
				
			|||
base.ClassBody = function (node, st, c) { | 
				
			|||
  for (var i = 0, list = node.body; i < list.length; i += 1) | 
				
			|||
    { | 
				
			|||
    var elt = list[i]; | 
				
			|||
 | 
				
			|||
    c(elt, st); | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
base.MethodDefinition = base.Property = function (node, st, c) { | 
				
			|||
  if (node.computed) { c(node.key, st, "Expression"); } | 
				
			|||
  c(node.value, st, "Expression"); | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
export { ancestor, base, findNodeAfter, findNodeAround, findNodeAt, findNodeBefore, full, fullAncestor, make, recursive, simple }; | 
				
			|||
Some files were not shown because too many files changed in this diff
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue